oip-common 0.7.1 → 0.9.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/fesm2022/oip-common.mjs +300 -37
- package/fesm2022/oip-common.mjs.map +1 -1
- package/index.d.ts +56 -4
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oip-common.mjs","sources":["../../../projects/oip-common/src/services/top-bar.service.ts","../../../projects/oip-common/src/services/msg.service.ts","../../../projects/oip-common/src/services/app-title.service.ts","../../../projects/oip-common/src/helpers/date.helper.ts","../../../projects/oip-common/src/services/app.layout.service.ts","../../../projects/oip-common/src/services/l10n.service.ts","../../../projects/oip-common/src/services/security.service.ts","../../../projects/oip-common/src/api/http-client.ts","../../../projects/oip-common/src/helpers/l10n.helper.ts","../../../projects/oip-common/src/services/module-loading.service.ts","../../../projects/oip-common/src/components/base-module/base-module.component.ts","../../../projects/oip-common/src/api/security.api.ts","../../../projects/oip-common/src/components/security/security.component.ts","../../../projects/oip-common/src/services/theme-presets.token.ts","../../../projects/oip-common/src/components/app-configurator/app-configurator.component.ts","../../../projects/oip-common/src/api/user-profile.api.ts","../../../projects/oip-common/src/services/user.service.ts","../../../projects/oip-common/src/components/logo/logo.component.ts","../../../projects/oip-common/src/services/logo.service.ts","../../../projects/oip-common/src/services/app-info.service.ts","../../../projects/oip-common/src/api/notification.api.ts","../../../projects/oip-common/src/services/notification.service.ts","../../../projects/oip-common/src/components/user-notifications/user-notifications.component.ts","../../../projects/oip-common/src/api/applications.api.ts","../../../projects/oip-common/src/services/application-registry.service.ts","../../../projects/oip-common/src/components/top-bar-application-switcher/top-bar-application-switcher.component.ts","../../../projects/oip-common/src/components/top-bar/top-bar.component.ts","../../../projects/oip-common/src/components/footer/footer.component.ts","../../../projects/oip-common/src/api/menu.api.ts","../../../projects/oip-common/src/services/app.menu.service.ts","../../../projects/oip-common/src/services/start-page.service.ts","../../../projects/oip-common/src/components/menu/menu-item.component.ts","../../../projects/oip-common/src/components/menu/menu-item-create-dialog.component.ts","../../../projects/oip-common/src/components/menu/menu-item-edit-dialog.component.ts","../../../projects/oip-common/src/components/menu/menu.component.ts","../../../projects/oip-common/src/components/sidebar/sidebar.component.ts","../../../projects/oip-common/src/components/block-loader/block-loader.component.ts","../../../projects/oip-common/src/components/app.layout/app.layout.component.ts","../../../projects/oip-common/src/components/app-floating-configurator/app-floating-configurator.component.ts","../../../projects/oip-common/src/components/notfound/notfound.component.ts","../../../projects/oip-common/src/components/auth/unauthorized/unauthorized.component.ts","../../../projects/oip-common/src/components/auth/access/access.component.ts","../../../projects/oip-common/src/components/auth/error/error.component.ts","../../../projects/oip-common/src/components/user-profile/user-profile.component.ts","../../../projects/oip-common/src/components/config/config.component.ts","../../../projects/oip-common/src/components/db-migration/db-migration.component.ts","../../../projects/oip-common/src/api/extension-modules.api.ts","../../../projects/oip-common/src/api/module.api.ts","../../../projects/oip-common/src/components/app-modules/app-modules.component.ts","../../../projects/oip-common/src/api/applications-data-contracts.ts","../../../projects/oip-common/src/components/applications/applications.component.ts","../../../projects/oip-common/src/api/discussion.api.ts","../../../projects/oip-common/src/helpers/avatar.helper.ts","../../../projects/oip-common/src/components/discussion/discussion.component.ts","../../../projects/oip-common/src/components/iframe-module/iframe-module.component.ts","../../../projects/oip-common/src/extension-host/extension-host.events.ts","../../../projects/oip-common/src/extension-host/extension-loader.service.ts","../../../projects/oip-common/src/components/custom-element-extension-module-host/custom-element-extension-module-host.component.ts","../../../projects/oip-common/src/components/extension-module-host/extension-module-host.component.ts","../../../projects/oip-common/src/components/no-modules/no-modules.component.ts","../../../projects/oip-common/src/services/auth-guard.service.ts","../../../projects/oip-common/src/services/module-instance-rights.service.ts","../../../projects/oip-common/src/services/module-access-guard.service.ts","../../../projects/oip-common/src/services/table-filter.service.ts","../../../projects/oip-common/src/services/theme-presets.provider.ts","../../../projects/oip-common/src/services/app-default.theme.ts","../../../projects/oip-common/src/intercepts/i18n-intercept.service.ts","../../../projects/oip-common/src/providers/oip.provider.ts","../../../projects/oip-common/src/api/folder-module.api.ts","../../../projects/oip-common/src/api/iframe-module.api.ts","../../../projects/oip-common/src/routing/oip.routes.ts","../../../projects/oip-common/src/public-api.ts","../../../projects/oip-common/src/oip-common.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { TopBarDto } from '../dtos/top-bar.dto';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TopBarService {\n topBarItems: TopBarDto[] = [];\n private readonly activeIdSubject = new Subject<string | undefined>();\n\n readonly activeId$ = this.activeIdSubject.asObservable();\n\n private _activeId: string | undefined;\n\n get availableTopBarItems(): TopBarDto[] {\n return this.topBarItems;\n }\n\n get activeTopBarItem(): TopBarDto | undefined {\n if (this._activeId === undefined) {\n return undefined;\n }\n return this.topBarItems.find((topBarItem: TopBarDto) => topBarItem.id === this._activeId);\n }\n\n get activeId(): string | undefined {\n return this._activeId;\n }\n\n set activeId(value: string | undefined) {\n this._activeId = value;\n const activeTopBarItem = this.activeTopBarItem;\n if (activeTopBarItem?.click) activeTopBarItem.click();\n this.activeIdSubject.next(value);\n }\n\n constructor() {}\n\n // Set tob bar items\n setTopBarItems(items: TopBarDto[]) {\n this.topBarItems = items;\n }\n\n checkId(id: string): boolean {\n const activeTopBarItem = this.activeTopBarItem;\n const result = activeTopBarItem === undefined ? id === 'content' : activeTopBarItem.id == id;\n return result;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { MessageService } from 'primeng/api';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ToastMessageOptions } from 'primeng/api';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({ providedIn: 'root' })\nexport class MsgService {\n protected readonly messageService: MessageService = inject(MessageService);\n private readonly translate = inject(TranslateService);\n private readonly lifetime: number = 2000;\n\n add(msg: ToastMessageOptions) {\n this.messageService.add(msg);\n }\n\n success(detail: any, summary: any = this.translate.instant('msgService.success'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'success',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n\n info(detail: any, summary: any = this.translate.instant('msgService.info'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'info',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n\n warn(detail: any, summary: any = this.translate.instant('msgService.warn'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'warn',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n\n error(detail: any, summary: any = this.translate.instant('msgService.error'), life: number = this.lifetime) {\n if (detail instanceof HttpErrorResponse) {\n summary = `Error: ${detail.status} ${detail.statusText}`;\n detail = this.extractErrorMessage(detail, `${detail.name} \\r\\n ${detail.message}`);\n } else {\n detail = this.extractErrorMessage(detail, detail?.toString?.() ?? this.translate.instant('msgService.error'));\n }\n\n this.messageService.add({\n severity: 'error',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n\n extractErrorMessage(error: unknown, fallback: string): string {\n const validationMessage = this.extractValidationMessage(error);\n if (validationMessage) {\n return validationMessage;\n }\n\n const apiExceptionMessage = this.extractApiExceptionMessage(error);\n if (apiExceptionMessage) {\n return apiExceptionMessage;\n }\n\n if (typeof error === 'object' && error && 'message' in error && typeof error.message === 'string') {\n return error.message;\n }\n\n return fallback;\n }\n\n private extractValidationMessage(error: unknown): string | null {\n const responseError = this.getObjectProperty(error, 'error');\n const validationErrors = this.getObjectProperty(responseError, 'errors') ?? this.getObjectProperty(error, 'errors');\n\n if (!validationErrors) {\n return null;\n }\n\n const messages = Object.entries(validationErrors)\n .reduce<string[]>((result, [field, value]) => [...result, ...this.toValidationMessages(field, value)], [])\n .filter((message) => message.length > 0);\n\n return messages.length > 0 ? messages.join('\\n') : null;\n }\n\n private extractApiExceptionMessage(error: unknown): string | null {\n const responseError = this.getObjectProperty(error, 'error');\n const message = this.getStringProperty(responseError, 'message') ?? this.getStringProperty(error, 'message');\n const title = this.getStringProperty(responseError, 'title') ?? this.getStringProperty(error, 'title');\n\n if (message && title) {\n return `${title}: ${message}`;\n }\n\n return message ?? title;\n }\n\n private toValidationMessages(field: string, value: unknown): string[] {\n if (Array.isArray(value)) {\n return value\n .filter((message): message is string => typeof message === 'string')\n .map((message) => `${field}: ${message}`);\n }\n\n if (typeof value === 'string') {\n return [`${field}: ${value}`];\n }\n\n return [];\n }\n\n private getObjectProperty(source: unknown, property: string): Record<string, unknown> | null {\n if (typeof source !== 'object' || source === null || !(property in source)) {\n return null;\n }\n\n const value = (source as Record<string, unknown>)[property];\n return typeof value === 'object' && value !== null ? (value as Record<string, unknown>) : null;\n }\n\n private getStringProperty(source: unknown, property: string): string | null {\n if (typeof source !== 'object' || source === null || !(property in source)) {\n return null;\n }\n\n const value = (source as Record<string, unknown>)[property];\n return typeof value === 'string' && value.length > 0 ? value : null;\n }\n\n errorFromException(error: unknown, fallback: string, summary: string = fallback, life: number = this.lifetime) {\n this.error(this.extractErrorMessage(error, fallback), summary, life);\n }\n\n contrast(detail: any, summary: any = this.translate.instant('msgService.error'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'contrast',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n\n secondary(detail: any, summary: any = this.translate.instant('msgService.secondary'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'secondary',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Title } from '@angular/platform-browser';\n\n/**\n * Service to manage the application title.\n */\n@Injectable({ providedIn: 'root' })\nexport class AppTitleService {\n private readonly title = inject(Title);\n private titleSubject = new BehaviorSubject<string>('');\n public title$ = this.titleSubject.asObservable();\n\n /**\n * Set the title of the current HTML document.\n * @param newTitle\n */\n setTitle(newTitle: string): void {\n this.title.setTitle(newTitle);\n this.titleSubject.next(newTitle);\n }\n}\n","/**\n * Convert Date to string in format 2022-02-22\n * @param date\n */\nexport function dateToString(date: Date): string {\n const year = date.getFullYear();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n\n return `${year}-${month}-${day}`;\n}\n\n/**\n * Convert string in format 2022-02-22 to Date\n * @param date\n */\nexport function stringToDate(date: string): Date {\n const dateParts = date.split('-');\n const day = parseInt(dateParts[2], 10);\n const month = parseInt(dateParts[1], 10) - 1;\n const year = parseInt(dateParts[0], 10);\n\n return new Date(year, month, day);\n}\n\n/**\n * Add days to date\n * @param date\n * @param days\n */\nexport function addDays(date: Date, days: number): Date {\n const clonedDate = structuredClone(date);\n clonedDate.setDate(clonedDate.getDate() + days);\n return clonedDate;\n}\n\n/**\n * Get today's date\n * @param date\n */\nexport function getTodayDate(): Date {\n const date = new Date();\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\n/* Convert dateformat from DatePipe to PrimeNG*/\nexport function convertToPrimeNgDateFormat(dateformat: string): string {\n switch (dateformat) {\n case 'dd.MM.yyyy':\n return 'dd.mm.yy';\n case 'dd.MM.yy':\n return 'dd.mm.y';\n case 'yyyy-MM-dd':\n return 'yy-mm-dd';\n case 'dd.MMM.yyyy':\n return 'dd.M.yy';\n default:\n console.error(`Failed to convert format: ${dateformat}`);\n }\n}\n\n/**\n * Convert all properties of an object with string dates to Date objects\n * @param obj\n */\nexport function restoreDates(obj: any) {\n if (obj === null || typeof obj !== 'object') return obj;\n\n if (Array.isArray(obj)) {\n return obj.map((item) => restoreDates(item));\n }\n\n const result = {};\n for (const key in obj) {\n const value = obj[key];\n\n if (typeof value === 'string' && isIsoDate(value)) {\n result[key] = new Date(value);\n } else if (typeof value === 'object' && value !== null && !(value instanceof Date)) {\n result[key] = restoreDates(value);\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\n/**\n * Check if a string is a date in ISO format\n * @param str\n */\nexport function isIsoDate(str: string) {\n return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$/.test(str);\n}\n","import { Injectable, effect, signal, computed } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { convertToPrimeNgDateFormat } from '../helpers/date.helper';\n\nexport interface AppConfig {\n preset?: string;\n primary?: string;\n surface?: string | null;\n darkTheme?: boolean;\n menuMode?: string;\n language?: string;\n dateFormat: string;\n timeFormat: string;\n dateTimeFormat: string;\n timeZone: string;\n adminMode?: boolean;\n}\n\ninterface LayoutState {\n staticMenuDesktopInactive?: boolean;\n overlayMenuActive?: boolean;\n configSidebarVisible?: boolean;\n staticMenuMobileActive?: boolean;\n menuHoverActive?: boolean;\n}\n\ninterface MenuChangeEvent {\n key: string;\n routeEvent?: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class LayoutService {\n _config: AppConfig = this.getAppConfigFromStorage();\n\n _state: LayoutState = {\n staticMenuDesktopInactive: false,\n overlayMenuActive: false,\n configSidebarVisible: false,\n staticMenuMobileActive: false,\n menuHoverActive: false\n };\n\n layoutConfig = signal<AppConfig>(this._config);\n\n layoutState = signal<LayoutState>(this._state);\n\n private readonly configUpdate = new Subject<AppConfig>();\n\n private readonly overlayOpen = new Subject<any>();\n\n private readonly menuSource = new Subject<MenuChangeEvent>();\n\n private readonly resetSource = new Subject();\n\n menuSource$ = this.menuSource.asObservable();\n\n resetSource$ = this.resetSource.asObservable();\n\n configUpdate$ = this.configUpdate.asObservable();\n\n overlayOpen$ = this.overlayOpen.asObservable();\n\n theme = computed(() => (this.layoutConfig()?.darkTheme ? 'light' : 'dark'));\n\n isSidebarActive = computed(() => this.layoutState().overlayMenuActive || this.layoutState().staticMenuMobileActive);\n\n isDarkTheme = computed(() => this.layoutConfig().darkTheme);\n\n getPrimary = computed(() => this.layoutConfig().primary);\n\n getSurface = computed(() => this.layoutConfig().surface);\n\n isOverlay = computed(() => this.layoutConfig().menuMode === 'overlay');\n\n language = computed(() => this.layoutConfig().language);\n\n dateFormat = computed(() => this.layoutConfig().dateFormat);\n\n primeNgDateFormat = computed(() => convertToPrimeNgDateFormat(this.layoutConfig().dateFormat));\n\n timeFormat = computed(() => this.layoutConfig().timeFormat);\n\n dateTimeFormat = computed(() => `${this.layoutConfig().dateFormat} ${this.layoutConfig().timeFormat}`);\n\n monthFormat = computed(() => {\n const reDay = /d+/i;\n const reDelimiter = /^[^\\w]|[^\\w]$|([^\\w])\\1+/;\n const ngDateFormat = convertToPrimeNgDateFormat(this.layoutConfig().dateFormat);\n const ngDate = ngDateFormat.replace(reDay, '');\n const dateGroups = ngDate.match(reDelimiter);\n if (Array.isArray(dateGroups) && dateGroups.length > 1) {\n return dateGroups[1] !== undefined\n ? ngDate.replace(dateGroups[0], '')\n : ngDate.startsWith(dateGroups[0])\n ? ngDate.substring(1)\n : ngDate.substring(0, ngDate.length - 1);\n }\n return ngDateFormat;\n });\n\n timeZone = computed(() => this.layoutConfig().timeZone);\n\n adminMode = computed(() => this.layoutConfig().adminMode ?? false);\n\n transitionComplete = signal<boolean>(false);\n\n private initialized = false;\n\n constructor() {\n effect(() => {\n const config = this.layoutConfig();\n if (config) {\n this.onConfigUpdate();\n }\n });\n\n effect(() => {\n const config = this.layoutConfig();\n\n if (!this.initialized || !config) {\n this.initialized = true;\n return;\n }\n\n this.handleDarkModeTransition(config);\n });\n }\n\n /**\n * Get application settings from browser storage\n * @returns AppConfig\n */\n private getAppConfigFromStorage(): AppConfig {\n const appConfigUiString = localStorage.getItem('layoutConfig');\n if (appConfigUiString != null) {\n const config = JSON.parse(appConfigUiString) as AppConfig;\n config.timeZone ??= Intl.DateTimeFormat().resolvedOptions().timeZone;\n return config;\n }\n return {\n preset: 'Aura',\n primary: 'emerald',\n surface: null,\n darkTheme: false,\n menuMode: 'static',\n language: 'ru',\n dateFormat: 'yyyy-MM-dd',\n timeFormat: 'HH:mm:ss',\n dateTimeFormat: 'yyyy-MM-dd HH:mm:ss',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n adminMode: false\n };\n }\n\n private handleDarkModeTransition(config: AppConfig): void {\n if ((document as any).startViewTransition) {\n this.startViewTransition(config);\n } else {\n this.toggleDarkMode(config);\n this.onTransitionEnd();\n }\n }\n\n private startViewTransition(config: AppConfig): void {\n const transition = (document as any).startViewTransition(() => {\n this.toggleDarkMode(config);\n });\n\n transition.ready\n .then(() => {\n this.onTransitionEnd();\n })\n .catch(() => {});\n }\n\n toggleDarkMode(config?: AppConfig): void {\n const _config = config || this.layoutConfig();\n if (_config.darkTheme) {\n document.documentElement.classList.add('app-dark');\n } else {\n document.documentElement.classList.remove('app-dark');\n }\n }\n\n private onTransitionEnd() {\n this.transitionComplete.set(true);\n setTimeout(() => {\n this.transitionComplete.set(false);\n });\n }\n\n onMenuToggle() {\n if (this.isOverlay()) {\n this.layoutState.update((prev) => ({ ...prev, overlayMenuActive: !this.layoutState().overlayMenuActive }));\n\n if (this.layoutState().overlayMenuActive) {\n this.overlayOpen.next(null);\n }\n }\n\n if (this.isDesktop()) {\n this.layoutState.update((prev) => ({\n ...prev,\n staticMenuDesktopInactive: !this.layoutState().staticMenuDesktopInactive\n }));\n } else {\n this.layoutState.update((prev) => ({\n ...prev,\n staticMenuMobileActive: !this.layoutState().staticMenuMobileActive\n }));\n\n if (this.layoutState().staticMenuMobileActive) {\n this.overlayOpen.next(null);\n }\n }\n }\n\n isDesktop() {\n return window.innerWidth > 991;\n }\n\n isMobile() {\n return !this.isDesktop();\n }\n\n onConfigUpdate() {\n this._config = { ...this.layoutConfig() };\n this.configUpdate.next(this.layoutConfig());\n localStorage.setItem('layoutConfig', JSON.stringify(this.layoutConfig()));\n }\n\n onMenuStateChange(event: MenuChangeEvent) {\n this.menuSource.next(event);\n }\n\n reset() {\n this.resetSource.next(true);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { InterpolationParameters, TranslateService, Translation, TranslationObject } from '@ngx-translate/core';\nimport { LayoutService } from './app.layout.service';\nimport { PrimeNG } from 'primeng/config';\nimport { Observable, of, shareReplay, tap } from 'rxjs';\nimport en from './l10n/en.json';\nimport ru from './l10n/ru.json';\n\n/**\n * Translations of a single namespace grouped by language code, e.g. { en: {...}, ru: {...} }\n */\nexport type TranslationsByLang = Record<string, TranslationObject>;\n\n/**\n * Global dictionaries shared by all components. They are bundled with the library,\n * so the application never requests `assets/i18n/{lang}.json`.\n */\nconst globalTranslations: TranslationsByLang = { en, ru };\n\nexport interface LanguageDto {\n code: string;\n name: string;\n icon: string;\n}\n\n/**\n * Service for managing translation loading in the application\n */\n@Injectable({ providedIn: 'root' }) // Provided at root level for singleton usage\nexport class L10nService {\n private loadedTranslations: Set<string> = new Set();\n private loadingTranslations: Map<string, Observable<unknown>> = new Map();\n private httpClient = inject(HttpClient);\n private translateService = inject(TranslateService);\n private readonly primeNg = inject(PrimeNG);\n private readonly layoutService = inject(LayoutService);\n public availableLanguages: LanguageDto[];\n\n /**\n * Translations bundled with components, registered at module load time.\n */\n private static readonly staticTranslations: Map<string, TranslationsByLang> = new Map();\n\n /**\n * Registers translations bundled with a component instead of loading them over HTTP.\n * Namespaces are taken from the root keys of the passed dictionaries.\n * Components derived from <c>BaseModuleComponent</c> don't call it directly - it is enough\n * to declare the static <c>translations</c> field.\n * @param byLang - Translations grouped by language code\n * @param namespace - Explicit namespace, needed when the dictionaries are still empty\n */\n public static registerTranslations(byLang: TranslationsByLang | undefined, namespace?: string): void {\n if (!byLang) {\n return;\n }\n if (namespace) {\n L10nService.staticTranslations.set(namespace, byLang);\n }\n for (const translations of Object.values(byLang)) {\n for (const namespace of Object.keys(translations)) {\n L10nService.staticTranslations.set(namespace, byLang);\n }\n }\n }\n\n constructor() {\n // Global dictionaries are available before the first `use()` call, so TranslateHttpLoader is never asked for them.\n L10nService.registerTranslations(globalTranslations);\n Object.entries(globalTranslations).forEach(([lang, translations]) => this.mergeTranslation(lang, translations));\n\n // Static translations are merged once per language, so they have to be re-merged on every language change.\n this.translateService.onLangChange.subscribe((event) => {\n L10nService.staticTranslations.forEach((byLang) => {\n const translations = byLang[event.lang];\n if (translations) {\n this.mergeTranslation(event.lang, translations);\n }\n });\n });\n }\n\n /**\n * Loads translations for a specific component\n * @param component - Name of the component to load translations for\n */\n public loadComponentTranslations(component: string): Observable<unknown> {\n const lang = this.translateService.currentLang || this.layoutService.language() || 'en';\n return this.loadTranslations(component, lang);\n }\n\n /**\n * Loads translations from an explicit asset URL and merges them into the active language dictionary.\n * Use this for extension modules whose assets are hosted outside the shell application.\n */\n public loadTranslationsFromUrl(namespace: string, url: string, lang?: string): Observable<unknown> {\n const selectedLang = lang || this.translateService.currentLang || this.layoutService.language() || 'en';\n const key = `${namespace}.${selectedLang}.${url}`;\n if (this.loadedTranslations.has(key)) {\n return of(null);\n }\n\n const loading = this.loadingTranslations.get(key);\n if (loading) {\n return loading;\n }\n\n const request = this.httpClient.get(url).pipe(\n tap((translations) => {\n this.mergeTranslation(selectedLang, translations as TranslationObject);\n this.loadedTranslations.add(key);\n this.loadingTranslations.delete(key);\n }),\n shareReplay(1)\n );\n\n this.loadingTranslations.set(key, request);\n request.subscribe({\n error: (e) => {\n this.loadingTranslations.delete(key);\n console.error(`No translations found for ${namespace}.${selectedLang}.json at ${url}`);\n console.error(e);\n }\n });\n\n return request;\n }\n\n /**\n * Gets the translated value of a key (or an array of keys)\n * @returns the translated key, or an object of translated keys\n */\n public get(key: string) {\n this.loadComponentTranslations(key.split('.')[0]);\n return this.translateService.get(key);\n }\n\n /**\n * Internal method to merge a namespace's statically-registered translations\n * (see <c>registerTranslations</c>) into the active language dictionary.\n * @param component - Translation namespace\n * @param lang - Language code to load translations for\n */\n private loadTranslations(component: string, lang: string): Observable<unknown> {\n const key = `${component}.${lang}`;\n if (this.loadedTranslations.has(key)) {\n return of(null);\n }\n\n const staticTranslations = L10nService.staticTranslations.get(component);\n if (!staticTranslations) {\n console.error(`No translations registered for namespace \"${component}\".`);\n return of(null);\n }\n\n const translations = staticTranslations[lang];\n if (translations) {\n this.mergeTranslation(lang, translations);\n }\n this.loadedTranslations.add(key);\n\n return of(null);\n }\n\n /**\n * Merges a translation dictionary into the dictionary of the given language\n * @param lang - Language code\n * @param translations - Translations to merge\n */\n private mergeTranslation(lang: string, translations: TranslationObject): void {\n const current = this.translateService.translations[lang] || {};\n this.translateService.setTranslation(lang, { ...current, ...translations }, true);\n }\n\n /**\n * Changes the lang currently used\n */\n use(selectedLanguage: string, key: string = null) {\n if (key) {\n this.get(key);\n }\n this.translateService.use(selectedLanguage);\n }\n\n init(languages: LanguageDto[]) {\n this.availableLanguages = languages;\n this.translateService.addLangs(languages.map((x) => x.code));\n const lang = this.layoutService.language() ? this.layoutService.language() : 'en';\n this.translateService.setDefaultLang(lang);\n this.translateService.use(lang).subscribe(() => {\n this.loadComponentTranslations('app-info');\n this.translateService.get('primeng').subscribe((res) => this.primeNg.setTranslation(res));\n });\n }\n\n instant(key: string | string[], interpolateParams?: InterpolationParameters): Translation | TranslationObject {\n return this.translateService.instant(key, interpolateParams);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, OnDestroy, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, ReplaySubject, firstValueFrom, of } from 'rxjs';\nimport { catchError, distinctUntilChanged, filter, tap } from 'rxjs/operators';\n\ntype RefreshCustomParams = { [key: string]: string | number | boolean };\n\nexport type AuthSessionRefreshResult = {\n isAuthenticated: boolean;\n userData: any;\n};\n\nexport type AuthCsrfToken = {\n token: string;\n headerName: string;\n};\n\ntype AuthSessionResponse = {\n isAuthenticated: boolean;\n userName?: string;\n displayName?: string;\n email?: string;\n roles: string[];\n};\n\ntype CurrentUser = {\n userName?: string;\n displayName?: string;\n email?: string;\n roles: string[];\n preferred_username?: string;\n name?: string;\n given_name?: string;\n family_name?: string;\n};\n\nexport abstract class SecurityService {\n abstract auth(): void;\n\n abstract logout(): void;\n\n abstract isAuthenticated(): Observable<boolean>;\n\n abstract getAccessToken(): Observable<string>;\n\n abstract isTokenExpired(): Observable<boolean>;\n\n abstract getCurrentUser(): any;\n\n abstract getCurrentUser$(): Observable<any>;\n\n abstract forceRefreshSession(\n customParams?: RefreshCustomParams,\n configId?: string\n ): Observable<AuthSessionRefreshResult>;\n\n abstract getCsrfToken(): Observable<AuthCsrfToken | null>;\n\n abstract isAdmin(): boolean;\n\n abstract authorize(returnUrl?: string): void;\n\n abstract payload: BehaviorSubject<any>;\n}\n\n@Injectable()\nexport class BffSecurityService implements OnDestroy, SecurityService {\n public static readonly authorizeAfterLogoutReturnUrlKey = 'oip.authorizeAfterLogoutReturnUrl';\n\n private readonly http = inject(HttpClient);\n private readonly authenticated = new BehaviorSubject<boolean | null>(null);\n private readonly currentUser = new BehaviorSubject<any>(null);\n private readonly csrfToken = new ReplaySubject<AuthCsrfToken | null>(1);\n\n public readonly payload = new BehaviorSubject<any>(null);\n\n auth(): void {\n this.http\n .get<AuthSessionResponse>(this.buildUrl('api/security/get-current-auth-session'), {\n withCredentials: true\n })\n .pipe(\n tap((session) => this.applySession(session)),\n catchError(() => {\n this.applyAnonymousSession();\n return of(null);\n })\n )\n .subscribe();\n }\n\n logout(): void {\n firstValueFrom(this.getCsrfToken()).then((csrfToken) => {\n this.storeAuthorizeAfterLogoutReturnUrl();\n\n const form = this.createPostForm(this.buildUrl('api/security/delete-auth-session'));\n if (csrfToken?.token) {\n const tokenInput = document.createElement('input');\n tokenInput.type = 'hidden';\n tokenInput.name = '__RequestVerificationToken';\n tokenInput.value = csrfToken.token;\n form.appendChild(tokenInput);\n }\n document.body.appendChild(form);\n form.submit();\n });\n }\n\n isAuthenticated(): Observable<boolean> {\n return this.authenticated.asObservable().pipe(\n filter((value): value is boolean => value !== null),\n distinctUntilChanged()\n );\n }\n\n getAccessToken(): Observable<string> {\n return of('');\n }\n\n isTokenExpired(): Observable<boolean> {\n return of(false);\n }\n\n getCurrentUser(): any {\n return this.currentUser.getValue();\n }\n\n getCurrentUser$(): Observable<any> {\n return this.currentUser.asObservable();\n }\n\n forceRefreshSession(): Observable<AuthSessionRefreshResult> {\n this.auth();\n return of({\n isAuthenticated: this.authenticated.getValue() === true,\n userData: this.currentUser.getValue()\n });\n }\n\n getCsrfToken(): Observable<AuthCsrfToken | null> {\n this.http\n .get<AuthCsrfToken>(this.buildUrl('api/security/get-auth-csrf-token'), {\n withCredentials: true\n })\n .pipe(catchError(() => of(null)))\n .subscribe((token) => this.csrfToken.next(token));\n\n return this.csrfToken.asObservable();\n }\n\n isAdmin(): boolean {\n return this.payload.getValue()?.realm_access?.roles?.includes('admin') ?? false;\n }\n\n authorize(returnUrl?: string): void {\n const normalizedReturnUrl = this.normalizeReturnUrl(returnUrl);\n this.replaceWithUnauthorizedUrl(normalizedReturnUrl);\n\n const form = this.createPostForm(this.buildUrl('api/security/create-auth-session'));\n document.body.appendChild(form);\n form.submit();\n }\n\n ngOnDestroy(): void {\n this.authenticated.complete();\n this.currentUser.complete();\n this.payload.complete();\n }\n\n private applySession(session: AuthSessionResponse): void {\n const roles = session.roles ?? [];\n const user = this.createCurrentUser(session, roles);\n\n this.authenticated.next(session.isAuthenticated);\n this.currentUser.next(user);\n this.payload.next({ realm_access: { roles }, ...user });\n }\n\n private createCurrentUser(session: AuthSessionResponse, roles: string[]): CurrentUser {\n const displayName = session.displayName || session.userName || session.email;\n const nameParts = this.splitDisplayName(displayName);\n\n return {\n userName: session.userName,\n displayName,\n email: session.email,\n roles,\n preferred_username: session.userName,\n name: displayName,\n given_name: nameParts.givenName,\n family_name: nameParts.familyName\n };\n }\n\n private splitDisplayName(displayName?: string): { givenName?: string; familyName?: string } {\n const parts = displayName?.trim().split(/\\s+/).filter(Boolean) ?? [];\n\n return {\n givenName: parts[0],\n familyName: parts.length > 1 ? parts.slice(1).join(' ') : undefined\n };\n }\n\n private applyAnonymousSession(): void {\n this.authenticated.next(false);\n this.currentUser.next(null);\n this.payload.next(null);\n this.csrfToken.next(null);\n }\n\n private createPostForm(action: string): HTMLFormElement {\n const form = document.createElement('form');\n form.method = 'post';\n form.action = action;\n form.style.display = 'none';\n return form;\n }\n\n private normalizeReturnUrl(returnUrl?: string): string {\n const candidate = returnUrl?.trim();\n if (!candidate || /[\\u0000-\\u001f\\u007f\\\\]/.test(candidate)) {\n return '/';\n }\n\n if (!candidate.startsWith('/') || candidate.startsWith('//')) {\n return '/';\n }\n\n try {\n const url = new URL(candidate, window.location.origin);\n if (url.origin !== window.location.origin) {\n return '/';\n }\n\n const normalizedUrl = `${url.pathname}${url.search}${url.hash}`;\n return normalizedUrl.startsWith('/unauthorized') ? '/' : normalizedUrl;\n } catch {\n return '/';\n }\n }\n\n private replaceWithUnauthorizedUrl(returnUrl: string): void {\n const unauthorizedUrl = new URL('unauthorized', this.getBaseUrl());\n unauthorizedUrl.searchParams.set('returnUrl', returnUrl);\n\n history.replaceState(history.state, '', `${unauthorizedUrl.pathname}${unauthorizedUrl.search}`);\n }\n\n private storeAuthorizeAfterLogoutReturnUrl(): void {\n sessionStorage.setItem(\n BffSecurityService.authorizeAfterLogoutReturnUrlKey,\n this.normalizeReturnUrl(`${window.location.pathname}${window.location.search}${window.location.hash}`)\n );\n }\n\n private buildUrl(path: string): string {\n return `${this.getBaseUrl()}${path}`;\n }\n\n private getBaseUrl(): string {\n const baseUrl = document.getElementsByTagName('base')[0].href;\n return baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`;\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { inject, Injectable } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { firstValueFrom } from \"rxjs\";\nimport { LayoutService } from \"../services/app.layout.service\";\nimport { SecurityService } from \"../services/security.service\";\n\nexport type QueryParamsType = Record<string | number, any>;\nexport type ResponseFormat = keyof Omit<Body, \"body\" | \"bodyUsed\">;\n\nexport interface FullRequestParams extends Omit<RequestInit, \"body\"> {\n /** set parameter to `true` for call `securityWorker` for this request */\n secure?: boolean;\n /** request path */\n path: string;\n /** content type of request body */\n type?: ContentType;\n /** query params */\n query?: QueryParamsType;\n /** format of response (i.e. response.json() -> format: \"json\") */\n format?: ResponseFormat;\n /** request body */\n body?: unknown;\n /** base url */\n baseUrl?: string;\n /** request cancellation token */\n cancelToken?: CancelToken;\n}\n\nexport type RequestParams = Omit<\n FullRequestParams,\n \"body\" | \"method\" | \"query\" | \"path\"\n>;\n\nexport interface ApiConfig<SecurityDataType = unknown> {\n baseUrl?: string;\n baseApiParams?: Omit<RequestParams, \"baseUrl\" | \"cancelToken\" | \"signal\">;\n securityWorker?: (\n securityData: SecurityDataType | null,\n ) => Promise<RequestParams | void> | RequestParams | void;\n customFetch?: typeof fetch;\n}\n\nexport interface HttpResponse<D extends unknown, E extends unknown = unknown>\n extends Response {\n data: D;\n error: E;\n}\n\ntype CancelToken = Symbol | string | number;\n\nexport enum ContentType {\n Json = \"application/json\",\n JsonApi = \"application/vnd.api+json\",\n FormData = \"multipart/form-data\",\n UrlEncoded = \"application/x-www-form-urlencoded\",\n Text = \"text/plain\",\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class HttpClient<SecurityDataType = unknown> {\n protected securityService = inject(SecurityService);\n protected layoutService = inject(LayoutService);\n protected router = inject(Router);\n public baseUrl: string = \"\";\n private securityWorker?: ApiConfig<SecurityDataType>[\"securityWorker\"] =\n () => {\n const moduleInstanceId = this.getCurrentModuleInstanceId();\n return {\n headers: {\n \"Accept-language\": this.layoutService.language()\n ? this.layoutService.language()\n : \"en\",\n \"X-Timezone\": this.layoutService.timeZone(),\n ...(moduleInstanceId != null\n ? { \"X-Module-Instance-Id\": String(moduleInstanceId) }\n : {}),\n },\n };\n };\n\n /**\n * Reads the module instance id of the deepest activated route.\n * The backend uses it to check module instance rights on endpoints that do not carry the id in their contract.\n */\n protected getCurrentModuleInstanceId(): number | undefined {\n // May run before the first navigation completes, when route snapshots are not available yet.\n let route: ActivatedRoute | null | undefined =\n this.router.routerState?.root;\n let id: string | null = null;\n\n while (route) {\n id = route.snapshot?.paramMap?.get(\"id\") ?? id;\n route = route.firstChild;\n }\n\n const parsed = id != null ? Number(id) : Number.NaN;\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n\n private abortControllers = new Map<CancelToken, AbortController>();\n private customFetch = (...fetchParams: Parameters<typeof fetch>) =>\n fetch(...fetchParams);\n\n private baseApiParams: RequestParams = {\n credentials: \"same-origin\",\n headers: {},\n redirect: \"follow\",\n referrerPolicy: \"no-referrer\",\n };\n\n public setSecurityData = (data: SecurityDataType | null) => {};\n\n protected encodeQueryParam(key: string, value: any) {\n const encodedKey = encodeURIComponent(key);\n return `${encodedKey}=${encodeURIComponent(typeof value === \"number\" ? value : `${value}`)}`;\n }\n\n protected addQueryParam(query: QueryParamsType, key: string) {\n return this.encodeQueryParam(key, query[key]);\n }\n\n protected addArrayQueryParam(query: QueryParamsType, key: string) {\n const value = query[key];\n return value.map((v: any) => this.encodeQueryParam(key, v)).join(\"&\");\n }\n\n protected toQueryString(rawQuery?: QueryParamsType): string {\n const query = rawQuery || {};\n const keys = Object.keys(query).filter(\n (key) => \"undefined\" !== typeof query[key],\n );\n return keys\n .map((key) =>\n Array.isArray(query[key])\n ? this.addArrayQueryParam(query, key)\n : this.addQueryParam(query, key),\n )\n .join(\"&\");\n }\n\n protected addQueryParams(rawQuery?: QueryParamsType): string {\n const queryString = this.toQueryString(rawQuery);\n return queryString ? `?${queryString}` : \"\";\n }\n\n private contentFormatters: Record<ContentType, (input: any) => any> = {\n [ContentType.Json]: (input: any) =>\n input !== null && (typeof input === \"object\" || typeof input === \"string\")\n ? JSON.stringify(input)\n : input,\n [ContentType.JsonApi]: (input: any) =>\n input !== null && (typeof input === \"object\" || typeof input === \"string\")\n ? JSON.stringify(input)\n : input,\n [ContentType.Text]: (input: any) =>\n input !== null && typeof input !== \"string\"\n ? JSON.stringify(input)\n : input,\n [ContentType.FormData]: (input: any) => {\n if (input instanceof FormData) {\n return input;\n }\n\n return Object.keys(input || {}).reduce((formData, key) => {\n const property = input[key];\n formData.append(\n key,\n property instanceof Blob\n ? property\n : typeof property === \"object\" && property !== null\n ? JSON.stringify(property)\n : `${property}`,\n );\n return formData;\n }, new FormData());\n },\n [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input),\n };\n\n protected mergeRequestParams(\n params1: RequestParams,\n params2?: RequestParams,\n ): RequestParams {\n return {\n ...this.baseApiParams,\n ...params1,\n ...(params2 || {}),\n headers: {\n ...(this.baseApiParams.headers || {}),\n ...(params1.headers || {}),\n ...((params2 && params2.headers) || {}),\n },\n };\n }\n\n protected createAbortSignal = (\n cancelToken: CancelToken,\n ): AbortSignal | undefined => {\n if (this.abortControllers.has(cancelToken)) {\n const abortController = this.abortControllers.get(cancelToken);\n if (abortController) {\n return abortController.signal;\n }\n return void 0;\n }\n\n const abortController = new AbortController();\n this.abortControllers.set(cancelToken, abortController);\n return abortController.signal;\n };\n\n public abortRequest = (cancelToken: CancelToken) => {\n const abortController = this.abortControllers.get(cancelToken);\n\n if (abortController) {\n abortController.abort();\n this.abortControllers.delete(cancelToken);\n }\n };\n\n public request = async <T = any, E = any>({\n body,\n secure,\n path,\n type,\n query,\n format,\n baseUrl,\n cancelToken,\n ...params\n }: FullRequestParams): Promise<T> => {\n const secureParams =\n ((typeof secure === \"boolean\" ? secure : this.baseApiParams.secure) &&\n this.securityWorker &&\n (await this.securityWorker(null))) ||\n {};\n const csrfParams = await this.getCsrfRequestParams(params.method, path);\n const requestParams = this.mergeRequestParams(\n this.mergeRequestParams(params, secureParams),\n csrfParams,\n );\n const queryString = query && this.toQueryString(query);\n const payloadFormatter = this.contentFormatters[type || ContentType.Json];\n let responseFormat = format || requestParams.format;\n\n return this.customFetch(\n `${baseUrl || this.baseUrl || \"\"}${path}${queryString ? `?${queryString}` : \"\"}`,\n {\n ...requestParams,\n headers: {\n ...(requestParams.headers || {}),\n ...(type && type !== ContentType.FormData\n ? { \"Content-Type\": type }\n : {}),\n },\n signal:\n (cancelToken\n ? this.createAbortSignal(cancelToken)\n : requestParams.signal) || null,\n body:\n typeof body === \"undefined\" || body === null\n ? null\n : payloadFormatter(body),\n },\n ).then(async (response) => {\n const r = response as HttpResponse<T, E>;\n r.data = null as unknown as T;\n r.error = null as unknown as E;\n\n if (typeof E !== undefined && responseFormat === undefined)\n responseFormat = \"json\";\n\n const responseToParse = responseFormat ? response.clone() : response;\n const data = !responseFormat\n ? r\n : await responseToParse[responseFormat]()\n .then((data) => {\n if (r.ok) {\n r.data = data;\n } else {\n r.error = data;\n }\n return r;\n })\n .catch((e) => {\n r.error = e;\n return r;\n });\n\n if (cancelToken) {\n this.abortControllers.delete(cancelToken);\n }\n\n if (!response.ok) {\n this.authorizeOnUnauthorized(response, path);\n throw data;\n }\n return data.data;\n });\n };\n\n private authorizeOnUnauthorized(response: Response, path: string): void {\n if (\n response.status !== 401 ||\n path.includes(\"/api/security/create-auth-session\")\n ) {\n return;\n }\n\n this.securityService.authorize(\n `${window.location.pathname}${window.location.search}${window.location.hash}`,\n );\n }\n\n private async getCsrfRequestParams(\n method: string | undefined,\n path: string,\n ): Promise<RequestParams> {\n if (\n !method ||\n ![\"POST\", \"PUT\", \"PATCH\", \"DELETE\"].includes(method.toUpperCase())\n ) {\n return {};\n }\n\n if (\n path.includes(\"/api/security/create-auth-session\") ||\n path.includes(\"/api/security/get-auth-csrf-token\")\n ) {\n return {};\n }\n\n const csrfToken = await firstValueFrom(this.securityService.getCsrfToken());\n return csrfToken?.token\n ? { headers: { [csrfToken.headerName]: csrfToken.token } }\n : {};\n }\n}\n","import { inject, isDevMode } from '@angular/core';\nimport { L10nService, TranslationsByLang } from '../services/l10n.service';\nimport { Observable, of } from 'rxjs';\nimport { Translation, TranslationObject } from '@ngx-translate/core';\n\n/**\n * Registers a component's co-located translations and merges them into the\n * active language. The namespace is derived from the JSON's own root key,\n * so callers never repeat it as a string literal.\n *\n * Must be called from an injection context - as a field initializer, or as\n * the first statement in a constructor - the same requirement as `inject()`\n * itself, which it uses internally.\n *\n * ```ts\n * import en from './l10n/menu.en.json';\n * import ru from './l10n/menu.ru.json';\n *\n * @Component({ ... })\n * export class MenuComponent {\n * private readonly translations = provideTranslations({ en, ru });\n * }\n * ```\n */\nexport function provideTranslations(byLang: TranslationsByLang): Observable<Translation | TranslationObject> {\n if (isDevMode()) {\n warnOnKeyMismatch(byLang);\n }\n\n L10nService.registerTranslations(byLang);\n\n const namespace = namespaceOf(byLang);\n return namespace ? inject(L10nService).get(namespace) : of({});\n}\n\nfunction namespaceOf(byLang: TranslationsByLang): string | undefined {\n const firstLangDict = Object.values(byLang)[0];\n return firstLangDict ? Object.keys(firstLangDict)[0] : undefined;\n}\n\n/**\n * Dev-only sanity check: warns when the language dictionaries in `byLang`\n * don't all declare the same set of keys - a common source of a translated\n * string silently falling back to its raw key in one language only.\n */\nfunction warnOnKeyMismatch(byLang: TranslationsByLang): void {\n const langs = Object.keys(byLang);\n if (langs.length < 2) {\n return;\n }\n\n const keysByLang = new Map(langs.map((lang) => [lang, collectKeyPaths(byLang[lang])]));\n const [baseLang, ...otherLangs] = langs;\n const baseKeys = keysByLang.get(baseLang)!;\n const namespace = namespaceOf(byLang) ?? '(unknown namespace)';\n\n for (const lang of otherLangs) {\n const langKeys = keysByLang.get(lang)!;\n const missing = [...baseKeys].filter((key) => !langKeys.has(key));\n const extra = [...langKeys].filter((key) => !baseKeys.has(key));\n\n if (missing.length > 0) {\n console.warn(\n `[provideTranslations] \"${namespace}\": \"${lang}\" is missing keys present in \"${baseLang}\": ${missing.join(', ')}`\n );\n }\n if (extra.length > 0) {\n console.warn(\n `[provideTranslations] \"${namespace}\": \"${lang}\" has extra keys not present in \"${baseLang}\": ${extra.join(', ')}`\n );\n }\n }\n}\n\n/**\n * Recursively collects dot-joined paths to every leaf value in an object,\n * e.g. { a: { b: 'x' } } -> ['a.b'].\n */\nfunction collectKeyPaths(value: unknown, prefix = '', paths: Set<string> = new Set()): Set<string> {\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n for (const [key, child] of Object.entries(value as Record<string, unknown>)) {\n collectKeyPaths(child, prefix ? `${prefix}.${key}` : key, paths);\n }\n } else {\n paths.add(prefix);\n }\n\n return paths;\n}\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n NavigationCancel,\n NavigationEnd,\n NavigationError,\n NavigationSkipped,\n NavigationStart,\n Router\n} from '@angular/router';\n\n/**\n * Tracks whether the application is switching between modules.\n *\n * Two sources feed the state:\n * - router navigation, from `NavigationStart` until the navigation ends, is cancelled or fails;\n * - explicit work registered with {@link begin}/{@link end} or {@link track}, which covers everything\n * running after `NavigationEnd`: module instance rights, settings and extension loading.\n *\n * The UI blocker rendered by the layout observes {@link loading}.\n */\n@Injectable({ providedIn: 'root' })\nexport class ModuleLoadingService {\n /** Releases a stuck blocker when a caller never balances its `begin()`. */\n private static readonly watchdogTimeoutMs = 30_000;\n\n private readonly router = inject(Router);\n private readonly navigating = signal(false);\n private readonly pending = signal(0);\n private watchdogHandle?: ReturnType<typeof setTimeout>;\n\n /** True while a module transition is in progress. */\n public readonly loading = computed(() => this.navigating() || this.pending() > 0);\n\n constructor() {\n this.router.events.pipe(takeUntilDestroyed()).subscribe((event) => {\n if (event instanceof NavigationStart) {\n this.navigating.set(true);\n } else if (\n event instanceof NavigationEnd ||\n event instanceof NavigationCancel ||\n event instanceof NavigationError ||\n event instanceof NavigationSkipped\n ) {\n this.navigating.set(false);\n }\n });\n }\n\n /**\n * Registers one unit of loading work. Every call must be balanced with {@link end},\n * preferably from a `finally` block. Prefer {@link track} when the work is a promise.\n */\n public begin(): void {\n this.pending.update((count) => count + 1);\n this.armWatchdog();\n }\n\n /** Releases one unit of loading work registered with {@link begin}. */\n public end(): void {\n this.pending.update((count) => Math.max(0, count - 1));\n this.armWatchdog();\n }\n\n /**\n * Blocks the UI until `work` settles, and keeps the blocker released when it rejects.\n *\n * @example\n * await this.moduleLoading.track(this.reloadModuleInstance());\n */\n public async track<T>(work: PromiseLike<T>): Promise<T> {\n this.begin();\n try {\n return await work;\n } finally {\n this.end();\n }\n }\n\n private armWatchdog(): void {\n if (this.watchdogHandle != null) {\n clearTimeout(this.watchdogHandle);\n this.watchdogHandle = undefined;\n }\n\n if (this.pending() === 0) {\n return;\n }\n\n this.watchdogHandle = setTimeout(() => {\n this.watchdogHandle = undefined;\n console.warn(\n `[ModuleLoadingService] Loading work did not finish within ${ModuleLoadingService.watchdogTimeoutMs}ms, releasing the UI blocker.`\n );\n this.pending.set(0);\n }, ModuleLoadingService.watchdogTimeoutMs);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n DestroyRef,\n effect,\n inject,\n OnDestroy,\n OnInit,\n signal,\n WritableSignal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TopBarDto } from '../../dtos/top-bar.dto';\nimport { TopBarService } from '../../services/top-bar.service';\nimport { MsgService } from '../../services/msg.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { InterpolationParameters, TranslateService, Translation, TranslationObject } from '@ngx-translate/core';\nimport { from, Subject, Subscription } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { AppTitleService } from '../../services/app-title.service';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { L10nService } from '../../services/l10n.service';\nimport { SecurityDto } from '../../dtos/security.dto';\nimport { SecurityService } from '../../services/security.service';\nimport { ContentType, HttpClient } from '../../api/http-client';\nimport { PutSecurityDto } from '../../dtos/put-security.dto';\nimport { ApiExceptionResponse } from '../../api/data-contracts';\nimport { provideTranslations } from '../../helpers/l10n.helper';\nimport { ModuleLoadingService } from '../../services/module-loading.service';\n\nimport en from './l10n/base-module.en.json';\nimport ru from './l10n/base-module.ru.json';\n\ninterface BaseComponentLocalization {\n security: string;\n settings: string;\n content: string;\n}\n\n@Component({standalone: true, template: ''})\nexport abstract class BaseModuleComponent<TBackendStoreSettings, TLocalStoreSettings> implements OnInit, OnDestroy {\n private static readonly readRight = 'read';\n private static readonly editRight = 'edit';\n private static readonly deleteRight = 'delete';\n\n protected isInitialized = false;\n protected moduleInstanceReloadPromise: Promise<void> = Promise.resolve();\n protected rightsSubscription?: Subscription;\n protected securityRoles: string[] = [];\n protected securitySettings: SecurityDto[] = [];\n protected readonly destroyRef = inject(DestroyRef);\n protected readonly securityService = inject(SecurityService);\n protected readonly moduleLoadingService = inject(ModuleLoadingService);\n protected readonly httpClient = inject(HttpClient);\n\n /**\n * Provide access to app settings\n */\n public readonly layoutService = inject(LayoutService);\n /**\n * Provides access to topbar related functionality, such as managing visibility and content.\n * @type {TopBarService}\n */\n public readonly topBarService: TopBarService = inject(TopBarService);\n\n /**\n * Provides access to information about the current route.\n * This includes route parameters, data, and the route's path.\n */\n public readonly route: ActivatedRoute = inject(ActivatedRoute);\n\n /**\n * Provides access to messaging services.\n */\n public readonly msgService = inject(MsgService);\n\n /**\n * Provides access to translation functionality.\n */\n public readonly translateService = inject(TranslateService);\n\n /**\n * Provides access to the application's title service.\n */\n public readonly appTitleService = inject(AppTitleService);\n\n /**\n * Reference to the ChangeDetector. Used to trigger change detection manually.\n */\n private changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n /**\n * Represents a subscription to an observable.\n * Manages the lifecycle of receiving data from the observable and allows unsubscribing to stop receiving data.\n * @type {Subscription}\n */\n public subscriptions: Subscription[] = [];\n /**\n * Configuration object for backend storage\n * @type {TBackendStoreSettings}\n */\n public settings: TBackendStoreSettings = {} as TBackendStoreSettings;\n\n /**\n * Configuration object for local storage.\n * @type {TLocalStoreSettings}\n */\n public _localSettings: TLocalStoreSettings = {} as TLocalStoreSettings;\n\n /**\n * A signal representing the local application settings. Changes to this signal\n * propagate updates to the underlying local store settings.\n * @type {WritableSignal<TLocalStoreSettings>}\n */\n public localSettings: WritableSignal<TLocalStoreSettings> = signal<TLocalStoreSettings>(this._localSettings);\n\n /**\n * A Subject emitting updates to local store settings. Observables can subscribe to this Subject to react to changes in local settings.\n * @type {Subject<TLocalStoreSettings>}\n */\n public localSettingsUpdate: Subject<TLocalStoreSettings> = new Subject<TLocalStoreSettings>();\n\n /**\n * The title of the component. Get from Title in ngOnInit\n * @type {string}\n */\n public title: string;\n\n private readonly baseTranslations = provideTranslations({ en, ru });\n\n public l10nService = inject(L10nService);\n public canRead = false;\n public canEdit = false;\n public canDelete = false;\n public securityRightsLoaded = false;\n\n /**\n * Updates local settings and persists them to local storage.\n * @return {void}\n */\n private onConfigUpdate(): void {\n if (Object.keys(this.localSettings()).length > 0) {\n this._localSettings = {...this.localSettings()};\n this.localSettingsUpdate.next(this._localSettings);\n localStorage.setItem(`Instance_${this.id}`, JSON.stringify(this._localSettings));\n }\n }\n\n private getLocalStorageSettings() {\n try {\n const localStorageSettingsString = localStorage.getItem(`Instance_${this.id}`);\n if (localStorageSettingsString != null) {\n this.localSettings.set(JSON.parse(localStorageSettingsString) as TLocalStoreSettings);\n } else {\n this.localSettings.set({} as TLocalStoreSettings);\n }\n } catch (error) {\n this.msgService.error(error, 'Error parsing layoutConfig:');\n this.localSettings.set({} as TLocalStoreSettings);\n }\n }\n\n /**\n * A unique numerical identifier for the module.\n * @type {number}\n */\n id: number | undefined = undefined;\n\n /**\n * The name of the controller currently handling the request.\n * @type {string}\n */\n controller: string;\n\n /**\n * Checks if the content ID is present.\n * @returns {boolean} True if the content ID is present, false otherwise.\n */\n get isContent(): boolean {\n return this.topBarService.checkId('content');\n }\n\n /**\n * Checks if the settings ID is present.\n * @returns {boolean} True if the settings ID is present, false otherwise.\n */\n get isSettings(): boolean {\n return this.topBarService.checkId('settings');\n }\n\n /**\n * Checks if the security ID is present.\n * @returns {boolean} True if the security ID is present, false otherwise.\n */\n get isSecurity(): boolean {\n return this.topBarService.checkId('security');\n }\n\n /**\n * Defines the top bar items.\n */\n public topBarItems: TopBarDto[] = [\n {id: 'content', icon: 'pi-box', caption: ''},\n {id: 'settings', icon: 'pi-cog', caption: ''},\n {id: 'security', icon: 'pi-lock', caption: ''}\n ];\n\n /**\n * Gets an instant translation for a key or an array of keys.\n */\n public t(key: string | string[], interpolateParams?: InterpolationParameters): Translation | TranslationObject {\n return this.translateService.instant(key, interpolateParams);\n }\n\n /**\n * Checks whether the current user has the specified security right.\n */\n public hasRight(code: string): boolean {\n return this.hasSecurityRight(this.securityRoles, this.securitySettings, code);\n }\n\n /**\n * Initializes the component and subscribes to local settings updates.\n */\n constructor() {\n effect(() => {\n const config = this.localSettings();\n if (config) {\n this.onConfigUpdate();\n }\n });\n this.subscriptions.push(\n this.route.url.subscribe((url) => {\n this.controller = url[0].path;\n })\n );\n this.subscriptions.push(\n this.route.paramMap.subscribe((params) => {\n const routeId = params.get('id');\n const nextId = routeId != null ? +routeId : undefined;\n const idChanged = this.id !== nextId;\n\n this.id = nextId;\n this.getLocalStorageSettings();\n\n if (this.isInitialized && idChanged) {\n void this.reloadModuleInstance();\n }\n })\n );\n }\n\n /**\n * Lifecycle hook that is called when a component is destroyed.\n * Unsubscribes from all subscriptions to prevent memory leaks,\n * resets the top bar items to an empty array, and sets the active ID\n * to the ID of the first top bar item (if available).\n */\n ngOnDestroy() {\n this.topBarService.setTopBarItems([]);\n this.topBarService.activeId = this.topBarItems[0].id;\n this.rightsSubscription?.unsubscribe();\n this.subscriptions.forEach((s) => s.unsubscribe());\n }\n\n /**\n * Initializes the component. Subscribes to translation service to set captions for top bar items,\n * sets the top bar items via the top bar service, sets the active ID,\n * subscribes to route parameters to get the ID, and retrieves settings.\n * @return {Promise<void>} A promise that resolves when the initialization is complete.\n */\n async ngOnInit(): Promise<void> {\n this.subscriptions.push(\n this.translateService.stream('baseComponent').subscribe((value: BaseComponentLocalization) => {\n this.topBarItems.forEach((item) => {\n item.caption = value[item.id];\n });\n })\n );\n\n this.topBarService.setTopBarItems(this.topBarItems);\n this.topBarService.activeId = this.topBarItems[0].id;\n\n this.isInitialized = true;\n await this.reloadModuleInstance();\n\n this.subscriptions.push(\n this.appTitleService.title$.subscribe((title) => {\n this.title = title;\n this.changeDetectorRef.detectChanges();\n })\n );\n }\n\n /**\n * Retrieves module instance settings.\n * @return {Promise<void>} A promise that resolves when settings are retrieved.\n */\n async getSettings(): Promise<void> {\n try {\n if (this.id == null) {\n return;\n }\n\n this.settings = await this.getModuleInstanceSettings<TBackendStoreSettings>();\n } catch (error) {\n this.msgService.error(error);\n }\n }\n\n /**\n * Saves the provided settings to the backend.\n * @param {TLocalStoreSettings} settings - The settings object to save.\n * @return {Promise<void>} A promise that resolves when the settings are saved. Reject if an error occurs.\n */\n async saveSettings(settings: TBackendStoreSettings): Promise<void> {\n if (this.id == null) {\n this.msgService.error('Module id not passed!');\n return;\n }\n\n await this.saveModuleInstanceSettings({\n id: this.id,\n settings: settings\n })\n .then(() => {\n this.msgService.success(this.translateService.instant('baseComponent.success'));\n })\n .catch((error) => {\n this.msgService.error(error);\n });\n }\n\n /**\n * Called whenever the module instance changes, including the first load.\n * Derived components can override this to refresh module-specific data.\n */\n protected async onModuleInstanceChange(): Promise<void> {\n }\n\n /**\n * Called whenever current user rights for the active module instance are recalculated.\n */\n protected onSecurityRightsChange(): void {\n }\n\n /**\n * Starts watching current token roles and maps them to module instance security settings.\n */\n protected watchSecurityRights(controller: string = this.controller, id: number | undefined = this.id): Promise<void> {\n this.rightsSubscription?.unsubscribe();\n this.resetRightsState();\n\n if (!controller || id == null) {\n return Promise.resolve();\n }\n\n return new Promise<void>((resolve) => {\n let settled = false;\n const settle = () => {\n if (!settled) {\n settled = true;\n resolve();\n }\n };\n\n this.rightsSubscription = this.securityService.payload\n .pipe(\n switchMap((payload) =>\n from(this.getSecurity(controller, id)).pipe(map((securitySettings) => ({payload, securitySettings})))\n ),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe({\n next: ({payload, securitySettings}) => {\n const roles = payload?.realm_access?.roles ?? [];\n this.updateRightsState(roles, securitySettings);\n settle();\n },\n error: (error) => {\n this.securityRightsLoaded = true;\n console.error('Не удалось загрузить права', error);\n this.onSecurityRightsChange();\n settle();\n }\n });\n });\n }\n\n private resetRightsState(): void {\n this.canRead = false;\n this.canEdit = false;\n this.canDelete = false;\n this.securityRightsLoaded = false;\n this.securityRoles = [];\n this.securitySettings = [];\n }\n\n private updateRightsState(roles: string[], securitySettings: SecurityDto[]): void {\n this.securityRoles = roles;\n this.securitySettings = securitySettings;\n this.canRead = this.hasSecurityRight(roles, securitySettings, BaseModuleComponent.readRight);\n this.canEdit = this.hasSecurityRight(roles, securitySettings, BaseModuleComponent.editRight);\n this.canDelete = this.hasSecurityRight(roles, securitySettings, BaseModuleComponent.deleteRight);\n this.securityRightsLoaded = true;\n this.onSecurityRightsChange();\n }\n\n protected hasSecurityRight(roles: string[], securitySettings: SecurityDto[], code: string): boolean {\n return (\n securitySettings.find((security) => security.code === code)?.roles?.some((role) => roles.includes(role)) ?? false\n );\n }\n\n protected getSecurity(controller: string = this.controller, id: number | undefined = this.id): Promise<SecurityDto[]> {\n if (!controller || id == null) {\n return Promise.resolve([]);\n }\n\n return this.httpClient.request<SecurityDto[], ApiExceptionResponse>({\n path: `/api/${controller}/get-security`,\n method: 'GET',\n secure: true,\n format: 'json'\n });\n }\n\n protected saveSecurity(request: PutSecurityDto, controller: string = this.controller): Promise<unknown> {\n return this.httpClient.request<unknown, ApiExceptionResponse>({\n path: `/api/${controller}/put-security`,\n method: 'PUT',\n body: request,\n secure: true,\n type: ContentType.Json\n });\n }\n\n protected getModuleInstanceSettings<TSettings>(controller: string = this.controller): Promise<TSettings> {\n return this.httpClient.request<TSettings, ApiExceptionResponse>({\n path: `/api/${controller}/get-module-instance-settings`,\n method: 'GET',\n secure: true,\n format: 'json'\n });\n }\n\n protected saveModuleInstanceSettings<TSettings>(\n request: { id: number; settings: TSettings },\n controller: string = this.controller\n ): Promise<unknown> {\n return this.httpClient.request<unknown, ApiExceptionResponse>({\n path: `/api/${controller}/put-module-instance-settings`,\n method: 'PUT',\n body: request,\n secure: true,\n type: ContentType.Json\n });\n }\n\n protected getMigrations<TMigration>(controller: string = this.controller): Promise<TMigration[]> {\n return this.httpClient.request<TMigration[], ApiExceptionResponse>({\n path: `/api/${controller}/get-migrations`,\n method: 'GET',\n secure: true,\n format: 'json'\n });\n }\n\n protected applyModuleMigration(request: unknown, controller: string = this.controller): Promise<unknown> {\n return this.httpClient.request<unknown, ApiExceptionResponse>({\n path: `/api/${controller}/apply-migration`,\n method: 'POST',\n body: request,\n secure: true,\n type: ContentType.Json\n });\n }\n\n private async reloadModuleInstance(): Promise<void> {\n // Blocks the UI for the whole bootstrap: router navigation has already ended by the time it runs.\n this.moduleInstanceReloadPromise = this.moduleInstanceReloadPromise.then(() =>\n this.moduleLoadingService.track(\n (async () => {\n // Rights first: the backend rejects settings and data requests without the read right.\n await this.watchSecurityRights();\n if (!this.canRead) {\n return;\n }\n\n await this.getSettings();\n await this.onModuleInstanceChange();\n })()\n )\n );\n\n await this.moduleInstanceReloadPromise;\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n ApiExceptionResponse,\n AuthCsrfTokenResponse,\n AuthSessionResponse,\n} from \"./data-contracts\";\nimport { HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class SecurityApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getCurrentAuthSession = (params: RequestParams = {}) =>\n this.request<AuthSessionResponse, ApiExceptionResponse>({\n path: `/api/security/get-current-auth-session`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n createAuthSession = (params: RequestParams = {}) =>\n this.request<any, void | ApiExceptionResponse>({\n path: `/api/security/create-auth-session`,\n method: \"POST\",\n secure: true,\n ...params,\n });\n deleteAuthSession = (params: RequestParams = {}) =>\n this.request<any, void | ApiExceptionResponse>({\n path: `/api/security/delete-auth-session`,\n method: \"POST\",\n secure: true,\n ...params,\n });\n getAuthCsrfToken = (params: RequestParams = {}) =>\n this.request<AuthCsrfTokenResponse, ApiExceptionResponse>({\n path: `/api/security/get-auth-csrf-token`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getRealmRoles = (params: RequestParams = {}) =>\n this.request<string[], any>({\n path: `/api/security/get-realm-roles`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","import { Component, inject, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { ButtonModule } from 'primeng/button';\nimport { FormsModule } from '@angular/forms';\nimport { MsgService } from '../../services/msg.service';\nimport { PutSecurityDto } from '../../dtos/put-security.dto';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { ContentType, HttpClient } from '../../api/http-client';\nimport { SecurityDto } from '../../dtos/security.dto';\nimport { SecurityApi } from '../../api/security.api';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/security.en.json';\nimport ru from './l10n/security.ru.json';\n\n@Component({\n selector: 'security',\n template: `\n <div class=\"flex flex-col md:flex-row gap-8\">\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">\n {{ 'securityComponent.security' | translate }}\n </div>\n @for (item of securityData; track item.name) {\n <div class=\"flex flex-col gap-2\">\n <label htmlFor=\"oip-security-multiselect-{{ item.name }}\">\n {{ item.name }}\n <span class=\"pi pi-question-circle\" pTooltip=\"{{ item.description }}\" tooltipPosition=\"right\"></span>\n </label>\n <p-multiSelect\n id=\"oip-security-multiselect-{{ item.name }}\"\n placeholder=\"{{ 'securityComponent.selectRoles' | translate }}\"\n [maxSelectedLabels]=\"10\"\n [options]=\"roles\"\n [(ngModel)]=\"item.roles\" />\n </div>\n }\n <div class=\"flex justify-content-end flex-wrap\">\n <p-button\n icon=\"pi pi-save\"\n id=\"oip-security-save-button\"\n label=\"{{ 'securityComponent.save' | translate }}\"\n (click)=\"saveClick()\"\n (keydown)=\"saveKeyDown($event)\" />\n </div>\n </div>\n </div>\n </div>\n `,\n imports: [MultiSelectModule, TooltipModule, FormsModule, ButtonModule, TranslatePipe],\n standalone: true\n})\nexport class SecurityComponent implements OnChanges, OnInit, OnDestroy {\n private readonly translations = provideTranslations({ en, ru });\n\n private readonly msgService = inject(MsgService);\n private readonly translateService = inject(TranslateService);\n private readonly httpClient = inject(HttpClient);\n private readonly securityApi = inject(SecurityApi);\n private securityLoadToken = 0;\n\n securityData: SecurityDto[] = [];\n @Input() id?: number;\n @Input() controller?: string;\n roles: string[] = [];\n\n ngOnDestroy(): void {\n // on destroy\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['id'] || changes['controller']) {\n void this.loadSecurity();\n }\n }\n\n ngOnInit(): void {\n this.securityApi.getRealmRoles().then(\n (result) => {\n this.roles = result;\n },\n (error) => this.msgService.error(error)\n );\n }\n\n saveClick() {\n if (this.id == null) {\n this.msgService.error('Module id not passed!');\n return;\n }\n if (!this.controller) {\n this.msgService.error('Controller not passed!');\n return;\n }\n\n const request: PutSecurityDto = {\n id: this.id,\n securities: this.securityData\n };\n this.saveSecurity(this.controller, request).then(\n (result) => {\n this.msgService.success(this.translateService.instant('securityComponent.savedSecurity'));\n },\n (error) => this.msgService.error(error)\n );\n }\n\n saveKeyDown($event: KeyboardEvent) {\n if ($event.key === 'Enter' || $event.key === 'Space') {\n this.saveClick();\n }\n }\n\n private async loadSecurity(): Promise<void> {\n const loadToken = ++this.securityLoadToken;\n const controller = this.controller;\n const id = this.id;\n\n this.securityData = [];\n\n if (!controller || id == null) {\n return;\n }\n\n try {\n const result = await this.getSecurity(controller);\n if (loadToken === this.securityLoadToken) {\n this.securityData = result;\n }\n } catch (error) {\n if (loadToken === this.securityLoadToken) {\n this.msgService.error(error);\n }\n }\n }\n\n private getSecurity(controller: string) {\n return this.httpClient.request<SecurityDto[]>({\n path: `/api/${controller}/get-security`,\n method: 'GET',\n secure: true,\n format: 'json'\n });\n }\n\n private saveSecurity(controller: string, request: PutSecurityDto) {\n return this.httpClient.request<unknown>({\n path: `/api/${controller}/put-security`,\n method: 'PUT',\n body: request,\n secure: true,\n type: ContentType.Json\n });\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport type { PaletteDesignToken, Preset } from '@primeuix/themes/types';\n\n/**\n * Defers loading of a theme preset until the theme is actually selected.\n *\n * Presets are large, so a preset that is not the application default should be provided as a loader\n * built on a dynamic import, which keeps it out of the initial bundle:\n *\n * ```ts\n * { id: 'Lara', preset: () => import('@primeng/themes/lara').then((m) => m.default as Preset) }\n * ```\n */\nexport type AppThemePresetLoader = () => Promise<Preset>;\n\nexport interface AppThemePreset {\n id: string;\n label?: string;\n /** The preset itself, or a {@link AppThemePresetLoader} resolving it on first use. */\n preset: Preset | AppThemePresetLoader;\n primaryColors?: Record<string, PaletteDesignToken | undefined>;\n surfaceColors?: Record<string, PaletteDesignToken | undefined>;\n}\n\nexport type AppThemePresetMergeMode = 'mergeWithDefaults' | 'replaceDefaults';\n\nexport const APP_THEME_PRESETS = new InjectionToken<ReadonlyArray<AppThemePreset>>('APP_THEME_PRESETS', {\n factory: () => []\n});\n\nexport const APP_THEME_PRESETS_MERGE_MODE = new InjectionToken<AppThemePresetMergeMode>(\n 'APP_THEME_PRESETS_MERGE_MODE',\n {\n factory: () => 'mergeWithDefaults'\n }\n);\n","import { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { Component, computed, inject, PLATFORM_ID, signal, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { $t, updatePreset, updateSurfacePalette } from '@primeng/themes';\nimport type { PaletteDesignToken, Preset } from '@primeuix/themes/types';\nimport Aura from '@primeng/themes/aura';\nimport { PrimeNG } from 'primeng/config';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport {\n APP_THEME_PRESETS,\n APP_THEME_PRESETS_MERGE_MODE,\n AppThemePreset,\n AppThemePresetLoader\n} from '../../services/theme-presets.token';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/app-configurator.en.json';\nimport ru from './l10n/app-configurator.ru.json';\n\n/**\n * Aura stays eager: it is the fallback preset and its primitive palette backs the color swatches\n * shown before any other preset is resolved. Lara and Nora are loaded on demand, which keeps roughly\n * 300 KB out of the initial bundle for applications that never switch away from the default theme.\n */\nconst DEFAULT_THEME_PRESETS: ReadonlyArray<AppThemePreset> = [\n { id: 'Aura', label: 'Aura', preset: Aura as Preset },\n { id: 'Lara', label: 'Lara', preset: () => import('@primeng/themes/lara').then((m) => m.default as Preset) },\n { id: 'Nora', label: 'Nora', preset: () => import('@primeng/themes/nora').then((m) => m.default as Preset) }\n];\n\nfunction isPresetLoader(preset: AppThemePreset['preset']): preset is AppThemePresetLoader {\n return typeof preset === 'function';\n}\n\nconst PRIMARY_COLORS = [\n 'emerald',\n 'green',\n 'lime',\n 'orange',\n 'amber',\n 'yellow',\n 'teal',\n 'cyan',\n 'sky',\n 'blue',\n 'indigo',\n 'violet',\n 'purple',\n 'fuchsia',\n 'pink',\n 'rose'\n] as const;\n\ndeclare type SurfacesType = {\n name?: string;\n palette?: PaletteDesignToken;\n};\n\n@Component({\n selector: 'app-configurator',\n standalone: true,\n imports: [CommonModule, FormsModule, SelectButtonModule, TranslatePipe],\n template: `\n <div class=\"flex flex-col gap-4\">\n <div>\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.primary' | translate }}</span>\n <div class=\"pt-2 flex gap-2 flex-wrap justify-start\">\n @for (primaryColor of primaryColors(); track primaryColor.name) {\n <button\n class=\"border-none w-5 h-5 rounded-full p-0 cursor-pointer outline-none outline-offset-1\"\n id=\"oip-app-configurator-primary-color-{{ primaryColor.name }}\"\n type=\"button\"\n [ngClass]=\"{\n 'outline-primary': primaryColor.name === selectedPrimaryColor()\n }\"\n [style]=\"{\n 'background-color': primaryColor?.name === 'noir' ? 'var(--text-color)' : primaryColor?.palette?.['500']\n }\"\n [title]=\"primaryColor.name\"\n (click)=\"updateColors($event, 'primary', primaryColor)\"></button>\n }\n </div>\n </div>\n <div>\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.surface' | translate }}</span>\n <div class=\"pt-2 flex gap-2 flex-wrap justify-start\">\n @for (surface of surfaceColors(); track surface.name) {\n <button\n class=\"border-none w-5 h-5 rounded-full p-0 cursor-pointer outline-none outline-offset-1\"\n id=\"oip-app-configurator-surface-color-{{ surface.name }}\"\n type=\"button\"\n [ngClass]=\"{\n 'outline-primary': selectedSurfaceColor()\n ? selectedSurfaceColor() === surface.name\n : layoutService.layoutConfig().darkTheme\n ? surface.name === 'zinc'\n : surface.name === 'slate'\n }\"\n [style]=\"{\n 'background-color': surface?.name === 'noir' ? 'var(--text-color)' : surface?.palette?.['500']\n }\"\n [title]=\"surface.name\"\n (click)=\"updateColors($event, 'surface', surface)\"></button>\n }\n </div>\n </div>\n <div class=\"flex flex-col gap-2\">\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.presets' | translate }}</span>\n <p-selectButton\n id=\"oip-app-configurator-preset-select-button\"\n optionLabel=\"label\"\n optionValue=\"value\"\n size=\"small\"\n [allowEmpty]=\"false\"\n [ngModel]=\"selectedPreset()\"\n [options]=\"presets\"\n (ngModelChange)=\"onPresetChange($event)\" />\n </div>\n @if (showMenuModeButton()) {\n <div class=\"flex flex-col gap-2\">\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.menuMode' | translate }}</span>\n <p-selectButton\n id=\"oip-app-configurator-menu-mode-select-button\"\n size=\"small\"\n [allowEmpty]=\"false\"\n [ngModel]=\"menuMode()\"\n [options]=\"menuModeOptions\"\n (ngModelChange)=\"onMenuModeChange($event)\">\n <ng-template pTemplate=\"item\" let-item>\n {{ item.label | translate }}\n </ng-template>\n </p-selectButton>\n </div>\n }\n </div>\n `,\n host: {\n class:\n 'hidden absolute top-[3.25rem] right-0 w-72 p-4 bg-surface-0 dark:bg-surface-900 border border-surface rounded-border origin-top shadow-[0px_3px_5px_rgba(0,0,0,0.02),0px_0px_2px_rgba(0,0,0,0.05),0px_1px_4px_rgba(0,0,0,0.08)]'\n }\n})\nexport class AppConfiguratorComponent implements OnInit {\n private readonly translations = provideTranslations({ en, ru });\n\n router = inject(Router);\n\n config: PrimeNG = inject(PrimeNG);\n\n layoutService: LayoutService = inject(LayoutService);\n\n platformId = inject(PLATFORM_ID);\n\n primeng = inject(PrimeNG);\n\n private readonly injectedThemePresets = inject(APP_THEME_PRESETS);\n private readonly themePresetMergeMode = inject(APP_THEME_PRESETS_MERGE_MODE);\n\n private readonly themePresets = this.getThemePresets();\n\n private readonly themePresetsMap = new Map(this.themePresets.map((theme) => [theme.id, theme]));\n\n private readonly defaultThemePreset = this.themePresets[0] ?? DEFAULT_THEME_PRESETS[0];\n\n /**\n * Presets resolved so far, keyed by theme id. Seeded with the eagerly provided ones and filled in\n * as loaders resolve; it is a signal so the color swatches recompute once a preset arrives.\n */\n private readonly resolvedPresets = signal<ReadonlyMap<string, Preset>>(\n new Map(\n this.themePresets\n .filter((theme) => !isPresetLoader(theme.preset))\n .map((theme) => [theme.id, theme.preset as Preset])\n )\n );\n\n private readonly pendingPresets = new Map<string, Promise<Preset>>();\n\n private readonly fallbackPrimaryColors = ((\n DEFAULT_THEME_PRESETS[0].preset as { primitive?: Record<string, PaletteDesignToken> }\n ).primitive ?? {}) as Record<string, PaletteDesignToken>;\n\n presets = this.themePresets.map((theme) => ({ label: theme.label ?? theme.id, value: theme.id }));\n\n showMenuModeButton = signal(!this.router.url.includes('auth'));\n\n menuModeOptions = [\n { label: 'app-configurator.menuModeStatic', value: 'static' },\n { label: 'app-configurator.menuModeOverlay', value: 'overlay' }\n ];\n\n ngOnInit() {\n if (isPlatformBrowser(this.platformId)) {\n const presetId = this.ensureValidThemeId(this.layoutService.layoutConfig().preset);\n void this.onPresetChange(presetId);\n }\n }\n\n surfaces: SurfacesType[] = [\n {\n name: 'slate',\n palette: {\n 0: '#ffffff',\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n 950: '#020617'\n }\n },\n {\n name: 'gray',\n palette: {\n 0: '#ffffff',\n 50: '#f9fafb',\n 100: '#f3f4f6',\n 200: '#e5e7eb',\n 300: '#d1d5db',\n 400: '#9ca3af',\n 500: '#6b7280',\n 600: '#4b5563',\n 700: '#374151',\n 800: '#1f2937',\n 900: '#111827',\n 950: '#030712'\n }\n },\n {\n name: 'zinc',\n palette: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#a1a1aa',\n 500: '#71717a',\n 600: '#52525b',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n 950: '#09090b'\n }\n },\n {\n name: 'neutral',\n palette: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#e5e5e5',\n 300: '#d4d4d4',\n 400: '#a3a3a3',\n 500: '#737373',\n 600: '#525252',\n 700: '#404040',\n 800: '#262626',\n 900: '#171717',\n 950: '#0a0a0a'\n }\n },\n {\n name: 'stone',\n palette: {\n 0: '#ffffff',\n 50: '#fafaf9',\n 100: '#f5f5f4',\n 200: '#e7e5e4',\n 300: '#d6d3d1',\n 400: '#a8a29e',\n 500: '#78716c',\n 600: '#57534e',\n 700: '#44403c',\n 800: '#292524',\n 900: '#1c1917',\n 950: '#0c0a09'\n }\n },\n {\n name: 'soho',\n palette: {\n 0: '#ffffff',\n 50: '#ececec',\n 100: '#dedfdf',\n 200: '#c4c4c6',\n 300: '#adaeb0',\n 400: '#97979b',\n 500: '#7f8084',\n 600: '#6a6b70',\n 700: '#55565b',\n 800: '#3f4046',\n 900: '#2c2c34',\n 950: '#16161d'\n }\n },\n {\n name: 'viva',\n palette: {\n 0: '#ffffff',\n 50: '#f3f3f3',\n 100: '#e7e7e8',\n 200: '#cfd0d0',\n 300: '#b7b8b9',\n 400: '#9fa1a1',\n 500: '#87898a',\n 600: '#6e7173',\n 700: '#565a5b',\n 800: '#3e4244',\n 900: '#262b2c',\n 950: '#0e1315'\n }\n },\n {\n name: 'ocean',\n palette: {\n 0: '#ffffff',\n 50: '#fbfcfc',\n 100: '#F7F9F8',\n 200: '#EFF3F2',\n 300: '#DADEDD',\n 400: '#B1B7B6',\n 500: '#828787',\n 600: '#5F7274',\n 700: '#415B61',\n 800: '#29444E',\n 900: '#183240',\n 950: '#0c1920'\n }\n }\n ];\n\n selectedPrimaryColor = computed(() => {\n return this.layoutService.layoutConfig().primary;\n });\n\n selectedSurfaceColor = computed(() => this.layoutService.layoutConfig().surface);\n\n selectedPreset = computed(() => this.layoutService.layoutConfig().preset);\n\n menuMode = computed(() => this.layoutService.layoutConfig().menuMode);\n\n primaryColors = computed<SurfacesType[]>(() => {\n const activeThemePreset = this.getThemeById(this.layoutService.layoutConfig().preset);\n return this.getPrimaryColorOptions(activeThemePreset);\n });\n\n surfaceColors = computed<SurfacesType[]>(() => {\n const activeThemePreset = this.getThemeById(this.layoutService.layoutConfig().preset);\n return this.getSurfaceColorOptions(activeThemePreset);\n });\n\n getPresetExt() {\n const color: SurfacesType = this.primaryColors().find((c) => c.name === this.selectedPrimaryColor()) || {};\n const preset = this.getThemeById(this.layoutService.layoutConfig().preset).id;\n\n if (color.name === 'noir') {\n return {\n semantic: {\n primary: {\n 50: '{surface.50}',\n 100: '{surface.100}',\n 200: '{surface.200}',\n 300: '{surface.300}',\n 400: '{surface.400}',\n 500: '{surface.500}',\n 600: '{surface.600}',\n 700: '{surface.700}',\n 800: '{surface.800}',\n 900: '{surface.900}',\n 950: '{surface.950}'\n },\n colorScheme: {\n light: {\n primary: {\n color: '{primary.950}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.800}',\n activeColor: '{primary.700}'\n },\n highlight: {\n background: '{primary.950}',\n focusBackground: '{primary.700}',\n color: '#ffffff',\n focusColor: '#ffffff'\n }\n },\n dark: {\n primary: {\n color: '{primary.50}',\n contrastColor: '{primary.950}',\n hoverColor: '{primary.200}',\n activeColor: '{primary.300}'\n },\n highlight: {\n background: '{primary.50}',\n focusBackground: '{primary.300}',\n color: '{primary.950}',\n focusColor: '{primary.950}'\n }\n }\n }\n }\n };\n } else if (preset === 'Nora') {\n return {\n semantic: {\n primary: color.palette,\n colorScheme: {\n light: {\n primary: {\n color: '{primary.600}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.700}',\n activeColor: '{primary.800}'\n },\n highlight: {\n background: '{primary.600}',\n focusBackground: '{primary.700}',\n color: '#ffffff',\n focusColor: '#ffffff'\n }\n },\n dark: {\n primary: {\n color: '{primary.500}',\n contrastColor: '{surface.900}',\n hoverColor: '{primary.400}',\n activeColor: '{primary.300}'\n },\n highlight: {\n background: '{primary.500}',\n focusBackground: '{primary.400}',\n color: '{surface.900}',\n focusColor: '{surface.900}'\n }\n }\n }\n }\n };\n } else {\n return {\n semantic: {\n primary: color.palette,\n colorScheme: {\n light: {\n primary: {\n color: '{primary.500}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.600}',\n activeColor: '{primary.700}'\n },\n highlight: {\n background: '{primary.50}',\n focusBackground: '{primary.100}',\n color: '{primary.700}',\n focusColor: '{primary.800}'\n }\n },\n dark: {\n primary: {\n color: '{primary.400}',\n contrastColor: '{surface.900}',\n hoverColor: '{primary.300}',\n activeColor: '{primary.200}'\n },\n highlight: {\n background: 'color-mix(in srgb, {primary.400}, transparent 84%)',\n focusBackground: 'color-mix(in srgb, {primary.400}, transparent 76%)',\n color: 'rgba(255,255,255,.87)',\n focusColor: 'rgba(255,255,255,.87)'\n }\n }\n }\n }\n };\n }\n }\n\n private getThemePresets(): AppThemePreset[] {\n const source = this.themePresetMergeMode === 'replaceDefaults' ? [] : [...DEFAULT_THEME_PRESETS];\n const result = [...source];\n for (const theme of this.injectedThemePresets ?? []) {\n if (!theme?.id || !theme?.preset) {\n continue;\n }\n const index = result.findIndex((item) => item.id === theme.id);\n if (index >= 0) {\n result[index] = theme;\n } else {\n result.push(theme);\n }\n }\n return result;\n }\n\n private getThemeById(themeId?: string): AppThemePreset {\n return this.themePresetsMap.get(themeId ?? '') ?? this.defaultThemePreset;\n }\n\n /**\n * The preset of a theme, or `undefined` while its loader is still in flight.\n */\n private getResolvedPreset(theme: AppThemePreset): Preset | undefined {\n return isPresetLoader(theme.preset) ? this.resolvedPresets().get(theme.id) : theme.preset;\n }\n\n /**\n * Resolves a theme preset, running its loader at most once and caching the result.\n * A failed load falls back to the default preset so the configurator stays usable.\n */\n private async loadPreset(theme: AppThemePreset): Promise<Preset> {\n const resolved = this.getResolvedPreset(theme);\n if (resolved) {\n return resolved;\n }\n\n const pending = this.pendingPresets.get(theme.id);\n if (pending) {\n return pending;\n }\n\n const load = (theme.preset as AppThemePresetLoader)()\n .then((preset) => {\n this.resolvedPresets.update((presets) => new Map(presets).set(theme.id, preset));\n return preset;\n })\n .catch((error) => {\n console.error(`[AppConfigurator] Failed to load theme preset \"${theme.id}\".`, error);\n return this.getResolvedPreset(this.defaultThemePreset) ?? (Aura as Preset);\n })\n .finally(() => this.pendingPresets.delete(theme.id));\n\n this.pendingPresets.set(theme.id, load);\n return load;\n }\n\n private getPrimaryColorOptions(activeThemePreset: AppThemePreset): SurfacesType[] {\n if (activeThemePreset.primaryColors) {\n return Object.entries(activeThemePreset.primaryColors)\n .filter((entry): entry is [string, PaletteDesignToken] => Boolean(entry[1]))\n .map(([name, palette]) => ({ name, palette }));\n }\n\n const presetPalette =\n (this.getResolvedPreset(activeThemePreset) as { primitive?: Record<string, PaletteDesignToken> } | undefined)\n ?.primitive ?? {};\n const palettes: SurfacesType[] = [{ name: 'noir', palette: {} }];\n\n PRIMARY_COLORS.forEach((color) => {\n palettes.push({\n name: color,\n palette: presetPalette[color] ?? this.fallbackPrimaryColors[color]\n });\n });\n\n return palettes;\n }\n\n private getSurfaceColorOptions(activeThemePreset: AppThemePreset): SurfacesType[] {\n if (activeThemePreset.surfaceColors) {\n return Object.entries(activeThemePreset.surfaceColors)\n .filter((entry): entry is [string, PaletteDesignToken] => Boolean(entry[1]))\n .map(([name, palette]) => ({ name, palette }));\n }\n\n return this.surfaces;\n }\n\n private ensureValidThemeId(themeId?: string): string {\n if (themeId && this.themePresetsMap.has(themeId)) {\n return themeId;\n }\n\n if (themeId && isPlatformBrowser(this.platformId)) {\n console.warn(`[AppConfigurator] Unknown theme preset \"${themeId}\", fallback to \"${this.defaultThemePreset.id}\".`);\n }\n\n return this.defaultThemePreset.id;\n }\n\n updateColors(event: MouseEvent, type: string, color: SurfacesType) {\n if (type === 'primary') {\n this.layoutService.layoutConfig.update((state) => ({\n ...state,\n primary: color.name\n }));\n } else if (type === 'surface') {\n this.layoutService.layoutConfig.update((state) => ({\n ...state,\n surface: color.name\n }));\n }\n this.applyTheme(type, color);\n\n event.stopPropagation();\n }\n\n applyTheme(type: string, color: SurfacesType) {\n if (type === 'primary') {\n updatePreset(this.getPresetExt());\n } else if (type === 'surface') {\n updateSurfacePalette(color.palette);\n }\n }\n\n async onPresetChange(event: string) {\n const nextThemeId = this.ensureValidThemeId(event);\n const nextTheme = this.getThemeById(nextThemeId);\n const preset = await this.loadPreset(nextTheme);\n const primaryColors = this.getPrimaryColorOptions(nextTheme);\n const surfaceColors = this.getSurfaceColorOptions(nextTheme);\n\n this.layoutService.layoutConfig.update((state) => ({\n ...state,\n preset: nextThemeId,\n primary: primaryColors.some((color) => color.name === state.primary)\n ? state.primary\n : (primaryColors[0]?.name ?? state.primary),\n surface:\n nextTheme.surfaceColors && !surfaceColors.some((color) => color.name === state.surface)\n ? (surfaceColors[0]?.name ?? state.surface)\n : state.surface\n }));\n const surfacePalette = this.surfaceColors().find((s) => s.name === this.selectedSurfaceColor())?.palette;\n $t().preset(preset).preset(this.getPresetExt()).surfacePalette(surfacePalette).use({ useDefaultOptions: true });\n }\n\n onMenuModeChange(event: string) {\n this.layoutService.layoutConfig.update((prev) => ({\n ...prev,\n menuMode: event\n }));\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\nimport {\n ApiExceptionResponse,\n GetUserPhotoByIdParams,\n PostUserPhotoPayload,\n UserSettingsDto,\n} from \"./users-data-contracts\";\n\n@Injectable()\nexport class UserProfileApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getUserPhoto = (params: RequestParams = {}) =>\n this.request<Blob, ApiExceptionResponse>({\n path: `/api/user-profile/get-user-photo`,\n method: \"GET\",\n secure: true,\n format: \"blob\",\n ...params,\n });\n getUserPhotoById = (\n { userId, ...query }: GetUserPhotoByIdParams,\n params: RequestParams = {},\n ) =>\n this.request<Blob, ApiExceptionResponse>({\n path: `/api/user-profile/get-user-photo-by-id/${userId}`,\n method: \"GET\",\n secure: true,\n format: \"blob\",\n ...params,\n });\n postUserPhoto = (data: PostUserPhotoPayload, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/user-profile/post-user-photo`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.FormData,\n ...params,\n });\n deleteUserPhoto = (params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/user-profile/delete-user-photo`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n getSettings = (params: RequestParams = {}) =>\n this.request<UserSettingsDto, ApiExceptionResponse>({\n path: `/api/user-profile/get-settings`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n setSettings = (data: UserSettingsDto, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/user-profile/set-settings`,\n method: \"PUT\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { SecurityService } from './security.service';\nimport { distinctUntilChanged, filter, map } from 'rxjs/operators';\nimport { UserProfileApi } from '../api/user-profile.api';\nimport { MsgService } from './msg.service';\nimport { TranslateService } from '@ngx-translate/core';\n\n/**\n * UserService is responsible for retrieving and handling user-related data,\n * including the user's photo and short label for avatar display.\n */\n@Injectable()\nexport class UserService {\n private readonly securityService = inject(SecurityService);\n private readonly userProfileApi = inject(UserProfileApi);\n private readonly msgService = inject(MsgService);\n private readonly translateService = inject(TranslateService);\n private requestedPhotoKey: string | null = null;\n\n constructor() {\n this.securityService\n .getCurrentUser$()\n .pipe(\n map((user) => this.getCurrentUserPhotoKey(user)),\n filter((photoKey) => !!photoKey),\n distinctUntilChanged()\n )\n .subscribe(() => {\n this.getUserPhoto();\n });\n }\n\n /**\n * Stores the user's photo as a data URL or binary blob, depending on how it's processed.\n */\n photo: any = null;\n\n /**\n * Indicates whether the user photo has finished loading.\n */\n photoLoaded: boolean = false;\n\n /**\n * Returns a short label composed of the user's initials.\n * Typically used for avatar display when a photo is unavailable.\n */\n get shortLabel(): string {\n const data = this.securityService.getCurrentUser();\n const givenNameInitial = data?.given_name?.trim()?.[0];\n const familyNameInitial = data?.family_name?.trim()?.[0];\n const displayNameInitials = this.getInitials(\n data?.displayName ?? data?.name ?? data?.userName ?? data?.preferred_username\n );\n\n return `${givenNameInitial ?? ''}${familyNameInitial ?? ''}`.toUpperCase() || displayNameInitials;\n }\n\n get userName(): string {\n const data = this.securityService.getCurrentUser();\n return (\n [data?.given_name, data?.family_name].filter(Boolean).join(' ') ||\n data?.displayName ||\n data?.name ||\n data?.userName ||\n data?.preferred_username ||\n data?.email ||\n ''\n );\n }\n\n /**\n * Initiates an HTTP request to fetch the current user's photo,\n * and updates the `photo` and `photoLoaded` properties accordingly.\n */\n getUserPhoto(): void {\n const photoKey = this.getCurrentUserPhotoKey(this.securityService.getCurrentUser());\n\n if (!photoKey) {\n return;\n }\n\n if (this.requestedPhotoKey === photoKey && (this.photoLoaded || this.photo)) {\n return;\n }\n\n this.requestedPhotoKey = photoKey;\n\n this.userProfileApi.getUserPhoto({ format: 'blob' }).then(\n (data) => {\n this.createImageFromBlob(data as Blob);\n this.photoLoaded = true;\n },\n (error) => {\n // A 404 just means the user hasn't uploaded a photo yet (e.g. on first login) —\n // that's an expected state, not a failure, so fall back to initials silently.\n if ((error as { status?: number })?.status !== 404) {\n this.msgService.errorFromException(error, this.translateService.instant('profileComponent.failedToLoadPhoto'));\n }\n this.photoLoaded = false;\n }\n );\n }\n\n refreshUserPhoto(): void {\n this.requestedPhotoKey = null;\n this.photo = null;\n this.photoLoaded = false;\n this.getUserPhoto();\n }\n\n /**\n * Converts a Blob image into a Base64 data URL and stores it in the `photo` property.\n *\n * @param image - The image Blob to be converted.\n */\n private createImageFromBlob(image: Blob): void {\n const reader = new FileReader();\n reader.addEventListener(\n 'load',\n () => {\n this.photo = reader.result;\n },\n false\n );\n if (image) {\n reader.readAsDataURL(image);\n }\n }\n\n private getInitials(value?: string): string {\n return (\n value\n ?.trim()\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, 2)\n .map((part) => part[0])\n .join('')\n .toUpperCase() ?? ''\n );\n }\n\n private getCurrentUserPhotoKey(user: any): string | null {\n return user?.sub || user?.userName || user?.preferred_username || user?.displayName || user?.name || null;\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'logo',\n standalone: true,\n template: `\n <svg\n viewBox=\"0.8516 1.7159 60.0074 64.7142\"\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.height]=\"height + 'px'\"\n [attr.width]=\"width + 'px'\">\n <path\n class=\"primary-logo-color\"\n d=\"M -130.45 -104.78 C -130.45 -105.9 -130.43 -107.01 -130.45 -108.13 C -130.49 -108.52 -130.28 -108.9 -129.92 -109.07 C -125.87 -111.4 -121.82 -113.74 -117.77 -116.08 C -115.7 -117.26 -113.63 -118.45 -111.58 -119.67 C -111.26 -119.89 -110.83 -119.89 -110.51 -119.67 C -101.66 -114.53 -92.787 -109.41 -83.915 -104.29 C -83.752 -104.2 -83.479 -104.16 -83.475 -103.94 C -83.472 -103.72 -83.766 -103.65 -83.947 -103.54 C -86.326 -102.16 -88.716 -100.79 -91.092 -99.39 C -91.377 -99.18 -91.761 -99.18 -92.046 -99.39 C -98.211 -102.98 -104.38 -106.55 -110.56 -110.12 C -110.85 -110.33 -111.23 -110.33 -111.52 -110.12 C -114.88 -108.16 -118.25 -106.22 -121.63 -104.28 C -122.01 -104.11 -122.24 -103.71 -122.2 -103.3 C -122.18 -101.11 -122.2 -98.922 -122.2 -96.736 C -122.19 -95.98 -122.21 -95.98 -122.84 -96.335 C -125.2 -97.7 -127.57 -99.07 -129.93 -100.42 C -130.27 -100.57 -130.49 -100.92 -130.46 -101.3 C -130.43 -102.46 -130.45 -103.62 -130.45 -104.78 Z\"\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\n <path\n class=\"primary-logo-color\"\n d=\"M -70.504 -100.94 L -70.504 -90.438 C -70.447 -89.98 -70.692 -89.537 -71.11 -89.342 C -78.942 -84.839 -86.769 -80.325 -94.592 -75.8 C -95.635 -75.2 -96.684 -74.612 -97.713 -73.988 C -98.17 -73.708 -98.255 -73.846 -98.255 -74.314 L -98.255 -82.785 C -98.268 -83.116 -98.07 -83.419 -97.762 -83.541 C -92.003 -86.86 -86.269 -90.236 -80.468 -93.47 C -79.181 -94.179 -78.667 -94.934 -78.731 -96.441 C -78.869 -99.76 -78.791 -103.09 -78.755 -106.42 C -78.694 -107 -79.02 -107.56 -79.56 -107.8 C -81.436 -108.83 -83.28 -109.93 -85.138 -110.99 C -85.734 -111.34 -85.734 -111.34 -85.113 -111.7 C -82.748 -113.07 -80.379 -114.43 -78.021 -115.82 C -77.707 -116.05 -77.283 -116.06 -76.957 -115.84 C -74.962 -114.66 -72.953 -113.5 -70.929 -112.37 C -70.62 -112.19 -70.456 -111.84 -70.521 -111.49 C -70.514 -107.99 -70.508 -104.48 -70.504 -100.94 Z\"\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\n <path\n class=\"primary-logo-color\"\n d=\"M -108.68 -85.743 L -108.68 -75.169 C -108.72 -74.754 -108.5 -74.358 -108.12 -74.179 C -104.77 -72.267 -101.44 -70.339 -98.117 -68.396 C -97.762 -68.141 -97.284 -68.141 -96.929 -68.396 C -95.028 -69.527 -93.096 -70.598 -91.195 -71.725 C -90.667 -72.041 -90.581 -71.892 -90.581 -71.371 C -90.596 -68.591 -90.596 -65.811 -90.581 -63.03 C -90.551 -62.7 -90.729 -62.386 -91.028 -62.243 C -93.083 -61.073 -95.13 -59.891 -97.17 -58.697 C -97.436 -58.537 -97.775 -58.569 -98.007 -58.775 C -102.74 -61.517 -107.47 -64.254 -112.22 -66.984 C -113.63 -67.796 -115.01 -68.615 -116.42 -69.406 C -116.77 -69.561 -116.97 -69.913 -116.94 -70.286 C -116.93 -80.555 -116.93 -90.823 -116.94 -101.09 C -116.94 -101.63 -116.86 -101.75 -116.35 -101.44 C -113.98 -100.05 -111.59 -98.667 -109.19 -97.303 C -108.84 -97.135 -108.62 -96.76 -108.66 -96.367 C -108.68 -92.833 -108.69 -89.291 -108.68 -85.743 Z\"\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\n <path\n class=\"secondary-logo-color\"\n d=\"M -122.18 -85.807 L -122.18 -82.129 C -122.18 -81.637 -122.34 -81.615 -122.72 -81.839 C -125.16 -83.257 -127.6 -84.667 -130.05 -86.069 C -130.35 -86.219 -130.53 -86.535 -130.5 -86.867 L -130.5 -94.09 C -130.5 -94.64 -130.34 -94.679 -129.89 -94.417 C -127.49 -92.998 -125.09 -91.607 -122.67 -90.243 C -122.35 -90.103 -122.15 -89.772 -122.18 -89.42 C -122.21 -88.214 -122.18 -87.012 -122.18 -85.807 Z M -82.688 -119.15 C -83.954 -118.41 -85.17 -117.7 -86.365 -117.02 C -87.748 -116.22 -89.138 -115.44 -90.514 -114.63 C -90.761 -114.45 -91.093 -114.45 -91.34 -114.63 C -93.432 -115.86 -95.535 -117.07 -97.649 -118.27 C -98.053 -118.5 -98.191 -118.63 -97.67 -118.93 C -95.216 -120.32 -92.776 -121.74 -90.337 -123.15 C -90.134 -123.33 -89.845 -123.36 -89.61 -123.23 L -82.918 -119.33 C -82.862 -119.28 -82.812 -119.24 -82.688 -119.15 Z M -85.365 -65.616 L -85.365 -72.062 L -85.365 -74.622 C -85.403 -74.928 -85.24 -75.223 -84.961 -75.353 C -82.886 -76.534 -80.83 -77.736 -78.77 -78.931 C -78.174 -79.286 -78.135 -79.257 -78.135 -78.576 L -78.135 -70.303 C -78.135 -69.991 -78.135 -69.711 -78.468 -69.52 C -80.656 -68.275 -82.833 -67.013 -85.014 -65.761 C -85.127 -65.704 -85.245 -65.655 -85.365 -65.616 Z\"\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\n </svg>\n `,\n styles: [\n `\n .primary-logo-color {\n fill: var(--primary-color);\n }\n\n .secondary-logo-color {\n fill: var(--p-primary-600);\n }\n `\n ]\n})\nexport class LogoComponent {\n @Input() width: number;\n @Input() height: number;\n}\n","import { Injectable, Type, InjectionToken, inject } from '@angular/core';\nimport { LogoComponent } from '../components/logo/logo.component';\nimport { Provider } from '@angular/core';\n\nexport const LOGO_COMPONENT_TOKEN = new InjectionToken<Type<any>>('LOGO_COMPONENT_TOKEN');\n\nexport function provideLogoComponent(component: Type<any>): Provider {\n return {\n provide: LOGO_COMPONENT_TOKEN,\n useValue: component\n };\n}\n\n@Injectable({ providedIn: 'root' })\nexport class LogoService {\n private customLogoComponent = inject(LOGO_COMPONENT_TOKEN, { optional: true });\n\n getLogoComponent(): Type<any> {\n return this.customLogoComponent || LogoComponent;\n }\n}\n","import { inject, Injectable, InjectionToken, Provider } from '@angular/core';\n\n/**\n * Application information value. A function or a signal is read on every change detection,\n * so it can return a localized value.\n */\nexport type AppInfoValue = string | (() => string);\n\n/**\n * Application information displayed by the shell components.\n */\nexport interface AppInfo {\n /**\n * Application version, for example generated at build time from package.json.\n */\n version?: AppInfoValue;\n\n /**\n * Application name displayed in the footer.\n */\n footer?: AppInfoValue;\n\n /**\n * Application name displayed in the top bar.\n */\n title?: AppInfoValue;\n}\n\nexport const APP_INFO_TOKEN = new InjectionToken<AppInfo>('APP_INFO_TOKEN');\n\n/**\n * Provides application information instead of the `app-info.*` translation keys.\n */\nexport function provideAppInfo(appInfo: AppInfo): Provider {\n return {\n provide: APP_INFO_TOKEN,\n useValue: appInfo\n };\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AppInfoService {\n private appInfo = inject(APP_INFO_TOKEN, { optional: true });\n\n /**\n * Returns the provided version or null when it should be taken from translations.\n */\n getVersion(): string | null {\n return this.resolve(this.appInfo?.version);\n }\n\n /**\n * Returns the provided application name or null when it should be taken from translations.\n */\n getFooter(): string | null {\n return this.resolve(this.appInfo?.footer);\n }\n\n /**\n * Returns the provided application name or null when it should be taken from translations.\n */\n getTitle(): string | null {\n return this.resolve(this.appInfo?.title);\n }\n\n private resolve(value: AppInfoValue | undefined): string | null {\n return (typeof value === 'function' ? value() : value) || null;\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport { HttpClient, RequestParams } from \"./http-client\";\nimport {\n ApiExceptionResponse,\n GetNotificationByIdParams,\n GetNotificationByUserParams,\n MarkNotificationAsReadParams,\n UserNotificationCountResponse,\n UserNotificationDto,\n UserNotificationListResponse,\n} from \"./notification-data-contracts\";\n\n@Injectable()\nexport class NotificationApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getNotificationByUser = (\n query: GetNotificationByUserParams,\n params: RequestParams = {},\n ) =>\n this.request<UserNotificationListResponse, ApiExceptionResponse>({\n path: `/api/notification/get-notification-by-user`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n getNotificationCountByUser = (params: RequestParams = {}) =>\n this.request<UserNotificationCountResponse, ApiExceptionResponse>({\n path: `/api/notification/get-notification-count-by-user`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n markNotificationAsRead = (\n { id, ...query }: MarkNotificationAsReadParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/notification/mark-notification-as-read/${id}`,\n method: \"POST\",\n secure: true,\n ...params,\n });\n getNotificationById = (\n query: GetNotificationByIdParams,\n params: RequestParams = {},\n ) =>\n this.request<UserNotificationDto, ApiExceptionResponse>({\n path: `/api/notification/get-notification-by-id`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","import * as signalR from '@microsoft/signalr';\nimport { SecurityService } from './security.service';\nimport { inject, Injectable, signal } from '@angular/core';\nimport { MsgService } from './msg.service';\nimport { NotificationApi } from '../api/notification.api';\n\n@Injectable({ providedIn: 'root' })\nexport class NotificationService {\n private connection: signalR.HubConnection;\n private securityService = inject(SecurityService);\n private msgService = inject(MsgService);\n private notificationApi = inject(NotificationApi);\n unreadNotificationCount = signal<number | undefined>(undefined);\n\n constructor() {\n this.connection = new signalR.HubConnectionBuilder()\n .withUrl('/hubs/notification', {\n withCredentials: true,\n skipNegotiation: true,\n transport: signalR.HttpTransportType.WebSockets\n })\n .configureLogging(signalR.LogLevel.Error)\n .build();\n\n this.connection.on('ReceiveNotification', (notification) => {\n const opt = {\n severity: notification.severity,\n summary: notification.subject,\n detail: notification.message,\n life: 0\n };\n this.msgService.add(opt);\n this.unreadNotificationCount.update((count) => (count ?? 0) + 1);\n });\n\n this.securityService.isAuthenticated().subscribe((authenticated) => {\n if (!authenticated) {\n this.unreadNotificationCount.set(undefined);\n if (this.connection.state !== signalR.HubConnectionState.Disconnected) {\n this.connection.stop();\n }\n return;\n }\n\n this.loadUnreadNotificationCount();\n\n if (this.connection.state === signalR.HubConnectionState.Disconnected) {\n this.connection.start().catch((error) => console.error('Failed to start notification connection', error));\n return;\n }\n\n this.connection.stop().then(() => {\n this.connection.start().catch((error) => console.error('Failed to restart notification connection', error));\n });\n });\n }\n\n loadUnreadNotificationCount(): void {\n this.notificationApi\n .getNotificationCountByUser()\n .then((response) => this.unreadNotificationCount.set(response.count ?? 0))\n .catch((error) => console.error('Failed to load notification count', error));\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, ViewChild, computed, inject } from '@angular/core';\nimport { BadgeModule } from 'primeng/badge';\nimport { ButtonModule } from 'primeng/button';\nimport { PaginatorModule, PaginatorState } from 'primeng/paginator';\nimport { Popover } from 'primeng/popover';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { Tag } from 'primeng/tag';\nimport { Tooltip } from 'primeng/tooltip';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { NotificationApi } from '../../api/notification.api';\nimport { UserNotificationDto } from '../../api/notification-data-contracts';\nimport { MsgService } from '../../services/msg.service';\nimport { NotificationService } from '../../services/notification.service';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/user-notifications.en.json';\nimport ru from './l10n/user-notifications.ru.json';\n\n@Component({\n selector: 'app-user-notifications',\n standalone: true,\n imports: [\n CommonModule,\n BadgeModule,\n ButtonModule,\n PaginatorModule,\n Popover,\n ProgressSpinnerModule,\n Tag,\n Tooltip,\n TranslatePipe\n ],\n template: `\n <button\n class=\"layout-topbar-action relative\"\n id=\"oip-app-topbar-notification-button\"\n type=\"button\"\n [attr.aria-label]=\"'Notifications: ' + unreadNotificationCount()\"\n (click)=\"toggle($event)\">\n <i class=\"pi pi-bell\"></i>\n @if (unreadNotificationCount() > 0) {\n <p-badge\n class=\"absolute -top-1 -right-1\"\n severity=\"danger\"\n [badgeSize]=\"'small'\"\n [value]=\"unreadNotificationBadge()\" />\n }\n </button>\n\n <p-popover #popover styleClass=\"w-[min(92vw,34rem)]\">\n <div class=\"flex items-center justify-between gap-3 mb-4\">\n <div class=\"font-semibold text-lg\">\n {{ 'userNotifications.title' | translate }}\n </div>\n <p-button\n icon=\"pi pi-refresh\"\n rounded=\"true\"\n severity=\"secondary\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"loading\"\n [pTooltip]=\"'userNotifications.refresh' | translate\"\n (onClick)=\"loadNotifications()\"></p-button>\n </div>\n\n @if (loading && notifications.length === 0) {\n <div class=\"flex justify-center py-8\">\n <p-progressSpinner style=\"w-8 h-8\"></p-progressSpinner>\n </div>\n } @else if (notifications.length === 0) {\n <div class=\"text-center py-8 text-surface-500\">\n {{ 'userNotifications.empty' | translate }}\n </div>\n } @else {\n <div class=\"flex flex-col gap-3 max-h-[26rem] overflow-y-auto pr-1\">\n @for (notification of notifications; track notification.notificationUserId) {\n <div class=\"border border-surface-200 dark:border-surface-700 rounded-md p-3\">\n <div class=\"flex items-start justify-between gap-3\">\n <div class=\"min-w-0\">\n <div class=\"font-medium leading-snug break-words\">\n {{ notification.subject }}\n </div>\n <div class=\"text-xs text-surface-500 mt-1\">\n {{ notification.createdAt | date: 'dd.MM.yyyy HH:mm' }}\n </div>\n </div>\n @if (notification.importance) {\n <p-tag\n class=\"shrink-0\"\n [severity]=\"getImportanceSeverity(notification.importance)\"\n [value]=\"notification.importance\"></p-tag>\n }\n </div>\n\n <div class=\"text-sm text-surface-700 dark:text-surface-200 mt-3 whitespace-pre-line break-words\">\n {{ notification.message }}\n </div>\n\n <div class=\"flex justify-end mt-3\">\n <p-button\n icon=\"pi pi-check\"\n size=\"small\"\n [label]=\"'userNotifications.markAsRead' | translate\"\n [loading]=\"readingNotificationId === notification.notificationUserId\"\n (onClick)=\"markAsRead(notification)\"></p-button>\n </div>\n </div>\n }\n </div>\n\n <p-paginator\n class=\"mt-3\"\n [first]=\"skip\"\n [rows]=\"take\"\n [rowsPerPageOptions]=\"[5, 10, 20]\"\n [totalRecords]=\"totalCount\"\n (onPageChange)=\"onPageChange($event)\"></p-paginator>\n }\n </p-popover>\n `\n})\nexport class UserNotificationsComponent {\n private readonly translations = provideTranslations({ en, ru });\n\n @ViewChild('popover') private popover?: Popover;\n\n protected notifications: UserNotificationDto[] = [];\n protected totalCount = 0;\n protected skip = 0;\n protected take = 5;\n protected loading = false;\n protected readingNotificationId?: number;\n\n private readonly notificationApi = inject(NotificationApi);\n private readonly notificationService = inject(NotificationService);\n private readonly msgService = inject(MsgService);\n private readonly translateService = inject(TranslateService);\n\n protected readonly unreadNotificationCount = computed(() => this.notificationService.unreadNotificationCount() ?? 0);\n protected readonly unreadNotificationBadge = computed(() => {\n const count = this.unreadNotificationCount();\n\n return count > 99 ? '99+' : count.toString();\n });\n\n protected async toggle(event: Event): Promise<void> {\n this.popover?.toggle(event);\n await this.loadNotifications();\n }\n\n async loadNotifications(): Promise<void> {\n this.loading = true;\n\n try {\n const response = await this.notificationApi.getNotificationByUser({\n skip: this.skip,\n take: this.take,\n unreadOnly: true\n });\n\n this.notifications = response.notifications ?? [];\n this.totalCount = response.totalCount ?? 0;\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.loading = false;\n }\n }\n\n async onPageChange(event: PaginatorState): Promise<void> {\n this.skip = event.first ?? 0;\n this.take = event.rows ?? this.take;\n await this.loadNotifications();\n }\n\n async markAsRead(notification: UserNotificationDto): Promise<void> {\n if (!notification.notificationUserId) {\n return;\n }\n\n this.readingNotificationId = notification.notificationUserId;\n\n try {\n await this.notificationApi.markNotificationAsRead({ id: notification.notificationUserId });\n this.msgService.success(this.translateService.instant('userNotifications.markedAsRead'));\n this.notificationService.loadUnreadNotificationCount();\n\n if (this.notifications.length === 1 && this.skip > 0) {\n this.skip = Math.max(this.skip - this.take, 0);\n }\n\n await this.loadNotifications();\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.readingNotificationId = undefined;\n }\n }\n\n protected getImportanceSeverity(importance: string): 'success' | 'info' | 'warn' | 'danger' | 'secondary' {\n switch (importance) {\n case 'Critical':\n case 'High':\n return 'danger';\n case 'Medium':\n return 'warn';\n case 'Low':\n return 'info';\n default:\n return 'secondary';\n }\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n ApiExceptionResponse,\n ApplicationRegistryItemDto,\n DeleteApplicationRegistryItemParams,\n GetApplicationRegistryItemByCodeParams,\n UpdateApplicationRegistryItemParams,\n} from \"./applications-data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class ApplicationsApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getApplicationRegistryItems = (params: RequestParams = {}) =>\n this.request<ApplicationRegistryItemDto[], ApiExceptionResponse>({\n path: `/api/applications/get-application-registry-items`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getApplicationRegistryItemByCode = (\n { code, ...query }: GetApplicationRegistryItemByCodeParams,\n params: RequestParams = {},\n ) =>\n this.request<any, ApiExceptionResponse>({\n path: `/api/applications/get-application-registry-item-by-code/${code}`,\n method: \"GET\",\n secure: true,\n ...params,\n });\n createApplicationRegistryItem = (\n data: ApplicationRegistryItemDto,\n params: RequestParams = {},\n ) =>\n this.request<any, ApiExceptionResponse>({\n path: `/api/applications/create-application-registry-item`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n updateApplicationRegistryItem = (\n { code, ...query }: UpdateApplicationRegistryItemParams,\n data: ApplicationRegistryItemDto,\n params: RequestParams = {},\n ) =>\n this.request<any, ApiExceptionResponse>({\n path: `/api/applications/update-application-registry-item/${code}`,\n method: \"PUT\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n deleteApplicationRegistryItem = (\n { code, ...query }: DeleteApplicationRegistryItemParams,\n params: RequestParams = {},\n ) =>\n this.request<any, ApiExceptionResponse>({\n path: `/api/applications/delete-application-registry-item/${code}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ApplicationsApi } from '../api/applications.api';\nimport { ApplicationRegistryItemDto } from '../api/applications-data-contracts';\n\n@Injectable()\nexport class ApplicationRegistryService {\n private readonly applicationsApi = inject(ApplicationsApi);\n\n applications: ApplicationRegistryItemDto[] = [];\n currentApplication: ApplicationRegistryItemDto | null = null;\n\n async loadApplications(): Promise<void> {\n this.applications = await this.applicationsApi.getApplicationRegistryItems();\n this.currentApplication = this.applications.find((application) => application.isCurrent) ?? null;\n }\n\n openApplication(application: ApplicationRegistryItemDto): void {\n if (application.isCurrent || !application.baseUrl) {\n return;\n }\n\n window.location.href = application.baseUrl;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MenuItem } from 'primeng/api';\nimport { ButtonModule } from 'primeng/button';\nimport { MenuModule } from 'primeng/menu';\nimport { ApplicationsApi } from '../../api/applications.api';\nimport { ApplicationRegistryItemDto } from '../../api/applications-data-contracts';\nimport { ApplicationRegistryService } from '../../services/application-registry.service';\n\n@Component({\n selector: 'app-topbar-application-switcher',\n standalone: true,\n imports: [CommonModule, ButtonModule, MenuModule, TranslatePipe],\n template: `\n @if (applicationRegistryService.applications.length > 1) {\n <p-button\n class=\"layout-topbar-action\"\n id=\"oip-app-topbar-application-switcher-button\"\n severity=\"secondary\"\n type=\"button\"\n [rounded]=\"true\"\n [text]=\"true\"\n (click)=\"applicationMenu.toggle($event)\">\n <i [ngClass]=\"applicationRegistryService.currentApplication?.icon || 'pi pi-th-large'\"></i>\n <span class=\"ml-2 hidden md:inline\">\n {{ applicationRegistryService.currentApplication?.displayName || ('topbar.applications' | translate) }}\n </span>\n </p-button>\n <p-menu #applicationMenu [model]=\"applicationMenuItems\" [popup]=\"true\" />\n }\n `,\n providers: [ApplicationsApi, ApplicationRegistryService]\n})\nexport class AppTopbarApplicationSwitcherComponent implements OnInit {\n protected applicationMenuItems: MenuItem[] = [];\n protected readonly applicationRegistryService = inject(ApplicationRegistryService);\n\n async ngOnInit(): Promise<void> {\n try {\n await this.applicationRegistryService.loadApplications();\n this.applicationMenuItems = this.applicationRegistryService.applications.map((application) =>\n this.createApplicationMenuItem(application)\n );\n } catch {\n this.applicationMenuItems = [];\n }\n }\n\n private createApplicationMenuItem(application: ApplicationRegistryItemDto): MenuItem {\n return {\n id: `oip-app-switcher-${application.code}`,\n label: application.displayName ?? '',\n icon: application.icon ?? undefined,\n disabled: application.isCurrent,\n command: () => this.applicationRegistryService.openApplication(application)\n };\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { ConfirmationService } from 'primeng/api';\nimport { RouterModule } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { StyleClassModule } from 'primeng/styleclass';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { AppConfiguratorComponent } from '../app-configurator/app-configurator.component';\nimport { SecurityService } from '../../services/security.service';\nimport { TopBarService } from '../../services/top-bar.service';\nimport { Tab, TabList, Tabs } from 'primeng/tabs';\nimport { AvatarModule } from 'primeng/avatar';\nimport { UserService } from '../../services/user.service';\nimport { ButtonModule } from 'primeng/button';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { LogoService } from '../../services/logo.service';\nimport { AppInfoService } from '../../services/app-info.service';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { UserNotificationsComponent } from '../user-notifications/user-notifications.component';\nimport { AppTopbarApplicationSwitcherComponent } from '../top-bar-application-switcher/top-bar-application-switcher.component';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/topbar.en.json';\nimport ru from './l10n/topbar.ru.json';\n\n@Component({\n selector: 'app-topbar',\n standalone: true,\n imports: [\n RouterModule,\n CommonModule,\n StyleClassModule,\n AppConfiguratorComponent,\n Tabs,\n TabList,\n Tab,\n AvatarModule,\n ButtonModule,\n ConfirmDialog,\n UserNotificationsComponent,\n TranslatePipe,\n AppTopbarApplicationSwitcherComponent\n ],\n template: `\n <div class=\"layout-topbar\">\n <p-confirmDialog appendTo=\"body\"/>\n <div class=\"layout-topbar-logo-container\">\n <button class=\"layout-menu-button layout-topbar-action\" (click)=\"layoutService.onMenuToggle()\">\n <i class=\"pi pi-bars\"></i>\n </button>\n <a class=\"layout-topbar-logo\" id=\"oip-app-topbar-logo-link\" routerLink=\"\">\n <ng-container\n *ngComponentOutlet=\"logoService.getLogoComponent(); inputs: { width: 36, height: 36 }\"></ng-container>\n <span>{{ appInfoService.getTitle() ?? ('app-info.title' | translate) }}</span>\n </a>\n </div>\n\n @if (securityService.isAdmin() && topBarService.topBarItems.length > 0) {\n <p-tabs\n class=\"layout-topbar-tabs ml-2\"\n [value]=\"topBarService.activeId\"\n (valueChange)=\"onActiveTabChange($event)\">\n <p-tablist>\n @for (tab of topBarService.availableTopBarItems; track tab.id) {\n <p-tab id=\"oip-app-topbar-tab-{{ tab.id }}\" [value]=\"tab.id\">\n <i class=\"pi {{ tab.icon }}\"></i>\n <span class=\"ml-2\">{{ tab.caption }}</span>\n </p-tab>\n }\n </p-tablist>\n </p-tabs>\n }\n <div class=\"layout-topbar-actions\">\n <div class=\"layout-config-menu\">\n <app-topbar-application-switcher/>\n <app-user-notifications/>\n <p-button\n class=\"layout-topbar-action\"\n id=\"oip-app-topbar-theme-button\"\n severity=\"secondary\"\n type=\"button\"\n [rounded]=\"true\"\n [text]=\"true\"\n (click)=\"toggleDarkMode()\">\n <i\n class=\"pi\"\n [ngClass]=\"{\n 'pi-moon': layoutService.isDarkTheme(),\n 'pi-sun': !layoutService.isDarkTheme()\n }\"></i>\n </p-button>\n <div class=\"relative\">\n <p-button\n class=\"layout-topbar-action layout-topbar-action-highlight\"\n enterActiveClass=\"animate-scalein\"\n enterFromClass=\"hidden\"\n id=\"oip-app-topbar-palette-button\"\n leaveActiveClass=\"animate-fadeout\"\n leaveToClass=\"hidden\"\n pStyleClass=\"@next\"\n [hideOnOutsideClick]=\"true\"\n [rounded]=\"true\">\n <i class=\"pi pi-palette\"></i>\n </p-button>\n <app-configurator/>\n </div>\n </div>\n\n <button\n class=\"layout-topbar-menu-button layout-topbar-action\"\n enterActiveClass=\"animate-scalein\"\n enterFromClass=\"hidden\"\n id=\"oip-app-topbar-menu-expand-button\"\n leaveActiveClass=\"animate-fadeout\"\n leaveToClass=\"hidden\"\n pStyleClass=\"@next\"\n [hideOnOutsideClick]=\"true\">\n <i class=\"pi pi-ellipsis-v\"></i>\n </button>\n\n <div class=\"layout-topbar-menu hidden lg:block\">\n <div class=\"layout-topbar-menu-content\">\n <button\n class=\"layout-topbar-action\"\n id=\"oip-app-topbar-logout-button\"\n type=\"button\"\n (click)=\"confirmLogout()\"\n (keydown)=\"logoutKeyDown($event)\">\n <i class=\"pi pi-sign-out\"></i>\n <span>{{ 'topbar.logout' | translate }}</span>\n </button>\n <button class=\"layout-topbar-action\" routerLink=\"config\">\n <p-avatar\n class=\"p-link flex align-items-center\"\n id=\"oip-app-topbar-user-avatar\"\n shape=\"circle\"\n size=\"normal\"\n [image]=\"userService.photoLoaded ? userService.photo : null\"\n >{{ !userService.photoLoaded ? userService.shortLabel : null }}\n </p-avatar>\n <span class=\"ml-2\">{{ 'topbar.profile' | translate }}</span>\n </button>\n </div>\n </div>\n </div>\n </div>`,\n providers: [ConfirmationService]\n})\nexport class AppTopbar {\n private readonly translations = provideTranslations({ en, ru });\n\n securityService = inject(SecurityService);\n topBarService = inject(TopBarService);\n userService = inject(UserService);\n layoutService = inject(LayoutService);\n logoService = inject(LogoService);\n appInfoService = inject(AppInfoService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly translateService = inject(TranslateService);\n\n onActiveTabChange(value: string | number | undefined) {\n this.topBarService.activeId = value == null ? undefined : String(value);\n }\n\n toggleDarkMode() {\n this.layoutService.layoutConfig.update((state) => ({\n ...state,\n darkTheme: !state.darkTheme\n }));\n }\n\n logoutKeyDown($event: KeyboardEvent) {\n if ($event.key === 'Enter') {\n $event.preventDefault();\n this.confirmLogout();\n }\n }\n\n confirmLogout() {\n this.confirmationService.confirm({\n header: this.translateService.instant('topbar.logoutConfirmHeader'),\n message: this.translateService.instant('topbar.logoutConfirmMessage'),\n icon: 'pi pi-sign-out',\n rejectButtonProps: {\n label: this.translateService.instant('topbar.logoutConfirmCancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('topbar.logoutConfirmAccept'),\n severity: 'danger'\n },\n accept: () => {\n this.securityService.logout();\n }\n });\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { NgComponentOutlet } from '@angular/common';\nimport { LogoService } from '../../services/logo.service';\nimport { AppInfoService } from '../../services/app-info.service';\n\n@Component({\n selector: 'app-footer',\n template: `\n <div class=\"layout-footer\">\n <div class=\"flex justify-center flex-1\">\n <div class=\"mr-2 -my-0.5\">\n <ng-container\n *ngComponentOutlet=\"logoService.getLogoComponent(); inputs: { width: 18, height: 18 }\"></ng-container>\n </div>\n <span class=\"font-medium\">{{ appInfoService.getFooter() ?? ('app-info.footer' | translate) }}</span>\n </div>\n <p class=\"mr-auto\">{{ appInfoService.getVersion() ?? ('app-info.version' | translate) }}</p>\n </div>\n `,\n standalone: true,\n imports: [TranslatePipe, NgComponentOutlet]\n})\nexport class FooterComponent {\n protected logoService = inject(LogoService);\n protected appInfoService = inject(AppInfoService);\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n AddModuleInstanceDto,\n ApiExceptionResponse,\n ChangeOrderParams,\n DeleteModuleInstanceParams,\n EditModuleInstanceDto,\n GetModuleInstanceRightsParams,\n IntKeyValueDto,\n ModuleInstanceDto,\n SetStartModuleParams,\n} from \"./data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class MenuApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n get = (params: RequestParams = {}) =>\n this.request<ModuleInstanceDto[], any>({\n path: `/api/menu/get`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n setStartModule = (\n { id, ...query }: SetStartModuleParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/set-start-module/${id}`,\n method: \"POST\",\n secure: true,\n ...params,\n });\n deleteStartModule = (params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/delete-start-module`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n getModuleInstanceRights = (\n query: GetModuleInstanceRightsParams,\n params: RequestParams = {},\n ) =>\n this.request<string[], ApiExceptionResponse>({\n path: `/api/menu/get-module-instance-rights`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n getAdminMenu = (params: RequestParams = {}) =>\n this.request<ModuleInstanceDto[], any>({\n path: `/api/menu/get-admin-menu`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getModules = (params: RequestParams = {}) =>\n this.request<IntKeyValueDto[], any>({\n path: `/api/menu/get-modules`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n addModuleInstance = (\n data: AddModuleInstanceDto,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/add-module-instance`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n editModuleInstance = (\n data: EditModuleInstanceDto,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/edit-module-instance`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n deleteModuleInstance = (\n query: DeleteModuleInstanceParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/delete-module-instance`,\n method: \"DELETE\",\n query: query,\n secure: true,\n ...params,\n });\n changeOrder = (query: ChangeOrderParams, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/change-order`,\n method: \"POST\",\n query: query,\n secure: true,\n ...params,\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { MenuChangeEvent } from '../events/menu-change.event';\nimport { MenuApi } from '../api/menu.api';\nimport { AppTitleService } from './app-title.service';\nimport { LayoutService } from './app.layout.service';\nimport {\n AddModuleInstanceDto,\n DeleteModuleInstanceParams,\n EditModuleInstanceDto,\n ModuleInstanceDto\n} from '../api/data-contracts';\n\n@Injectable()\nexport class MenuService {\n private readonly menuSource = new Subject<MenuChangeEvent>();\n private readonly resetSource = new Subject();\n private readonly titleService = inject(AppTitleService);\n private readonly menuDataService = inject(MenuApi);\n private readonly layoutService = inject(LayoutService);\n menuSource$ = this.menuSource.asObservable();\n resetSource$ = this.resetSource.asObservable();\n contextMenuItem: any;\n\n public menu: ModuleInstanceDto[] = [];\n\n get adminMode(): boolean {\n return this.layoutService.adminMode();\n }\n\n set adminMode(value: boolean) {\n this.layoutService.layoutConfig.update((config) => ({ ...config, adminMode: value }));\n }\n\n async loadMenu() {\n this.menu = this.adminMode ? await this.getAdminMenu() : await this.getMenu();\n }\n\n /**\n * Handles changes in the menu state.\n * @param {MenuChangeEvent} event - The event containing information about the menu state change.\n * @return {void}\n */\n onMenuStateChange(event: MenuChangeEvent): void {\n this.menuSource.next(event);\n if (!event.item.items?.length) {\n this.titleService.setTitle(event.item.label);\n }\n }\n\n reset() {\n this.resetSource.next(true);\n }\n\n getMenu() {\n return this.menuDataService.get();\n }\n\n getAdminMenu() {\n return this.menuDataService.getAdminMenu();\n }\n\n getModules() {\n return this.menuDataService.getModules();\n }\n\n addModuleInstance(addModuleInstance: AddModuleInstanceDto) {\n return this.menuDataService.addModuleInstance(addModuleInstance as AddModuleInstanceDto);\n }\n\n deleteItem(moduleInstanceId: number) {\n return this.menuDataService.deleteModuleInstance({ id: moduleInstanceId } as DeleteModuleInstanceParams);\n }\n\n editModuleInstance(item: EditModuleInstanceDto) {\n return this.menuDataService.editModuleInstance(item);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Router, UrlTree } from '@angular/router';\nimport { ModuleInstanceDto } from '../api/data-contracts';\nimport { MenuApi } from '../api/menu.api';\nimport { SecurityService } from './security.service';\n\n/**\n * Resolves the module instance the current user lands on when no explicit route is requested.\n *\n * The menu returned by the backend is already filtered by the rights of the current user, so the\n * first navigable leaf of that menu is always a module the user may open. When the user picked a\n * start module explicitly it comes back marked with `isStart`, and a module that was deleted or\n * whose rights were revoked simply disappears from the menu, which falls back to the first leaf.\n *\n * The resolved url is cached per user and dropped whenever the authenticated user changes or the\n * start module is reassigned.\n */\n@Injectable({ providedIn: 'root' })\nexport class StartPageService {\n private readonly menuApi = inject(MenuApi);\n private readonly router = inject(Router);\n private readonly securityService = inject(SecurityService);\n private request: Promise<UrlTree | null> | undefined = undefined;\n private cachedIdentity: string | undefined = undefined;\n\n constructor() {\n this.securityService.payload.subscribe((payload) => {\n // The menu depends on both the user and the roles of the current session.\n const roles: string[] = payload?.realm_access?.roles ?? [];\n const identity = `${payload?.preferred_username ?? ''}|${[...roles].sort().join(',')}`;\n if (identity !== this.cachedIdentity) {\n this.cachedIdentity = identity;\n this.clearCache();\n }\n });\n }\n\n /**\n * Gets the url of the start module instance.\n *\n * @returns The url tree to navigate to, or `null` when the user has no module available.\n */\n public resolveStartUrl(): Promise<UrlTree | null> {\n if (this.request) {\n return this.request;\n }\n\n this.request = this.loadStartUrl().catch((error) => {\n this.request = undefined;\n throw error;\n });\n\n return this.request;\n }\n\n /**\n * Makes the module instance the start page of the current user.\n *\n * @param moduleInstanceId Module instance to open by default.\n */\n public async setStartModule(moduleInstanceId: number): Promise<void> {\n await this.menuApi.setStartModule({ id: moduleInstanceId });\n this.clearCache();\n }\n\n /**\n * Clears the start page of the current user, falling back to the first available module.\n */\n public async clearStartModule(): Promise<void> {\n await this.menuApi.deleteStartModule();\n this.clearCache();\n }\n\n /**\n * Drops the cached url, for example after the menu was changed.\n */\n public clearCache(): void {\n this.request = undefined;\n }\n\n private async loadStartUrl(): Promise<UrlTree | null> {\n const menu = (await this.menuApi.get()) ?? [];\n const item = this.findStartItem(menu);\n\n return item ? this.router.createUrlTree(item.routerLink!) : null;\n }\n\n private findStartItem(menu: ModuleInstanceDto[]): ModuleInstanceDto | null {\n const leaves = this.collectNavigableLeaves(menu);\n return leaves.find((item) => item.isStart) ?? leaves[0] ?? null;\n }\n\n private collectNavigableLeaves(items: ModuleInstanceDto[]): ModuleInstanceDto[] {\n const result: ModuleInstanceDto[] = [];\n\n for (const item of [...items].sort((a, b) => (a.order ?? 0) - (b.order ?? 0))) {\n if (item.separator) {\n continue;\n }\n\n if (item.items?.length) {\n // A folder is never a landing page itself, its children are.\n result.push(...this.collectNavigableLeaves(item.items));\n continue;\n }\n\n // A module without a real route would resolve back to the empty path and loop.\n if (item.routerLink?.some((segment) => !!segment && segment !== '/')) {\n result.push(item);\n }\n }\n\n return result;\n }\n}\n","import { ChangeDetectorRef, Component, HostBinding, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { NavigationEnd, Router, RouterLinkActive, RouterLink } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { MenuService } from '../../services/app.menu.service';\nimport { RippleModule } from 'primeng/ripple';\nimport { NgClass } from '@angular/common';\nimport { ConfirmationService, ContextMenuService, MenuItem, MenuItemCommandEvent, PrimeIcons } from 'primeng/api';\nimport { MenuItemCreateDialogComponent } from './menu-item-create-dialog.component';\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\nimport { MsgService } from '../../services/msg.service';\nimport { MenuItemEditDialogComponent } from './menu-item-edit-dialog.component';\nimport { ContextMenuItemDto } from '../../dtos/context-menu-item.dto';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { MenuApi } from '../../api/menu.api';\nimport { ChangeOrderParams, DeleteModuleInstanceParams, ModuleInstanceDto } from '../../api/data-contracts';\nimport { SecurityService } from '../../services/security.service';\nimport { StartPageService } from '../../services/start-page.service';\n\ninterface MenuItemComponentTranslation {\n delete: string;\n edit: string;\n new: string;\n deleteItemConfirmHeader: string;\n deleteItemConfirmMessage: string;\n deleteItemSuccessMessage: string;\n deleteItemConfirmRejectButtonPropsLabel: string;\n deleteItemConfirmAcceptButtonPropsLabel: string;\n moveUp: string;\n moveDown: string;\n setStartModule: string;\n unsetStartModule: string;\n setStartModuleSuccessMessage: string;\n unsetStartModuleSuccessMessage: string;\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[app-menuitem]',\n template: `\n <ng-container>\n <p-confirm-dialog />\n @if (root && item.visible !== false) {\n <div class=\"layout-menuitem-root-text\" (contextmenu)=\"onContextMenu($event, item)\">\n {{ item.label }}\n </div>\n }\n @if ((!item.routerLink || item.items) && item.visible !== false) {\n <a\n pRipple\n tabindex=\"0\"\n [attr.href]=\"item.url\"\n [attr.target]=\"item.target\"\n [ngClass]=\"item.class\"\n (click)=\"itemClick($event)\"\n (contextmenu)=\"onContextMenu($event, item)\">\n <i class=\"layout-menuitem-icon\" [ngClass]=\"item.icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\n @if (item.items) {\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"></i>\n }\n </a>\n }\n @if (item.routerLink && !item.items && item.visible !== false) {\n <a\n pRipple\n routerLinkActive=\"active-route\"\n tabindex=\"0\"\n [attr.target]=\"item.target\"\n [fragment]=\"item.fragment\"\n [ngClass]=\"item.class\"\n [preserveFragment]=\"item.preserveFragment\"\n [queryParams]=\"item.queryParams\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [replaceUrl]=\"item.replaceUrl\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActiveOptions]=\"\n item.routerLinkActiveOptions || {\n paths: 'exact',\n queryParams: 'ignored',\n matrixParams: 'ignored',\n fragment: 'ignored'\n }\n \"\n [skipLocationChange]=\"item.skipLocationChange\"\n [state]=\"item.state\"\n (click)=\"itemClick($event)\"\n (contextmenu)=\"onContextMenu($event, item)\">\n <i class=\"layout-menuitem-icon\" [ngClass]=\"item.icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\n @if (item.items) {\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"></i>\n }\n </a>\n }\n\n @if (item.items && item.visible !== false) {\n <ul class=\"layout-submenu\" [class.layout-submenu-expanded]=\"isSubmenuExpanded\">\n @for (child of item.items; track child; let i = $index) {\n <li\n app-menuitem\n [class]=\"child.badgeClass\"\n [contextMenu]=\"contextMenu\"\n [index]=\"i\"\n [item]=\"child\"\n [menuItemCreateDialogComponent]=\"menuItemCreateDialogComponent\"\n [menuItemEditDialogComponent]=\"menuItemEditDialogComponent\"\n [parentKey]=\"key\"></li>\n }\n </ul>\n }\n </ng-container>\n `,\n imports: [RippleModule, NgClass, RouterLinkActive, RouterLink, ContextMenuModule, ConfirmDialog],\n providers: [ConfirmationService]\n})\nexport class MenuItemComponent implements OnInit, OnDestroy {\n private readonly layoutService = inject(LayoutService);\n private readonly translateService = inject(TranslateService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly msgService = inject(MsgService);\n private readonly menuDataService = inject(MenuApi);\n private readonly securityService = inject(SecurityService);\n private readonly startPageService = inject(StartPageService);\n\n @Input() item: ContextMenuItemDto;\n @Input() index!: number;\n @Input() @HostBinding('class.layout-root-menuitem') root!: boolean;\n @Input() parentKey!: string;\n @Input() menuItemCreateDialogComponent: MenuItemCreateDialogComponent;\n @Input() menuItemEditDialogComponent: MenuItemEditDialogComponent;\n @Input() contextMenu: ContextMenu;\n\n private active = false;\n private subscriptions: Subscription[] = [];\n private localization: MenuItemComponentTranslation = {} as MenuItemComponentTranslation;\n\n protected key: string = '';\n\n constructor(\n private readonly cd: ChangeDetectorRef,\n public router: Router,\n private readonly menuService: MenuService\n ) {\n this.subscriptions.push(\n this.menuService.menuSource$.subscribe((value) => {\n Promise.resolve(null).then(() => {\n if (value.routeEvent && (value.key === this.key || value.key.startsWith(this.key + '-'))) {\n this.active = true;\n }\n });\n })\n );\n\n this.subscriptions.push(\n this.menuService.resetSource$.subscribe(() => {\n this.active = false;\n })\n );\n\n this.subscriptions.push(\n this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe((params) => {\n if (this.item.routerLink) {\n this.updateActiveStateFromRoute();\n }\n })\n );\n\n this.subscriptions.push(\n this.translateService.get('menuItemComponent').subscribe((value: MenuItemComponentTranslation) => {\n this.localization = value;\n })\n );\n }\n\n ngOnInit() {\n this.key = this.parentKey ? this.parentKey + '-' + this.index : String(this.index);\n if (this.item.routerLink) {\n this.updateActiveStateFromRoute();\n }\n }\n\n updateActiveStateFromRoute() {\n const activeRoute = this.router.isActive(this.item.routerLink[0], {\n paths: 'exact',\n queryParams: 'ignored',\n matrixParams: 'ignored',\n fragment: 'ignored'\n });\n\n if (activeRoute) {\n this.menuService.onMenuStateChange({\n key: this.key,\n item: this.item,\n routeEvent: true\n });\n }\n }\n\n itemClick(event: Event) {\n // avoid processing disabled items\n if (this.item.disabled) {\n event.preventDefault();\n return;\n }\n\n // execute command\n if (this.item.command) {\n this.item.command({ originalEvent: event, item: this.item });\n }\n\n // toggle active state\n if (this.item.items) {\n this.active = !this.active;\n }\n\n this.menuService.onMenuStateChange({ key: this.key, item: this.item });\n }\n\n get isSubmenuExpanded() {\n return this.root || this.active;\n }\n\n @HostBinding('class.active-menuitem')\n get activeClass() {\n return this.active && !this.root;\n }\n\n ngOnDestroy() {\n this.subscriptions.map((s) => s.unsubscribe());\n }\n\n private newClick(e: MenuItemCommandEvent) {\n this.menuItemCreateDialogComponent.showDialog();\n }\n\n onContextMenu($event: MouseEvent, item: any) {\n const startModuleItems = this.getStartModuleItems(item);\n // Choosing a start page is available to every user, the rest of the menu is administrative.\n if (!this.securityService.isAdmin()) {\n if (startModuleItems.length === 0) {\n return;\n }\n\n $event.stopPropagation();\n $event.preventDefault();\n\n this.menuService.contextMenuItem = item;\n this.contextMenu.model = startModuleItems;\n this.contextMenu.show($event);\n return;\n }\n\n $event.stopPropagation();\n $event.preventDefault();\n\n this.menuService.contextMenuItem = item;\n this.contextMenu.model = [\n ...startModuleItems,\n { separator: true, visible: startModuleItems.length > 0 },\n {\n label: this.localization.new,\n icon: PrimeIcons.PLUS,\n command: (event) => this.newClick(event)\n },\n {\n label: this.localization.edit,\n icon: PrimeIcons.FILE_EDIT,\n command: (event) => this.editClick(event)\n },\n { separator: true },\n {\n label: this.localization.delete,\n icon: PrimeIcons.TRASH,\n command: (event) => this.deleteItem(event)\n },\n { separator: true, visible: this.hasVisibleNext(item) || this.hasVisiblePrev(item) },\n {\n label: this.localization.moveUp,\n icon: PrimeIcons.ANGLE_UP,\n command: (event) => {\n this.moveUp(item);\n $event.stopPropagation();\n $event.preventDefault();\n },\n visible: this.hasVisiblePrev(item)\n },\n {\n label: this.localization.moveDown,\n icon: PrimeIcons.ANGLE_DOWN,\n command: (event) => {\n this.moveDown(item);\n $event.stopPropagation();\n $event.preventDefault();\n },\n visible: this.hasVisibleNext(item)\n }\n ];\n this.contextMenu.show($event);\n }\n\n /**\n * Builds the start page entries of the context menu. Only a navigable leaf can be a start page.\n */\n private getStartModuleItems(item: ContextMenuItemDto): MenuItem[] {\n if (!item?.routerLink || item.items?.length) {\n return [];\n }\n\n return item.isStart\n ? [\n {\n label: this.localization.unsetStartModule,\n icon: PrimeIcons.STAR,\n command: () => this.clearStartModule()\n }\n ]\n : [\n {\n label: this.localization.setStartModule,\n icon: PrimeIcons.STAR_FILL,\n command: () => this.setStartModule(item)\n }\n ];\n }\n\n private async setStartModule(item: ContextMenuItemDto) {\n await this.startPageService.setStartModule(item.moduleInstanceId);\n this.msgService.success(this.localization.setStartModuleSuccessMessage);\n await this.menuService.loadMenu();\n }\n\n private async clearStartModule() {\n await this.startPageService.clearStartModule();\n this.msgService.success(this.localization.unsetStartModuleSuccessMessage);\n await this.menuService.loadMenu();\n }\n\n private deleteItem(event: MenuItemCommandEvent) {\n this.confirmationService.confirm({\n header: this.localization.deleteItemConfirmHeader,\n message: this.localization.deleteItemConfirmMessage,\n icon: PrimeIcons.TRASH,\n rejectButtonProps: {\n label: this.localization.deleteItemConfirmRejectButtonPropsLabel,\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.localization.deleteItemConfirmAcceptButtonPropsLabel,\n severity: 'danger'\n },\n accept: async () => {\n await this.menuDataService.deleteModuleInstance({\n id: this.menuService.contextMenuItem?.moduleInstanceId\n } as DeleteModuleInstanceParams);\n this.msgService.success(this.localization.deleteItemSuccessMessage);\n await this.menuService.loadMenu();\n }\n });\n }\n\n private editClick(event: MenuItemCommandEvent) {\n this.menuItemEditDialogComponent.showDialog().then();\n }\n\n moveUp(currentItem: any) {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId === currentItem.moduleInstanceId);\n\n if (currentIndex > 0) {\n const prevVisibleItem = this.findPrevVisibleItem(items, currentIndex);\n if (prevVisibleItem !== null) {\n this.swapItems(items[currentIndex], items[prevVisibleItem]);\n }\n }\n }\n\n moveDown(currentItem: any) {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId === currentItem.moduleInstanceId);\n\n if (currentIndex < items.length - 1) {\n const nextVisibleIndex = this.findNextVisibleIndex(items, currentIndex);\n if (nextVisibleIndex !== -1) {\n this.swapItems(items[currentIndex], items[nextVisibleIndex]);\n }\n }\n }\n\n private findPrevVisibleItem(items: any[], currentIndex: number): number {\n for (let i = currentIndex - 1; i >= 0; i--) {\n if (items[i].visible !== false) {\n return i;\n }\n }\n return -1;\n }\n\n private findNextVisibleIndex(items: any[], currentIndex: number): number {\n for (let i = currentIndex + 1; i < items.length; i++) {\n if (items[i].visible !== false) {\n return i;\n }\n }\n return -1;\n }\n\n private swapItems(firstModule: any, secondModule: any) {\n const items = this.getItems(firstModule);\n\n const firstIndex = items.findIndex((item) => item.moduleInstanceId === firstModule.moduleInstanceId);\n const secondIndex = items.findIndex((item) => item.moduleInstanceId === secondModule.moduleInstanceId);\n\n [items[firstIndex], items[secondIndex]] = [items[secondIndex], items[firstIndex]];\n\n this.menuDataService\n .changeOrder({\n firstModuleId: firstModule.moduleInstanceId,\n secondModuleId: secondModule.moduleInstanceId\n } as ChangeOrderParams)\n .then();\n }\n\n hasVisiblePrev(currentItem: any): boolean {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId == currentItem.moduleInstanceId);\n return this.findPrevVisibleItem(items, currentIndex) !== -1;\n }\n\n private getItems(currentItem: any): ModuleInstanceDto[] {\n if (!currentItem.parentId) {\n return this.menuService.menu;\n }\n\n return this.findItemByModuleInstanceId(this.menuService.menu, currentItem.parentId)?.items ?? [];\n }\n\n private findItemByModuleInstanceId(items: ModuleInstanceDto[], moduleInstanceId: number): ModuleInstanceDto | null {\n for (const item of items) {\n if (item.moduleInstanceId == moduleInstanceId) {\n return item;\n }\n\n const foundItem = this.findItemByModuleInstanceId(item.items ?? [], moduleInstanceId);\n if (foundItem) {\n return foundItem;\n }\n }\n\n return null;\n }\n\n hasVisibleNext(currentItem: any): boolean {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId == currentItem.moduleInstanceId);\n return this.findNextVisibleIndex(items, currentIndex) !== -1;\n }\n}\n","import { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { PrimeIcons } from 'primeng/api';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { AddModuleInstanceDto, IntKeyValueDto } from '../../api/data-contracts';\nimport { MenuApi } from '../../api/menu.api';\nimport { MenuService } from '../../services/app.menu.service';\nimport { MsgService } from '../../services/msg.service';\n\ntype PrimeIconOption = {\n label: string;\n value: string;\n};\n\n@Component({\n selector: 'menu-item-create-dialog',\n standalone: true,\n imports: [ButtonModule, DialogModule, InputTextModule, SelectModule, FormsModule, TranslatePipe],\n template: `\n <p-dialog\n header=\"{{ 'menuItemCreateDialogComponent.header' | translate }}\"\n [modal]=\"true\"\n [style]=\"{ width: '40rem' }\"\n [(visible)]=\"visible\"\n (keydown.enter)=\"save()\">\n @if (menuService.contextMenuItem) {\n <div class=\"flex items-center gap-4 mb-4 mt-1\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-dialog-parent-input\">\n {{ 'menuItemCreateDialogComponent.parentLabel' | translate }}\n </label>\n <input\n autocomplete=\"off\"\n class=\"flex-auto\"\n disabled\n id=\"oip-menu-item-create-dialog-parent-input\"\n pInputText\n [ngModel]=\"menuService.contextMenuItem?.label\" />\n </div>\n }\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-label\">\n {{ 'menuItemCreateDialogComponent.label' | translate }}\n </label>\n <input autocomplete=\"off\" class=\"flex-auto\" id=\"oip-menu-item-create-label\" pInputText [(ngModel)]=\"label\" />\n </div>\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-module\">\n {{ 'menuItemCreateDialogComponent.module' | translate }}\n </label>\n <p-select\n appendTo=\"body\"\n class=\"flex-auto\"\n filterBy=\"value\"\n filterPlaceholder=\"{{ 'menuItemCreateDialogComponent.searchModule' | translate }}\"\n id=\"oip-menu-item-create-module\"\n optionLabel=\"value\"\n optionValue=\"key\"\n placeholder=\"{{ 'menuItemCreateDialogComponent.selectModule' | translate }}\"\n scrollHeight=\"18rem\"\n [filter]=\"true\"\n [options]=\"modules\"\n [(ngModel)]=\"selectModule\" />\n </div>\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-dialog-icon\">\n {{ 'menuItemCreateDialogComponent.icon' | translate }}\n </label>\n <p-select\n appendTo=\"body\"\n class=\"flex-auto\"\n filterBy=\"label,value\"\n id=\"oip-menu-item-create-dialog-icon\"\n optionLabel=\"label\"\n optionValue=\"value\"\n scrollHeight=\"18rem\"\n [filter]=\"true\"\n [options]=\"iconOptions\"\n [(ngModel)]=\"selectIcon\">\n <ng-template let-icon pTemplate=\"selectedItem\">\n <div class=\"flex items-center gap-2\">\n <i [class]=\"icon.value\"></i>\n <span>{{ icon.label }}</span>\n </div>\n </ng-template>\n <ng-template let-icon pTemplate=\"item\">\n <div class=\"flex items-center gap-2\">\n <i [class]=\"icon.value\"></i>\n <span>{{ icon.label }}</span>\n </div>\n </ng-template>\n </p-select>\n </div>\n <div class=\"flex justify-end gap-2\">\n <p-button\n id=\"oip-menu-item-create-cancel\"\n label=\"{{ 'menuItemCreateDialogComponent.cancel' | translate }}\"\n severity=\"secondary\"\n [disabled]=\"saving\"\n (click)=\"changeVisible()\" />\n <p-button\n id=\"oip-menu-item-create-save\"\n label=\"{{ 'menuItemCreateDialogComponent.save' | translate }}\"\n [disabled]=\"!canSave\"\n [loading]=\"saving\"\n (click)=\"save()\" />\n </div>\n </p-dialog>\n `\n})\nexport class MenuItemCreateDialogComponent implements OnInit {\n protected readonly menuService = inject(MenuService);\n protected readonly menu = inject(MenuApi);\n private readonly msgService = inject(MsgService);\n @Input() visible!: boolean;\n @Output() visibleChange = new EventEmitter<boolean>();\n modules: IntKeyValueDto[] = [];\n iconOptions: PrimeIconOption[] = Object.values(PrimeIcons)\n .filter((icon): icon is string => typeof icon === 'string')\n .map((icon) => ({\n label: icon.replace('pi pi-', ''),\n value: icon\n }))\n .sort((left, right) => left.label.localeCompare(right.label));\n selectModule: any;\n label: string;\n selectIcon: string = 'pi pi-box';\n saving = false;\n\n get canSave(): boolean {\n return !this.saving && !!this.selectModule;\n }\n\n async ngOnInit() {\n this.modules = await this.menu.getModules();\n }\n\n changeVisible() {\n this.visible = !this.visible;\n this.visibleChange.emit(this.visible);\n }\n\n async save() {\n if (this.saving) {\n return;\n }\n\n if (!this.selectModule) {\n return;\n }\n\n const item: AddModuleInstanceDto = {\n moduleId: this.selectModule,\n label: this.label,\n icon: this.selectIcon,\n parentId: this.menuService.contextMenuItem?.moduleInstanceId\n };\n\n this.saving = true;\n try {\n await this.menuService.addModuleInstance(item);\n await this.menuService.loadMenu();\n this.hide();\n } catch (error) {\n this.msgService.errorFromException(error, 'Unexpected error');\n } finally {\n this.saving = false;\n }\n }\n\n hide() {\n this.visible = false;\n this.visibleChange.emit(this.visible);\n }\n\n showDialog() {\n this.visible = true;\n this.visibleChange.emit(this.visible);\n }\n}\n","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { PrimeIcons } from 'primeng/api';\nimport { FormsModule } from '@angular/forms';\nimport { MenuService } from '../../services/app.menu.service';\nimport { MsgService } from '../../services/msg.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { EditModuleInstanceDto } from '../../api/data-contracts';\nimport { SecurityApi } from '../../api/security.api';\n\ntype PrimeIconOption = {\n label: string;\n value: string;\n};\n\n@Component({\n imports: [ButtonModule, DialogModule, InputTextModule, SelectModule, FormsModule, TranslatePipe, MultiSelectModule],\n selector: 'menu-item-edit-dialog',\n standalone: true,\n template: `\n <p-dialog\n header=\"{{ 'menuItemEditDialogComponent.header' | translate }}\"\n [modal]=\"true\"\n [style]=\"{ width: '40rem' }\"\n [(visible)]=\"visible\"\n (keydown.enter)=\"save()\">\n <div class=\"flex items-center gap-4 mb-4 mt-1\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-edit-dialog-menu-input\">\n {{ 'menuItemEditDialogComponent.label' | translate }}\n </label>\n <input\n autocomplete=\"off\"\n class=\"flex-auto\"\n id=\"oip-menu-item-edit-dialog-menu-input\"\n pInputText\n [(ngModel)]=\"item.label\" />\n </div>\n\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-edit-dialog-module\">\n {{ 'menuItemEditDialogComponent.module' | translate }}\n </label>\n <input\n autocomplete=\"off\"\n class=\"flex-auto\"\n disabled\n id=\"oip-menu-item-edit-dialog-module\"\n pInputText\n [ngModel]=\"moduleName\" />\n </div>\n\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-edit-dialog-icon\">\n {{ 'menuItemEditDialogComponent.icon' | translate }}\n </label>\n <p-select\n appendTo=\"body\"\n class=\"flex-auto\"\n filterBy=\"label,value\"\n id=\"oip-menu-item-edit-dialog-icon\"\n optionLabel=\"label\"\n optionValue=\"value\"\n scrollHeight=\"18rem\"\n [filter]=\"true\"\n [options]=\"iconOptions\"\n [(ngModel)]=\"item.icon\">\n <ng-template let-icon pTemplate=\"selectedItem\">\n <div class=\"flex items-center gap-2\">\n <i [class]=\"icon.value\"></i>\n <span>{{ icon.label }}</span>\n </div>\n </ng-template>\n <ng-template let-icon pTemplate=\"item\">\n <div class=\"flex items-center gap-2\">\n <i [class]=\"icon.value\"></i>\n <span>{{ icon.label }}</span>\n </div>\n </ng-template>\n </p-select>\n </div>\n\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"security\">\n {{ 'menuItemEditDialogComponent.security' | translate }}\n </label>\n <p-multiSelect\n appendTo=\"body\"\n class=\"flex-auto\"\n id=\"oip-menu-item-edit-dialog-roles-multi-select\"\n placeholder=\"Select roles\"\n [maxSelectedLabels]=\"10\"\n [options]=\"roles\"\n [(ngModel)]=\"item.viewRoles\" />\n </div>\n\n <div class=\"flex justify-end gap-2\">\n <p-button\n id=\"oip-menu-item-edit-dialog-cancel-edit-button\"\n label=\"{{ 'menuItemEditDialogComponent.cancel' | translate }}\"\n severity=\"secondary\"\n [disabled]=\"saving\"\n (click)=\"changeVisible()\" />\n <p-button\n id=\"oip-menu-item-edit-dialog-save-edit-button\"\n label=\"{{ 'menuItemEditDialogComponent.save' | translate }}\"\n [disabled]=\"saving\"\n [loading]=\"saving\"\n (click)=\"save()\" />\n </div>\n </p-dialog>\n `\n})\nexport class MenuItemEditDialogComponent {\n private readonly menuService = inject(MenuService);\n private readonly securityApi = inject(SecurityApi);\n private readonly msgService = inject(MsgService);\n\n @Input() visible!: boolean;\n @Output() visibleChange = new EventEmitter<boolean>();\n\n roles: string[] = [];\n moduleName = '';\n iconOptions: PrimeIconOption[] = Object.values(PrimeIcons)\n .filter((icon): icon is string => typeof icon === 'string')\n .map((icon) => ({\n label: icon.replace('pi pi-', ''),\n value: icon\n }))\n .sort((left, right) => left.label.localeCompare(right.label));\n item: EditModuleInstanceDto = {\n icon: '',\n label: '',\n viewRoles: [''],\n moduleId: 0,\n moduleInstanceId: 0,\n parentId: 0\n };\n saving = false;\n\n changeVisible() {\n this.visible = !this.visible;\n this.visibleChange.emit(this.visible);\n }\n\n async save() {\n if (this.saving) {\n return;\n }\n\n this.saving = true;\n try {\n await this.menuService.editModuleInstance(this.item);\n await this.menuService.loadMenu();\n this.hide();\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.saving = false;\n }\n }\n\n hide() {\n this.visible = false;\n this.visibleChange.emit(this.visible);\n }\n\n async showDialog() {\n this.item = {\n moduleInstanceId: this.menuService.contextMenuItem?.moduleInstanceId,\n moduleId: this.menuService.contextMenuItem?.moduleId,\n parentId: this.menuService.contextMenuItem?.parentId,\n label: this.menuService.contextMenuItem?.label,\n icon: this.menuService.contextMenuItem?.icon,\n viewRoles: this.menuService.contextMenuItem?.securities\n };\n\n const [roles, modules] = await Promise.all([this.securityApi.getRealmRoles(), this.menuService.getModules()]);\n this.roles = roles;\n this.moduleName = modules.find((module) => module.key === this.item.moduleId)?.value ?? '';\n\n this.visible = true;\n this.visibleChange.emit(this.visible);\n }\n}\n","import { Component, inject, OnInit, ViewChild } from '@angular/core';\nimport { MenuService } from '../../services/app.menu.service';\nimport { ButtonModule } from 'primeng/button';\nimport { SecurityService } from '../../services/security.service';\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\nimport { DialogModule } from 'primeng/dialog';\nimport { MenuItemCommandEvent, PrimeIcons } from 'primeng/api';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { FormsModule } from '@angular/forms';\nimport { MenuItemComponent } from './menu-item.component';\nimport { MenuItemCreateDialogComponent } from './menu-item-create-dialog.component';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MenuItemEditDialogComponent } from './menu-item-edit-dialog.component';\nimport { MenuApi } from '../../api/menu.api';\n\nimport { provideTranslations } from '../../helpers/l10n.helper';\nimport en from './l10n/menu.en.json';\nimport ru from './l10n/menu.ru.json';\n\n@Component({\n imports: [\n MenuItemComponent,\n ButtonModule,\n ContextMenuModule,\n DialogModule,\n InputTextModule,\n MenuItemCreateDialogComponent,\n FormsModule,\n MenuItemEditDialogComponent\n ],\n providers: [MenuApi],\n selector: 'app-menu',\n standalone: true,\n template: ` <div #empty class=\"layout-sidebar\" (contextmenu)=\"onContextMenu($event)\">\n <ul class=\"layout-menu\">\n @for (item of menuService.menu; track item; let i = $index) {\n <ng-container>\n @if (item.separator) {\n <li class=\"menu-separator\"></li>\n } @else {\n <li\n app-menuitem\n [contextMenu]=\"contextMenu\"\n [index]=\"i\"\n [item]=\"item\"\n [menuItemCreateDialogComponent]=\"menuItemCreateDialogComponent\"\n [menuItemEditDialogComponent]=\"menuItemEditDialogComponent\"\n [root]=\"true\"></li>\n }\n </ng-container>\n }\n </ul>\n </div>\n <!-- Always rendered: choosing a start page is available to every user, not only to admins. -->\n <p-contextMenu />\n @if (securityService.isAdmin()) {\n <menu-item-create-dialog />\n <menu-item-edit-dialog />\n }`\n})\nexport class MenuComponent implements OnInit {\n // Registers the whole menu/l10n/menu.*.json bundle, which also covers\n // menuItemComponent, menuItemEditDialogComponent and menuItemCreateDialogComponent.\n private readonly translations = provideTranslations({ en, ru });\n\n readonly menuService = inject(MenuService);\n readonly securityService = inject(SecurityService);\n readonly translateService = inject(TranslateService);\n @ViewChild(MenuItemCreateDialogComponent) menuItemCreateDialogComponent: MenuItemCreateDialogComponent;\n @ViewChild(MenuItemEditDialogComponent) menuItemEditDialogComponent: MenuItemEditDialogComponent;\n @ViewChild(ContextMenu) contextMenu: ContextMenu;\n\n ngOnInit() {\n this.menuService.loadMenu().then();\n }\n\n private newClick(e: MenuItemCommandEvent) {\n this.menuItemCreateDialogComponent.showDialog();\n }\n\n protected onContextMenu($event: MouseEvent) {\n if (!this.securityService.isAdmin()) {\n return;\n }\n\n $event.preventDefault();\n $event.stopPropagation();\n\n this.menuService.contextMenuItem = null;\n this.contextMenu.model = [\n {\n label: this.translateService.instant('menuComponent.new'),\n icon: PrimeIcons.PLUS,\n command: (event) => this.newClick(event)\n }\n ];\n this.contextMenu.show($event);\n }\n}\n","import { Component } from '@angular/core';\nimport { MenuComponent } from '../menu/menu.component';\n\n@Component({\n selector: 'app-sidebar',\n template: ` <app-menu></app-menu>`,\n standalone: true,\n imports: [MenuComponent]\n})\nexport class SidebarComponent {\n constructor() {}\n}\n","import { Component, effect, inject, OnDestroy, signal, untracked } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ProgressSpinner } from 'primeng/progressspinner';\nimport { provideTranslations } from '../../helpers/l10n.helper';\nimport { ModuleLoadingService } from '../../services/module-loading.service';\n\nimport en from './l10n/block-loader.en.json';\nimport ru from './l10n/block-loader.ru.json';\n\n/**\n * Full screen blocker shown while the application switches between modules.\n *\n * Render it as a sibling of `.layout-wrapper`, not inside it: while the blocker is visible the\n * wrapper is marked `inert`, which would also disable an overlay nested in it.\n *\n * The blocker appears only when a transition outlasts {@link showDelayMs} and then stays for at\n * least {@link minVisibleMs}, so quick navigation does not flash a spinner.\n */\n@Component({\n selector: 'block-loader',\n standalone: true,\n imports: [ProgressSpinner, TranslatePipe],\n template: `\n @if (visible()) {\n <div\n class=\"animate-fadein fixed inset-0 z-[1200] flex flex-col items-center justify-center gap-4 bg-surface-0/70 dark:bg-surface-900/70\"\n role=\"status\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n (pointerdown)=\"$event.preventDefault()\"\n (contextmenu)=\"$event.preventDefault()\">\n <p-progress-spinner [style]=\"{ width: '3rem', height: '3rem' }\" animationDuration=\".8s\" strokeWidth=\"4\" />\n <span class=\"text-color font-medium\">{{ 'blockLoader.loading' | translate }}</span>\n </div>\n }\n `\n})\nexport class BlockLoaderComponent implements OnDestroy {\n private static readonly showDelayMs = 150;\n private static readonly minVisibleMs = 300;\n\n private readonly translations = provideTranslations({ en, ru });\n private readonly moduleLoadingService = inject(ModuleLoadingService);\n\n private showHandle?: ReturnType<typeof setTimeout>;\n private hideHandle?: ReturnType<typeof setTimeout>;\n private shownAt = 0;\n\n protected readonly visible = signal(false);\n\n constructor() {\n effect(() => {\n const loading = this.moduleLoadingService.loading();\n untracked(() => (loading ? this.scheduleShow() : this.scheduleHide()));\n });\n\n effect(() => {\n this.blockInteraction(this.visible());\n });\n }\n\n ngOnDestroy(): void {\n this.clearTimers();\n this.blockInteraction(false);\n }\n\n private scheduleShow(): void {\n this.clearTimer('hide');\n if (this.visible() || this.showHandle != null) {\n return;\n }\n\n this.showHandle = setTimeout(() => {\n this.showHandle = undefined;\n this.shownAt = Date.now();\n this.visible.set(true);\n }, BlockLoaderComponent.showDelayMs);\n }\n\n private scheduleHide(): void {\n this.clearTimer('show');\n if (!this.visible() || this.hideHandle != null) {\n return;\n }\n\n const remaining = BlockLoaderComponent.minVisibleMs - (Date.now() - this.shownAt);\n if (remaining <= 0) {\n this.visible.set(false);\n return;\n }\n\n this.hideHandle = setTimeout(() => {\n this.hideHandle = undefined;\n this.visible.set(false);\n }, remaining);\n }\n\n private clearTimer(timer: 'show' | 'hide'): void {\n const handle = timer === 'show' ? this.showHandle : this.hideHandle;\n if (handle == null) {\n return;\n }\n\n clearTimeout(handle);\n if (timer === 'show') {\n this.showHandle = undefined;\n } else {\n this.hideHandle = undefined;\n }\n }\n\n private clearTimers(): void {\n this.clearTimer('show');\n this.clearTimer('hide');\n }\n\n /**\n * Takes the application out of the interaction and accessibility trees while the blocker is up,\n * so pointer, keyboard and screen reader input cannot reach a module that is still loading.\n */\n private blockInteraction(blocked: boolean): void {\n const wrapper = document.querySelector('.layout-wrapper');\n if (blocked) {\n wrapper?.setAttribute('inert', '');\n // Not the layout's `blocked-scroll` class: the layout drops it whenever it closes the menu.\n document.body.style.setProperty('overflow', 'hidden');\n } else {\n wrapper?.removeAttribute('inert');\n document.body.style.removeProperty('overflow');\n }\n }\n}\n","import { Component, Renderer2, ViewChild, OnDestroy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { filter, Subscription } from 'rxjs';\nimport { AppTopbar } from '../top-bar/top-bar.component';\nimport { FooterComponent } from '../footer/footer.component';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { SidebarComponent } from '../sidebar/sidebar.component';\nimport { BlockLoaderComponent } from '../block-loader/block-loader.component';\nimport { MenuApi } from '../../api/menu.api';\nimport { MenuService } from '../../services/app.menu.service';\n\n@Component({\n selector: 'app-layout',\n standalone: true,\n imports: [CommonModule, AppTopbar, SidebarComponent, RouterModule, FooterComponent, BlockLoaderComponent],\n template: `\n <div class=\"layout-wrapper\" [ngClass]=\"containerClass\">\n <app-topbar></app-topbar>\n <app-sidebar></app-sidebar>\n <div class=\"layout-main-container\">\n <div class=\"layout-main\">\n <router-outlet></router-outlet>\n </div>\n <app-footer></app-footer>\n </div>\n <div class=\"layout-mask animate-fadein\"></div>\n </div>\n <!-- Outside the wrapper on purpose: the blocker marks the wrapper inert while it is visible. -->\n <block-loader />\n `,\n providers: [MenuService, MenuApi]\n})\nexport class AppLayoutComponent implements OnDestroy {\n protected layoutService = inject(LayoutService);\n protected router = inject(Router);\n protected renderer = inject(Renderer2);\n overlayMenuOpenSubscription: Subscription;\n\n menuOutsideClickListener: () => void;\n\n @ViewChild(SidebarComponent) appSidebar!: SidebarComponent;\n\n @ViewChild(AppTopbar) appTopBar!: AppTopbar;\n\n constructor() {\n this.overlayMenuOpenSubscription = this.layoutService.overlayOpen$.subscribe(() => {\n if (!this.menuOutsideClickListener) {\n this.menuOutsideClickListener = this.renderer.listen('document', 'click', (event) => {\n if (this.isOutsideClicked(event)) {\n this.hideMenu();\n }\n });\n }\n\n if (this.layoutService.layoutState().staticMenuMobileActive) {\n this.blockBodyScroll();\n }\n });\n\n this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe(() => {\n this.hideMenu();\n });\n }\n\n isOutsideClicked(event: MouseEvent) {\n const sidebarEl = document.querySelector('.layout-sidebar');\n const topbarEl = document.querySelector('.layout-menu-button');\n const eventTarget = event.target as Node;\n\n return !(\n sidebarEl?.isSameNode(eventTarget) ||\n sidebarEl?.contains(eventTarget) ||\n topbarEl?.isSameNode(eventTarget) ||\n topbarEl?.contains(eventTarget)\n );\n }\n\n hideMenu() {\n this.layoutService.layoutState.update((prev) => ({\n ...prev,\n overlayMenuActive: false,\n staticMenuMobileActive: false,\n menuHoverActive: false\n }));\n if (this.menuOutsideClickListener) {\n this.menuOutsideClickListener();\n this.menuOutsideClickListener = null;\n }\n this.unblockBodyScroll();\n }\n\n blockBodyScroll(): void {\n if (document.body.classList) {\n document.body.classList.add('blocked-scroll');\n } else {\n document.body.className += ' blocked-scroll';\n }\n }\n\n unblockBodyScroll(): void {\n if (document.body.classList) {\n document.body.classList.remove('blocked-scroll');\n } else {\n document.body.className = document.body.className.replace(\n new RegExp('(^|\\\\b)' + 'blocked-scroll'.split(' ').join('|') + '(\\\\b|$)', 'gi'),\n ' '\n );\n }\n }\n\n get containerClass() {\n return {\n 'layout-overlay': this.layoutService.layoutConfig().menuMode === 'overlay',\n 'layout-static': this.layoutService.layoutConfig().menuMode === 'static',\n 'layout-static-inactive':\n this.layoutService.layoutState().staticMenuDesktopInactive &&\n this.layoutService.layoutConfig().menuMode === 'static',\n 'layout-overlay-active': this.layoutService.layoutState().overlayMenuActive,\n 'layout-mobile-active': this.layoutService.layoutState().staticMenuMobileActive\n };\n }\n\n ngOnDestroy() {\n if (this.overlayMenuOpenSubscription) {\n this.overlayMenuOpenSubscription.unsubscribe();\n }\n\n if (this.menuOutsideClickListener) {\n this.menuOutsideClickListener();\n }\n }\n}\n","import { Component, computed, inject } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { StyleClassModule } from 'primeng/styleclass';\nimport { AppConfiguratorComponent } from '../app-configurator/app-configurator.component';\nimport { LayoutService } from '../../services/app.layout.service';\n\n@Component({\n selector: 'app-floating-configurator',\n imports: [ButtonModule, StyleClassModule, AppConfiguratorComponent],\n template: `\n <div class=\"fixed flex gap-4 top-8 right-8\">\n <p-button\n id=\"oip-app-floating-configurator-dark-theme-button\"\n severity=\"secondary\"\n type=\"button\"\n [icon]=\"isDarkTheme() ? 'pi pi-moon' : 'pi pi-sun'\"\n [rounded]=\"true\"\n (onClick)=\"toggleDarkMode()\" />\n <div class=\"relative\">\n <p-button\n enterActiveClass=\"animate-scalein\"\n enterFromClass=\"hidden\"\n icon=\"pi pi-palette\"\n id=\"oip-app-floating-configurator-next-button\"\n leaveActiveClass=\"animate-fadeout\"\n leaveToClass=\"hidden\"\n pStyleClass=\"@next\"\n type=\"button\"\n [hideOnOutsideClick]=\"true\"\n [rounded]=\"true\" />\n <app-configurator />\n </div>\n </div>\n `\n})\nexport class AppFloatingConfiguratorComponent {\n LayoutService = inject(LayoutService);\n\n isDarkTheme = computed(() => this.LayoutService.layoutConfig().darkTheme);\n\n toggleDarkMode() {\n this.LayoutService.layoutConfig.update((state) => ({\n ...state,\n darkTheme: !state.darkTheme\n }));\n }\n}\n","import { Component } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { LogoComponent } from '../logo/logo.component';\nimport { Button } from 'primeng/button';\nimport { AppFloatingConfiguratorComponent } from '../app-floating-configurator/app-floating-configurator.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/notfound.en.json';\nimport ru from './l10n/notfound.ru.json';\n\n@Component({\n selector: 'app-notfound',\n template: ` <app-floating-configurator />\n <div class=\"flex items-center justify-center min-h-screen overflow-hidden\">\n <div class=\"flex flex-col items-center justify-center\">\n <div\n style=\"border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, color-mix(in srgb, var(--primary-color), transparent 60%) 10%, var(--surface-ground) 30%)\">\n <div\n class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20 flex flex-col items-center\"\n style=\"border-radius: 53px\">\n <div class=\"flex flex-col items-center justify-center\">\n <logo [height]=\"96\" [width]=\"96\"></logo>\n </div>\n <span class=\"text-primary font-bold text-3xl\">{{ 'notfound.errorCode' | translate }}</span>\n <h1 class=\"text-surface-900 dark:text-surface-0 font-bold text-3xl lg:text-5xl mb-2\">\n {{ 'notfound.title' | translate }}\n </h1>\n <div class=\"text-surface-600 dark:text-surface-200 mb-8\">{{ 'notfound.description' | translate }}</div>\n <p-button id=\"oip-app-notfound-go-to-home-button\" routerLink=\"/\" [label]=\"'notfound.button' | translate\" />\n </div>\n </div>\n </div>\n </div>`,\n imports: [RouterLink, LogoComponent, Button, AppFloatingConfiguratorComponent, TranslateModule],\n standalone: true\n})\nexport class NotfoundComponent {\n private readonly translations = provideTranslations({ en, ru });\n}\n","import { Component, OnInit, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ButtonModule } from 'primeng/button';\nimport { RippleModule } from 'primeng/ripple';\nimport { LogoComponent } from '../../logo/logo.component';\nimport { BffSecurityService, SecurityService } from '../../../services/security.service';\nimport { AppFloatingConfiguratorComponent } from '../../app-floating-configurator/app-floating-configurator.component';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { provideTranslations } from '../../../helpers/l10n.helper';\n\nimport en from './l10n/unauthorized.en.json';\nimport ru from './l10n/unauthorized.ru.json';\n\n@Component({\n template: `\n <app-floating-configurator />\n <div\n class=\"bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-[100vw] overflow-hidden\">\n <div class=\"flex flex-col items-center justify-center\">\n <div\n style=\"border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%)\">\n <div class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20\" style=\"border-radius: 53px\">\n <div class=\"flex flex-col items-center justify-center\">\n <logo [height]=\"96\" [width]=\"96\" />\n </div>\n <div class=\"text-center mb-8\">\n <div class=\"text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4\">\n {{ 'unauthorized.welcomeToOip' | translate }}\n </div>\n <span class=\"text-muted-color font-medium\">{{ 'unauthorized.signInToContinue' | translate }}</span>\n </div>\n <div>\n <p-button\n id=\"oip-unauthorized-error-sign-in-button\"\n label=\"{{ 'unauthorized.signIn' | translate }}\"\n styleClass=\"w-full\"\n (click)=\"signIn()\"></p-button>\n </div>\n </div>\n </div>\n </div>\n </div>\n `,\n imports: [\n ButtonModule,\n RippleModule,\n LogoComponent,\n AppFloatingConfiguratorComponent,\n ReactiveFormsModule,\n TranslatePipe\n ]\n})\nexport class UnauthorizedComponent implements OnInit {\n private readonly translations = provideTranslations({ en, ru });\n\n protected readonly securityService = inject(SecurityService);\n private readonly route = inject(ActivatedRoute);\n\n ngOnInit(): void {\n const returnUrl = sessionStorage.getItem(BffSecurityService.authorizeAfterLogoutReturnUrlKey);\n if (!returnUrl) {\n return;\n }\n\n sessionStorage.removeItem(BffSecurityService.authorizeAfterLogoutReturnUrlKey);\n this.securityService.authorize(returnUrl);\n }\n\n protected signIn(): void {\n const returnUrl = this.route.snapshot.queryParamMap.get('returnUrl') || '/';\n this.securityService.authorize(returnUrl);\n }\n}\n","import { Component } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { ButtonModule } from 'primeng/button';\nimport { RippleModule } from 'primeng/ripple';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { provideTranslations } from '../../../helpers/l10n.helper';\n\nimport en from './l10n/access.en.json';\nimport ru from './l10n/access.ru.json';\n\n@Component({\n selector: 'app-access',\n template: `<div\n class=\"surface-ground flex align-items-center justify-content-center min-h-screen min-w-screen overflow-hidden\">\n <div class=\"flex flex-column align-items-center justify-content-center\">\n <img alt=\"Sakai logo\" class=\"mb-5 w-6rem flex-shrink-0\" src=\"assets/demo/images/access/logo-orange.svg\" />\n <div\n style=\"border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, rgba(247, 149, 48, 0.4) 10%, rgba(247, 149, 48, 0) 30%);\">\n <div\n class=\"w-full surface-card py-8 px-5 sm:px-8 flex flex-column align-items-center\"\n style=\"border-radius:53px\">\n <div class=\"grid flex-column align-items-center\">\n <div\n class=\"flex justify-content-center align-items-center bg-orange-500 border-circle\"\n style=\"width:3.2rem; height:3.2rem;\">\n <i class=\"text-50 pi pi-fw pi-lock text-2xl\"></i>\n </div>\n <h1 class=\"text-900 font-bold text-4xl lg:text-5xl mb-2\">{{ 'access.title' | translate }}</h1>\n <span class=\"text-600 mb-5\">{{ 'access.message' | translate }}</span>\n <img alt=\"Access denied\" class=\"mb-5\" src=\"assets/demo/images/access/asset-access.svg\" width=\"80%\" />\n <p-button\n class=\"p-button-text\"\n icon=\"pi pi-arrow-left\"\n id=\"oip-app-access-go-to-dashboard-button\"\n pButton\n pRipple\n [label]=\"'access.button' | translate\"\n [routerLink]=\"['/']\"></p-button>\n </div>\n </div>\n </div>\n </div>\n </div>`,\n imports: [RouterLink, ButtonModule, RippleModule, TranslatePipe],\n standalone: true\n})\nexport class AccessComponent {\n private readonly translations = provideTranslations({ en, ru });\n}\n","import { Component } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { RippleModule } from 'primeng/ripple';\nimport { RouterLink } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { provideTranslations } from '../../../helpers/l10n.helper';\n\nimport en from './l10n/error.en.json';\nimport ru from './l10n/error.ru.json';\n\n@Component({\n selector: 'app-error',\n template: `<div\n class=\"surface-ground flex align-items-center justify-content-center min-h-screen min-w-screen overflow-hidden\">\n <div class=\"flex flex-column align-items-center justify-content-center\">\n <img alt=\"Sakai logo\" class=\"mb-5 w-6rem flex-shrink-0\" src=\"assets/demo/images/error/logo-error.svg\" />\n <div\n style=\"border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, rgba(233, 30, 99, 0.4) 10%, rgba(33, 150, 243, 0) 30%);\">\n <div\n class=\"w-full surface-card py-8 px-5 sm:px-8 flex flex-column align-items-center\"\n style=\"border-radius:53px\">\n <div class=\"grid flex flex-column align-items-center\">\n <div\n class=\"flex justify-content-center align-items-center bg-pink-500 border-circle\"\n style=\"height:3.2rem; width:3.2rem;\">\n <i class=\"pi pi-fw pi-exclamation-circle text-2xl text-white\"></i>\n </div>\n <h1 class=\"text-900 font-bold text-5xl mb-2\">{{ 'error.title' | translate }}</h1>\n <span class=\"text-600 mb-5\">{{ 'error.message' | translate }}</span>\n <img alt=\"Error\" class=\"mb-5\" src=\"assets/demo/images/error/asset-error.svg\" width=\"80%\" />\n <button\n class=\"p-button-text\"\n icon=\"pi pi-arrow-left\"\n id=\"oip-app-error-go-to-dashboard-button\"\n pButton\n pRipple\n [label]=\"'error.button' | translate\"\n [routerLink]=\"['/']\"></button>\n </div>\n </div>\n </div>\n </div>\n </div>`,\n standalone: true,\n imports: [ButtonModule, RippleModule, RouterLink, TranslatePipe]\n})\nexport class ErrorComponent {\n private readonly translations = provideTranslations({ en, ru });\n}\n","import { Component, inject } from '@angular/core';\nimport { FileUploadModule } from 'primeng/fileupload';\nimport { ImageModule } from 'primeng/image';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ButtonModule } from 'primeng/button';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { ConfirmationService } from 'primeng/api';\nimport { MsgService } from '../../services/msg.service';\nimport { UserService } from '../../services/user.service';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { UserProfileApi } from '../../api/user-profile.api';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/profile.en.json';\nimport ru from './l10n/profile.ru.json';\n\n@Component({\n selector: 'user-profile',\n standalone: true,\n imports: [FileUploadModule, ImageModule, AvatarModule, ButtonModule, ConfirmDialog, TranslatePipe],\n providers: [ConfirmationService],\n template: `\n <p-confirmDialog></p-confirmDialog>\n <p-avatar\n class=\"mr-2\"\n id=\"oip-user-profile-photo-avatar\"\n shape=\"circle\"\n size=\"xlarge\"\n [image]=\"userService.photoLoaded ? userService.photo : null\" />\n <div class=\"mt-2 flex gap-2\">\n <p-fileupload\n accept=\"image/*\"\n chooseIcon=\"pi pi-upload\"\n chooseLabel=\"{{ 'profileComponent.changePhoto' | translate }}\"\n id=\"oip-user-profile-file-upload\"\n maxFileSize=\"1000000\"\n mode=\"basic\"\n name=\"files\"\n [auto]=\"true\"\n [customUpload]=\"true\"\n (uploadHandler)=\"uploadPhoto($event)\" />\n @if (userService.photoLoaded) {\n <p-button\n icon=\"pi pi-trash\"\n id=\"oip-user-profile-delete-photo\"\n label=\"{{ 'profileComponent.deletePhoto' | translate }}\"\n severity=\"danger\"\n [outlined]=\"true\"\n (onClick)=\"confirmDeletePhoto($event)\" />\n }\n </div>\n `\n})\nexport class UserProfileComponent {\n private readonly translations = provideTranslations({ en, ru });\n\n readonly userService = inject(UserService);\n readonly msgService = inject(MsgService);\n readonly translateService = inject(TranslateService);\n readonly userProfileApi = inject(UserProfileApi);\n private readonly confirmationService = inject(ConfirmationService);\n\n async uploadPhoto(event: any): Promise<void> {\n const file = event.files?.[0];\n if (!file) {\n return;\n }\n\n try {\n await this.userProfileApi.postUserPhoto({ files: file });\n this.userService.refreshUserPhoto();\n this.msgService.success(this.translateService.instant('profileComponent.successfullyUploaded'));\n } catch (error) {\n this.msgService.error(error);\n }\n }\n\n confirmDeletePhoto(event: Event): void {\n this.confirmationService.confirm({\n target: event.target as EventTarget,\n header: this.translateService.instant('profileComponent.deletePhotoConfirmHeader'),\n message: this.translateService.instant('profileComponent.deletePhotoConfirmMessage'),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.translateService.instant('profileComponent.deletePhotoConfirmRejectButtonPropsLabel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('profileComponent.deletePhotoConfirmAcceptButtonPropsLabel'),\n severity: 'danger'\n },\n accept: async () => {\n await this.deletePhoto();\n }\n });\n }\n\n private async deletePhoto(): Promise<void> {\n try {\n await this.userProfileApi.deleteUserPhoto();\n this.userService.refreshUserPhoto();\n this.msgService.success(this.translateService.instant('profileComponent.photoDeleted'));\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('profileComponent.failedToDeletePhoto'));\n }\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { UserProfileComponent } from '../user-profile/user-profile.component';\nimport { Tooltip } from 'primeng/tooltip';\nimport { FormsModule } from '@angular/forms';\nimport { Select } from 'primeng/select';\nimport { TableModule } from 'primeng/table';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { UserService } from '../../services/user.service';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { RouterLink } from '@angular/router';\nimport { SecurityService } from '../../services/security.service';\nimport { MenuService } from '../../services/app.menu.service';\nimport { Button } from 'primeng/button';\nimport { L10nService } from '../../services/l10n.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/config.en.json';\nimport ru from './l10n/config.ru.json';\n\n@Component({\n selector: 'app-config',\n template: `\n <div class=\"flex flex-col md:flex-row gap-4\">\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'config.profile' | translate }}</div>\n <div class=\"flex justify-content-end flex-wrap\">\n {{ userService.userName }}\n </div>\n <label>\n {{ 'config.photo' | translate }}\n <span\n class=\"pi pi-question-circle\"\n pTooltip=\"{{ 'config.usePhoto256x256Pixel' | translate }}\"\n tooltipPosition=\"right\"></span>\n </label>\n <div class=\"flex justify-content-end flex-wrap\">\n <user-profile></user-profile>\n </div>\n </div>\n </div>\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'config.localization' | translate }}</div>\n <label> {{ 'config.selectLanguage' | translate }} </label>\n <div class=\"flex justify-content-end flex-wrap\">\n <p-select\n class=\"w-full md:w-56\"\n optionLabel=\"name\"\n optionValue=\"code\"\n qa-id=\"oip-app-config-language-select\"\n [options]=\"l10nService.availableLanguages\"\n [(ngModel)]=\"selectedLanguage\"\n (onChange)=\"changeLanguage()\">\n <ng-template #selectedItem let-selectedOption>\n <div class=\"flex items-center gap-2\">\n <span [class]=\"selectedOption.icon\"></span>\n <div>{{ selectedOption.name }}</div>\n </div>\n </ng-template>\n <ng-template #item let-languages>\n <div class=\"flex items-center gap-2\">\n <span [class]=\"languages.icon\"></span>\n <div>{{ languages.name }}</div>\n </div>\n </ng-template>\n </p-select>\n </div>\n <div class=\"flex flex-col gap-5\">\n <div class=\"mt-5\">{{ 'config.dateTimeFormat' | translate }}</div>\n <p-select\n class=\"w-full md:w-56\"\n qa-id=\"oip-app-config-date-format-select\"\n [options]=\"dateFormats\"\n [placeholder]=\"'config.dateFormat' | translate\"\n [(ngModel)]=\"selectedDateFormat\"\n (onChange)=\"changeDateFormat()\" />\n <p-select\n class=\"w-full md:w-56\"\n qa-id=\"oip-app-config-time-format-select\"\n [options]=\"timeFormats\"\n [placeholder]=\"'config.timeFormat' | translate\"\n [(ngModel)]=\"selectedTimeFormat\"\n (onChange)=\"changeTimeFormat()\" />\n <div class=\"mt-5\">{{ 'config.timeZone' | translate }}</div>\n <p-select\n class=\"w-full md:w-56\"\n qa-id=\"oip-app-config-timezone-select\"\n [filter]=\"true\"\n [options]=\"allTimeZones\"\n [placeholder]=\"'config.timeZone' | translate\"\n [virtualScroll]=\"true\"\n [virtualScrollItemSize]=\"34\"\n [(ngModel)]=\"selectedTimeZone\"\n (onChange)=\"changeTimeZone()\" />\n </div>\n </div>\n </div>\n @if (securityService.isAdmin()) {\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'config.menu' | translate }}</div>\n <div class=\"flex items-center gap-2\">\n <label for=\"oip-app-config-admin-mode\">{{ 'config.all' | translate }}</label>\n <p-toggle-switch\n id=\"oip-app-config-admin-mode\"\n [(ngModel)]=\"menuService.adminMode\"\n (onChange)=\"onSwitchChange()\"></p-toggle-switch>\n </div>\n <div class=\"flex items-center gap-2\">\n <label for=\"oip-app-config-admin-mode\">{{ 'config.moduleManagement' | translate }}</label>\n <p-button icon=\"pi pi-cog\" label=\"{{ 'config.goTo' | translate }}\" routerLink=\"/modules\" />\n </div>\n <div class=\"flex items-center gap-2\">\n <label for=\"oip-app-config-applications-link\">{{ 'config.applicationManagement' | translate }}</label>\n <p-button\n icon=\"pi pi-th-large\"\n id=\"oip-app-config-applications-link\"\n label=\"{{ 'config.goTo' | translate }}\"\n routerLink=\"/applications\" />\n </div>\n </div>\n </div>\n }\n </div>\n `,\n imports: [\n UserProfileComponent,\n Tooltip,\n FormsModule,\n Select,\n TableModule,\n TranslatePipe,\n ToggleSwitchModule,\n Button,\n RouterLink\n ]\n})\nexport class ConfigComponent {\n private readonly translations = provideTranslations({ en, ru });\n\n private readonly layoutService = inject(LayoutService);\n protected readonly l10nService = inject(L10nService);\n protected readonly userService = inject(UserService);\n protected readonly securityService = inject(SecurityService);\n protected readonly menuService = inject(MenuService);\n protected readonly dateFormats: string[] = ['dd.MM.yyyy', 'dd.MM.yy', 'yyyy-MM-dd', 'dd.MMM.yyyy'];\n protected readonly timeFormats: string[] = ['HH:mm:ss', 'HH:mm'];\n // @ts-ignore\n protected readonly allTimeZones: any[] = Intl.supportedValuesOf('timeZone');\n\n protected selectedLanguage: any;\n protected selectedDateFormat: string;\n protected selectedTimeFormat: string;\n protected selectedTimeZone: string;\n\n constructor() {\n this.selectedLanguage = this.layoutService.language();\n this.selectedDateFormat = this.layoutService.dateFormat();\n this.selectedTimeFormat = this.layoutService.timeFormat();\n this.selectedTimeZone = this.layoutService.timeZone();\n }\n\n changeLanguage() {\n this.layoutService.layoutConfig.update((config) => ({\n ...config,\n language: this.selectedLanguage\n }));\n this.l10nService.use(this.selectedLanguage, 'config');\n }\n\n changeDateFormat() {\n this.layoutService.layoutConfig.update((config) => ({ ...config, dateFormat: this.selectedDateFormat }));\n }\n\n changeTimeFormat() {\n this.layoutService.layoutConfig.update((config) => ({ ...config, timeFormat: this.selectedTimeFormat }));\n }\n\n changeTimeZone() {\n this.layoutService.layoutConfig.update((config) => ({ ...config, timeZone: this.selectedTimeZone }));\n }\n\n async onSwitchChange(): Promise<void> {\n await this.menuService.loadMenu();\n }\n}\n","import { Component, inject, OnDestroy, OnInit } from '@angular/core';\nimport { TagModule } from 'primeng/tag';\nimport { ConfirmationService, SharedModule } from 'primeng/api';\nimport { TableModule } from 'primeng/table';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { TextareaModule } from 'primeng/textarea';\nimport { ButtonModule } from 'primeng/button';\nimport { FormsModule } from '@angular/forms';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { Tooltip } from 'primeng/tooltip';\nimport { BaseModuleComponent } from '../base-module/base-module.component';\nimport { NoSettingsDto } from '../../dtos/no-settings.dto';\nimport { SecurityComponent } from '../security/security.component';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { provideTranslations } from '../../helpers/l10n.helper';\nimport en from './l10n/db-migration.en.json';\nimport ru from './l10n/db-migration.ru.json';\n\nexport interface MigrationDto {\n name: string;\n applied: boolean;\n pending: boolean;\n exist: boolean;\n}\n\nexport interface ApplyMigrationRequest {\n name: string;\n}\n\n@Component({\n imports: [\n TableModule,\n SharedModule,\n TagModule,\n InputTextModule,\n TextareaModule,\n ButtonModule,\n FormsModule,\n ConfirmDialog,\n SecurityComponent,\n Tooltip,\n TranslatePipe\n ],\n selector: 'db-migration',\n template: `\n @if (isContent) {\n <div class=\"card\" style=\"height: 100%\">\n <p-confirmDialog />\n <div>\n <h5>{{ 'db-migration.migrationManager' | translate }}</h5>\n <div class=\"flex flex-row gap-2\">\n <p-button\n icon=\"pi pi-refresh\"\n severity=\"secondary\"\n tooltipPosition=\"bottom\"\n [outlined]=\"true\"\n [pTooltip]=\"'db-migration.actions.refresh' | translate\"\n (click)=\"refreshAction()\" />\n <p-button\n icon=\"pi pi-filter-slash\"\n severity=\"secondary\"\n tooltipPosition=\"bottom\"\n [outlined]=\"true\"\n [pTooltip]=\"'db-migration.actions.cleanFilter' | translate\"\n (click)=\"dt.clear()\" />\n </div>\n <div>\n <p-table #dt dataKey=\"name\" editMode=\"row\" size=\"small\" [scrollable]=\"true\" [value]=\"data\">\n <ng-template let-columns pTemplate=\"header\">\n <tr>\n <th pSortableColumn=\"name\" scope=\"col\">\n {{ 'db-migration.columns.name' | translate }}\n <p-columnFilter display=\"menu\" field=\"name\" type=\"text\" />\n </th>\n <th scope=\"col\">{{ 'db-migration.columns.applied' | translate }}</th>\n <th scope=\"col\">{{ 'db-migration.columns.exist' | translate }}</th>\n <th scope=\"col\">{{ 'db-migration.columns.pending' | translate }}</th>\n <th scope=\"col\"></th>\n </tr>\n </ng-template>\n\n <ng-template #body let-columns=\"columns\" let-editing=\"editing\" let-ri=\"rowIndex\" let-rowData>\n <tr [pEditableRow]=\"rowData\">\n <td>\n {{ rowData.name }}\n </td>\n <td>\n @if (rowData.applied) {\n <p-button icon=\"pi pi-check\" severity=\"success\" [rounded]=\"true\" [text]=\"true\"></p-button>\n }\n </td>\n <td>\n @if (rowData.exist) {\n <p-button icon=\"pi pi-check\" severity=\"success\" [rounded]=\"true\" [text]=\"true\" />\n }\n </td>\n <td>\n @if (rowData.pending) {\n <p-button icon=\"pi pi-check\" severity=\"success\" [rounded]=\"true\" [text]=\"true\"></p-button>\n }\n </td>\n <td>\n <p-button\n icon=\"pi pi-bolt\"\n pCancelEditableRow\n pTooltip=\"{{ 'db-migration.actions.applyMigration' | translate }}\"\n severity=\"secondary\"\n tooltipPosition=\"left\"\n [rounded]=\"true\"\n [text]=\"true\"\n (click)=\"applyMigration(rowData)\">\n </p-button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n </div>\n } @else if (isSecurity) {\n <security [controller]=\"controller\" [id]=\"id\" />\n }\n `,\n providers: [ConfirmationService]\n})\nexport class DbMigrationComponent\n extends BaseModuleComponent<NoSettingsDto, NoSettingsDto>\n implements OnInit, OnDestroy\n{\n private readonly translations = provideTranslations({ en, ru });\n\n data: MigrationDto[];\n\n async ngOnInit() {\n await super.ngOnInit();\n await this.refreshAction();\n }\n\n async refreshAction() {\n this.getData()\n .then((response) => {\n this.data = response;\n })\n .catch((error) => {\n console.log(error);\n this.msgService.error(this.l10nService.instant('db-migration.messages.errorRefreshing'));\n });\n }\n\n async getData() {\n return this.getMigrations<MigrationDto>();\n }\n\n async applyMigration(rowData: MigrationDto) {\n const request = { name: rowData.name } as ApplyMigrationRequest;\n return this.applyModuleMigration(request);\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n ApiExceptionResponse,\n DeleteExtensionModuleParams,\n GetExtensionModuleByKeyParams,\n ModuleDto,\n RegisterExtensionModuleRequest,\n UpdateExtensionModuleParams,\n UpdateExtensionModuleRequest,\n} from \"./data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class ExtensionModulesApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getExtensionModules = (params: RequestParams = {}) =>\n this.request<ModuleDto[], ApiExceptionResponse>({\n path: `/api/extension-modules/get-extension-modules`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getExtensionModuleByKey = (\n { extensionKey, ...query }: GetExtensionModuleByKeyParams,\n params: RequestParams = {},\n ) =>\n this.request<ModuleDto, ApiExceptionResponse>({\n path: `/api/extension-modules/get-extension-module-by-key/${extensionKey}`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n registerExtensionModule = (\n data: RegisterExtensionModuleRequest,\n params: RequestParams = {},\n ) =>\n this.request<ModuleDto, ApiExceptionResponse>({\n path: `/api/extension-modules/register-extension-module`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n updateExtensionModule = (\n { id, ...query }: UpdateExtensionModuleParams,\n data: UpdateExtensionModuleRequest,\n params: RequestParams = {},\n ) =>\n this.request<ModuleDto, ApiExceptionResponse>({\n path: `/api/extension-modules/update-extension-module/${id}`,\n method: \"PUT\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n deleteExtensionModule = (\n { id, ...query }: DeleteExtensionModuleParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/extension-modules/delete-extension-module/${id}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n ApiExceptionResponse,\n ExistModuleDto,\n ModuleDeleteRequest,\n ModuleDto,\n} from \"./data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class ModuleApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getAll = (params: RequestParams = {}) =>\n this.request<ModuleDto[], ApiExceptionResponse>({\n path: `/api/module/get-all`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n insert = (data: ModuleDto, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/module/insert`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n delete = (data: ModuleDeleteRequest, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/module/delete`,\n method: \"DELETE\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n getModulesWithLoadStatus = (params: RequestParams = {}) =>\n this.request<ExistModuleDto[], ApiExceptionResponse>({\n path: `/api/module/get-modules-with-load-status`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { Tooltip } from 'primeng/tooltip';\nimport { FormsModule } from '@angular/forms';\nimport { TableModule } from 'primeng/table';\nimport { Tag } from 'primeng/tag';\nimport { ButtonModule } from 'primeng/button';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { MsgService } from '../../services/msg.service';\nimport { ConfirmationService } from 'primeng/api';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { L10nService } from '../../services/l10n.service';\nimport { ExtensionModulesApi } from '../../api/extension-modules.api';\nimport { ModuleApi } from '../../api/module.api';\nimport { ExistModuleDto } from '../../api/data-contracts';\nimport { AppTitleService } from '../../services/app-title.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { firstValueFrom } from 'rxjs';\n\nimport en from './l10n/app-modules.en.json';\nimport ru from './l10n/app-modules.ru.json';\n\nL10nService.registerTranslations({ en, ru });\n\n@Component({\n imports: [\n FormsModule,\n TableModule,\n Tag,\n ButtonModule,\n ToolbarModule,\n Tooltip,\n ConfirmDialog,\n TranslatePipe,\n InputTextModule\n ],\n providers: [ConfirmationService, ModuleApi, ExtensionModulesApi],\n selector: 'app-modules',\n template: `\n <p-confirmDialog></p-confirmDialog>\n <div class=\"flex flex-col md:flex-row gap-4\">\n <div class=\"card w-full\">\n <div class=\"font-semibold text-xl mb-4\">\n {{ 'app-modules.title' | translate }}\n </div>\n <div class=\"mb-4\">\n <p-toolbar>\n <div class=\"flex flex-col md:flex-row md:items-center gap-2 w-full\">\n <div class=\"flex flex-col sm:flex-row gap-2 flex-1\">\n <input\n class=\"w-full\"\n pInputText\n type=\"url\"\n [disabled]=\"registeringExternalModule\"\n [placeholder]=\"'app-modules.register.manifestUrlPlaceholder' | translate\"\n [(ngModel)]=\"externalModuleManifestUrl\"\n (keydown.enter)=\"registerExternalModule()\" />\n <p-button\n icon=\"pi pi-plus\"\n severity=\"success\"\n [disabled]=\"!canRegisterExternalModule\"\n [label]=\"'app-modules.register.button' | translate\"\n [loading]=\"registeringExternalModule\"\n (onClick)=\"registerExternalModule()\"></p-button>\n </div>\n <p-button\n icon=\"pi pi-refresh\"\n rounded=\"true\"\n severity=\"secondary\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [pTooltip]=\"'app-modules.refreshTooltip' | translate\"\n (onClick)=\"refreshAction()\"></p-button>\n </div>\n </p-toolbar>\n </div>\n <p-table class=\"mt-4\" [paginator]=\"true\" [rows]=\"100\" [value]=\"modules\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th>{{ 'app-modules.table.moduleId' | translate }}</th>\n <th>{{ 'app-modules.table.name' | translate }}</th>\n <th>{{ 'app-modules.table.currentlyLoaded' | translate }}</th>\n <th style=\"width: 4rem\"></th>\n </tr>\n </ng-template>\n <ng-template let-module pTemplate=\"body\">\n <tr>\n <td>{{ module.moduleId }}</td>\n <td>{{ module.name }}</td>\n <td>\n <p-tag\n [severity]=\"module.currentlyLoaded ? 'success' : 'danger'\"\n [value]=\"\n (module.currentlyLoaded ? 'app-modules.table.yes' : 'app-modules.table.no') | translate\n \"></p-tag>\n </td>\n <td>\n <p-button\n icon=\"pi pi-trash\"\n rounded=\"true\"\n severity=\"danger\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [pTooltip]=\"'app-modules.table.deleteTooltip' | translate\"\n (onClick)=\"deleteModule(module)\"></p-button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n `\n})\nexport class AppModulesComponent implements OnInit {\n protected modules: ExistModuleDto[] = [];\n protected msgService = inject(MsgService);\n protected confirmationService = inject(ConfirmationService);\n protected l10nService = inject(L10nService);\n protected titleService = inject(AppTitleService);\n protected externalModuleManifestUrl = '';\n protected registeringExternalModule = false;\n private moduleService = inject(ModuleApi);\n private extensionModulesService = inject(ExtensionModulesApi);\n private translationsReady: Promise<unknown>;\n\n constructor() {\n this.translationsReady = firstValueFrom(this.l10nService.loadComponentTranslations('app-modules'));\n }\n\n async ngOnInit() {\n await this.translationsReady;\n this.titleService.setTitle(this.t('app-modules.title'));\n await this.refreshAction();\n }\n\n async refreshAction() {\n this.modules = await this.moduleService.getModulesWithLoadStatus();\n }\n\n protected get canRegisterExternalModule() {\n return !!this.externalModuleManifestUrl.trim() && !this.registeringExternalModule;\n }\n\n async registerExternalModule() {\n if (!this.canRegisterExternalModule) {\n return;\n }\n\n await this.translationsReady;\n this.registeringExternalModule = true;\n\n try {\n await this.extensionModulesService.registerExtensionModule({\n manifestUrl: this.externalModuleManifestUrl.trim()\n });\n this.externalModuleManifestUrl = '';\n await this.refreshAction();\n this.msgService.success(this.t('app-modules.messages.registerSuccess'));\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.t('app-modules.messages.registerError'),\n this.t('app-modules.messages.registerError')\n );\n } finally {\n this.registeringExternalModule = false;\n }\n }\n\n async deleteModule(module: ExistModuleDto) {\n await this.translationsReady;\n\n this.confirmationService.confirm({\n header: this.t('app-modules.confirm.header'),\n message: this.t('app-modules.confirm.message'),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.t('app-modules.confirm.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.t('app-modules.confirm.delete'),\n severity: 'danger'\n },\n accept: async () => {\n try {\n await this.moduleService.delete({\n moduleId: module.moduleId\n });\n await this.refreshAction();\n this.msgService.success(this.t('app-modules.messages.deleteSuccess'));\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.t('app-modules.messages.deleteError'),\n this.t('app-modules.messages.deleteError')\n );\n }\n }\n });\n }\n\n t(key: string) {\n return this.l10nService.instant(key);\n }\n}\n","export enum ServiceType {\n Service = \"Service\",\n Application = \"Application\",\n}\n\nexport interface ApiExceptionResponse {\n title?: string | null;\n message?: string | null;\n statusCode?: number;\n stackTrace?: string | null;\n}\n\nexport interface ApplicationRegistryItemDto {\n code?: string | null;\n displayName?: string | null;\n baseUrl?: string | null;\n internalBaseUrl?: string | null;\n icon?: string | null;\n order?: number;\n enabled?: boolean;\n serviceType?: ServiceType;\n isCurrent?: boolean;\n}\n\nexport interface GetApplicationRegistryItemByCodeParams {\n code: string;\n}\n\nexport interface UpdateApplicationRegistryItemParams {\n code: string;\n}\n\nexport interface DeleteApplicationRegistryItemParams {\n code: string;\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ConfirmationService } from 'primeng/api';\nimport { ButtonModule } from 'primeng/button';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { InputText } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { TableModule } from 'primeng/table';\nimport { Tag } from 'primeng/tag';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { Tooltip } from 'primeng/tooltip';\nimport { firstValueFrom } from 'rxjs';\nimport { ApplicationsApi } from '../../api/applications.api';\nimport { ApplicationRegistryItemDto, ServiceType } from '../../api/applications-data-contracts';\nimport { AppTitleService } from '../../services/app-title.service';\nimport { L10nService } from '../../services/l10n.service';\nimport { MsgService } from '../../services/msg.service';\n\nimport en from './l10n/applications.en.json';\nimport ru from './l10n/applications.ru.json';\n\nL10nService.registerTranslations({ en, ru });\n\ninterface ApplicationEditModel {\n code: string;\n displayName: string;\n baseUrl: string;\n internalBaseUrl: string;\n icon: string;\n order: number;\n enabled: boolean;\n serviceType: NonNullable<ApplicationRegistryItemDto['serviceType']>;\n}\n\ninterface ApplicationTableItem extends ApplicationRegistryItemDto {\n _isEditing?: boolean;\n _isNew?: boolean;\n _editModel?: ApplicationEditModel;\n}\n\n@Component({\n imports: [\n FormsModule,\n TableModule,\n Tag,\n ButtonModule,\n ToolbarModule,\n Tooltip,\n ConfirmDialog,\n TranslatePipe,\n InputText,\n SelectModule,\n ToggleSwitchModule\n ],\n providers: [ApplicationsApi, ConfirmationService],\n selector: 'app-applications',\n template: `\n <p-confirmDialog></p-confirmDialog>\n <div class=\"flex flex-col gap-4\">\n <div class=\"card w-full\">\n <div class=\"flex flex-col gap-3 md:flex-row md:items-center md:justify-between\">\n <div>\n <div class=\"font-semibold text-xl mb-1\">\n {{ 'applications.title' | translate }}\n </div>\n <p class=\"m-0 text-surface-500\">{{ 'applications.subtitle' | translate }}</p>\n </div>\n <div class=\"flex flex-col gap-2 sm:flex-row\">\n <input\n class=\"w-full sm:w-72\"\n pInputText\n type=\"text\"\n [placeholder]=\"'applications.searchPlaceholder' | translate\"\n [(ngModel)]=\"globalFilter\"\n (keydown.enter)=\"applyGlobalFilter()\" />\n <p-button\n icon=\"pi pi-search\"\n [label]=\"'applications.search' | translate\"\n (onClick)=\"applyGlobalFilter()\"></p-button>\n <p-button\n icon=\"pi pi-filter-slash\"\n severity=\"secondary\"\n [label]=\"'applications.clear' | translate\"\n (onClick)=\"clearFilters()\"></p-button>\n </div>\n </div>\n\n <div class=\"my-4\">\n <p-toolbar>\n <p-button\n icon=\"pi pi-plus\"\n severity=\"success\"\n [disabled]=\"loading || activeRowAction\"\n [label]=\"'applications.add' | translate\"\n (onClick)=\"beginCreateApplication()\"></p-button>\n <p-button\n icon=\"pi pi-refresh\"\n rounded=\"true\"\n severity=\"secondary\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"loading || activeRowAction\"\n [pTooltip]=\"'applications.refreshTooltip' | translate\"\n (onClick)=\"refreshAction()\"></p-button>\n </p-toolbar>\n </div>\n\n <p-table\n #table\n dataKey=\"code\"\n responsiveLayout=\"scroll\"\n [globalFilterFields]=\"globalFilterFields\"\n [loading]=\"loading\"\n [paginator]=\"true\"\n [rows]=\"25\"\n [rowsPerPageOptions]=\"[10, 25, 50, 100]\"\n [value]=\"visibleApplications\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th pSortableColumn=\"code\">\n {{ 'applications.table.code' | translate }}\n <p-sortIcon field=\"code\"></p-sortIcon>\n </th>\n <th pSortableColumn=\"displayName\">\n {{ 'applications.table.displayName' | translate }}\n <p-sortIcon field=\"displayName\"></p-sortIcon>\n </th>\n <th pSortableColumn=\"baseUrl\">\n {{ 'applications.table.baseUrl' | translate }}\n <p-sortIcon field=\"baseUrl\"></p-sortIcon>\n </th>\n <th pSortableColumn=\"internalBaseUrl\">\n {{ 'applications.table.internalBaseUrl' | translate }}\n <p-sortIcon field=\"internalBaseUrl\"></p-sortIcon>\n </th>\n <th pSortableColumn=\"icon\">\n {{ 'applications.table.icon' | translate }}\n <p-sortIcon field=\"icon\"></p-sortIcon>\n </th>\n <th class=\"text-right\" pSortableColumn=\"order\">\n {{ 'applications.table.order' | translate }}\n <p-sortIcon field=\"order\"></p-sortIcon>\n </th>\n <th class=\"text-center\">{{ 'applications.table.enabled' | translate }}</th>\n <th pSortableColumn=\"serviceType\">\n {{ 'applications.table.serviceType' | translate }}\n <p-sortIcon field=\"serviceType\"></p-sortIcon>\n </th>\n <th class=\"text-center\">{{ 'applications.table.current' | translate }}</th>\n <th class=\"text-center min-w-36\">{{ 'applications.table.actions' | translate }}</th>\n </tr>\n </ng-template>\n\n <ng-template let-application pTemplate=\"body\">\n <tr>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input\n class=\"w-full min-w-32\"\n pInputText\n [disabled]=\"!application._isNew\"\n [(ngModel)]=\"editModel.code\" />\n } @else {\n <span class=\"font-medium\">{{ application.code }}</span>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-40\" pInputText [(ngModel)]=\"editModel.displayName\" />\n } @else {\n {{ application.displayName }}\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-56\" pInputText [(ngModel)]=\"editModel.baseUrl\" />\n } @else {\n <span class=\"break-all\">{{ application.baseUrl }}</span>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-56\" pInputText [(ngModel)]=\"editModel.internalBaseUrl\" />\n } @else {\n <span class=\"break-all\">{{ application.internalBaseUrl }}</span>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-32\" pInputText [(ngModel)]=\"editModel.icon\" />\n } @else {\n <div class=\"flex items-center gap-2\">\n <i [class]=\"application.icon || 'pi pi-th-large'\"></i>\n <span>{{ application.icon }}</span>\n </div>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-24 text-right\" pInputText type=\"number\" [(ngModel)]=\"editModel.order\" />\n } @else {\n <span class=\"block text-right tabular-nums\">{{ application.order }}</span>\n }\n </td>\n <td class=\"text-center\">\n @if (application._isEditing && application._editModel; as editModel) {\n <p-toggle-switch [(ngModel)]=\"editModel.enabled\"></p-toggle-switch>\n } @else {\n <p-tag\n [severity]=\"application.enabled ? 'success' : 'danger'\"\n [value]=\"\n (application.enabled ? 'applications.table.yes' : 'applications.table.no') | translate\n \"></p-tag>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <p-select\n appendTo=\"body\"\n class=\"w-full min-w-36\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [options]=\"serviceTypeOptions\"\n [(ngModel)]=\"editModel.serviceType\"></p-select>\n } @else {\n {{ serviceTypeLabel(application.serviceType) }}\n }\n </td>\n <td class=\"text-center\">\n <p-tag\n [severity]=\"application.isCurrent ? 'info' : 'secondary'\"\n [value]=\"\n (application.isCurrent ? 'applications.table.yes' : 'applications.table.no') | translate\n \"></p-tag>\n </td>\n <td>\n <div class=\"flex items-center justify-center gap-2\">\n @if (application._isEditing) {\n <p-button\n icon=\"pi pi-check\"\n severity=\"success\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"activeRowAction\"\n [pTooltip]=\"'applications.table.saveTooltip' | translate\"\n (onClick)=\"saveApplication(application)\"></p-button>\n <p-button\n icon=\"pi pi-times\"\n severity=\"secondary\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"activeRowAction\"\n [pTooltip]=\"'applications.table.cancelTooltip' | translate\"\n (onClick)=\"cancelEdit(application)\"></p-button>\n } @else {\n <p-button\n icon=\"pi pi-pencil\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"activeRowAction\"\n [pTooltip]=\"'applications.table.editTooltip' | translate\"\n (onClick)=\"editApplication(application)\"></p-button>\n <p-button\n icon=\"pi pi-trash\"\n severity=\"danger\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"activeRowAction\"\n [pTooltip]=\"'applications.table.deleteTooltip' | translate\"\n (onClick)=\"deleteApplication(application)\"></p-button>\n }\n </div>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td class=\"py-8 text-center text-surface-500\" colspan=\"10\">\n {{ 'applications.empty' | translate }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n `\n})\nexport class ApplicationsComponent implements OnInit {\n protected readonly globalFilterFields = ['code', 'displayName', 'baseUrl', 'internalBaseUrl', 'icon', 'serviceType'];\n protected get serviceTypeOptions(): {\n label: string;\n value: NonNullable<ApplicationRegistryItemDto['serviceType']>;\n }[] {\n return [\n {\n label: this.t('applications.serviceTypes.service'),\n value: ServiceType.Service\n },\n {\n label: this.t('applications.serviceTypes.application'),\n value: ServiceType.Application\n }\n ];\n }\n protected applications: ApplicationTableItem[] = [];\n protected visibleApplications: ApplicationTableItem[] = [];\n protected globalFilter = '';\n protected loading = false;\n protected activeRowAction = false;\n\n private readonly applicationsApi = inject(ApplicationsApi);\n private readonly msgService = inject(MsgService);\n private readonly l10nService = inject(L10nService);\n private readonly titleService = inject(AppTitleService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly translationsReady: Promise<unknown>;\n private draftApplication: ApplicationTableItem | null = null;\n\n constructor() {\n this.translationsReady = firstValueFrom(this.l10nService.loadComponentTranslations('applications'));\n }\n\n async ngOnInit(): Promise<void> {\n await this.translationsReady;\n this.titleService.setTitle(this.t('applications.title'));\n await this.refreshAction();\n }\n\n protected async refreshAction(): Promise<void> {\n this.loading = true;\n this.cancelAllEdits();\n\n try {\n this.applications = (await this.applicationsApi.getApplicationRegistryItems()).map(\n (application: ApplicationRegistryItemDto) => ({ ...application })\n );\n this.syncVisibleApplications();\n } catch (error) {\n this.applications = [];\n this.syncVisibleApplications();\n this.msgService.error(error);\n } finally {\n this.loading = false;\n }\n }\n\n protected applyGlobalFilter(): void {\n this.visibleApplications = this.filterApplications(this.globalFilter);\n }\n\n protected clearFilters(): void {\n this.globalFilter = '';\n this.syncVisibleApplications();\n }\n\n protected beginCreateApplication(): void {\n this.cancelAllEdits();\n this.draftApplication = {\n code: '',\n displayName: '',\n baseUrl: '',\n internalBaseUrl: '',\n icon: 'pi pi-th-large',\n order: this.getNextOrder(),\n enabled: true,\n serviceType: ServiceType.Service,\n isCurrent: false,\n _isNew: true,\n _isEditing: true,\n _editModel: this.createEditModel()\n };\n this.draftApplication._editModel.order = this.draftApplication.order ?? 0;\n this.syncVisibleApplications();\n }\n\n protected editApplication(application: ApplicationTableItem): void {\n this.cancelAllEdits(application);\n application._isEditing = true;\n application._editModel = this.createEditModel(application);\n this.syncVisibleApplications();\n }\n\n protected cancelEdit(application: ApplicationTableItem): void {\n if (application._isNew) {\n this.draftApplication = null;\n } else {\n application._isEditing = false;\n application._editModel = undefined;\n }\n\n this.syncVisibleApplications();\n }\n\n protected async saveApplication(application: ApplicationTableItem): Promise<void> {\n const editModel = application._editModel;\n if (!editModel) {\n return;\n }\n\n const request = this.normalizeEditModel(editModel);\n if (!request.code || !request.displayName || !request.baseUrl) {\n this.msgService.error(this.t('applications.messages.requiredFields'));\n return;\n }\n\n this.activeRowAction = true;\n\n try {\n if (application._isNew) {\n await this.applicationsApi.createApplicationRegistryItem(request);\n this.draftApplication = null;\n this.msgService.success(this.t('applications.messages.createSuccess'));\n } else {\n await this.applicationsApi.updateApplicationRegistryItem({ code: application.code as string }, request);\n application._isEditing = false;\n application._editModel = undefined;\n this.msgService.success(this.t('applications.messages.updateSuccess'));\n }\n\n await this.refreshAction();\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.activeRowAction = false;\n }\n }\n\n protected async deleteApplication(application: ApplicationTableItem): Promise<void> {\n await this.translationsReady;\n\n if (application._isNew) {\n this.cancelEdit(application);\n return;\n }\n\n if (!application.code) {\n return;\n }\n\n this.confirmationService.confirm({\n header: this.t('applications.confirm.header'),\n message: this.t('applications.confirm.message', { displayName: application.displayName || application.code }),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.t('applications.confirm.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.t('applications.confirm.delete'),\n severity: 'danger'\n },\n accept: async () => {\n this.activeRowAction = true;\n\n try {\n await this.applicationsApi.deleteApplicationRegistryItem({ code: application.code as string });\n this.msgService.success(this.t('applications.messages.deleteSuccess'));\n await this.refreshAction();\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.activeRowAction = false;\n }\n }\n });\n }\n\n private createEditModel(application?: ApplicationRegistryItemDto): ApplicationEditModel {\n return {\n code: application?.code ?? '',\n displayName: application?.displayName ?? '',\n baseUrl: application?.baseUrl ?? '',\n internalBaseUrl: application?.internalBaseUrl ?? '',\n icon: application?.icon ?? 'pi pi-th-large',\n order: application?.order ?? 0,\n enabled: application?.enabled ?? true,\n serviceType: application?.serviceType ?? ServiceType.Service\n };\n }\n\n private normalizeEditModel(model: ApplicationEditModel): ApplicationRegistryItemDto {\n return {\n code: model.code.trim(),\n displayName: model.displayName.trim(),\n baseUrl: model.baseUrl.trim(),\n internalBaseUrl: model.internalBaseUrl.trim(),\n icon: model.icon.trim(),\n order: Number(model.order) || 0,\n enabled: model.enabled,\n serviceType: model.serviceType\n };\n }\n\n protected serviceTypeLabel(serviceType: ApplicationRegistryItemDto['serviceType']): string {\n return this.t(\n serviceType === ServiceType.Application\n ? 'applications.serviceTypes.application'\n : 'applications.serviceTypes.service'\n );\n }\n\n private cancelAllEdits(exceptApplication?: ApplicationTableItem): void {\n if (!exceptApplication?._isNew) {\n this.draftApplication = null;\n }\n\n for (const application of this.applications) {\n if (application === exceptApplication) {\n continue;\n }\n\n application._isEditing = false;\n application._editModel = undefined;\n }\n }\n\n private syncVisibleApplications(): void {\n this.visibleApplications = this.filterApplications(this.globalFilter);\n }\n\n private filterApplications(filter: string): ApplicationTableItem[] {\n const source = this.draftApplication ? [this.draftApplication, ...this.applications] : [...this.applications];\n const normalizedFilter = filter.trim().toLocaleLowerCase();\n\n if (!normalizedFilter) {\n return source;\n }\n\n return source.filter((application) =>\n this.globalFilterFields.some((field) =>\n String(application[field as keyof ApplicationRegistryItemDto] ?? '')\n .toLocaleLowerCase()\n .includes(normalizedFilter)\n )\n );\n }\n\n private getNextOrder(): number {\n return Math.max(0, ...this.applications.map((application) => application.order ?? 0)) + 1;\n }\n\n private t(key: string, params?: Record<string, unknown>): string {\n return this.l10nService.instant(key, params) as string;\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n AddReactionRequest,\n ApiExceptionResponse,\n AttachmentDto,\n CommentDto,\n CommentHistoryDto,\n CommentReactionDto,\n CreateCommentRequest,\n DeleteAttachmentParams,\n DeleteParams,\n GetAttachmentContentParams,\n GetByIdParams,\n GetByObjectParams,\n GetHistoryParams,\n MentionUserDto,\n RemoveReactionParams,\n SearchMentionUsersParams,\n UpdateCommentRequest,\n UpdateParams,\n UploadAttachmentPayload,\n} from \"./discussion-data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class DiscussionApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getByObject = (query: GetByObjectParams, params: RequestParams = {}) =>\n this.request<CommentDto[], ApiExceptionResponse>({\n path: `/api/discussion/get-by-object`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n getById = (query: GetByIdParams, params: RequestParams = {}) =>\n this.request<CommentDto, ApiExceptionResponse>({\n path: `/api/discussion/get-by-id`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n create = (data: CreateCommentRequest, params: RequestParams = {}) =>\n this.request<CommentDto, ApiExceptionResponse>({\n path: `/api/discussion/create`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n update = (\n { id, ...query }: UpdateParams,\n data: UpdateCommentRequest,\n params: RequestParams = {},\n ) =>\n this.request<CommentDto, ApiExceptionResponse>({\n path: `/api/discussion/update/${id}`,\n method: \"PUT\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n delete = ({ id, ...query }: DeleteParams, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/discussion/delete/${id}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n getHistory = (\n { id, ...query }: GetHistoryParams,\n params: RequestParams = {},\n ) =>\n this.request<CommentHistoryDto[], ApiExceptionResponse>({\n path: `/api/discussion/get-history/${id}`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n uploadAttachment = (\n data: UploadAttachmentPayload,\n params: RequestParams = {},\n ) =>\n this.request<AttachmentDto, ApiExceptionResponse>({\n path: `/api/discussion/upload-attachment`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.FormData,\n format: \"json\",\n ...params,\n });\n deleteAttachment = (\n { id, ...query }: DeleteAttachmentParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/discussion/delete-attachment/${id}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n getAttachmentContent = (\n { id, ...query }: GetAttachmentContentParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/discussion/get-attachment-content/${id}`,\n method: \"GET\",\n secure: true,\n ...params,\n });\n addReaction = (data: AddReactionRequest, params: RequestParams = {}) =>\n this.request<CommentReactionDto[], ApiExceptionResponse>({\n path: `/api/discussion/add-reaction`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n removeReaction = (query: RemoveReactionParams, params: RequestParams = {}) =>\n this.request<CommentReactionDto[], ApiExceptionResponse>({\n path: `/api/discussion/remove-reaction`,\n method: \"DELETE\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n searchMentionUsers = (\n query: SearchMentionUsersParams,\n params: RequestParams = {},\n ) =>\n this.request<MentionUserDto[], ApiExceptionResponse>({\n path: `/api/discussion/search-mention-users`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","export function getInitialsFromString(input: string): string {\n if (!input || input.trim().length === 0) {\n return '';\n }\n\n const words = input.trim().split(/\\s+/);\n\n if (words.length === 1) {\n return words[0].charAt(0).toUpperCase();\n }\n\n const firstInitial = words[0].charAt(0).toUpperCase();\n const lastInitial = words[words.length - 1].charAt(0).toUpperCase();\n\n return firstInitial + lastInitial;\n}\n","import { CommonModule, DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n SecurityContext,\n SimpleChanges,\n inject,\n OnInit\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { ConfirmationService } from 'primeng/api';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { DividerModule } from 'primeng/divider';\nimport { PanelModule } from 'primeng/panel';\nimport { PopoverModule } from 'primeng/popover';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { TagModule } from 'primeng/tag';\nimport { Textarea } from 'primeng/textarea';\nimport {\n AttachmentDto,\n CommentDto,\n CommentHistoryDto,\n CommentReactionDto,\n MentionUserDto\n} from '../../api/discussion-data-contracts';\nimport { DiscussionApi } from '../../api/discussion.api';\nimport { MsgService } from '../../services/msg.service';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { getInitialsFromString } from '../../helpers/avatar.helper';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/discussion.en.json';\nimport ru from './l10n/discussion.ru.json';\n\ntype HistoryState = {\n loading: boolean;\n opened: boolean;\n items: DiscussionHistoryItem[];\n};\n\ntype DiscussionAttachment = Required<AttachmentDto>;\ntype DiscussionReaction = Required<CommentReactionDto>;\ntype DiscussionMentionUser = Required<MentionUserDto>;\ntype DiscussionComment = Omit<CommentDto, 'attachments' | 'reactions' | 'mentions'> & {\n commentId: number;\n content: string;\n authorDisplayName: string;\n authorEmail: string;\n isEdited: boolean;\n historyCount: number;\n canEdit: boolean;\n canDelete: boolean;\n attachments: DiscussionAttachment[];\n reactions: DiscussionReaction[];\n};\ntype DiscussionHistoryItem = Required<CommentHistoryDto>;\n\n@Component({\n selector: 'discussion',\n standalone: true,\n providers: [ConfirmationService, DiscussionApi],\n imports: [\n CommonModule,\n FormsModule,\n AvatarModule,\n ButtonModule,\n CardModule,\n ConfirmDialog,\n DividerModule,\n PanelModule,\n PopoverModule,\n ProgressSpinnerModule,\n TagModule,\n Textarea,\n DatePipe,\n TranslatePipe\n ],\n template: `\n <p-confirmDialog />\n\n <section class=\"flex flex-col gap-4\">\n <p-card class=\"block\">\n <div class=\"flex flex-col gap-4\">\n @if (!previewMode) {\n <textarea\n class=\"min-h-28 w-full\"\n pTextarea\n rows=\"5\"\n [autoResize]=\"true\"\n [placeholder]=\"'discussionComponent.writeCommentPlaceholder' | translate\"\n [(ngModel)]=\"newComment\"\n (ngModelChange)=\"onComposerInput()\"></textarea>\n } @else {\n <div\n class=\"markdown-preview min-h-28 rounded-2xl border border-surface-200 bg-surface-50 px-4 py-3 leading-7 dark:border-surface-700 dark:bg-surface-900/40\"\n [innerHTML]=\"renderMarkdown(newComment)\"></div>\n }\n\n @if (mentionSuggestions.length > 0) {\n <p-panel class=\"block\">\n <ng-template pTemplate=\"header\">\n <div class=\"inline-flex items-center gap-2 text-sm font-medium\">\n <i class=\"pi pi-at\"></i>\n <span>{{ 'discussionComponent.mentionSuggestions' | translate }}</span>\n </div>\n </ng-template>\n\n <div class=\"flex flex-col gap-3\">\n @for (candidate of mentionSuggestions; track candidate.userId) {\n <button\n class=\"flex w-full items-center justify-between gap-4 rounded-xl border border-transparent px-3 py-3 text-left transition hover:border-primary-200 hover:bg-primary-50 dark:hover:border-primary-800 dark:hover:bg-primary-950/30\"\n type=\"button\"\n (click)=\"insertMention(candidate)\">\n <div class=\"min-w-0\">\n <strong>{{ candidate.displayName }}</strong>\n <small class=\"mt-1 block text-surface-500\">{{ candidate.email }}</small>\n </div>\n <i class=\"pi pi-arrow-up-left shrink-0 text-surface-400\"></i>\n </button>\n }\n </div>\n </p-panel>\n }\n\n @if (pendingFiles.length > 0) {\n <div class=\"flex flex-col gap-3\">\n @for (file of pendingFiles; track file.name + file.size) {\n <div\n class=\"flex flex-col gap-3 rounded-2xl border border-surface-200 px-4 py-3 sm:flex-row sm:items-center sm:justify-between dark:border-surface-700\">\n <div class=\"inline-flex items-center gap-2\">\n <i class=\"pi pi-file\"></i>\n <span class=\"break-all\">{{ file.name }}</span>\n <p-tag severity=\"contrast\" [value]=\"formatBytes(file.size)\" />\n </div>\n <p-button\n icon=\"pi pi-times\"\n severity=\"danger\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"removePendingFile(file)\" />\n </div>\n }\n </div>\n }\n\n <div class=\"flex flex-col gap-2 sm:flex-row sm:justify-end\">\n <p-button\n severity=\"secondary\"\n [icon]=\"previewMode ? 'pi pi-pencil' : 'pi pi-eye'\"\n [label]=\"\n previewMode ? ('discussionComponent.edit' | translate) : ('discussionComponent.preview' | translate)\n \"\n [text]=\"true\"\n (onClick)=\"previewMode = !previewMode\" />\n\n <label class=\"file-trigger\">\n <p-button\n icon=\"pi pi-paperclip\"\n severity=\"secondary\"\n [label]=\"'discussionComponent.attachFiles' | translate\"\n [text]=\"true\" />\n <input multiple type=\"file\" (change)=\"onFilesSelected($event)\" />\n </label>\n <p-button\n icon=\"pi pi-send\"\n [disabled]=\"submitting || !newComment.trim()\"\n [label]=\"'discussionComponent.send' | translate\"\n [loading]=\"submitting\"\n (onClick)=\"createComment()\" />\n </div>\n </div>\n </p-card>\n\n @if (loading) {\n <div\n class=\"flex min-h-20 flex-col items-center justify-center gap-3 rounded-2xl border border-surface-200 px-4 py-5 text-surface-500 dark:border-surface-700\">\n <p-progressSpinner strokeWidth=\"4\" />\n <span>{{ 'discussionComponent.loadingComments' | translate }}</span>\n </div>\n } @else if (comments.length === 0) {\n <div\n class=\"flex min-h-20 items-center justify-center gap-3 rounded-2xl border border-surface-200 px-4 py-5 text-surface-500 dark:border-surface-700\">\n <i class=\"pi pi-inbox\"></i>\n <span>{{ 'discussionComponent.noCommentsYet' | translate }}</span>\n </div>\n } @else {\n <div class=\"flex flex-col gap-4\">\n @for (comment of comments; track comment.commentId) {\n <p-card class=\"block\">\n <ng-template pTemplate=\"content\">\n <div class=\"grid gap-4 md:grid-cols-[3.2rem_minmax(0,1fr)]\">\n <div>\n <p-avatar shape=\"circle\" [label]=\"getInitialsFromString(comment.authorDisplayName)\" />\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex flex-row gap-3 justify-between\">\n <div class=\"flex flex-wrap items-center gap-2\">\n <strong>{{ comment.authorDisplayName }}</strong>\n <span class=\"text-sm text-surface-500\">{{\n comment.createdAt | date: layoutService.dateTimeFormat()\n }}</span>\n </div>\n\n <div class=\"flex flex-wrap items-center justify-end gap-2\">\n <div class=\"flex flex-wrap items-center\">\n @if (comment.isEdited) {\n <p-tag\n icon=\"pi pi-pencil\"\n severity=\"warn\"\n [value]=\"'discussionComponent.edited' | translate\" />\n }\n </div>\n @if (comment.canEdit) {\n <p-button\n icon=\"pi pi-pencil\"\n severity=\"secondary\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"startEdit(comment)\" />\n }\n @if (comment.historyCount > 0) {\n <p-button\n icon=\"pi pi-history\"\n severity=\"secondary\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"toggleHistory(comment)\" />\n }\n @if (comment.canDelete) {\n <p-button\n icon=\"pi pi-trash\"\n severity=\"danger\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"deleteComment(comment)\" />\n }\n </div>\n </div>\n @if (editingCommentId === comment.commentId) {\n <div class=\"flex flex-col gap-4\">\n <textarea\n class=\"min-h-24 w-full\"\n pTextarea\n rows=\"4\"\n [autoResize]=\"true\"\n [placeholder]=\"'discussionComponent.editCommentPlaceholder' | translate\"\n [(ngModel)]=\"editContent\"></textarea>\n <div class=\"flex flex-col gap-2 sm:flex-row sm:justify-end\">\n <div>\n <label class=\"file-trigger\">\n <p-button\n icon=\"pi pi-paperclip\"\n severity=\"secondary\"\n [label]=\"'discussionComponent.addAttachment' | translate\"\n [text]=\"true\" />\n <input multiple type=\"file\" (change)=\"onInlineFilesSelected(comment, $event)\" />\n </label>\n </div>\n\n <p-button\n icon=\"pi pi-check\"\n [disabled]=\"!editContent.trim()\"\n [label]=\"'discussionComponent.save' | translate\"\n (onClick)=\"saveEdit(comment)\" />\n <p-button\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [label]=\"'discussionComponent.cancel' | translate\"\n [text]=\"true\"\n (onClick)=\"cancelEdit()\" />\n </div>\n </div>\n } @else {\n <div class=\"markdown-preview\" [innerHTML]=\"renderMarkdown(comment.content)\"></div>\n }\n\n @if (comment.attachments.length > 0) {\n <div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-col gap-3\">\n @for (attachment of comment.attachments; track attachment.attachmentId) {\n <div class=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-end\">\n <div class=\"inline-flex items-center gap-2\">\n <i class=\"pi pi-file\"></i>\n <button\n class=\"break-all bg-transparent p-0 text-left font-semibold text-primary-600 transition hover:text-primary-500\"\n type=\"button\"\n (click)=\"downloadAttachment(attachment)\">\n {{ attachment.fileName }}\n </button>\n <p-tag severity=\"contrast\" [value]=\"formatBytes(attachment.fileSize)\" />\n </div>\n\n @if (comment.canEdit) {\n <p-button\n icon=\"pi pi-times\"\n severity=\"danger\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"deleteAttachment(comment, attachment)\" />\n }\n </div>\n }\n </div>\n </div>\n }\n\n <div class=\"flex flex-wrap items-center gap-2\">\n @for (reaction of getReactions(comment); track reaction.emojiCode) {\n <p-button\n severity=\"secondary\"\n [label]=\"reaction.emojiCode + ' ' + reaction.count\"\n [outlined]=\"false\"\n (onClick)=\"toggleReaction(comment, reaction)\" />\n }\n\n @if (!hasUserReaction(comment)) {\n <p-button\n icon=\"pi pi-face-smile\"\n severity=\"secondary\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"reactionPopover.toggle($event)\" />\n <p-popover #reactionPopover>\n <div class=\"emoji-popover\">\n @for (emoji of emojiPalette; track emoji) {\n <button\n class=\"emoji-option\"\n type=\"button\"\n (click)=\"reactWithEmoji(comment, emoji, reactionPopover)\">\n {{ emoji }}\n </button>\n }\n </div>\n </p-popover>\n }\n </div>\n\n @if (historyByComment[comment.commentId]?.opened) {\n <p-panel class=\"block\" [collapsed]=\"false\" [toggleable]=\"true\">\n <ng-template pTemplate=\"header\">\n <div class=\"inline-flex items-center gap-2 text-sm font-medium\">\n <i class=\"pi pi-history\"></i>\n <span>{{ 'discussionComponent.editHistory' | translate }}</span>\n </div>\n </ng-template>\n\n @if (historyByComment[comment.commentId]?.loading) {\n <div class=\"flex items-center gap-3 text-surface-500\">\n <p-progressSpinner strokeWidth=\"4\" />\n <span>{{ 'discussionComponent.loadingHistory' | translate }}</span>\n </div>\n } @else {\n <div class=\"flex flex-col gap-4\">\n @for (\n item of historyByComment[comment.commentId]?.items ?? [];\n track item.commentEditHistoryId\n ) {\n <div class=\"rounded-2xl border border-surface-200 px-4 py-4 dark:border-surface-700\">\n <div class=\"mb-3 inline-flex items-center gap-2 text-sm font-semibold\">\n <i class=\"pi pi-clock\"></i>\n <span>{{ item.editedByDisplayName }} · {{ item.editedAt | date: 'short' }}</span>\n </div>\n <div class=\"grid gap-4 lg:grid-cols-2\">\n <div class=\"flex flex-col gap-2\">\n <p-tag severity=\"secondary\" [value]=\"'discussionComponent.before' | translate\" />\n <div\n class=\"history-markdown rounded-2xl bg-surface-50 px-4 py-3 leading-7 dark:bg-surface-900/40\"\n [innerHTML]=\"renderMarkdown(item.oldContent)\"></div>\n </div>\n <div class=\"flex flex-col gap-2\">\n <p-tag severity=\"success\" [value]=\"'discussionComponent.after' | translate\" />\n <div\n class=\"history-markdown rounded-2xl bg-surface-50 px-4 py-3 leading-7 dark:bg-surface-900/40\"\n [innerHTML]=\"renderMarkdown(item.newContent)\"></div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n </p-panel>\n }\n </div>\n </div>\n </ng-template>\n </p-card>\n }\n </div>\n }\n </section>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .file-trigger {\n position: relative;\n display: inline-flex;\n }\n\n .file-trigger input {\n position: absolute;\n inset: 0;\n opacity: 0;\n cursor: pointer;\n }\n\n .markdown-preview,\n .history-markdown {\n word-break: break-word;\n }\n\n .markdown-preview :is(h1, h2, h3),\n .history-markdown :is(h1, h2, h3) {\n margin: 0 0 0.75rem;\n font-weight: 600;\n }\n\n .markdown-preview a,\n .history-markdown a {\n color: #2563eb;\n text-decoration: underline;\n text-underline-offset: 0.18em;\n }\n\n .emoji-popover {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n max-width: 16rem;\n }\n\n .emoji-option {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n font-size: 1.25rem;\n cursor: pointer;\n }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DiscussionComponent implements OnChanges, OnDestroy, OnInit {\n private readonly msgService = inject(MsgService);\n private readonly translations = provideTranslations({ en, ru });\n\n private readonly discussionApi = inject(DiscussionApi);\n private readonly sanitizer = inject(DomSanitizer);\n private readonly translateService = inject(TranslateService);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly confirmationService = inject(ConfirmationService);\n protected readonly layoutService = inject(LayoutService);\n\n @Input({ required: true }) objectTypeId = 1;\n @Input({ required: true }) objectId = 1;\n\n comments: DiscussionComment[] = [];\n loading = false;\n submitting = false;\n previewMode = false;\n newComment = '';\n editContent = '';\n editingCommentId: number | null = null;\n pendingFiles: File[] = [];\n mentionSuggestions: DiscussionMentionUser[] = [];\n historyByComment: Record<number, HistoryState> = {};\n emojiPalette = ['👍', '👎', '🐳', '🍆', '🍑'];\n private mentionSearchTimer: ReturnType<typeof setTimeout> | null = null;\n\n ngOnChanges(changes: SimpleChanges): void {\n if ((changes['objectTypeId'] || changes['objectId']) && this.objectTypeId && this.objectId) {\n this.loadComments().then();\n }\n }\n\n async ngOnInit() {\n await this.loadComments();\n }\n\n ngOnDestroy(): void {\n if (this.mentionSearchTimer) {\n clearTimeout(this.mentionSearchTimer);\n }\n }\n\n async loadComments(): Promise<void> {\n if (!this.objectTypeId || !this.objectId) {\n return;\n }\n\n this.loading = true;\n this.cdr.markForCheck();\n\n try {\n const items = await this.discussionApi.getByObject({\n objectTypeId: this.objectTypeId,\n objectId: this.objectId,\n skip: 0,\n take: 50\n });\n this.comments = items.map((item) => this.normalizeComment(item));\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.loadComments')\n );\n } finally {\n this.loading = false;\n this.cdr.markForCheck();\n }\n }\n\n async createComment(): Promise<void> {\n const content = this.newComment.trim();\n if (!content) {\n return;\n }\n\n this.submitting = true;\n this.cdr.markForCheck();\n\n try {\n const created = await this.discussionApi.create({\n objectTypeId: this.objectTypeId,\n objectId: this.objectId,\n content\n });\n\n if (this.pendingFiles.length > 0) {\n for (const file of this.pendingFiles) {\n await this.discussionApi.uploadAttachment({\n CommentId: created.commentId as number,\n File: file\n });\n }\n }\n\n this.newComment = '';\n this.pendingFiles = [];\n this.previewMode = false;\n this.mentionSuggestions = [];\n await this.loadComments();\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.createComment')\n );\n } finally {\n this.submitting = false;\n this.cdr.markForCheck();\n }\n }\n\n startEdit(comment: DiscussionComment): void {\n this.editingCommentId = comment.commentId;\n this.editContent = comment.content;\n }\n\n cancelEdit(): void {\n this.editingCommentId = null;\n this.editContent = '';\n }\n\n async saveEdit(comment: DiscussionComment): Promise<void> {\n try {\n const updated = await this.discussionApi.update({ id: comment.commentId }, { content: this.editContent.trim() });\n this.comments = this.comments.map((item) =>\n item.commentId === comment.commentId ? this.normalizeComment(updated) : item\n );\n this.cancelEdit();\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.updateComment')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n deleteComment(comment: DiscussionComment): void {\n this.confirmationService.confirm({\n header: this.translateService.instant('discussionComponent.warning'),\n message: this.translateService.instant('discussionComponent.confirmDeleteComment'),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.translateService.instant('discussionComponent.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('discussionComponent.delete'),\n severity: 'danger'\n },\n accept: async () => {\n await this.performDeleteComment(comment);\n }\n });\n }\n\n async toggleHistory(comment: DiscussionComment): Promise<void> {\n const current = this.historyByComment[comment.commentId];\n if (current?.opened) {\n this.historyByComment[comment.commentId] = { ...current, opened: false };\n return;\n }\n\n this.historyByComment[comment.commentId] = {\n opened: true,\n loading: true,\n items: current?.items ?? []\n };\n this.cdr.markForCheck();\n\n try {\n const items = await this.discussionApi.getHistory({ id: comment.commentId });\n this.historyByComment[comment.commentId] = {\n opened: true,\n loading: false,\n items: items.map((item) => this.normalizeHistoryItem(item))\n };\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.loadEditHistory')\n );\n this.historyByComment[comment.commentId] = {\n opened: false,\n loading: false,\n items: []\n };\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n onFilesSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.pendingFiles = [...this.pendingFiles, ...Array.from(input.files ?? [])];\n input.value = '';\n }\n\n removePendingFile(file: File): void {\n this.pendingFiles = this.pendingFiles.filter((item) => item !== file);\n }\n\n async onInlineFilesSelected(comment: DiscussionComment, event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files ?? []);\n input.value = '';\n\n try {\n for (const file of files) {\n await this.discussionApi.uploadAttachment({\n CommentId: comment.commentId,\n File: file\n });\n }\n await this.loadComments();\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.uploadAttachment')\n );\n this.cdr.markForCheck();\n }\n }\n\n deleteAttachment(comment: DiscussionComment, attachment: DiscussionAttachment): void {\n this.confirmationService.confirm({\n header: this.translateService.instant('discussionComponent.warning'),\n message: this.translateService.instant('discussionComponent.confirmDeleteFile', {\n fileName: attachment.fileName\n }),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.translateService.instant('discussionComponent.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('discussionComponent.delete'),\n severity: 'danger'\n },\n accept: async () => {\n await this.performDeleteAttachment(comment, attachment);\n }\n });\n }\n\n private async performDeleteComment(comment: DiscussionComment): Promise<void> {\n try {\n await this.discussionApi.delete({ id: comment.commentId });\n this.comments = this.comments.filter((item) => item.commentId !== comment.commentId);\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.deleteComment')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n private async performDeleteAttachment(comment: DiscussionComment, attachment: DiscussionAttachment): Promise<void> {\n try {\n await this.discussionApi.deleteAttachment({ id: attachment.attachmentId });\n this.comments = this.comments.map((item) =>\n item.commentId === comment.commentId\n ? { ...item, attachments: item.attachments.filter((entry) => entry.attachmentId !== attachment.attachmentId) }\n : item\n );\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.deleteAttachment')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n async downloadAttachment(attachment: DiscussionAttachment): Promise<void> {\n try {\n const blob = (await this.discussionApi.getAttachmentContent(\n { id: attachment.attachmentId },\n { format: 'blob' }\n )) as unknown as Blob;\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = attachment.fileName;\n link.click();\n URL.revokeObjectURL(url);\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.downloadAttachment')\n );\n this.cdr.markForCheck();\n }\n }\n\n async toggleReaction(comment: DiscussionComment, reaction: DiscussionReaction): Promise<void> {\n try {\n const reactions = reaction.reactedByCurrentUser\n ? await this.discussionApi.removeReaction({ commentId: comment.commentId, emojiCode: reaction.emojiCode })\n : await this.discussionApi.addReaction({ commentId: comment.commentId, emojiCode: reaction.emojiCode });\n this.applyReactions(\n comment.commentId,\n reactions.map((item) => this.normalizeReaction(item))\n );\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.updateReaction')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n async reactWithEmoji(comment: DiscussionComment, emojiCode: string, popover?: { hide: () => void }): Promise<void> {\n try {\n const reactions = await this.discussionApi.addReaction({ commentId: comment.commentId, emojiCode });\n this.applyReactions(\n comment.commentId,\n reactions.map((item) => this.normalizeReaction(item))\n );\n popover?.hide();\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.addReaction')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n onComposerInput(): void {\n if (this.mentionSearchTimer) {\n clearTimeout(this.mentionSearchTimer);\n }\n\n const token = this.extractMentionQuery(this.newComment);\n if (!token || token.length < 2) {\n this.mentionSuggestions = [];\n this.cdr.markForCheck();\n return;\n }\n\n this.mentionSearchTimer = setTimeout(async () => {\n try {\n const users = await this.discussionApi.searchMentionUsers({ term: token });\n this.mentionSuggestions = users.map((item) => this.normalizeMentionUser(item));\n } catch {\n this.mentionSuggestions = [];\n } finally {\n this.cdr.markForCheck();\n }\n }, 250);\n }\n\n insertMention(candidate: DiscussionMentionUser): void {\n const query = this.extractMentionQuery(this.newComment);\n if (!query) {\n return;\n }\n\n this.newComment = this.newComment.replace(/@[\\w.+\\-@]*$/, `@${candidate.email} `);\n this.mentionSuggestions = [];\n }\n\n renderMarkdown(markdown: string): string {\n const escaped = markdown.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n\n const html = escaped\n .replace(/^### (.*)$/gm, '<h3>$1</h3>')\n .replace(/^## (.*)$/gm, '<h2>$1</h2>')\n .replace(/^# (.*)$/gm, '<h1>$1</h1>')\n .replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\n .replace(/\\*(.+?)\\*/g, '<em>$1</em>')\n .replace(/`(.+?)`/g, '<code>$1</code>')\n .replace(/\\[([^\\]]+)\\]\\((https?:\\/\\/[^\\s]+)\\)/g, '<a href=\"$2\" target=\"_blank\" rel=\"noopener\">$1</a>')\n .replace(/(^|\\s)@([A-Za-z0-9._+\\-@]+)/g, '$1<span class=\"mention-token\">@$2</span>')\n .replace(/\\n/g, '<br>');\n\n return this.sanitizer.sanitize(SecurityContext.HTML, html) ?? '';\n }\n\n formatBytes(value: number): string {\n if (value < 1024) {\n return `${value} ${this.translateService.instant('discussionComponent.units.bytes')}`;\n }\n if (value < 1024 * 1024) {\n return `${(value / 1024).toFixed(1)} ${this.translateService.instant('discussionComponent.units.kilobytes')}`;\n }\n return `${(value / (1024 * 1024)).toFixed(1)} ${this.translateService.instant('discussionComponent.units.megabytes')}`;\n }\n\n hasUserReaction(comment: DiscussionComment): boolean {\n return comment.reactions.some((reaction) => reaction.reactedByCurrentUser);\n }\n\n getReactions(comment: DiscussionComment): DiscussionReaction[] {\n return comment.reactions;\n }\n\n private applyReactions(commentId: number, reactions: DiscussionReaction[]): void {\n this.comments = this.comments.map((item) => (item.commentId === commentId ? { ...item, reactions } : item));\n }\n\n private normalizeComment(comment: CommentDto): DiscussionComment {\n return {\n ...comment,\n commentId: comment.commentId ?? 0,\n content: comment.content ?? '',\n authorDisplayName: comment.authorDisplayName ?? '',\n authorEmail: comment.authorEmail ?? '',\n isEdited: comment.isEdited ?? false,\n historyCount: comment.historyCount ?? 0,\n canEdit: comment.canEdit ?? false,\n canDelete: comment.canDelete ?? false,\n attachments: (comment.attachments ?? []).map((item) => this.normalizeAttachment(item)),\n reactions: (comment.reactions ?? []).map((item) => this.normalizeReaction(item))\n };\n }\n\n private normalizeAttachment(attachment: AttachmentDto): DiscussionAttachment {\n return {\n attachmentId: attachment.attachmentId ?? 0,\n fileName: attachment.fileName ?? '',\n fileType: attachment.fileType ?? '',\n fileSize: attachment.fileSize ?? 0,\n uploadedAt: attachment.uploadedAt ?? new Date(0),\n storageFileId: attachment.storageFileId ?? '',\n downloadUrl: attachment.downloadUrl ?? ''\n };\n }\n\n private normalizeReaction(reaction: CommentReactionDto): DiscussionReaction {\n return {\n emojiCode: reaction.emojiCode ?? '',\n count: reaction.count ?? 0,\n reactedByCurrentUser: reaction.reactedByCurrentUser ?? false\n };\n }\n\n private normalizeMentionUser(user: MentionUserDto): DiscussionMentionUser {\n return {\n userId: user.userId ?? 0,\n displayName: user.displayName ?? '',\n email: user.email ?? ''\n };\n }\n\n private normalizeHistoryItem(item: CommentHistoryDto): DiscussionHistoryItem {\n return {\n commentEditHistoryId: item.commentEditHistoryId ?? 0,\n oldContent: item.oldContent ?? '',\n newContent: item.newContent ?? '',\n editedByUserId: item.editedByUserId ?? 0,\n editedByDisplayName: item.editedByDisplayName ?? '',\n editedAt: item.editedAt ?? new Date(0)\n };\n }\n\n private extractMentionQuery(value: string): string | null {\n const match = value.match(/@([A-Za-z0-9._+\\-@]*)$/);\n return match?.[1] ?? null;\n }\n\n protected readonly getInitialsFromString = getInitialsFromString;\n}\n","import { Component, ElementRef, inject, OnDestroy, OnInit, Renderer2, ViewChild } from '@angular/core';\nimport { BaseModuleComponent } from '../base-module/base-module.component';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { InputText } from 'primeng/inputtext';\nimport { FormsModule } from '@angular/forms';\nimport { Button } from 'primeng/button';\nimport { SecurityComponent } from '../security/security.component';\nimport { IframeModuleSettings } from '../../api/data-contracts';\nimport { provideTranslations } from '../../helpers/l10n.helper';\nimport en from './l10n/iframe-module.en.json';\nimport ru from './l10n/iframe-module.ru.json';\n\n@Component({\n standalone: true,\n imports: [SecurityComponent, TranslatePipe, InputText, FormsModule, Button],\n template: `\n @if (isContent) {\n <iframe\n #iframe\n class=\"w-full h-screen\"\n style=\"background-color: var(--surface-ground)\"\n title=\"Main iframe\"\n (error)=\"onIframeError()\">\n </iframe>\n } @else if (isSettings) {\n <div class=\"flex flex-col md:flex-row gap-8\">\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'baseComponent.settings' | translate }}</div>\n <div class=\"col-span-30 md:col-span-10 w-full\">\n <input\n class=\"w-full\"\n pInputText\n placeholder=\"{{ 'iframe-module.iframeModule.urlPlaceholder' | translate }}\"\n qa-id=\"iframe-module-settings-site-url-input\"\n type=\"text\"\n [(ngModel)]=\"settings.url\" />\n </div>\n <div class=\"flex justify-end\">\n <p-button\n icon=\"pi pi-save\"\n label=\"{{ 'iframe-module.iframeModule.settingSaveButtonLabel' | translate }}\"\n qa-id=\"iframe-module-settings-save-button\"\n (onClick)=\"saveSettings(settings)\">\n </p-button>\n </div>\n </div>\n </div>\n </div>\n } @else if (isSecurity) {\n <security [controller]=\"controller\" [id]=\"id\" />\n }\n `\n})\nexport class IframeModuleComponent\n extends BaseModuleComponent<IframeModuleSettings, IframeModuleSettings>\n implements OnInit, OnDestroy\n{\n private readonly translations = provideTranslations({ en, ru });\n\n private iframe?: ElementRef<HTMLIFrameElement>;\n private readonly renderer = inject(Renderer2);\n private readonly translate = inject(TranslateService);\n\n protected iframeUrl: string | null = null;\n\n constructor() {\n super();\n }\n\n @ViewChild('iframe')\n private set iframeElement(element: ElementRef<HTMLIFrameElement> | undefined) {\n this.iframe = element;\n this.updateIframeSrc();\n }\n\n private setIframeUrl(url: string | null | undefined): void {\n const iframeUrl = url?.trim();\n\n if (!iframeUrl) {\n this.iframeUrl = null;\n this.updateIframeSrc();\n const message: string = this.translate.instant('iframe-module.iframeModule.emptyUrlMessage');\n this.msgService.warn(message);\n return;\n }\n\n if (!this.isAllowedIframeUrl(iframeUrl)) {\n this.iframeUrl = null;\n this.updateIframeSrc();\n const message: string = this.translate.instant('iframe-module.iframeModule.siteLoadingMessage');\n this.msgService.error(message);\n return;\n }\n\n this.iframeUrl = iframeUrl;\n this.updateIframeSrc();\n }\n\n private isAllowedIframeUrl(url: string): boolean {\n try {\n const parsedUrl = new URL(url, window.location.origin);\n\n return parsedUrl.protocol === 'http:' || parsedUrl.protocol === 'https:';\n } catch {\n return false;\n }\n }\n\n protected override async onModuleInstanceChange(): Promise<void> {\n this.setIframeUrl(this.settings.url);\n }\n\n private updateIframeSrc(): void {\n if (!this.iframe) {\n return;\n }\n\n if (!this.iframeUrl) {\n this.renderer.removeAttribute(this.iframe.nativeElement, 'src');\n return;\n }\n\n this.renderer.setAttribute(this.iframe.nativeElement, 'src', this.iframeUrl);\n }\n\n onIframeError() {\n const errorMessage = this.translate.instant('iframe-module.iframeModule.siteLoadingMessage');\n this.msgService.error(errorMessage);\n }\n}\n","import { OipExtensionHostContext, OipExtensionNavigateEvent, OipExtensionNotifyEvent } from './extension-host.types';\n\nexport const OIP_EXTENSION_EVENTS = {\n contextChange: 'oip:context-change',\n titleChange: 'oip:title-change',\n settingsChange: 'oip:settings-change',\n notify: 'oip:notify',\n navigate: 'oip:navigate',\n error: 'oip:error'\n} as const;\n\nexport function emitOipTitleChange(element: HTMLElement, title: string): void {\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.titleChange, { detail: title, bubbles: true }));\n}\n\nexport function emitOipSettingsChange(element: HTMLElement, settings: unknown): void {\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.settingsChange, { detail: settings, bubbles: true }));\n}\n\nexport function emitOipNotify(element: HTMLElement, notification: OipExtensionNotifyEvent): void {\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.notify, { detail: notification, bubbles: true }));\n}\n\nexport function emitOipNavigate(element: HTMLElement, navigation: OipExtensionNavigateEvent): void {\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.navigate, { detail: navigation, bubbles: true }));\n}\n\nexport function emitOipError(element: HTMLElement, error: unknown): void {\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.error, { detail: error, bubbles: true }));\n}\n\nexport function emitOipContextChange(element: HTMLElement, context: OipExtensionHostContext): void {\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.contextChange, { detail: context }));\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ExtensionLoaderService {\n private readonly loadedScripts = new Map<string, Promise<void>>();\n\n loadScript(scriptUrl: string): Promise<void> {\n const existing = this.loadedScripts.get(scriptUrl);\n if (existing) {\n return existing;\n }\n\n const loadPromise = new Promise<void>((resolve, reject) => {\n const script = document.createElement('script');\n script.type = 'module';\n script.src = scriptUrl;\n script.async = true;\n script.onload = () => resolve();\n script.onerror = () => {\n this.loadedScripts.delete(scriptUrl);\n reject(new Error(`Extension script could not be loaded: ${scriptUrl}`));\n };\n\n document.head.appendChild(script);\n });\n\n this.loadedScripts.set(scriptUrl, loadPromise);\n return loadPromise;\n }\n}\n","import { ChangeDetectorRef, Component, ElementRef, inject, OnDestroy, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SecurityComponent } from '../security/security.component';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Button } from 'primeng/button';\nimport { firstValueFrom } from 'rxjs';\nimport { ExtensionModulesApi } from '../../api/extension-modules.api';\nimport { BaseModuleComponent } from '../base-module/base-module.component';\nimport { ExtensionLoaderService } from '../../extension-host/extension-loader.service';\nimport { Router } from '@angular/router';\nimport {\n OipExtensionHostContext,\n OipExtensionModuleMetadata,\n OipExtensionNavigateEvent,\n OipExtensionNotifyEvent\n} from '../../extension-host/extension-host.types';\nimport { emitOipContextChange, OIP_EXTENSION_EVENTS } from '../../extension-host/extension-host.events';\n\n@Component({\n standalone: true,\n imports: [CommonModule, SecurityComponent, TranslatePipe, Button],\n providers: [ExtensionModulesApi],\n template: `\n @if (showContent) {\n <div class=\"min-h-[calc(100vh-10rem)] w-full\">\n @if (loadError) {\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ loadError }}</div>\n <p-button icon=\"pi pi-refresh\" label=\"Retry\" (onClick)=\"reloadExtension()\"></p-button>\n </div>\n } @else {\n <div #extensionContainer class=\"w-full\"></div>\n }\n </div>\n } @else if (showSettings) {\n <div class=\"flex flex-col md:flex-row gap-8\">\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'baseComponent.settings' | translate }}</div>\n <p-button icon=\"pi pi-save\" label=\"Save\" (onClick)=\"saveSettings(settings)\"></p-button>\n </div>\n </div>\n </div>\n } @else if (showSecurity) {\n <security [controller]=\"controller\" [id]=\"id\" />\n }\n `\n})\nexport class CustomElementExtensionModuleHostComponent\n extends BaseModuleComponent<unknown, unknown>\n implements OnDestroy\n{\n @ViewChild('extensionContainer')\n private set extensionContainer(element: ElementRef<HTMLElement> | undefined) {\n this.container = element;\n this.queueRenderExtension();\n }\n\n private readonly extensionLoader = inject(ExtensionLoaderService);\n private readonly router = inject(Router);\n private readonly hostChangeDetectorRef = inject(ChangeDetectorRef);\n private readonly extensionModulesApi = inject(ExtensionModulesApi);\n private container?: ElementRef<HTMLElement>;\n private extensionElement?: HTMLElement;\n private extensionMetadata?: OipExtensionModuleMetadata;\n private removeListeners: Array<() => void> = [];\n private renderQueued = false;\n private activeTabSyncQueued = false;\n private activeTabId = this.getCurrentActiveTabId();\n private destroyed = false;\n\n protected loadError: string | null = null;\n\n protected get showContent(): boolean {\n return this.isActiveTab('content');\n }\n\n protected get showSettings(): boolean {\n return this.isActiveTab('settings');\n }\n\n protected get showSecurity(): boolean {\n return this.isActiveTab('security');\n }\n\n private get extensionKey(): string {\n return this.route.snapshot.paramMap.get('extensionKey') ?? '';\n }\n\n constructor() {\n super();\n this.subscriptions.push(\n this.topBarService.activeId$.subscribe(() => {\n this.queueActiveTabSync();\n })\n );\n }\n\n protected override async onModuleInstanceChange(): Promise<void> {\n await this.loadExtensionMetadata();\n await this.renderExtension();\n }\n\n protected override onSecurityRightsChange(): void {\n this.updateExtensionContext();\n }\n\n override ngOnDestroy(): void {\n this.destroyed = true;\n this.destroyExtensionElement();\n super.ngOnDestroy();\n }\n\n async reloadExtension(): Promise<void> {\n this.loadError = null;\n this.extensionMetadata = undefined;\n await this.moduleLoadingService.track(this.loadExtensionMetadata());\n await this.renderExtension();\n }\n\n private async loadExtensionMetadata(): Promise<void> {\n if (this.extensionMetadata) {\n return;\n }\n\n if (!this.extensionKey) {\n this.loadError = 'Extension key is missing.';\n return;\n }\n\n this.extensionMetadata = (await this.extensionModulesApi.getExtensionModuleByKey({\n extensionKey: this.extensionKey\n })) as unknown as OipExtensionModuleMetadata;\n\n await this.loadExtensionTranslations(this.extensionMetadata);\n }\n\n /** Blocks the UI while the extension is (re)mounted, including the queued render after the view init. */\n private renderExtension(): Promise<void> {\n return this.moduleLoadingService.track(this.renderExtensionInternal());\n }\n\n private async renderExtensionInternal(): Promise<void> {\n if (this.destroyed || !this.container || !this.extensionMetadata || !this.showContent) {\n return;\n }\n\n try {\n this.loadError = null;\n this.destroyExtensionElement();\n await this.renderCustomElementExtension(this.extensionMetadata);\n } catch (error) {\n this.loadError = error instanceof Error ? error.message : 'Extension could not be loaded.';\n this.msgService.error(error);\n }\n }\n\n private queueRenderExtension(): void {\n if (this.renderQueued) {\n return;\n }\n this.renderQueued = true;\n queueMicrotask(() => {\n this.renderQueued = false;\n void this.renderExtension();\n });\n }\n\n private isActiveTab(id: string): boolean {\n return this.activeTabId === id;\n }\n\n private queueActiveTabSync(): void {\n const nextActiveTabId = this.getCurrentActiveTabId();\n if (this.activeTabId === nextActiveTabId || this.activeTabSyncQueued) {\n return;\n }\n\n this.activeTabSyncQueued = true;\n queueMicrotask(() => {\n this.activeTabSyncQueued = false;\n if (this.destroyed) {\n return;\n }\n\n this.activeTabId = this.getCurrentActiveTabId();\n this.hostChangeDetectorRef.detectChanges();\n\n if (this.showContent) {\n this.queueRenderExtension();\n } else {\n this.destroyExtensionElement();\n }\n });\n }\n\n private getCurrentActiveTabId(): string {\n return this.topBarService.activeTopBarItem?.id ?? 'content';\n }\n\n private updateExtensionContext(): void {\n if (!this.extensionElement || !this.extensionMetadata?.extensionKey) {\n return;\n }\n\n const context: OipExtensionHostContext = {\n moduleInstanceId: this.id,\n extensionKey: this.extensionMetadata.extensionKey,\n apiBasePath: this.buildUrl(`api/extensions/${this.extensionMetadata.extensionKey}`),\n settings: this.settings,\n locale: this.layoutService.language(),\n theme: this.layoutService.layoutConfig(),\n user: this.securityService.getCurrentUser(),\n activeTabId: this.topBarService.activeId ?? 'content',\n permissions: {\n canRead: this.canRead,\n canEdit: this.canEdit,\n canDelete: this.canDelete\n }\n };\n\n Object.assign(this.extensionElement, { oipContext: context });\n emitOipContextChange(this.extensionElement, context);\n }\n\n private attachListeners(element: HTMLElement): void {\n this.addListener(element, OIP_EXTENSION_EVENTS.titleChange, (event) => {\n const title = (event as CustomEvent<string>).detail;\n if (title) {\n this.appTitleService.setTitle(title);\n }\n });\n\n this.addListener(element, OIP_EXTENSION_EVENTS.settingsChange, (event) => {\n this.settings = (event as CustomEvent<unknown>).detail;\n void this.saveSettings(this.settings);\n });\n\n this.addListener(element, OIP_EXTENSION_EVENTS.notify, (event) => {\n const detail = (event as CustomEvent<OipExtensionNotifyEvent>).detail;\n const severity = detail?.severity ?? 'info';\n const message = detail?.detail ?? detail?.summary ?? '';\n switch (severity) {\n case 'success':\n this.msgService.success(message, detail?.summary);\n break;\n case 'warn':\n this.msgService.warn(message, detail?.summary);\n break;\n case 'error':\n this.msgService.error(message, detail?.summary);\n break;\n default:\n this.msgService.info(message, detail?.summary);\n }\n });\n\n this.addListener(element, OIP_EXTENSION_EVENTS.navigate, (event) => {\n const detail = (event as CustomEvent<OipExtensionNavigateEvent>).detail;\n if (detail?.commands) {\n void this.router.navigate(detail.commands as any[]);\n } else if (detail?.url) {\n void this.router.navigateByUrl(detail.url);\n }\n });\n\n this.addListener(element, OIP_EXTENSION_EVENTS.error, (event) => {\n this.msgService.error((event as CustomEvent<unknown>).detail);\n });\n }\n\n private buildUrl(path: string): string {\n const baseUrl = document.getElementsByTagName('base')[0]?.href ?? `${window.location.origin}/`;\n return `${baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`}${path}`;\n }\n\n private async loadExtensionTranslations(metadata: OipExtensionModuleMetadata): Promise<void> {\n const extensionKey = metadata.extensionKey ?? this.extensionKey;\n const apiBaseUrl = metadata.apiBaseUrl;\n if (!extensionKey || !apiBaseUrl) {\n return;\n }\n\n const lang = this.translateService.currentLang || this.layoutService.language() || 'en';\n const url = this.buildExtensionI18nUrl(apiBaseUrl, extensionKey, lang);\n try {\n await firstValueFrom(this.l10nService.loadTranslationsFromUrl(extensionKey, url, lang));\n } catch (error) {\n console.error(`No translations found for extension ${extensionKey}.${lang}.json`, error);\n }\n }\n\n private buildExtensionI18nUrl(apiBaseUrl: string, extensionKey: string, lang: string): string {\n return `${apiBaseUrl.replace(/\\/+$/, '')}/assets/i18n/${encodeURIComponent(extensionKey)}.${encodeURIComponent(lang)}.json`;\n }\n\n private addListener(element: HTMLElement, eventName: string, listener: EventListener): void {\n element.addEventListener(eventName, listener);\n this.removeListeners.push(() => element.removeEventListener(eventName, listener));\n }\n\n private destroyExtensionElement(): void {\n this.removeListeners.forEach((remove) => remove());\n this.removeListeners = [];\n this.extensionElement?.remove();\n this.extensionElement = undefined;\n }\n\n private async renderCustomElementExtension(metadata: OipExtensionModuleMetadata): Promise<void> {\n const { elementName, scriptUrl } = metadata;\n if (!this.container || !elementName || !scriptUrl) {\n this.loadError = 'Custom Element extension metadata is incomplete.';\n return;\n }\n\n await this.extensionLoader.loadScript(scriptUrl);\n await customElements.whenDefined(elementName);\n const element = document.createElement(elementName);\n this.extensionElement = element;\n this.attachListeners(element);\n this.container.nativeElement.appendChild(element);\n this.updateExtensionContext();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ComponentRef,\n EnvironmentInjector,\n inject,\n Injector,\n OnDestroy,\n Type,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { loadRemoteModule } from '@angular-architects/module-federation';\nimport { Button } from 'primeng/button';\nimport { firstValueFrom } from 'rxjs';\nimport { BaseModuleComponent } from '../base-module/base-module.component';\nimport { emitOipContextChange } from '../../extension-host/extension-host.events';\nimport { ExtensionModulesApi } from '../../api/extension-modules.api';\nimport { OipExtensionHostContext, OipExtensionModuleMetadata } from '../../extension-host/extension-host.types';\nimport { CustomElementExtensionModuleHostComponent } from '../custom-element-extension-module-host/custom-element-extension-module-host.component';\n\n@Component({\n standalone: true,\n imports: [CommonModule, Button],\n providers: [ExtensionModulesApi],\n template: `\n @if (loadError) {\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ loadError }}</div>\n <p-button icon=\"pi pi-refresh\" label=\"Retry\" (onClick)=\"reloadExtension()\"></p-button>\n </div>\n } @else {\n <ng-container #extensionContainer></ng-container>\n }\n `\n})\nexport class ExtensionModuleHostComponent extends BaseModuleComponent<unknown, unknown> implements OnDestroy {\n @ViewChild('extensionContainer', { read: ViewContainerRef })\n private set extensionViewContainer(viewContainer: ViewContainerRef | undefined) {\n this.viewContainer = viewContainer;\n this.queueRenderExtension();\n }\n\n private readonly injector = inject(Injector);\n private readonly environmentInjector = inject(EnvironmentInjector);\n private readonly extensionModulesApi = inject(ExtensionModulesApi);\n private viewContainer?: ViewContainerRef;\n private extensionComponent?: ComponentRef<unknown>;\n private extensionElement?: HTMLElement;\n private extensionMetadata?: OipExtensionModuleMetadata;\n private renderQueued = false;\n private destroyed = false;\n\n protected loadError: string | null = null;\n\n private get extensionKey(): string {\n return this.route.snapshot.paramMap.get('extensionKey') ?? '';\n }\n\n constructor() {\n super();\n this.subscriptions.push(\n this.topBarService.activeId$.subscribe(() => {\n this.updateExtensionContext();\n })\n );\n }\n\n async reloadExtension(): Promise<void> {\n this.loadError = null;\n this.extensionMetadata = undefined;\n await this.moduleLoadingService.track(this.loadExtensionMetadata());\n await this.renderExtension();\n }\n\n protected override async onModuleInstanceChange(): Promise<void> {\n await this.loadExtensionMetadata();\n await this.renderExtension();\n }\n\n protected override onSecurityRightsChange(): void {\n this.updateExtensionContext();\n }\n\n override ngOnDestroy(): void {\n this.destroyed = true;\n this.destroyExtensionComponent();\n super.ngOnDestroy();\n }\n\n private async loadExtensionMetadata(): Promise<void> {\n if (this.extensionMetadata) {\n return;\n }\n\n if (!this.extensionKey) {\n this.loadError = 'Extension key is missing.';\n return;\n }\n\n this.extensionMetadata = (await this.extensionModulesApi.getExtensionModuleByKey({\n extensionKey: this.extensionKey\n })) as unknown as OipExtensionModuleMetadata;\n\n await this.loadExtensionTranslations(this.extensionMetadata);\n }\n\n /** Blocks the UI while the extension is (re)mounted, including the queued render after the view init. */\n private renderExtension(): Promise<void> {\n return this.moduleLoadingService.track(this.renderExtensionInternal());\n }\n\n private async renderExtensionInternal(): Promise<void> {\n if (this.destroyed || !this.viewContainer) {\n return;\n }\n\n try {\n this.loadError = null;\n await this.loadExtensionMetadata();\n if (!this.extensionMetadata) {\n return;\n }\n\n this.destroyExtensionComponent();\n\n if (this.extensionMetadata.loadType === 'moduleFederation') {\n await this.renderFederatedExtension(this.extensionMetadata);\n } else {\n this.extensionComponent = this.viewContainer.createComponent(CustomElementExtensionModuleHostComponent, {\n injector: this.injector,\n environmentInjector: this.environmentInjector\n });\n }\n } catch (error) {\n this.loadError = error instanceof Error ? error.message : 'Extension could not be loaded.';\n console.error(error);\n }\n }\n\n private queueRenderExtension(): void {\n if (this.renderQueued) {\n return;\n }\n this.renderQueued = true;\n queueMicrotask(() => {\n this.renderQueued = false;\n void this.renderExtension();\n });\n }\n\n private destroyExtensionComponent(): void {\n this.extensionComponent?.destroy();\n this.extensionComponent = undefined;\n this.extensionElement = undefined;\n this.viewContainer?.clear();\n }\n\n private async renderFederatedExtension(metadata: OipExtensionModuleMetadata): Promise<void> {\n const { remoteEntryUrl, exposedModule, componentName } = metadata;\n if (!remoteEntryUrl || !exposedModule || !componentName) {\n this.loadError = 'Module Federation extension metadata is incomplete.';\n return;\n }\n\n const remoteModule = await loadRemoteModule<Record<string, Type<unknown>>>({\n type: 'module',\n remoteEntry: remoteEntryUrl,\n exposedModule\n });\n const component = remoteModule[componentName];\n if (!component) {\n throw new Error(`Remote component '${componentName}' was not exported by '${exposedModule}'.`);\n }\n\n this.extensionComponent = this.viewContainer?.createComponent(component, {\n environmentInjector: this.environmentInjector\n });\n this.extensionElement = this.extensionComponent?.location.nativeElement as HTMLElement | undefined;\n this.updateExtensionContext();\n }\n\n private async loadExtensionTranslations(metadata: OipExtensionModuleMetadata): Promise<void> {\n const extensionKey = metadata.extensionKey ?? this.extensionKey;\n const apiBaseUrl = metadata.apiBaseUrl;\n if (!extensionKey || !apiBaseUrl) {\n return;\n }\n\n const lang = this.translateService.currentLang || this.layoutService.language() || 'en';\n for (const namespace of this.getExtensionTranslationNamespaces(metadata, extensionKey)) {\n const url = this.buildExtensionI18nUrl(apiBaseUrl, namespace, lang);\n try {\n await firstValueFrom(this.l10nService.loadTranslationsFromUrl(namespace, url, lang));\n return;\n } catch (error) {\n console.error(`No translations found for extension ${namespace}.${lang}.json`, error);\n }\n }\n }\n\n private buildExtensionI18nUrl(apiBaseUrl: string, extensionKey: string, lang: string): string {\n return `${apiBaseUrl.replace(/\\/+$/, '')}/assets/i18n/${encodeURIComponent(extensionKey)}.${encodeURIComponent(lang)}.json`;\n }\n\n private getExtensionTranslationNamespaces(metadata: OipExtensionModuleMetadata, extensionKey: string): string[] {\n const namespaces = [extensionKey];\n const componentNamespace = this.toKebabCase(metadata.componentName?.replace(/Component$/, '') ?? '');\n if (componentNamespace && !namespaces.includes(componentNamespace)) {\n namespaces.push(componentNamespace);\n }\n\n return namespaces;\n }\n\n private toKebabCase(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n }\n\n private updateExtensionContext(): void {\n if (!this.extensionElement || !this.extensionMetadata?.extensionKey) {\n return;\n }\n\n const context: OipExtensionHostContext = {\n moduleInstanceId: this.id,\n extensionKey: this.extensionMetadata.extensionKey,\n apiBasePath: this.buildUrl(`api/extensions/${this.extensionMetadata.extensionKey}`),\n settings: this.settings,\n locale: this.layoutService.language(),\n theme: this.layoutService.layoutConfig(),\n user: this.securityService.getCurrentUser(),\n activeTabId: this.topBarService.activeId ?? 'content',\n permissions: {\n canRead: this.canRead,\n canEdit: this.canEdit,\n canDelete: this.canDelete\n }\n };\n\n Object.assign(this.extensionElement, { oipContext: context });\n emitOipContextChange(this.extensionElement, context);\n }\n\n private buildUrl(path: string): string {\n const baseUrl = document.getElementsByTagName('base')[0]?.href ?? `${window.location.origin}/`;\n return `${baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`}${path}`;\n }\n}\n","import { Component } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/no-modules.en.json';\nimport ru from './l10n/no-modules.ru.json';\n\n/**\n * Landing page shown when the user has no module instance to open.\n *\n * Rendered inside the shell on purpose: the menu and the top bar stay available, so an\n * administrator can keep working while a regular user sees why the page is empty.\n */\n@Component({\n selector: 'app-no-modules',\n template: `<div class=\"flex flex-col items-center justify-center text-center gap-4 py-20\">\n <i class=\"pi pi-inbox text-5xl text-surface-400\"></i>\n <h1 class=\"text-surface-900 dark:text-surface-0 font-bold text-2xl lg:text-3xl m-0\">\n {{ 'noModules.title' | translate }}\n </h1>\n <div class=\"text-surface-600 dark:text-surface-200 max-w-2xl\">{{ 'noModules.description' | translate }}</div>\n </div>`,\n imports: [TranslateModule],\n standalone: true\n})\nexport class NoModulesComponent {\n private readonly translations = provideTranslations({ en, ru });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\nimport { SecurityService } from './security.service';\n\n/**\n * A route guard that ensures the user is authenticated and has a valid access token.\n * If the access token is expired, it attempts to refresh the session.\n * If authentication fails or refresh is unsuccessful, redirects to the unauthorized page.\n */\n@Injectable()\nexport class AuthGuardService {\n private readonly oidcSecurityService = inject(SecurityService);\n\n /**\n * Checks whether the route can be activated.\n * - Returns `true` if the user is authenticated and the token is valid.\n * - Attempts to refresh the token if expired.\n * - Starts the authorization flow if not authenticated or refresh fails.\n *\n * @returns {Observable<boolean>} A stream resolving to true (allow), or false after starting authorization.\n */\n canActivate(returnUrl = '/'): Observable<boolean> {\n this.oidcSecurityService.auth();\n return this.oidcSecurityService.isAuthenticated().pipe(\n map((authenticated) => {\n if (authenticated) {\n return true;\n }\n\n this.oidcSecurityService.authorize(returnUrl);\n return false;\n })\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { MenuApi } from '../api/menu.api';\nimport { SecurityService } from './security.service';\n\n/**\n * Reads the rights the current user has on a module instance.\n *\n * Results are cached per instance and dropped whenever the authenticated user changes.\n */\n@Injectable()\nexport class ModuleInstanceRightsService {\n public static readonly readRight = 'read';\n\n private readonly menuApi = inject(MenuApi);\n private readonly securityService = inject(SecurityService);\n private readonly cache = new Map<number, Promise<string[]>>();\n private cachedIdentity: string | undefined = undefined;\n\n constructor() {\n this.securityService.payload.subscribe((payload) => {\n // Rights depend on both the user and the roles of the current session.\n const roles: string[] = payload?.realm_access?.roles ?? [];\n const identity = `${payload?.preferred_username ?? ''}|${[...roles].sort().join(',')}`;\n if (identity !== this.cachedIdentity) {\n this.cachedIdentity = identity;\n this.clearCache();\n }\n });\n }\n\n /**\n * Gets the rights of the current user on the given module instance.\n */\n public getRights(moduleInstanceId: number): Promise<string[]> {\n const cached = this.cache.get(moduleInstanceId);\n if (cached) {\n return cached;\n }\n\n const request = this.menuApi\n .getModuleInstanceRights({ id: moduleInstanceId })\n .then((rights) => rights ?? [])\n .catch((error) => {\n this.cache.delete(moduleInstanceId);\n throw error;\n });\n\n this.cache.set(moduleInstanceId, request);\n return request;\n }\n\n /**\n * Checks whether the current user has the `read` right on the given module instance.\n */\n public async canRead(moduleInstanceId: number): Promise<boolean> {\n const rights = await this.getRights(moduleInstanceId);\n return rights.includes(ModuleInstanceRightsService.readRight);\n }\n\n /**\n * Drops every cached result, for example after module security was changed.\n */\n public clearCache(): void {\n this.cache.clear();\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateChildFn, Router } from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { ModuleInstanceRightsService } from './module-instance-rights.service';\nimport { SecurityService } from './security.service';\n\n/**\n * Route data flag marking a route that only administrators may open.\n */\nexport interface ModuleAccessRouteData {\n requireAdmin?: boolean;\n}\n\n/**\n * Guards module routes against direct navigation without the required rights.\n *\n * - Routes flagged with `data: { requireAdmin: true }` require the `admin` role.\n * - Routes carrying an `:id` segment require the `read` right on that module instance.\n * - Everything else is left to {@link AuthGuardService}.\n *\n * Denied navigation is redirected to the access denied page. This is a UX guard only:\n * the backend checks the same rights on every module endpoint.\n */\nexport const moduleAccessGuard: CanActivateChildFn = async (route) => {\n const router = inject(Router);\n const securityService = inject(SecurityService);\n const rightsService = inject(ModuleInstanceRightsService);\n const accessDenied = router.parseUrl('/access');\n\n if ((route.data as ModuleAccessRouteData)?.requireAdmin) {\n // Wait for the session payload so a direct URL entry does not read roles before they are loaded.\n await firstValueFrom(\n securityService.payload.pipe(\n filter((payload) => payload != null),\n take(1)\n )\n );\n return securityService.isAdmin() ? true : accessDenied;\n }\n\n const routeId = route.paramMap.get('id');\n if (routeId == null) {\n return true;\n }\n\n const moduleInstanceId = Number(routeId);\n if (!Number.isFinite(moduleInstanceId)) {\n return accessDenied;\n }\n\n try {\n return (await rightsService.canRead(moduleInstanceId)) ? true : accessDenied;\n } catch (error) {\n console.error('Failed to load module instance rights', error);\n return accessDenied;\n }\n};\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { FilterMetadata } from 'primeng/api';\nimport { Table } from 'primeng/table';\n\n/**\n * Prime-ng table filter service\n */\n@Injectable()\nexport class TableFilterService {\n public filterState: { [field: string]: boolean } = {};\n private filtersState = new BehaviorSubject<boolean>(false);\n public filtersState$ = this.filtersState.asObservable();\n\n /**\n * Updates filter state\n * @param filters\n */\n public updateFiltersState(filters: any) {\n const hasFilters = Object.values(filters).some((filterArray: any) => {\n if (Array.isArray(filterArray)) {\n return filterArray.some((filter) => !!filter.value);\n }\n return false;\n });\n this.filtersState.next(hasFilters);\n }\n\n /**\n * Checks if a filter is active\n * @param {FilterMetadata | FilterMetadata[]} filter\n * @return {boolean}\n */\n public isFilterActive(filter: FilterMetadata | FilterMetadata[]): boolean {\n if (!filter) return false;\n\n if (Array.isArray(filter)) {\n return filter.some((f) => !!f.value && f.matchMode !== 'unspecified');\n } else {\n return !!filter.value && filter.matchMode !== 'unspecified';\n }\n }\n\n /**\n * Checks the state of table filters\n * @param {Table} table\n * @param {FilterMetadata | FilterMetadata[]} filters\n */\n public updateFilterFieldStates(table: Table, filters: FilterMetadata | FilterMetadata[]) {\n if (table && filters) {\n Object.keys(filters).forEach((field) => {\n const filter = filters[field];\n this.filterState[field] = this.isFilterActive(filter);\n });\n }\n this.updateFiltersState(filters);\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport {\n APP_THEME_PRESETS,\n APP_THEME_PRESETS_MERGE_MODE,\n AppThemePreset,\n AppThemePresetMergeMode\n} from './theme-presets.token';\n\nexport interface ProvideAppThemesOptions {\n mode?: AppThemePresetMergeMode;\n}\n\nexport function provideAppThemes(themes: AppThemePreset[], options?: ProvideAppThemesOptions): EnvironmentProviders {\n const mode = options?.mode ?? 'mergeWithDefaults';\n return makeEnvironmentProviders([\n { provide: APP_THEME_PRESETS, useValue: themes },\n { provide: APP_THEME_PRESETS_MERGE_MODE, useValue: mode }\n ]);\n}\n\nexport function mergeWithDefaults(themes: AppThemePreset[]): EnvironmentProviders {\n return provideAppThemes(themes, { mode: 'mergeWithDefaults' });\n}\n\nexport function replaceDefaults(themes: AppThemePreset[]): EnvironmentProviders {\n return provideAppThemes(themes, { mode: 'replaceDefaults' });\n}\n","import { definePreset } from '@primeng/themes';\nimport Aura from '@primeng/themes/aura';\nimport { primitive } from '@primeng/themes/aura/base';\nimport { AppThemePreset } from './theme-presets.token';\n\nexport const defaultTheme: AppThemePreset[] = [\n {\n id: 'Oip',\n label: 'Oip',\n preset: definePreset(Aura, {\n components: {\n toolbar: {\n colorScheme: {\n light: {\n root: {\n borderRadius: '0.7rem'\n }\n },\n dark: {\n root: {\n borderRadius: '0.7rem'\n }\n }\n }\n }\n }\n }),\n primaryColors: {\n rose: primitive['red']\n },\n surfaceColors: {\n zinc: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#a1a1aa',\n 500: '#71717a',\n 600: '#52525b',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n 950: '#09090b'\n }\n }\n }\n];\n","import { inject } from '@angular/core';\nimport { HttpInterceptorFn } from '@angular/common/http';\nimport { switchMap, take } from 'rxjs/operators';\nimport { LayoutService } from '../services/app.layout.service';\nimport { SecurityService } from '../services/security.service';\n\nexport const langIntercept: HttpInterceptorFn = (req, next) => {\n const layoutService = inject(LayoutService);\n const securityService = inject(SecurityService);\n const lang = layoutService.language() ? layoutService.language() : 'en';\n const headers = req.headers.set('Accept-language', lang).set('X-Timezone', layoutService.timeZone());\n const reqWithCredentials = req.clone({\n headers,\n withCredentials: true\n });\n\n if (!['POST', 'PUT', 'PATCH', 'DELETE'].includes(req.method.toUpperCase())) {\n return next(reqWithCredentials);\n }\n\n if (req.url.includes('/api/security/create-auth-session') || req.url.includes('/api/security/get-auth-csrf-token')) {\n return next(reqWithCredentials);\n }\n\n return securityService.getCsrfToken().pipe(\n take(1),\n switchMap((csrfToken) =>\n next(\n csrfToken?.token\n ? reqWithCredentials.clone({\n headers: reqWithCredentials.headers.set(csrfToken.headerName, csrfToken.token)\n })\n : reqWithCredentials\n )\n )\n );\n};\n","import { LocationStrategy, PathLocationStrategy } from '@angular/common';\nimport { HttpClient, provideHttpClient, withFetch, withInterceptors } from '@angular/common/http';\nimport { importProvidersFrom, makeEnvironmentProviders } from '@angular/core';\nimport { TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\nimport { MessageService } from 'primeng/api';\nimport { MenuApi } from '../api/menu.api';\nimport { NotificationApi } from '../api/notification.api';\nimport { SecurityApi } from '../api/security.api';\nimport { UserProfileApi } from '../api/user-profile.api';\nimport { langIntercept } from '../intercepts/i18n-intercept.service';\nimport { AuthGuardService } from '../services/auth-guard.service';\nimport { ModuleInstanceRightsService } from '../services/module-instance-rights.service';\nimport { NotificationService } from '../services/notification.service';\nimport { BffSecurityService, SecurityService } from '../services/security.service';\nimport { UserService } from '../services/user.service';\n\nconst httpLoaderFactory: (http: HttpClient) => TranslateHttpLoader = (http: HttpClient) =>\n new TranslateHttpLoader(http);\n\nexport function provideOip() {\n return makeEnvironmentProviders([\n provideHttpClient(withInterceptors([langIntercept]), withFetch()),\n { provide: LocationStrategy, useClass: PathLocationStrategy },\n { provide: SecurityService, useClass: BffSecurityService },\n AuthGuardService,\n ModuleInstanceRightsService,\n MessageService,\n UserService,\n NotificationService,\n UserProfileApi,\n SecurityApi,\n NotificationApi,\n MenuApi,\n importProvidersFrom([\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: httpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ])\n ]);\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport { ApiExceptionResponse, FolderModuleSettings } from \"./data-contracts\";\nimport { HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class FolderModuleApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getModuleInstanceSettings = (params: RequestParams = {}) =>\n this.request<FolderModuleSettings, ApiExceptionResponse>({\n path: `/api/folder-module/get-module-instance-settings`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport { ApiExceptionResponse, IframeModuleSettings } from \"./data-contracts\";\nimport { HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class IframeModuleApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getModuleInstanceSettings = (params: RequestParams = {}) =>\n this.request<IframeModuleSettings, ApiExceptionResponse>({\n path: `/api/iframe-module/get-module-instance-settings`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n"," import { inject, Type } from '@angular/core';\nimport { CanActivateFn, Route, Router, Routes } from '@angular/router';\nimport { AppLayoutComponent } from '../components/app.layout/app.layout.component';\nimport { AccessComponent } from '../components/auth/access/access.component';\nimport { NotfoundComponent } from '../components/notfound/notfound.component';\nimport { AuthGuardService } from '../services/auth-guard.service';\nimport { ModuleLoadingService } from '../services/module-loading.service';\nimport { moduleAccessGuard } from '../services/module-access-guard.service';\nimport { StartPageService } from '../services/start-page.service';\n\n/**\n * Guard that requires an authenticated session and preserves the requested url as the return url.\n *\n * Use it on every application route rendered inside the oip shell instead of repeating the\n * `inject(AuthGuardService)` lambda.\n */\nexport const oipAuthGuard: CanActivateFn = (_, state) => inject(AuthGuardService).canActivate(state.url);\n\n/**\n * Route data read by {@link oipStartRedirectGuard}.\n */\nexport interface StartRouteData {\n /** Explicit start route of the host application, taking precedence over the user's own choice. */\n startRoute?: string;\n /** Where to go when the user has no module available. */\n noModulesPath?: string;\n}\n\n/**\n * Redirects the empty route to the module instance the user lands on by default.\n *\n * The order is: the explicit `startRoute` of the host application, then the module the user marked\n * as their start page, then the first module available to them, and finally the no modules page.\n */\nexport const oipStartRedirectGuard: CanActivateFn = async (route) => {\n const router = inject(Router);\n const startPageService = inject(StartPageService);\n const moduleLoading = inject(ModuleLoadingService);\n const data = (route.data ?? {}) as StartRouteData;\n const noModules = router.parseUrl(`/${data.noModulesPath ?? 'no-modules'}`);\n\n if (data.startRoute) {\n return router.parseUrl(data.startRoute);\n }\n\n try {\n // Resolving reads the menu over the network, so keep the blocker up until the target is known.\n return (await moduleLoading.track(startPageService.resolveStartUrl())) ?? noModules;\n } catch (error) {\n console.error('Failed to resolve the start module', error);\n return noModules;\n }\n};\n\n/**\n * Page shown when the user has no module instance to open.\n */\nexport function oipNoModulesRoute(path = 'no-modules'): Route {\n return {\n path,\n loadComponent: () => import('../components/no-modules/no-modules.component').then((m) => m.NoModulesComponent),\n canActivate: [oipAuthGuard]\n };\n}\n\n/**\n * Empty route redirecting to the start module of the current user.\n *\n * Registered last among the shell children so a host application can claim the empty path itself.\n */\nexport function oipStartRoute(path = '', data: StartRouteData = {}): Route {\n return {\n path,\n pathMatch: 'full',\n canActivate: [oipAuthGuard, oipStartRedirectGuard],\n children: [],\n data\n };\n}\n\n/**\n * Access denied page. Referenced by {@link AuthGuardService} and {@link moduleAccessGuard} redirects,\n * so keep it registered unless the host application provides its own `access` route.\n */\nexport function oipAccessRoute(path = 'access'): Route {\n return { path, component: AccessComponent };\n}\n\n/** Authentication error page. */\nexport function oipErrorRoute(path = 'error'): Route {\n return {\n path,\n loadComponent: () => import('../components/auth/error/error.component').then((m) => m.ErrorComponent)\n };\n}\n\n/** Current user profile. */\nexport function oipProfileRoute(path = 'profile'): Route {\n return {\n path,\n loadComponent: () =>\n import('../components/user-profile/user-profile.component').then((m) => m.UserProfileComponent),\n canActivate: [oipAuthGuard]\n };\n}\n\n/** Application configuration. */\nexport function oipConfigRoute(path = 'config'): Route {\n return {\n path,\n loadComponent: () => import('../components/config/config.component').then((m) => m.ConfigComponent),\n canActivate: [oipAuthGuard]\n };\n}\n\n/** Registered applications, administrators only. */\nexport function oipApplicationsRoute(path = 'applications'): Route {\n return {\n path,\n loadComponent: () =>\n import('../components/applications/applications.component').then((m) => m.ApplicationsComponent),\n canActivate: [oipAuthGuard],\n data: { requireAdmin: true }\n };\n}\n\n/** Module registry, administrators only. */\nexport function oipModulesRoute(path = 'modules'): Route {\n return {\n path,\n loadComponent: () => import('../components/app-modules/app-modules.component').then((m) => m.AppModulesComponent),\n canActivate: [oipAuthGuard],\n data: { requireAdmin: true }\n };\n}\n\n/** Discussion module. The path must keep an `:id` segment. */\nexport function oipDiscussionRoute(path = 'discussion/:id'): Route {\n return {\n path,\n loadComponent: () => import('../components/discussion/discussion.component').then((m) => m.DiscussionComponent),\n canActivate: [oipAuthGuard]\n };\n}\n\n/** Database migration module. The path must keep an `:id` segment. */\nexport function oipDbMigrationRoute(path = 'db-migration/:id'): Route {\n return {\n path,\n loadComponent: () =>\n import('../components/db-migration/db-migration.component').then((m) => m.DbMigrationComponent),\n canActivate: [oipAuthGuard]\n };\n}\n\n/** Iframe module host. The path must keep an `:id` segment. */\nexport function oipIframeModuleRoute(path = 'iframe-module/:id'): Route {\n return {\n path,\n loadComponent: () =>\n import('../components/iframe-module/iframe-module.component').then((m) => m.IframeModuleComponent),\n canActivate: [oipAuthGuard]\n };\n}\n\n/** Extension module host. The path must keep the `:extensionKey` and `:id` segments. */\nexport function oipExtensionsRoute(path = 'extensions/:extensionKey/:id'): Route {\n return {\n path,\n loadComponent: () =>\n import('../components/extension-module-host/extension-module-host.component').then(\n (m) => m.ExtensionModuleHostComponent\n ),\n canActivate: [oipAuthGuard]\n };\n}\n\n/**\n * Switch for a built-in route.\n *\n * - `true` enables the route under its default path.\n * - `false` disables it.\n * - a string enables it under that path, which must keep the same route parameters as the default.\n */\nexport type OipRouteToggle = boolean | string;\n\n/**\n * Built-in routes provided by oip-common. Every one of them is enabled by default; disable the ones\n * a host application does not expose.\n */\nexport interface OipRouteFeatures {\n /** Access denied page. Default path: `access`. */\n access?: OipRouteToggle;\n /** Authentication error page. Default path: `error`. */\n error?: OipRouteToggle;\n /** Current user profile. Default path: `profile`. */\n profile?: OipRouteToggle;\n /** Application configuration. Default path: `config`. */\n config?: OipRouteToggle;\n /** Registered applications, administrators only. Default path: `applications`. */\n applications?: OipRouteToggle;\n /** Module registry, administrators only. Default path: `modules`. */\n modules?: OipRouteToggle;\n /** Discussion module. Default path: `discussion/:id`. */\n discussion?: OipRouteToggle;\n /** Database migration module. Default path: `db-migration/:id`. */\n dbMigration?: OipRouteToggle;\n /** Iframe module host. Default path: `iframe-module/:id`. */\n iframeModule?: OipRouteToggle;\n /** Extension module host. Default path: `extensions/:extensionKey/:id`. */\n extensions?: OipRouteToggle;\n /** Page shown when no module is available. Default path: `no-modules`. */\n noModules?: OipRouteToggle;\n /** Empty route redirecting to the start module. Default path: `` (the shell root). */\n start?: OipRouteToggle;\n}\n\n/**\n * Options accepted by {@link provideOipRoutes}.\n */\nexport interface OipRoutesOptions {\n /** Application specific routes rendered inside the shell. */\n children?: Routes;\n /** Which built-in routes to register, and under which paths. All of them are on by default. */\n features?: OipRouteFeatures;\n /**\n * Route opened by the empty path, overriding the start module of the user. Leave it unset to land\n * on the module the user chose, or on the first module available to them.\n */\n startRoute?: string;\n /** Shell component wrapping every child route. Default: {@link AppLayoutComponent}. */\n layout?: Type<unknown>;\n /** Routes registered outside the shell, before the not found handling. */\n rootRoutes?: Routes;\n /** Path of the not found page. Default: `notfound`. */\n notFoundPath?: string;\n /** Path of the unauthorized page. Default: `unauthorized`. */\n unauthorizedPath?: string;\n /**\n * Whether to append the `**` route redirecting to the not found page.\n * Disable it when the host application registers its own catch-all after these routes.\n * Default: `true`.\n */\n wildcard?: boolean;\n}\n\nfunction builtInRoute(toggle: OipRouteToggle | undefined, factory: (path?: string) => Route, into: Routes): void {\n if (toggle === false) {\n return;\n }\n into.push(typeof toggle === 'string' ? factory(toggle) : factory());\n}\n\n/**\n * Builds the standard oip route tree: an authenticated shell holding the application routes and the\n * built-in pages, followed by the unauthorized, not found and catch-all routes.\n *\n * The returned array is ordered so that the `**` route stays last; concatenating anything after it\n * makes those routes unreachable.\n *\n * @example\n * export const appRoutes = provideOipRoutes({\n * children: [\n * {\n * path: 'dashboard/:id',\n * loadComponent: () => import('./dashboard.component').then((m) => m.DashboardComponent),\n * canActivate: [oipAuthGuard]\n * }\n * ],\n * features: { dbMigration: 'legacy-migration/:id', modules: false },\n * startRoute: '/dashboard/1'\n * });\n */\nexport function provideOipRoutes(options: OipRoutesOptions = {}): Routes {\n const features = options.features ?? {};\n const children: Routes = [...(options.children ?? [])];\n\n builtInRoute(features.access, oipAccessRoute, children);\n builtInRoute(features.error, oipErrorRoute, children);\n builtInRoute(features.profile, oipProfileRoute, children);\n builtInRoute(features.config, oipConfigRoute, children);\n builtInRoute(features.applications, oipApplicationsRoute, children);\n builtInRoute(features.modules, oipModulesRoute, children);\n builtInRoute(features.discussion, oipDiscussionRoute, children);\n builtInRoute(features.dbMigration, oipDbMigrationRoute, children);\n builtInRoute(features.iframeModule, oipIframeModuleRoute, children);\n builtInRoute(features.extensions, oipExtensionsRoute, children);\n builtInRoute(features.noModules, oipNoModulesRoute, children);\n\n // Registered last so a host application that declares its own empty path keeps it.\n if (features.start !== false && !children.some((route) => route.path === '')) {\n const noModulesPath = typeof features.noModules === 'string' ? features.noModules : 'no-modules';\n const startPath = typeof features.start === 'string' ? features.start : '';\n children.push(oipStartRoute(startPath, { startRoute: options.startRoute, noModulesPath }));\n }\n\n const notFoundPath = options.notFoundPath ?? 'notfound';\n\n const routes: Routes = [\n {\n path: '',\n component: options.layout ?? AppLayoutComponent,\n canActivate: [oipAuthGuard],\n canActivateChild: [moduleAccessGuard],\n children\n },\n {\n path: options.unauthorizedPath ?? 'unauthorized',\n loadComponent: () =>\n import('../components/auth/unauthorized/unauthorized.component').then((m) => m.UnauthorizedComponent)\n },\n ...(options.rootRoutes ?? []),\n { path: notFoundPath, component: NotfoundComponent }\n ];\n\n if (options.wildcard !== false) {\n routes.push({ path: '**', redirectTo: `/${notFoundPath}` });\n }\n\n return routes;\n}\n","// Components\nexport { BaseModuleComponent } from './components/base-module/base-module.component';\nexport { SecurityComponent } from './components/security/security.component';\nexport { AppTopbar } from './components/top-bar/top-bar.component';\nexport { FooterComponent } from './components/footer/footer.component';\nexport { MenuComponent } from './components/menu/menu.component';\nexport { AppLayoutComponent } from './components/app.layout/app.layout.component';\nexport { SidebarComponent } from './components/sidebar/sidebar.component';\nexport { LogoComponent } from './components/logo/logo.component';\nexport { NotfoundComponent } from './components/notfound/notfound.component';\nexport { UnauthorizedComponent } from './components/auth/unauthorized/unauthorized.component';\nexport { AccessComponent } from './components/auth/access/access.component';\nexport { ErrorComponent } from './components/auth/error/error.component';\nexport { UserProfileComponent } from './components/user-profile/user-profile.component';\nexport { ConfigComponent } from './components/config/config.component';\nexport { DbMigrationComponent } from './components/db-migration/db-migration.component';\nexport { AppModulesComponent } from './components/app-modules/app-modules.component';\nexport { ApplicationsComponent } from './components/applications/applications.component';\nexport { AppConfiguratorComponent } from './components/app-configurator/app-configurator.component';\nexport { AppFloatingConfiguratorComponent } from './components/app-floating-configurator/app-floating-configurator.component';\nexport { DiscussionComponent } from './components/discussion/discussion.component';\nexport { IframeModuleComponent } from './components/iframe-module/iframe-module.component';\nexport { ExtensionModuleHostComponent } from './components/extension-module-host/extension-module-host.component';\nexport { UserNotificationsComponent } from './components/user-notifications/user-notifications.component';\nexport { AppTopbarApplicationSwitcherComponent } from './components/top-bar-application-switcher/top-bar-application-switcher.component';\nexport { BlockLoaderComponent } from './components/block-loader/block-loader.component';\nexport { NoModulesComponent } from './components/no-modules/no-modules.component';\n\n// DTOs\nexport { TopBarDto } from './dtos/top-bar.dto';\nexport { SecurityDto } from './dtos/security.dto';\nexport { PutSecurityDto } from './dtos/put-security.dto';\nexport { NoSettingsDto } from './dtos/no-settings.dto';\n\n// Services\nexport { TopBarService } from './services/top-bar.service';\nexport { AuthCsrfToken, BffSecurityService, SecurityService } from './services/security.service';\nexport { MsgService } from './services/msg.service';\nexport { AuthGuardService } from './services/auth-guard.service';\nexport { moduleAccessGuard, ModuleAccessRouteData } from './services/module-access-guard.service';\nexport { ModuleInstanceRightsService } from './services/module-instance-rights.service';\nexport { AppConfig, LayoutService } from './services/app.layout.service';\nexport { MenuService } from './services/app.menu.service';\nexport { UserService } from './services/user.service';\nexport { L10nService, LanguageDto } from './services/l10n.service';\nexport { provideLogoComponent, LogoService, LOGO_COMPONENT_TOKEN } from './services/logo.service';\nexport { provideAppInfo, AppInfoService, APP_INFO_TOKEN, AppInfo, AppInfoValue } from './services/app-info.service';\nexport { NotificationService } from './services/notification.service';\nexport { ApplicationRegistryService } from './services/application-registry.service';\nexport { TableFilterService } from './services/table-filter.service';\nexport { ModuleLoadingService } from './services/module-loading.service';\nexport { StartPageService } from './services/start-page.service';\nexport { ExtensionLoaderService } from './extension-host/extension-loader.service';\nexport {\n APP_THEME_PRESETS,\n APP_THEME_PRESETS_MERGE_MODE,\n AppThemePreset,\n AppThemePresetLoader,\n AppThemePresetMergeMode\n} from './services/theme-presets.token';\nexport { mergeWithDefaults, provideAppThemes, replaceDefaults } from './services/theme-presets.provider';\nexport { defaultTheme } from './services/app-default.theme';\nexport { provideOip } from './providers/oip.provider';\n\n// Events\nexport { MenuChangeEvent } from './events/menu-change.event';\n\n// other\nexport { langIntercept } from './intercepts/i18n-intercept.service';\nexport { ContentType, HttpClient, RequestParams } from './api/http-client';\nexport {\n OipExtensionHostContext,\n OipExtensionLoadType,\n OipExtensionManifest,\n OipExtensionModuleMetadata,\n OipExtensionNavigateEvent,\n OipExtensionNotifyEvent\n} from './extension-host/extension-host.types';\nexport {\n OIP_EXTENSION_EVENTS,\n emitOipContextChange,\n emitOipError,\n emitOipNavigate,\n emitOipNotify,\n emitOipSettingsChange,\n emitOipTitleChange\n} from './extension-host/extension-host.events';\nexport { FolderModuleApi } from './api/folder-module.api';\nexport { IframeModuleApi } from './api/iframe-module.api';\nexport { SecurityApi } from './api/security.api';\nexport { ApplicationsApi } from './api/applications.api';\nexport { UserProfileApi } from './api/user-profile.api';\nexport { convertToPrimeNgDateFormat } from './helpers/date.helper';\nexport { provideTranslations } from './helpers/l10n.helper';\nexport { NotificationApi } from './api/notification.api';\nexport { CustomElementExtensionModuleHostComponent } from './components/custom-element-extension-module-host/custom-element-extension-module-host.component';\n\n// Routing\nexport {\n oipAuthGuard,\n provideOipRoutes,\n oipAccessRoute,\n oipErrorRoute,\n oipProfileRoute,\n oipConfigRoute,\n oipApplicationsRoute,\n oipModulesRoute,\n oipDiscussionRoute,\n oipDbMigrationRoute,\n oipIframeModuleRoute,\n oipExtensionsRoute,\n oipNoModulesRoute,\n oipStartRoute,\n oipStartRedirectGuard,\n StartRouteData,\n OipRouteFeatures,\n OipRouteToggle,\n OipRoutesOptions\n} from './routing/oip.routes';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["en","ru","HttpClient","tap","i3","i1","i2","i4","i5","i2.MenuService","i6","i7","filter","i10"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"oip-common.mjs","sources":["../../../projects/oip-common/src/services/top-bar.service.ts","../../../projects/oip-common/src/services/msg.service.ts","../../../projects/oip-common/src/services/app-title.service.ts","../../../projects/oip-common/src/helpers/date.helper.ts","../../../projects/oip-common/src/services/app.layout.service.ts","../../../projects/oip-common/src/services/l10n.service.ts","../../../projects/oip-common/src/services/security.service.ts","../../../projects/oip-common/src/api/http-client.ts","../../../projects/oip-common/src/helpers/l10n.helper.ts","../../../projects/oip-common/src/services/module-loading.service.ts","../../../projects/oip-common/src/components/base-module/base-module.component.ts","../../../projects/oip-common/src/api/security.api.ts","../../../projects/oip-common/src/components/security/security.component.ts","../../../projects/oip-common/src/services/theme-presets.token.ts","../../../projects/oip-common/src/components/app-configurator/app-configurator.component.ts","../../../projects/oip-common/src/api/user-profile.api.ts","../../../projects/oip-common/src/services/user.service.ts","../../../projects/oip-common/src/components/logo/logo.component.ts","../../../projects/oip-common/src/services/logo.service.ts","../../../projects/oip-common/src/services/app-info.service.ts","../../../projects/oip-common/src/api/notification.api.ts","../../../projects/oip-common/src/services/notification.service.ts","../../../projects/oip-common/src/components/user-notifications/user-notifications.component.ts","../../../projects/oip-common/src/api/applications.api.ts","../../../projects/oip-common/src/services/application-registry.service.ts","../../../projects/oip-common/src/components/top-bar-application-switcher/top-bar-application-switcher.component.ts","../../../projects/oip-common/src/components/top-bar/top-bar.component.ts","../../../projects/oip-common/src/components/footer/footer.component.ts","../../../projects/oip-common/src/api/menu.api.ts","../../../projects/oip-common/src/services/app.menu.service.ts","../../../projects/oip-common/src/services/start-page.service.ts","../../../projects/oip-common/src/components/menu/menu-item.component.ts","../../../projects/oip-common/src/components/menu/menu-item-create-dialog.component.ts","../../../projects/oip-common/src/components/menu/menu-item-edit-dialog.component.ts","../../../projects/oip-common/src/components/menu/menu.component.ts","../../../projects/oip-common/src/components/sidebar/sidebar.component.ts","../../../projects/oip-common/src/components/block-loader/block-loader.component.ts","../../../projects/oip-common/src/components/default-secrets-banner/default-secrets-banner.component.ts","../../../projects/oip-common/src/components/app.layout/app.layout.component.ts","../../../projects/oip-common/src/components/app-floating-configurator/app-floating-configurator.component.ts","../../../projects/oip-common/src/components/notfound/notfound.component.ts","../../../projects/oip-common/src/components/auth/unauthorized/unauthorized.component.ts","../../../projects/oip-common/src/components/auth/access/access.component.ts","../../../projects/oip-common/src/components/auth/error/error.component.ts","../../../projects/oip-common/src/components/user-profile/user-profile.component.ts","../../../projects/oip-common/src/components/config/config.component.ts","../../../projects/oip-common/src/components/db-migration/db-migration.component.ts","../../../projects/oip-common/src/api/extension-modules.api.ts","../../../projects/oip-common/src/api/module.api.ts","../../../projects/oip-common/src/components/app-modules/app-modules.component.ts","../../../projects/oip-common/src/api/applications-data-contracts.ts","../../../projects/oip-common/src/components/applications/applications.component.ts","../../../projects/oip-common/src/api/discussion.api.ts","../../../projects/oip-common/src/helpers/avatar.helper.ts","../../../projects/oip-common/src/components/discussion/discussion.component.ts","../../../projects/oip-common/src/components/iframe-module/iframe-module.component.ts","../../../projects/oip-common/src/extension-host/extension-host.events.ts","../../../projects/oip-common/src/extension-host/extension-loader.service.ts","../../../projects/oip-common/src/components/custom-element-extension-module-host/custom-element-extension-module-host.component.ts","../../../projects/oip-common/src/components/extension-module-host/extension-module-host.component.ts","../../../projects/oip-common/src/components/no-modules/no-modules.component.ts","../../../projects/oip-common/src/services/auth-guard.service.ts","../../../projects/oip-common/src/services/module-instance-rights.service.ts","../../../projects/oip-common/src/services/module-access-guard.service.ts","../../../projects/oip-common/src/services/table-filter.service.ts","../../../projects/oip-common/src/services/theme-presets.provider.ts","../../../projects/oip-common/src/services/app-default.theme.ts","../../../projects/oip-common/src/intercepts/i18n-intercept.service.ts","../../../projects/oip-common/src/providers/oip.provider.ts","../../../projects/oip-common/src/api/folder-module.api.ts","../../../projects/oip-common/src/api/iframe-module.api.ts","../../../projects/oip-common/src/routing/oip.routes.ts","../../../projects/oip-common/src/public-api.ts","../../../projects/oip-common/src/oip-common.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { TopBarDto } from '../dtos/top-bar.dto';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TopBarService {\n topBarItems: TopBarDto[] = [];\n private readonly activeIdSubject = new Subject<string | undefined>();\n\n readonly activeId$ = this.activeIdSubject.asObservable();\n\n private _activeId: string | undefined;\n\n get availableTopBarItems(): TopBarDto[] {\n return this.topBarItems;\n }\n\n get activeTopBarItem(): TopBarDto | undefined {\n if (this._activeId === undefined) {\n return undefined;\n }\n return this.topBarItems.find((topBarItem: TopBarDto) => topBarItem.id === this._activeId);\n }\n\n get activeId(): string | undefined {\n return this._activeId;\n }\n\n set activeId(value: string | undefined) {\n this._activeId = value;\n const activeTopBarItem = this.activeTopBarItem;\n if (activeTopBarItem?.click) activeTopBarItem.click();\n this.activeIdSubject.next(value);\n }\n\n constructor() {}\n\n // Set tob bar items\n setTopBarItems(items: TopBarDto[]) {\n this.topBarItems = items;\n }\n\n checkId(id: string): boolean {\n const activeTopBarItem = this.activeTopBarItem;\n const result = activeTopBarItem === undefined ? id === 'content' : activeTopBarItem.id == id;\n return result;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { MessageService } from 'primeng/api';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ToastMessageOptions } from 'primeng/api';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({ providedIn: 'root' })\nexport class MsgService {\n protected readonly messageService: MessageService = inject(MessageService);\n private readonly translate = inject(TranslateService);\n private readonly lifetime: number = 2000;\n\n add(msg: ToastMessageOptions) {\n this.messageService.add(msg);\n }\n\n success(detail: any, summary: any = this.translate.instant('msgService.success'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'success',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n\n info(detail: any, summary: any = this.translate.instant('msgService.info'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'info',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n\n warn(detail: any, summary: any = this.translate.instant('msgService.warn'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'warn',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n\n error(detail: any, summary: any = this.translate.instant('msgService.error'), life: number = this.lifetime) {\n if (detail instanceof HttpErrorResponse) {\n summary = `Error: ${detail.status} ${detail.statusText}`;\n detail = this.extractErrorMessage(detail, `${detail.name} \\r\\n ${detail.message}`);\n } else {\n detail = this.extractErrorMessage(detail, detail?.toString?.() ?? this.translate.instant('msgService.error'));\n }\n\n this.messageService.add({\n severity: 'error',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n\n extractErrorMessage(error: unknown, fallback: string): string {\n const validationMessage = this.extractValidationMessage(error);\n if (validationMessage) {\n return validationMessage;\n }\n\n const apiExceptionMessage = this.extractApiExceptionMessage(error);\n if (apiExceptionMessage) {\n return apiExceptionMessage;\n }\n\n if (typeof error === 'object' && error && 'message' in error && typeof error.message === 'string') {\n return error.message;\n }\n\n return fallback;\n }\n\n private extractValidationMessage(error: unknown): string | null {\n const responseError = this.getObjectProperty(error, 'error');\n const validationErrors = this.getObjectProperty(responseError, 'errors') ?? this.getObjectProperty(error, 'errors');\n\n if (!validationErrors) {\n return null;\n }\n\n const messages = Object.entries(validationErrors)\n .reduce<string[]>((result, [field, value]) => [...result, ...this.toValidationMessages(field, value)], [])\n .filter((message) => message.length > 0);\n\n return messages.length > 0 ? messages.join('\\n') : null;\n }\n\n private extractApiExceptionMessage(error: unknown): string | null {\n const responseError = this.getObjectProperty(error, 'error');\n const message = this.getStringProperty(responseError, 'message') ?? this.getStringProperty(error, 'message');\n const title = this.getStringProperty(responseError, 'title') ?? this.getStringProperty(error, 'title');\n\n if (message && title) {\n return `${title}: ${message}`;\n }\n\n return message ?? title;\n }\n\n private toValidationMessages(field: string, value: unknown): string[] {\n if (Array.isArray(value)) {\n return value\n .filter((message): message is string => typeof message === 'string')\n .map((message) => `${field}: ${message}`);\n }\n\n if (typeof value === 'string') {\n return [`${field}: ${value}`];\n }\n\n return [];\n }\n\n private getObjectProperty(source: unknown, property: string): Record<string, unknown> | null {\n if (typeof source !== 'object' || source === null || !(property in source)) {\n return null;\n }\n\n const value = (source as Record<string, unknown>)[property];\n return typeof value === 'object' && value !== null ? (value as Record<string, unknown>) : null;\n }\n\n private getStringProperty(source: unknown, property: string): string | null {\n if (typeof source !== 'object' || source === null || !(property in source)) {\n return null;\n }\n\n const value = (source as Record<string, unknown>)[property];\n return typeof value === 'string' && value.length > 0 ? value : null;\n }\n\n errorFromException(error: unknown, fallback: string, summary: string = fallback, life: number = this.lifetime) {\n this.error(this.extractErrorMessage(error, fallback), summary, life);\n }\n\n contrast(detail: any, summary: any = this.translate.instant('msgService.error'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'contrast',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n\n secondary(detail: any, summary: any = this.translate.instant('msgService.secondary'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'secondary',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Title } from '@angular/platform-browser';\n\n/**\n * Service to manage the application title.\n */\n@Injectable({ providedIn: 'root' })\nexport class AppTitleService {\n private readonly title = inject(Title);\n private titleSubject = new BehaviorSubject<string>('');\n public title$ = this.titleSubject.asObservable();\n\n /**\n * Set the title of the current HTML document.\n * @param newTitle\n */\n setTitle(newTitle: string): void {\n this.title.setTitle(newTitle);\n this.titleSubject.next(newTitle);\n }\n}\n","/**\n * Convert Date to string in format 2022-02-22\n * @param date\n */\nexport function dateToString(date: Date): string {\n const year = date.getFullYear();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n\n return `${year}-${month}-${day}`;\n}\n\n/**\n * Convert string in format 2022-02-22 to Date\n * @param date\n */\nexport function stringToDate(date: string): Date {\n const dateParts = date.split('-');\n const day = parseInt(dateParts[2], 10);\n const month = parseInt(dateParts[1], 10) - 1;\n const year = parseInt(dateParts[0], 10);\n\n return new Date(year, month, day);\n}\n\n/**\n * Add days to date\n * @param date\n * @param days\n */\nexport function addDays(date: Date, days: number): Date {\n const clonedDate = structuredClone(date);\n clonedDate.setDate(clonedDate.getDate() + days);\n return clonedDate;\n}\n\n/**\n * Get today's date\n * @param date\n */\nexport function getTodayDate(): Date {\n const date = new Date();\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\n/* Convert dateformat from DatePipe to PrimeNG*/\nexport function convertToPrimeNgDateFormat(dateformat: string): string {\n switch (dateformat) {\n case 'dd.MM.yyyy':\n return 'dd.mm.yy';\n case 'dd.MM.yy':\n return 'dd.mm.y';\n case 'yyyy-MM-dd':\n return 'yy-mm-dd';\n case 'dd.MMM.yyyy':\n return 'dd.M.yy';\n default:\n console.error(`Failed to convert format: ${dateformat}`);\n }\n}\n\n/**\n * Convert all properties of an object with string dates to Date objects\n * @param obj\n */\nexport function restoreDates(obj: any) {\n if (obj === null || typeof obj !== 'object') return obj;\n\n if (Array.isArray(obj)) {\n return obj.map((item) => restoreDates(item));\n }\n\n const result = {};\n for (const key in obj) {\n const value = obj[key];\n\n if (typeof value === 'string' && isIsoDate(value)) {\n result[key] = new Date(value);\n } else if (typeof value === 'object' && value !== null && !(value instanceof Date)) {\n result[key] = restoreDates(value);\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\n/**\n * Check if a string is a date in ISO format\n * @param str\n */\nexport function isIsoDate(str: string) {\n return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$/.test(str);\n}\n","import { Injectable, effect, signal, computed } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { convertToPrimeNgDateFormat } from '../helpers/date.helper';\n\nexport interface AppConfig {\n preset?: string;\n primary?: string;\n surface?: string | null;\n darkTheme?: boolean;\n menuMode?: string;\n language?: string;\n dateFormat: string;\n timeFormat: string;\n dateTimeFormat: string;\n timeZone: string;\n adminMode?: boolean;\n}\n\ninterface LayoutState {\n staticMenuDesktopInactive?: boolean;\n overlayMenuActive?: boolean;\n configSidebarVisible?: boolean;\n staticMenuMobileActive?: boolean;\n menuHoverActive?: boolean;\n}\n\ninterface MenuChangeEvent {\n key: string;\n routeEvent?: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class LayoutService {\n _config: AppConfig = this.getAppConfigFromStorage();\n\n _state: LayoutState = {\n staticMenuDesktopInactive: false,\n overlayMenuActive: false,\n configSidebarVisible: false,\n staticMenuMobileActive: false,\n menuHoverActive: false\n };\n\n layoutConfig = signal<AppConfig>(this._config);\n\n layoutState = signal<LayoutState>(this._state);\n\n private readonly configUpdate = new Subject<AppConfig>();\n\n private readonly overlayOpen = new Subject<any>();\n\n private readonly menuSource = new Subject<MenuChangeEvent>();\n\n private readonly resetSource = new Subject();\n\n menuSource$ = this.menuSource.asObservable();\n\n resetSource$ = this.resetSource.asObservable();\n\n configUpdate$ = this.configUpdate.asObservable();\n\n overlayOpen$ = this.overlayOpen.asObservable();\n\n theme = computed(() => (this.layoutConfig()?.darkTheme ? 'light' : 'dark'));\n\n isSidebarActive = computed(() => this.layoutState().overlayMenuActive || this.layoutState().staticMenuMobileActive);\n\n isDarkTheme = computed(() => this.layoutConfig().darkTheme);\n\n getPrimary = computed(() => this.layoutConfig().primary);\n\n getSurface = computed(() => this.layoutConfig().surface);\n\n isOverlay = computed(() => this.layoutConfig().menuMode === 'overlay');\n\n language = computed(() => this.layoutConfig().language);\n\n dateFormat = computed(() => this.layoutConfig().dateFormat);\n\n primeNgDateFormat = computed(() => convertToPrimeNgDateFormat(this.layoutConfig().dateFormat));\n\n timeFormat = computed(() => this.layoutConfig().timeFormat);\n\n dateTimeFormat = computed(() => `${this.layoutConfig().dateFormat} ${this.layoutConfig().timeFormat}`);\n\n monthFormat = computed(() => {\n const reDay = /d+/i;\n const reDelimiter = /^[^\\w]|[^\\w]$|([^\\w])\\1+/;\n const ngDateFormat = convertToPrimeNgDateFormat(this.layoutConfig().dateFormat);\n const ngDate = ngDateFormat.replace(reDay, '');\n const dateGroups = ngDate.match(reDelimiter);\n if (Array.isArray(dateGroups) && dateGroups.length > 1) {\n return dateGroups[1] !== undefined\n ? ngDate.replace(dateGroups[0], '')\n : ngDate.startsWith(dateGroups[0])\n ? ngDate.substring(1)\n : ngDate.substring(0, ngDate.length - 1);\n }\n return ngDateFormat;\n });\n\n timeZone = computed(() => this.layoutConfig().timeZone);\n\n adminMode = computed(() => this.layoutConfig().adminMode ?? false);\n\n transitionComplete = signal<boolean>(false);\n\n /**\n * Controls the visibility of the layout footer.\n * Modules can hide the footer to free up vertical space for full-screen content.\n */\n footerVisible = signal<boolean>(true);\n\n private initialized = false;\n\n constructor() {\n effect(() => {\n const config = this.layoutConfig();\n if (config) {\n this.onConfigUpdate();\n }\n });\n\n effect(() => {\n const config = this.layoutConfig();\n\n if (!this.initialized || !config) {\n this.initialized = true;\n return;\n }\n\n this.handleDarkModeTransition(config);\n });\n }\n\n /**\n * Get application settings from browser storage\n * @returns AppConfig\n */\n private getAppConfigFromStorage(): AppConfig {\n const appConfigUiString = localStorage.getItem('layoutConfig');\n if (appConfigUiString != null) {\n const config = JSON.parse(appConfigUiString) as AppConfig;\n config.timeZone ??= Intl.DateTimeFormat().resolvedOptions().timeZone;\n return config;\n }\n return {\n preset: 'Aura',\n primary: 'emerald',\n surface: null,\n darkTheme: false,\n menuMode: 'static',\n language: 'ru',\n dateFormat: 'yyyy-MM-dd',\n timeFormat: 'HH:mm:ss',\n dateTimeFormat: 'yyyy-MM-dd HH:mm:ss',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n adminMode: false\n };\n }\n\n private handleDarkModeTransition(config: AppConfig): void {\n if ((document as any).startViewTransition) {\n this.startViewTransition(config);\n } else {\n this.toggleDarkMode(config);\n this.onTransitionEnd();\n }\n }\n\n private startViewTransition(config: AppConfig): void {\n const transition = (document as any).startViewTransition(() => {\n this.toggleDarkMode(config);\n });\n\n transition.ready\n .then(() => {\n this.onTransitionEnd();\n })\n .catch(() => {});\n }\n\n toggleDarkMode(config?: AppConfig): void {\n const _config = config || this.layoutConfig();\n if (_config.darkTheme) {\n document.documentElement.classList.add('app-dark');\n } else {\n document.documentElement.classList.remove('app-dark');\n }\n }\n\n private onTransitionEnd() {\n this.transitionComplete.set(true);\n setTimeout(() => {\n this.transitionComplete.set(false);\n });\n }\n\n onMenuToggle() {\n if (this.isOverlay()) {\n this.layoutState.update((prev) => ({ ...prev, overlayMenuActive: !this.layoutState().overlayMenuActive }));\n\n if (this.layoutState().overlayMenuActive) {\n this.overlayOpen.next(null);\n }\n }\n\n if (this.isDesktop()) {\n this.layoutState.update((prev) => ({\n ...prev,\n staticMenuDesktopInactive: !this.layoutState().staticMenuDesktopInactive\n }));\n } else {\n this.layoutState.update((prev) => ({\n ...prev,\n staticMenuMobileActive: !this.layoutState().staticMenuMobileActive\n }));\n\n if (this.layoutState().staticMenuMobileActive) {\n this.overlayOpen.next(null);\n }\n }\n }\n\n isDesktop() {\n return window.innerWidth > 991;\n }\n\n isMobile() {\n return !this.isDesktop();\n }\n\n onConfigUpdate() {\n this._config = { ...this.layoutConfig() };\n this.configUpdate.next(this.layoutConfig());\n localStorage.setItem('layoutConfig', JSON.stringify(this.layoutConfig()));\n }\n\n onMenuStateChange(event: MenuChangeEvent) {\n this.menuSource.next(event);\n }\n\n reset() {\n this.resetSource.next(true);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { InterpolationParameters, TranslateService, Translation, TranslationObject } from '@ngx-translate/core';\nimport { LayoutService } from './app.layout.service';\nimport { PrimeNG } from 'primeng/config';\nimport { Observable, of, shareReplay, tap } from 'rxjs';\nimport en from './l10n/en.json';\nimport ru from './l10n/ru.json';\n\n/**\n * Translations of a single namespace grouped by language code, e.g. { en: {...}, ru: {...} }\n */\nexport type TranslationsByLang = Record<string, TranslationObject>;\n\n/**\n * Global dictionaries shared by all components. They are bundled with the library,\n * so the application never requests `assets/i18n/{lang}.json`.\n */\nconst globalTranslations: TranslationsByLang = { en, ru };\n\nexport interface LanguageDto {\n code: string;\n name: string;\n icon: string;\n}\n\n/**\n * Service for managing translation loading in the application\n */\n@Injectable({ providedIn: 'root' }) // Provided at root level for singleton usage\nexport class L10nService {\n private loadedTranslations: Set<string> = new Set();\n private loadingTranslations: Map<string, Observable<unknown>> = new Map();\n private httpClient = inject(HttpClient);\n private translateService = inject(TranslateService);\n private readonly primeNg = inject(PrimeNG);\n private readonly layoutService = inject(LayoutService);\n public availableLanguages: LanguageDto[];\n\n /**\n * Translations bundled with components, registered at module load time.\n */\n private static readonly staticTranslations: Map<string, TranslationsByLang> = new Map();\n\n /**\n * Registers translations bundled with a component instead of loading them over HTTP.\n * Namespaces are taken from the root keys of the passed dictionaries.\n * Components derived from <c>BaseModuleComponent</c> don't call it directly - it is enough\n * to declare the static <c>translations</c> field.\n * @param byLang - Translations grouped by language code\n * @param namespace - Explicit namespace, needed when the dictionaries are still empty\n */\n public static registerTranslations(byLang: TranslationsByLang | undefined, namespace?: string): void {\n if (!byLang) {\n return;\n }\n if (namespace) {\n L10nService.staticTranslations.set(namespace, byLang);\n }\n for (const translations of Object.values(byLang)) {\n for (const namespace of Object.keys(translations)) {\n L10nService.staticTranslations.set(namespace, byLang);\n }\n }\n }\n\n constructor() {\n // Global dictionaries are available before the first `use()` call, so TranslateHttpLoader is never asked for them.\n L10nService.registerTranslations(globalTranslations);\n Object.entries(globalTranslations).forEach(([lang, translations]) => this.mergeTranslation(lang, translations));\n\n // Static translations are merged once per language, so they have to be re-merged on every language change.\n this.translateService.onLangChange.subscribe((event) => {\n L10nService.staticTranslations.forEach((byLang) => {\n const translations = byLang[event.lang];\n if (translations) {\n this.mergeTranslation(event.lang, translations);\n }\n });\n });\n }\n\n /**\n * Loads translations for a specific component\n * @param component - Name of the component to load translations for\n */\n public loadComponentTranslations(component: string): Observable<unknown> {\n const lang = this.translateService.currentLang || this.layoutService.language() || 'en';\n return this.loadTranslations(component, lang);\n }\n\n /**\n * Loads translations from an explicit asset URL and merges them into the active language dictionary.\n * Use this for extension modules whose assets are hosted outside the shell application.\n */\n public loadTranslationsFromUrl(namespace: string, url: string, lang?: string): Observable<unknown> {\n const selectedLang = lang || this.translateService.currentLang || this.layoutService.language() || 'en';\n const key = `${namespace}.${selectedLang}.${url}`;\n if (this.loadedTranslations.has(key)) {\n return of(null);\n }\n\n const loading = this.loadingTranslations.get(key);\n if (loading) {\n return loading;\n }\n\n const request = this.httpClient.get(url).pipe(\n tap((translations) => {\n this.mergeTranslation(selectedLang, translations as TranslationObject);\n this.loadedTranslations.add(key);\n this.loadingTranslations.delete(key);\n }),\n shareReplay(1)\n );\n\n this.loadingTranslations.set(key, request);\n request.subscribe({\n error: (e) => {\n this.loadingTranslations.delete(key);\n console.error(`No translations found for ${namespace}.${selectedLang}.json at ${url}`);\n console.error(e);\n }\n });\n\n return request;\n }\n\n /**\n * Gets the translated value of a key (or an array of keys)\n * @returns the translated key, or an object of translated keys\n */\n public get(key: string) {\n this.loadComponentTranslations(key.split('.')[0]);\n return this.translateService.get(key);\n }\n\n /**\n * Internal method to merge a namespace's statically-registered translations\n * (see <c>registerTranslations</c>) into the active language dictionary.\n * @param component - Translation namespace\n * @param lang - Language code to load translations for\n */\n private loadTranslations(component: string, lang: string): Observable<unknown> {\n const key = `${component}.${lang}`;\n if (this.loadedTranslations.has(key)) {\n return of(null);\n }\n\n const staticTranslations = L10nService.staticTranslations.get(component);\n if (!staticTranslations) {\n console.error(`No translations registered for namespace \"${component}\".`);\n return of(null);\n }\n\n const translations = staticTranslations[lang];\n if (translations) {\n this.mergeTranslation(lang, translations);\n }\n this.loadedTranslations.add(key);\n\n return of(null);\n }\n\n /**\n * Merges a translation dictionary into the dictionary of the given language\n * @param lang - Language code\n * @param translations - Translations to merge\n */\n private mergeTranslation(lang: string, translations: TranslationObject): void {\n const current = this.translateService.translations[lang] || {};\n this.translateService.setTranslation(lang, { ...current, ...translations }, true);\n }\n\n /**\n * Changes the lang currently used\n */\n use(selectedLanguage: string, key: string = null) {\n if (key) {\n this.get(key);\n }\n this.translateService.use(selectedLanguage);\n }\n\n init(languages: LanguageDto[]) {\n this.availableLanguages = languages;\n this.translateService.addLangs(languages.map((x) => x.code));\n const lang = this.layoutService.language() ? this.layoutService.language() : 'en';\n this.translateService.setDefaultLang(lang);\n this.translateService.use(lang).subscribe(() => {\n this.loadComponentTranslations('app-info');\n this.translateService.get('primeng').subscribe((res) => this.primeNg.setTranslation(res));\n });\n }\n\n instant(key: string | string[], interpolateParams?: InterpolationParameters): Translation | TranslationObject {\n return this.translateService.instant(key, interpolateParams);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, OnDestroy, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, ReplaySubject, firstValueFrom, of } from 'rxjs';\nimport { catchError, distinctUntilChanged, filter, tap } from 'rxjs/operators';\n\ntype RefreshCustomParams = { [key: string]: string | number | boolean };\n\nexport type AuthSessionRefreshResult = {\n isAuthenticated: boolean;\n userData: any;\n};\n\nexport type AuthCsrfToken = {\n token: string;\n headerName: string;\n};\n\ntype AuthSessionResponse = {\n isAuthenticated: boolean;\n userName?: string;\n displayName?: string;\n email?: string;\n roles: string[];\n};\n\ntype CurrentUser = {\n userName?: string;\n displayName?: string;\n email?: string;\n roles: string[];\n preferred_username?: string;\n name?: string;\n given_name?: string;\n family_name?: string;\n};\n\nexport abstract class SecurityService {\n abstract auth(): void;\n\n abstract logout(): void;\n\n abstract isAuthenticated(): Observable<boolean>;\n\n abstract getAccessToken(): Observable<string>;\n\n abstract isTokenExpired(): Observable<boolean>;\n\n abstract getCurrentUser(): any;\n\n abstract getCurrentUser$(): Observable<any>;\n\n abstract forceRefreshSession(\n customParams?: RefreshCustomParams,\n configId?: string\n ): Observable<AuthSessionRefreshResult>;\n\n abstract getCsrfToken(): Observable<AuthCsrfToken | null>;\n\n abstract isAdmin(): boolean;\n\n abstract authorize(returnUrl?: string): void;\n\n abstract payload: BehaviorSubject<any>;\n}\n\n@Injectable()\nexport class BffSecurityService implements OnDestroy, SecurityService {\n public static readonly authorizeAfterLogoutReturnUrlKey = 'oip.authorizeAfterLogoutReturnUrl';\n\n private readonly http = inject(HttpClient);\n private readonly authenticated = new BehaviorSubject<boolean | null>(null);\n private readonly currentUser = new BehaviorSubject<any>(null);\n private readonly csrfToken = new ReplaySubject<AuthCsrfToken | null>(1);\n\n public readonly payload = new BehaviorSubject<any>(null);\n\n auth(): void {\n this.http\n .get<AuthSessionResponse>(this.buildUrl('api/security/get-current-auth-session'), {\n withCredentials: true\n })\n .pipe(\n tap((session) => this.applySession(session)),\n catchError(() => {\n this.applyAnonymousSession();\n return of(null);\n })\n )\n .subscribe();\n }\n\n logout(): void {\n firstValueFrom(this.getCsrfToken()).then((csrfToken) => {\n this.storeAuthorizeAfterLogoutReturnUrl();\n\n const form = this.createPostForm(this.buildUrl('api/security/delete-auth-session'));\n if (csrfToken?.token) {\n const tokenInput = document.createElement('input');\n tokenInput.type = 'hidden';\n tokenInput.name = '__RequestVerificationToken';\n tokenInput.value = csrfToken.token;\n form.appendChild(tokenInput);\n }\n document.body.appendChild(form);\n form.submit();\n });\n }\n\n isAuthenticated(): Observable<boolean> {\n return this.authenticated.asObservable().pipe(\n filter((value): value is boolean => value !== null),\n distinctUntilChanged()\n );\n }\n\n getAccessToken(): Observable<string> {\n return of('');\n }\n\n isTokenExpired(): Observable<boolean> {\n return of(false);\n }\n\n getCurrentUser(): any {\n return this.currentUser.getValue();\n }\n\n getCurrentUser$(): Observable<any> {\n return this.currentUser.asObservable();\n }\n\n forceRefreshSession(): Observable<AuthSessionRefreshResult> {\n this.auth();\n return of({\n isAuthenticated: this.authenticated.getValue() === true,\n userData: this.currentUser.getValue()\n });\n }\n\n getCsrfToken(): Observable<AuthCsrfToken | null> {\n this.http\n .get<AuthCsrfToken>(this.buildUrl('api/security/get-auth-csrf-token'), {\n withCredentials: true\n })\n .pipe(catchError(() => of(null)))\n .subscribe((token) => this.csrfToken.next(token));\n\n return this.csrfToken.asObservable();\n }\n\n isAdmin(): boolean {\n return this.payload.getValue()?.realm_access?.roles?.includes('admin') ?? false;\n }\n\n authorize(returnUrl?: string): void {\n const normalizedReturnUrl = this.normalizeReturnUrl(returnUrl);\n this.replaceWithUnauthorizedUrl(normalizedReturnUrl);\n\n const form = this.createPostForm(this.buildUrl('api/security/create-auth-session'));\n document.body.appendChild(form);\n form.submit();\n }\n\n ngOnDestroy(): void {\n this.authenticated.complete();\n this.currentUser.complete();\n this.payload.complete();\n }\n\n private applySession(session: AuthSessionResponse): void {\n const roles = session.roles ?? [];\n const user = this.createCurrentUser(session, roles);\n\n this.authenticated.next(session.isAuthenticated);\n this.currentUser.next(user);\n this.payload.next({ realm_access: { roles }, ...user });\n }\n\n private createCurrentUser(session: AuthSessionResponse, roles: string[]): CurrentUser {\n const displayName = session.displayName || session.userName || session.email;\n const nameParts = this.splitDisplayName(displayName);\n\n return {\n userName: session.userName,\n displayName,\n email: session.email,\n roles,\n preferred_username: session.userName,\n name: displayName,\n given_name: nameParts.givenName,\n family_name: nameParts.familyName\n };\n }\n\n private splitDisplayName(displayName?: string): { givenName?: string; familyName?: string } {\n const parts = displayName?.trim().split(/\\s+/).filter(Boolean) ?? [];\n\n return {\n givenName: parts[0],\n familyName: parts.length > 1 ? parts.slice(1).join(' ') : undefined\n };\n }\n\n private applyAnonymousSession(): void {\n this.authenticated.next(false);\n this.currentUser.next(null);\n this.payload.next(null);\n this.csrfToken.next(null);\n }\n\n private createPostForm(action: string): HTMLFormElement {\n const form = document.createElement('form');\n form.method = 'post';\n form.action = action;\n form.style.display = 'none';\n return form;\n }\n\n private normalizeReturnUrl(returnUrl?: string): string {\n const candidate = returnUrl?.trim();\n if (!candidate || /[\\u0000-\\u001f\\u007f\\\\]/.test(candidate)) {\n return '/';\n }\n\n if (!candidate.startsWith('/') || candidate.startsWith('//')) {\n return '/';\n }\n\n try {\n const url = new URL(candidate, window.location.origin);\n if (url.origin !== window.location.origin) {\n return '/';\n }\n\n const normalizedUrl = `${url.pathname}${url.search}${url.hash}`;\n return normalizedUrl.startsWith('/unauthorized') ? '/' : normalizedUrl;\n } catch {\n return '/';\n }\n }\n\n private replaceWithUnauthorizedUrl(returnUrl: string): void {\n const unauthorizedUrl = new URL('unauthorized', this.getBaseUrl());\n unauthorizedUrl.searchParams.set('returnUrl', returnUrl);\n\n history.replaceState(history.state, '', `${unauthorizedUrl.pathname}${unauthorizedUrl.search}`);\n }\n\n private storeAuthorizeAfterLogoutReturnUrl(): void {\n sessionStorage.setItem(\n BffSecurityService.authorizeAfterLogoutReturnUrlKey,\n this.normalizeReturnUrl(`${window.location.pathname}${window.location.search}${window.location.hash}`)\n );\n }\n\n private buildUrl(path: string): string {\n return `${this.getBaseUrl()}${path}`;\n }\n\n private getBaseUrl(): string {\n const baseUrl = document.getElementsByTagName('base')[0].href;\n return baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`;\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { inject, Injectable } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { firstValueFrom } from \"rxjs\";\nimport { LayoutService } from \"../services/app.layout.service\";\nimport { SecurityService } from \"../services/security.service\";\n\nexport type QueryParamsType = Record<string | number, any>;\nexport type ResponseFormat = keyof Omit<Body, \"body\" | \"bodyUsed\">;\n\nexport interface FullRequestParams extends Omit<RequestInit, \"body\"> {\n /** set parameter to `true` for call `securityWorker` for this request */\n secure?: boolean;\n /** request path */\n path: string;\n /** content type of request body */\n type?: ContentType;\n /** query params */\n query?: QueryParamsType;\n /** format of response (i.e. response.json() -> format: \"json\") */\n format?: ResponseFormat;\n /** request body */\n body?: unknown;\n /** base url */\n baseUrl?: string;\n /** request cancellation token */\n cancelToken?: CancelToken;\n}\n\nexport type RequestParams = Omit<\n FullRequestParams,\n \"body\" | \"method\" | \"query\" | \"path\"\n>;\n\nexport interface ApiConfig<SecurityDataType = unknown> {\n baseUrl?: string;\n baseApiParams?: Omit<RequestParams, \"baseUrl\" | \"cancelToken\" | \"signal\">;\n securityWorker?: (\n securityData: SecurityDataType | null,\n ) => Promise<RequestParams | void> | RequestParams | void;\n customFetch?: typeof fetch;\n}\n\nexport interface HttpResponse<D extends unknown, E extends unknown = unknown>\n extends Response {\n data: D;\n error: E;\n}\n\ntype CancelToken = Symbol | string | number;\n\nexport enum ContentType {\n Json = \"application/json\",\n JsonApi = \"application/vnd.api+json\",\n FormData = \"multipart/form-data\",\n UrlEncoded = \"application/x-www-form-urlencoded\",\n Text = \"text/plain\",\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class HttpClient<SecurityDataType = unknown> {\n protected securityService = inject(SecurityService);\n protected layoutService = inject(LayoutService);\n protected router = inject(Router);\n public baseUrl: string = \"\";\n private securityWorker?: ApiConfig<SecurityDataType>[\"securityWorker\"] =\n () => {\n const moduleInstanceId = this.getCurrentModuleInstanceId();\n return {\n headers: {\n \"Accept-language\": this.layoutService.language()\n ? this.layoutService.language()\n : \"en\",\n \"X-Timezone\": this.layoutService.timeZone(),\n ...(moduleInstanceId != null\n ? { \"X-Module-Instance-Id\": String(moduleInstanceId) }\n : {}),\n },\n };\n };\n\n /**\n * Reads the module instance id of the deepest activated route.\n * The backend uses it to check module instance rights on endpoints that do not carry the id in their contract.\n */\n protected getCurrentModuleInstanceId(): number | undefined {\n // May run before the first navigation completes, when route snapshots are not available yet.\n let route: ActivatedRoute | null | undefined =\n this.router.routerState?.root;\n let id: string | null = null;\n\n while (route) {\n id = route.snapshot?.paramMap?.get(\"id\") ?? id;\n route = route.firstChild;\n }\n\n const parsed = id != null ? Number(id) : Number.NaN;\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n\n private abortControllers = new Map<CancelToken, AbortController>();\n private customFetch = (...fetchParams: Parameters<typeof fetch>) =>\n fetch(...fetchParams);\n\n private baseApiParams: RequestParams = {\n credentials: \"same-origin\",\n headers: {},\n redirect: \"follow\",\n referrerPolicy: \"no-referrer\",\n };\n\n public setSecurityData = (data: SecurityDataType | null) => {};\n\n protected encodeQueryParam(key: string, value: any) {\n const encodedKey = encodeURIComponent(key);\n return `${encodedKey}=${encodeURIComponent(typeof value === \"number\" ? value : `${value}`)}`;\n }\n\n protected addQueryParam(query: QueryParamsType, key: string) {\n return this.encodeQueryParam(key, query[key]);\n }\n\n protected addArrayQueryParam(query: QueryParamsType, key: string) {\n const value = query[key];\n return value.map((v: any) => this.encodeQueryParam(key, v)).join(\"&\");\n }\n\n protected toQueryString(rawQuery?: QueryParamsType): string {\n const query = rawQuery || {};\n const keys = Object.keys(query).filter(\n (key) => \"undefined\" !== typeof query[key],\n );\n return keys\n .map((key) =>\n Array.isArray(query[key])\n ? this.addArrayQueryParam(query, key)\n : this.addQueryParam(query, key),\n )\n .join(\"&\");\n }\n\n protected addQueryParams(rawQuery?: QueryParamsType): string {\n const queryString = this.toQueryString(rawQuery);\n return queryString ? `?${queryString}` : \"\";\n }\n\n private contentFormatters: Record<ContentType, (input: any) => any> = {\n [ContentType.Json]: (input: any) =>\n input !== null && (typeof input === \"object\" || typeof input === \"string\")\n ? JSON.stringify(input)\n : input,\n [ContentType.JsonApi]: (input: any) =>\n input !== null && (typeof input === \"object\" || typeof input === \"string\")\n ? JSON.stringify(input)\n : input,\n [ContentType.Text]: (input: any) =>\n input !== null && typeof input !== \"string\"\n ? JSON.stringify(input)\n : input,\n [ContentType.FormData]: (input: any) => {\n if (input instanceof FormData) {\n return input;\n }\n\n return Object.keys(input || {}).reduce((formData, key) => {\n const property = input[key];\n formData.append(\n key,\n property instanceof Blob\n ? property\n : typeof property === \"object\" && property !== null\n ? JSON.stringify(property)\n : `${property}`,\n );\n return formData;\n }, new FormData());\n },\n [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input),\n };\n\n protected mergeRequestParams(\n params1: RequestParams,\n params2?: RequestParams,\n ): RequestParams {\n return {\n ...this.baseApiParams,\n ...params1,\n ...(params2 || {}),\n headers: {\n ...(this.baseApiParams.headers || {}),\n ...(params1.headers || {}),\n ...((params2 && params2.headers) || {}),\n },\n };\n }\n\n protected createAbortSignal = (\n cancelToken: CancelToken,\n ): AbortSignal | undefined => {\n if (this.abortControllers.has(cancelToken)) {\n const abortController = this.abortControllers.get(cancelToken);\n if (abortController) {\n return abortController.signal;\n }\n return void 0;\n }\n\n const abortController = new AbortController();\n this.abortControllers.set(cancelToken, abortController);\n return abortController.signal;\n };\n\n public abortRequest = (cancelToken: CancelToken) => {\n const abortController = this.abortControllers.get(cancelToken);\n\n if (abortController) {\n abortController.abort();\n this.abortControllers.delete(cancelToken);\n }\n };\n\n public request = async <T = any, E = any>({\n body,\n secure,\n path,\n type,\n query,\n format,\n baseUrl,\n cancelToken,\n ...params\n }: FullRequestParams): Promise<T> => {\n const secureParams =\n ((typeof secure === \"boolean\" ? secure : this.baseApiParams.secure) &&\n this.securityWorker &&\n (await this.securityWorker(null))) ||\n {};\n const csrfParams = await this.getCsrfRequestParams(params.method, path);\n const requestParams = this.mergeRequestParams(\n this.mergeRequestParams(params, secureParams),\n csrfParams,\n );\n const queryString = query && this.toQueryString(query);\n const payloadFormatter = this.contentFormatters[type || ContentType.Json];\n let responseFormat = format || requestParams.format;\n\n return this.customFetch(\n `${baseUrl || this.baseUrl || \"\"}${path}${queryString ? `?${queryString}` : \"\"}`,\n {\n ...requestParams,\n headers: {\n ...(requestParams.headers || {}),\n ...(type && type !== ContentType.FormData\n ? { \"Content-Type\": type }\n : {}),\n },\n signal:\n (cancelToken\n ? this.createAbortSignal(cancelToken)\n : requestParams.signal) || null,\n body:\n typeof body === \"undefined\" || body === null\n ? null\n : payloadFormatter(body),\n },\n ).then(async (response) => {\n const r = response as HttpResponse<T, E>;\n r.data = null as unknown as T;\n r.error = null as unknown as E;\n\n if (typeof E !== undefined && responseFormat === undefined)\n responseFormat = \"json\";\n\n const responseToParse = responseFormat ? response.clone() : response;\n const data = !responseFormat\n ? r\n : await responseToParse[responseFormat]()\n .then((data) => {\n if (r.ok) {\n r.data = data;\n } else {\n r.error = data;\n }\n return r;\n })\n .catch((e) => {\n r.error = e;\n return r;\n });\n\n if (cancelToken) {\n this.abortControllers.delete(cancelToken);\n }\n\n if (!response.ok) {\n this.authorizeOnUnauthorized(response, path);\n throw data;\n }\n return data.data;\n });\n };\n\n private authorizeOnUnauthorized(response: Response, path: string): void {\n if (\n response.status !== 401 ||\n path.includes(\"/api/security/create-auth-session\")\n ) {\n return;\n }\n\n this.securityService.authorize(\n `${window.location.pathname}${window.location.search}${window.location.hash}`,\n );\n }\n\n private async getCsrfRequestParams(\n method: string | undefined,\n path: string,\n ): Promise<RequestParams> {\n if (\n !method ||\n ![\"POST\", \"PUT\", \"PATCH\", \"DELETE\"].includes(method.toUpperCase())\n ) {\n return {};\n }\n\n if (\n path.includes(\"/api/security/create-auth-session\") ||\n path.includes(\"/api/security/get-auth-csrf-token\")\n ) {\n return {};\n }\n\n const csrfToken = await firstValueFrom(this.securityService.getCsrfToken());\n return csrfToken?.token\n ? { headers: { [csrfToken.headerName]: csrfToken.token } }\n : {};\n }\n}\n","import { inject, isDevMode } from '@angular/core';\nimport { L10nService, TranslationsByLang } from '../services/l10n.service';\nimport { Observable, of } from 'rxjs';\nimport { Translation, TranslationObject } from '@ngx-translate/core';\n\n/**\n * Registers a component's co-located translations and merges them into the\n * active language. The namespace is derived from the JSON's own root key,\n * so callers never repeat it as a string literal.\n *\n * Must be called from an injection context - as a field initializer, or as\n * the first statement in a constructor - the same requirement as `inject()`\n * itself, which it uses internally.\n *\n * ```ts\n * import en from './l10n/menu.en.json';\n * import ru from './l10n/menu.ru.json';\n *\n * @Component({ ... })\n * export class MenuComponent {\n * private readonly translations = provideTranslations({ en, ru });\n * }\n * ```\n */\nexport function provideTranslations(byLang: TranslationsByLang): Observable<Translation | TranslationObject> {\n if (isDevMode()) {\n warnOnKeyMismatch(byLang);\n }\n\n L10nService.registerTranslations(byLang);\n\n const namespace = namespaceOf(byLang);\n return namespace ? inject(L10nService).get(namespace) : of({});\n}\n\nfunction namespaceOf(byLang: TranslationsByLang): string | undefined {\n const firstLangDict = Object.values(byLang)[0];\n return firstLangDict ? Object.keys(firstLangDict)[0] : undefined;\n}\n\n/**\n * Dev-only sanity check: warns when the language dictionaries in `byLang`\n * don't all declare the same set of keys - a common source of a translated\n * string silently falling back to its raw key in one language only.\n */\nfunction warnOnKeyMismatch(byLang: TranslationsByLang): void {\n const langs = Object.keys(byLang);\n if (langs.length < 2) {\n return;\n }\n\n const keysByLang = new Map(langs.map((lang) => [lang, collectKeyPaths(byLang[lang])]));\n const [baseLang, ...otherLangs] = langs;\n const baseKeys = keysByLang.get(baseLang)!;\n const namespace = namespaceOf(byLang) ?? '(unknown namespace)';\n\n for (const lang of otherLangs) {\n const langKeys = keysByLang.get(lang)!;\n const missing = [...baseKeys].filter((key) => !langKeys.has(key));\n const extra = [...langKeys].filter((key) => !baseKeys.has(key));\n\n if (missing.length > 0) {\n console.warn(\n `[provideTranslations] \"${namespace}\": \"${lang}\" is missing keys present in \"${baseLang}\": ${missing.join(', ')}`\n );\n }\n if (extra.length > 0) {\n console.warn(\n `[provideTranslations] \"${namespace}\": \"${lang}\" has extra keys not present in \"${baseLang}\": ${extra.join(', ')}`\n );\n }\n }\n}\n\n/**\n * Recursively collects dot-joined paths to every leaf value in an object,\n * e.g. { a: { b: 'x' } } -> ['a.b'].\n */\nfunction collectKeyPaths(value: unknown, prefix = '', paths: Set<string> = new Set()): Set<string> {\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n for (const [key, child] of Object.entries(value as Record<string, unknown>)) {\n collectKeyPaths(child, prefix ? `${prefix}.${key}` : key, paths);\n }\n } else {\n paths.add(prefix);\n }\n\n return paths;\n}\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n NavigationCancel,\n NavigationEnd,\n NavigationError,\n NavigationSkipped,\n NavigationStart,\n Router\n} from '@angular/router';\n\n/**\n * Tracks whether the application is switching between modules.\n *\n * Two sources feed the state:\n * - router navigation, from `NavigationStart` until the navigation ends, is cancelled or fails;\n * - explicit work registered with {@link begin}/{@link end} or {@link track}, which covers everything\n * running after `NavigationEnd`: module instance rights, settings and extension loading.\n *\n * The UI blocker rendered by the layout observes {@link loading}.\n */\n@Injectable({ providedIn: 'root' })\nexport class ModuleLoadingService {\n /** Releases a stuck blocker when a caller never balances its `begin()`. */\n private static readonly watchdogTimeoutMs = 30_000;\n\n private readonly router = inject(Router);\n private readonly navigating = signal(false);\n private readonly pending = signal(0);\n private watchdogHandle?: ReturnType<typeof setTimeout>;\n\n /** True while a module transition is in progress. */\n public readonly loading = computed(() => this.navigating() || this.pending() > 0);\n\n constructor() {\n this.router.events.pipe(takeUntilDestroyed()).subscribe((event) => {\n if (event instanceof NavigationStart) {\n this.navigating.set(true);\n } else if (\n event instanceof NavigationEnd ||\n event instanceof NavigationCancel ||\n event instanceof NavigationError ||\n event instanceof NavigationSkipped\n ) {\n this.navigating.set(false);\n }\n });\n }\n\n /**\n * Registers one unit of loading work. Every call must be balanced with {@link end},\n * preferably from a `finally` block. Prefer {@link track} when the work is a promise.\n */\n public begin(): void {\n this.pending.update((count) => count + 1);\n this.armWatchdog();\n }\n\n /** Releases one unit of loading work registered with {@link begin}. */\n public end(): void {\n this.pending.update((count) => Math.max(0, count - 1));\n this.armWatchdog();\n }\n\n /**\n * Blocks the UI until `work` settles, and keeps the blocker released when it rejects.\n *\n * @example\n * await this.moduleLoading.track(this.reloadModuleInstance());\n */\n public async track<T>(work: PromiseLike<T>): Promise<T> {\n this.begin();\n try {\n return await work;\n } finally {\n this.end();\n }\n }\n\n private armWatchdog(): void {\n if (this.watchdogHandle != null) {\n clearTimeout(this.watchdogHandle);\n this.watchdogHandle = undefined;\n }\n\n if (this.pending() === 0) {\n return;\n }\n\n this.watchdogHandle = setTimeout(() => {\n this.watchdogHandle = undefined;\n console.warn(\n `[ModuleLoadingService] Loading work did not finish within ${ModuleLoadingService.watchdogTimeoutMs}ms, releasing the UI blocker.`\n );\n this.pending.set(0);\n }, ModuleLoadingService.watchdogTimeoutMs);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n DestroyRef,\n effect,\n inject,\n OnDestroy,\n OnInit,\n signal,\n WritableSignal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TopBarDto } from '../../dtos/top-bar.dto';\nimport { TopBarService } from '../../services/top-bar.service';\nimport { MsgService } from '../../services/msg.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { InterpolationParameters, TranslateService, Translation, TranslationObject } from '@ngx-translate/core';\nimport { from, Subject, Subscription } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { AppTitleService } from '../../services/app-title.service';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { L10nService } from '../../services/l10n.service';\nimport { SecurityDto } from '../../dtos/security.dto';\nimport { SecurityService } from '../../services/security.service';\nimport { ContentType, HttpClient } from '../../api/http-client';\nimport { PutSecurityDto } from '../../dtos/put-security.dto';\nimport { ApiExceptionResponse } from '../../api/data-contracts';\nimport { provideTranslations } from '../../helpers/l10n.helper';\nimport { ModuleLoadingService } from '../../services/module-loading.service';\n\nimport en from './l10n/base-module.en.json';\nimport ru from './l10n/base-module.ru.json';\n\ninterface BaseComponentLocalization {\n security: string;\n settings: string;\n content: string;\n}\n\n@Component({standalone: true, template: ''})\nexport abstract class BaseModuleComponent<TBackendStoreSettings, TLocalStoreSettings> implements OnInit, OnDestroy {\n private static readonly readRight = 'read';\n private static readonly editRight = 'edit';\n private static readonly deleteRight = 'delete';\n\n protected isInitialized = false;\n\n /**\n * Set to true in a descendant to hide the layout footer while the module is active.\n * The footer is restored when the module is destroyed.\n */\n protected hideFooter = false;\n\n protected moduleInstanceReloadPromise: Promise<void> = Promise.resolve();\n protected rightsSubscription?: Subscription;\n protected securityRoles: string[] = [];\n protected securitySettings: SecurityDto[] = [];\n protected readonly destroyRef = inject(DestroyRef);\n protected readonly securityService = inject(SecurityService);\n protected readonly moduleLoadingService = inject(ModuleLoadingService);\n protected readonly httpClient = inject(HttpClient);\n\n /**\n * Provide access to app settings\n */\n public readonly layoutService = inject(LayoutService);\n /**\n * Provides access to topbar related functionality, such as managing visibility and content.\n * @type {TopBarService}\n */\n public readonly topBarService: TopBarService = inject(TopBarService);\n\n /**\n * Provides access to information about the current route.\n * This includes route parameters, data, and the route's path.\n */\n public readonly route: ActivatedRoute = inject(ActivatedRoute);\n\n /**\n * Provides access to messaging services.\n */\n public readonly msgService = inject(MsgService);\n\n /**\n * Provides access to translation functionality.\n */\n public readonly translateService = inject(TranslateService);\n\n /**\n * Provides access to the application's title service.\n */\n public readonly appTitleService = inject(AppTitleService);\n\n /**\n * Reference to the ChangeDetector. Used to trigger change detection manually.\n */\n private changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n /**\n * Represents a subscription to an observable.\n * Manages the lifecycle of receiving data from the observable and allows unsubscribing to stop receiving data.\n * @type {Subscription}\n */\n public subscriptions: Subscription[] = [];\n /**\n * Configuration object for backend storage\n * @type {TBackendStoreSettings}\n */\n public settings: TBackendStoreSettings = {} as TBackendStoreSettings;\n\n /**\n * Configuration object for local storage.\n * @type {TLocalStoreSettings}\n */\n public _localSettings: TLocalStoreSettings = {} as TLocalStoreSettings;\n\n /**\n * A signal representing the local application settings. Changes to this signal\n * propagate updates to the underlying local store settings.\n * @type {WritableSignal<TLocalStoreSettings>}\n */\n public localSettings: WritableSignal<TLocalStoreSettings> = signal<TLocalStoreSettings>(this._localSettings);\n\n /**\n * A Subject emitting updates to local store settings. Observables can subscribe to this Subject to react to changes in local settings.\n * @type {Subject<TLocalStoreSettings>}\n */\n public localSettingsUpdate: Subject<TLocalStoreSettings> = new Subject<TLocalStoreSettings>();\n\n /**\n * The title of the component. Get from Title in ngOnInit\n * @type {string}\n */\n public title: string;\n\n private readonly baseTranslations = provideTranslations({ en, ru });\n\n public l10nService = inject(L10nService);\n public canRead = false;\n public canEdit = false;\n public canDelete = false;\n public securityRightsLoaded = false;\n\n /**\n * Updates local settings and persists them to local storage.\n * @return {void}\n */\n private onConfigUpdate(): void {\n if (Object.keys(this.localSettings()).length > 0) {\n this._localSettings = {...this.localSettings()};\n this.localSettingsUpdate.next(this._localSettings);\n localStorage.setItem(`Instance_${this.id}`, JSON.stringify(this._localSettings));\n }\n }\n\n private getLocalStorageSettings() {\n try {\n const localStorageSettingsString = localStorage.getItem(`Instance_${this.id}`);\n if (localStorageSettingsString != null) {\n this.localSettings.set(JSON.parse(localStorageSettingsString) as TLocalStoreSettings);\n } else {\n this.localSettings.set({} as TLocalStoreSettings);\n }\n } catch (error) {\n this.msgService.error(error, 'Error parsing layoutConfig:');\n this.localSettings.set({} as TLocalStoreSettings);\n }\n }\n\n /**\n * A unique numerical identifier for the module.\n * @type {number}\n */\n id: number | undefined = undefined;\n\n /**\n * The name of the controller currently handling the request.\n * @type {string}\n */\n controller: string;\n\n /**\n * Checks if the content ID is present.\n * @returns {boolean} True if the content ID is present, false otherwise.\n */\n get isContent(): boolean {\n return this.topBarService.checkId('content');\n }\n\n /**\n * Checks if the settings ID is present.\n * @returns {boolean} True if the settings ID is present, false otherwise.\n */\n get isSettings(): boolean {\n return this.topBarService.checkId('settings');\n }\n\n /**\n * Checks if the security ID is present.\n * @returns {boolean} True if the security ID is present, false otherwise.\n */\n get isSecurity(): boolean {\n return this.topBarService.checkId('security');\n }\n\n /**\n * Defines the top bar items.\n */\n public topBarItems: TopBarDto[] = [\n {id: 'content', icon: 'pi-box', caption: ''},\n {id: 'settings', icon: 'pi-cog', caption: ''},\n {id: 'security', icon: 'pi-lock', caption: ''}\n ];\n\n /**\n * Gets an instant translation for a key or an array of keys.\n */\n public t(key: string | string[], interpolateParams?: InterpolationParameters): Translation | TranslationObject {\n return this.translateService.instant(key, interpolateParams);\n }\n\n /**\n * Checks whether the current user has the specified security right.\n */\n public hasRight(code: string): boolean {\n return this.hasSecurityRight(this.securityRoles, this.securitySettings, code);\n }\n\n /**\n * Initializes the component and subscribes to local settings updates.\n */\n constructor() {\n effect(() => {\n const config = this.localSettings();\n if (config) {\n this.onConfigUpdate();\n }\n });\n this.subscriptions.push(\n this.route.url.subscribe((url) => {\n this.controller = url[0].path;\n })\n );\n this.subscriptions.push(\n this.route.paramMap.subscribe((params) => {\n const routeId = params.get('id');\n const nextId = routeId != null ? +routeId : undefined;\n const idChanged = this.id !== nextId;\n\n this.id = nextId;\n this.getLocalStorageSettings();\n\n if (this.isInitialized && idChanged) {\n void this.reloadModuleInstance();\n }\n })\n );\n }\n\n /**\n * Lifecycle hook that is called when a component is destroyed.\n * Unsubscribes from all subscriptions to prevent memory leaks,\n * restores the layout footer, resets the top bar items to an empty array,\n * and sets the active ID to the ID of the first top bar item (if available).\n */\n ngOnDestroy() {\n this.layoutService.footerVisible.set(true);\n this.topBarService.setTopBarItems([]);\n this.topBarService.activeId = this.topBarItems[0].id;\n this.rightsSubscription?.unsubscribe();\n this.subscriptions.forEach((s) => s.unsubscribe());\n }\n\n /**\n * Initializes the component. Applies the footer visibility declared by the module,\n * subscribes to translation service to set captions for top bar items,\n * sets the top bar items via the top bar service, sets the active ID,\n * subscribes to route parameters to get the ID, and retrieves settings.\n * @return {Promise<void>} A promise that resolves when the initialization is complete.\n */\n async ngOnInit(): Promise<void> {\n this.layoutService.footerVisible.set(!this.hideFooter);\n\n this.subscriptions.push(\n this.translateService.stream('baseComponent').subscribe((value: BaseComponentLocalization) => {\n this.topBarItems.forEach((item) => {\n item.caption = value[item.id];\n });\n })\n );\n\n this.topBarService.setTopBarItems(this.topBarItems);\n this.topBarService.activeId = this.topBarItems[0].id;\n\n this.isInitialized = true;\n await this.reloadModuleInstance();\n\n this.subscriptions.push(\n this.appTitleService.title$.subscribe((title) => {\n this.title = title;\n this.changeDetectorRef.detectChanges();\n })\n );\n }\n\n /**\n * Retrieves module instance settings.\n * @return {Promise<void>} A promise that resolves when settings are retrieved.\n */\n async getSettings(): Promise<void> {\n try {\n if (this.id == null) {\n return;\n }\n\n this.settings = await this.getModuleInstanceSettings<TBackendStoreSettings>();\n } catch (error) {\n this.msgService.error(error);\n }\n }\n\n /**\n * Saves the provided settings to the backend.\n * @param {TLocalStoreSettings} settings - The settings object to save.\n * @return {Promise<void>} A promise that resolves when the settings are saved. Reject if an error occurs.\n */\n async saveSettings(settings: TBackendStoreSettings): Promise<void> {\n if (this.id == null) {\n this.msgService.error('Module id not passed!');\n return;\n }\n\n await this.saveModuleInstanceSettings({\n id: this.id,\n settings: settings\n })\n .then(() => {\n this.msgService.success(this.translateService.instant('baseComponent.success'));\n })\n .catch((error) => {\n this.msgService.error(error);\n });\n }\n\n /**\n * Called whenever the module instance changes, including the first load.\n * Derived components can override this to refresh module-specific data.\n */\n protected async onModuleInstanceChange(): Promise<void> {\n }\n\n /**\n * Called whenever current user rights for the active module instance are recalculated.\n */\n protected onSecurityRightsChange(): void {\n }\n\n /**\n * Starts watching current token roles and maps them to module instance security settings.\n */\n protected watchSecurityRights(controller: string = this.controller, id: number | undefined = this.id): Promise<void> {\n this.rightsSubscription?.unsubscribe();\n this.resetRightsState();\n\n if (!controller || id == null) {\n return Promise.resolve();\n }\n\n return new Promise<void>((resolve) => {\n let settled = false;\n const settle = () => {\n if (!settled) {\n settled = true;\n resolve();\n }\n };\n\n this.rightsSubscription = this.securityService.payload\n .pipe(\n switchMap((payload) =>\n from(this.getSecurity(controller, id)).pipe(map((securitySettings) => ({payload, securitySettings})))\n ),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe({\n next: ({payload, securitySettings}) => {\n const roles = payload?.realm_access?.roles ?? [];\n this.updateRightsState(roles, securitySettings);\n settle();\n },\n error: (error) => {\n this.securityRightsLoaded = true;\n console.error('Не удалось загрузить права', error);\n this.onSecurityRightsChange();\n settle();\n }\n });\n });\n }\n\n private resetRightsState(): void {\n this.canRead = false;\n this.canEdit = false;\n this.canDelete = false;\n this.securityRightsLoaded = false;\n this.securityRoles = [];\n this.securitySettings = [];\n }\n\n private updateRightsState(roles: string[], securitySettings: SecurityDto[]): void {\n this.securityRoles = roles;\n this.securitySettings = securitySettings;\n this.canRead = this.hasSecurityRight(roles, securitySettings, BaseModuleComponent.readRight);\n this.canEdit = this.hasSecurityRight(roles, securitySettings, BaseModuleComponent.editRight);\n this.canDelete = this.hasSecurityRight(roles, securitySettings, BaseModuleComponent.deleteRight);\n this.securityRightsLoaded = true;\n this.onSecurityRightsChange();\n }\n\n protected hasSecurityRight(roles: string[], securitySettings: SecurityDto[], code: string): boolean {\n return (\n securitySettings.find((security) => security.code === code)?.roles?.some((role) => roles.includes(role)) ?? false\n );\n }\n\n protected getSecurity(controller: string = this.controller, id: number | undefined = this.id): Promise<SecurityDto[]> {\n if (!controller || id == null) {\n return Promise.resolve([]);\n }\n\n return this.httpClient.request<SecurityDto[], ApiExceptionResponse>({\n path: `/api/${controller}/get-security`,\n method: 'GET',\n secure: true,\n format: 'json'\n });\n }\n\n protected saveSecurity(request: PutSecurityDto, controller: string = this.controller): Promise<unknown> {\n return this.httpClient.request<unknown, ApiExceptionResponse>({\n path: `/api/${controller}/put-security`,\n method: 'PUT',\n body: request,\n secure: true,\n type: ContentType.Json\n });\n }\n\n protected getModuleInstanceSettings<TSettings>(controller: string = this.controller): Promise<TSettings> {\n return this.httpClient.request<TSettings, ApiExceptionResponse>({\n path: `/api/${controller}/get-module-instance-settings`,\n method: 'GET',\n secure: true,\n format: 'json'\n });\n }\n\n protected saveModuleInstanceSettings<TSettings>(\n request: { id: number; settings: TSettings },\n controller: string = this.controller\n ): Promise<unknown> {\n return this.httpClient.request<unknown, ApiExceptionResponse>({\n path: `/api/${controller}/put-module-instance-settings`,\n method: 'PUT',\n body: request,\n secure: true,\n type: ContentType.Json\n });\n }\n\n protected getMigrations<TMigration>(controller: string = this.controller): Promise<TMigration[]> {\n return this.httpClient.request<TMigration[], ApiExceptionResponse>({\n path: `/api/${controller}/get-migrations`,\n method: 'GET',\n secure: true,\n format: 'json'\n });\n }\n\n protected applyModuleMigration(request: unknown, controller: string = this.controller): Promise<unknown> {\n return this.httpClient.request<unknown, ApiExceptionResponse>({\n path: `/api/${controller}/apply-migration`,\n method: 'POST',\n body: request,\n secure: true,\n type: ContentType.Json\n });\n }\n\n private async reloadModuleInstance(): Promise<void> {\n // Blocks the UI for the whole bootstrap: router navigation has already ended by the time it runs.\n this.moduleInstanceReloadPromise = this.moduleInstanceReloadPromise.then(() =>\n this.moduleLoadingService.track(\n (async () => {\n // Rights first: the backend rejects settings and data requests without the read right.\n await this.watchSecurityRights();\n if (!this.canRead) {\n return;\n }\n\n await this.getSettings();\n await this.onModuleInstanceChange();\n })()\n )\n );\n\n await this.moduleInstanceReloadPromise;\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n ApiExceptionResponse,\n AuthCsrfTokenResponse,\n AuthSessionResponse,\n DefaultSecretsReportResponse,\n} from \"./data-contracts\";\nimport { HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class SecurityApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getCurrentAuthSession = (params: RequestParams = {}) =>\n this.request<AuthSessionResponse, ApiExceptionResponse>({\n path: `/api/security/get-current-auth-session`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n createAuthSession = (params: RequestParams = {}) =>\n this.request<any, void | ApiExceptionResponse>({\n path: `/api/security/create-auth-session`,\n method: \"POST\",\n secure: true,\n ...params,\n });\n deleteAuthSession = (params: RequestParams = {}) =>\n this.request<any, void | ApiExceptionResponse>({\n path: `/api/security/delete-auth-session`,\n method: \"POST\",\n secure: true,\n ...params,\n });\n getAuthCsrfToken = (params: RequestParams = {}) =>\n this.request<AuthCsrfTokenResponse, ApiExceptionResponse>({\n path: `/api/security/get-auth-csrf-token`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getRealmRoles = (params: RequestParams = {}) =>\n this.request<string[], any>({\n path: `/api/security/get-realm-roles`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getDefaultSecretsReport = (params: RequestParams = {}) =>\n this.request<DefaultSecretsReportResponse, ApiExceptionResponse>({\n path: `/api/security/get-default-secrets-report`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","import { Component, inject, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { ButtonModule } from 'primeng/button';\nimport { FormsModule } from '@angular/forms';\nimport { MsgService } from '../../services/msg.service';\nimport { PutSecurityDto } from '../../dtos/put-security.dto';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { ContentType, HttpClient } from '../../api/http-client';\nimport { SecurityDto } from '../../dtos/security.dto';\nimport { SecurityApi } from '../../api/security.api';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/security.en.json';\nimport ru from './l10n/security.ru.json';\n\n@Component({\n selector: 'security',\n template: `\n <div class=\"flex flex-col md:flex-row gap-8\">\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">\n {{ 'securityComponent.security' | translate }}\n </div>\n @for (item of securityData; track item.name) {\n <div class=\"flex flex-col gap-2\">\n <label htmlFor=\"oip-security-multiselect-{{ item.name }}\">\n {{ item.name }}\n <span class=\"pi pi-question-circle\" pTooltip=\"{{ item.description }}\" tooltipPosition=\"right\"></span>\n </label>\n <p-multiSelect\n id=\"oip-security-multiselect-{{ item.name }}\"\n placeholder=\"{{ 'securityComponent.selectRoles' | translate }}\"\n [maxSelectedLabels]=\"10\"\n [options]=\"roles\"\n [(ngModel)]=\"item.roles\" />\n </div>\n }\n <div class=\"flex justify-content-end flex-wrap\">\n <p-button\n icon=\"pi pi-save\"\n id=\"oip-security-save-button\"\n label=\"{{ 'securityComponent.save' | translate }}\"\n (click)=\"saveClick()\"\n (keydown)=\"saveKeyDown($event)\" />\n </div>\n </div>\n </div>\n </div>\n `,\n imports: [MultiSelectModule, TooltipModule, FormsModule, ButtonModule, TranslatePipe],\n standalone: true\n})\nexport class SecurityComponent implements OnChanges, OnInit, OnDestroy {\n private readonly translations = provideTranslations({ en, ru });\n\n private readonly msgService = inject(MsgService);\n private readonly translateService = inject(TranslateService);\n private readonly httpClient = inject(HttpClient);\n private readonly securityApi = inject(SecurityApi);\n private securityLoadToken = 0;\n\n securityData: SecurityDto[] = [];\n @Input() id?: number;\n @Input() controller?: string;\n roles: string[] = [];\n\n ngOnDestroy(): void {\n // on destroy\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['id'] || changes['controller']) {\n void this.loadSecurity();\n }\n }\n\n ngOnInit(): void {\n this.securityApi.getRealmRoles().then(\n (result) => {\n this.roles = result;\n },\n (error) => this.msgService.error(error)\n );\n }\n\n saveClick() {\n if (this.id == null) {\n this.msgService.error('Module id not passed!');\n return;\n }\n if (!this.controller) {\n this.msgService.error('Controller not passed!');\n return;\n }\n\n const request: PutSecurityDto = {\n id: this.id,\n securities: this.securityData\n };\n this.saveSecurity(this.controller, request).then(\n (result) => {\n this.msgService.success(this.translateService.instant('securityComponent.savedSecurity'));\n },\n (error) => this.msgService.error(error)\n );\n }\n\n saveKeyDown($event: KeyboardEvent) {\n if ($event.key === 'Enter' || $event.key === 'Space') {\n this.saveClick();\n }\n }\n\n private async loadSecurity(): Promise<void> {\n const loadToken = ++this.securityLoadToken;\n const controller = this.controller;\n const id = this.id;\n\n this.securityData = [];\n\n if (!controller || id == null) {\n return;\n }\n\n try {\n const result = await this.getSecurity(controller);\n if (loadToken === this.securityLoadToken) {\n this.securityData = result;\n }\n } catch (error) {\n if (loadToken === this.securityLoadToken) {\n this.msgService.error(error);\n }\n }\n }\n\n private getSecurity(controller: string) {\n return this.httpClient.request<SecurityDto[]>({\n path: `/api/${controller}/get-security`,\n method: 'GET',\n secure: true,\n format: 'json'\n });\n }\n\n private saveSecurity(controller: string, request: PutSecurityDto) {\n return this.httpClient.request<unknown>({\n path: `/api/${controller}/put-security`,\n method: 'PUT',\n body: request,\n secure: true,\n type: ContentType.Json\n });\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport type { PaletteDesignToken, Preset } from '@primeuix/themes/types';\n\n/**\n * Defers loading of a theme preset until the theme is actually selected.\n *\n * Presets are large, so a preset that is not the application default should be provided as a loader\n * built on a dynamic import, which keeps it out of the initial bundle:\n *\n * ```ts\n * { id: 'Lara', preset: () => import('@primeng/themes/lara').then((m) => m.default as Preset) }\n * ```\n */\nexport type AppThemePresetLoader = () => Promise<Preset>;\n\nexport interface AppThemePreset {\n id: string;\n label?: string;\n /** The preset itself, or a {@link AppThemePresetLoader} resolving it on first use. */\n preset: Preset | AppThemePresetLoader;\n primaryColors?: Record<string, PaletteDesignToken | undefined>;\n surfaceColors?: Record<string, PaletteDesignToken | undefined>;\n}\n\nexport type AppThemePresetMergeMode = 'mergeWithDefaults' | 'replaceDefaults';\n\nexport const APP_THEME_PRESETS = new InjectionToken<ReadonlyArray<AppThemePreset>>('APP_THEME_PRESETS', {\n factory: () => []\n});\n\nexport const APP_THEME_PRESETS_MERGE_MODE = new InjectionToken<AppThemePresetMergeMode>(\n 'APP_THEME_PRESETS_MERGE_MODE',\n {\n factory: () => 'mergeWithDefaults'\n }\n);\n","import { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { Component, computed, inject, PLATFORM_ID, signal, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { $t, updatePreset, updateSurfacePalette } from '@primeng/themes';\nimport type { PaletteDesignToken, Preset } from '@primeuix/themes/types';\nimport Aura from '@primeng/themes/aura';\nimport { PrimeNG } from 'primeng/config';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport {\n APP_THEME_PRESETS,\n APP_THEME_PRESETS_MERGE_MODE,\n AppThemePreset,\n AppThemePresetLoader\n} from '../../services/theme-presets.token';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/app-configurator.en.json';\nimport ru from './l10n/app-configurator.ru.json';\n\n/**\n * Aura stays eager: it is the fallback preset and its primitive palette backs the color swatches\n * shown before any other preset is resolved. Lara and Nora are loaded on demand, which keeps roughly\n * 300 KB out of the initial bundle for applications that never switch away from the default theme.\n */\nconst DEFAULT_THEME_PRESETS: ReadonlyArray<AppThemePreset> = [\n { id: 'Aura', label: 'Aura', preset: Aura as Preset },\n { id: 'Lara', label: 'Lara', preset: () => import('@primeng/themes/lara').then((m) => m.default as Preset) },\n { id: 'Nora', label: 'Nora', preset: () => import('@primeng/themes/nora').then((m) => m.default as Preset) }\n];\n\nfunction isPresetLoader(preset: AppThemePreset['preset']): preset is AppThemePresetLoader {\n return typeof preset === 'function';\n}\n\nconst PRIMARY_COLORS = [\n 'emerald',\n 'green',\n 'lime',\n 'orange',\n 'amber',\n 'yellow',\n 'teal',\n 'cyan',\n 'sky',\n 'blue',\n 'indigo',\n 'violet',\n 'purple',\n 'fuchsia',\n 'pink',\n 'rose'\n] as const;\n\ndeclare type SurfacesType = {\n name?: string;\n palette?: PaletteDesignToken;\n};\n\n@Component({\n selector: 'app-configurator',\n standalone: true,\n imports: [CommonModule, FormsModule, SelectButtonModule, TranslatePipe],\n template: `\n <div class=\"flex flex-col gap-4\">\n <div>\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.primary' | translate }}</span>\n <div class=\"pt-2 flex gap-2 flex-wrap justify-start\">\n @for (primaryColor of primaryColors(); track primaryColor.name) {\n <button\n class=\"border-none w-5 h-5 rounded-full p-0 cursor-pointer outline-none outline-offset-1\"\n id=\"oip-app-configurator-primary-color-{{ primaryColor.name }}\"\n type=\"button\"\n [ngClass]=\"{\n 'outline-primary': primaryColor.name === selectedPrimaryColor()\n }\"\n [style]=\"{\n 'background-color': primaryColor?.name === 'noir' ? 'var(--text-color)' : primaryColor?.palette?.['500']\n }\"\n [title]=\"primaryColor.name\"\n (click)=\"updateColors($event, 'primary', primaryColor)\"></button>\n }\n </div>\n </div>\n <div>\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.surface' | translate }}</span>\n <div class=\"pt-2 flex gap-2 flex-wrap justify-start\">\n @for (surface of surfaceColors(); track surface.name) {\n <button\n class=\"border-none w-5 h-5 rounded-full p-0 cursor-pointer outline-none outline-offset-1\"\n id=\"oip-app-configurator-surface-color-{{ surface.name }}\"\n type=\"button\"\n [ngClass]=\"{\n 'outline-primary': selectedSurfaceColor()\n ? selectedSurfaceColor() === surface.name\n : layoutService.layoutConfig().darkTheme\n ? surface.name === 'zinc'\n : surface.name === 'slate'\n }\"\n [style]=\"{\n 'background-color': surface?.name === 'noir' ? 'var(--text-color)' : surface?.palette?.['500']\n }\"\n [title]=\"surface.name\"\n (click)=\"updateColors($event, 'surface', surface)\"></button>\n }\n </div>\n </div>\n <div class=\"flex flex-col gap-2\">\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.presets' | translate }}</span>\n <p-selectButton\n id=\"oip-app-configurator-preset-select-button\"\n optionLabel=\"label\"\n optionValue=\"value\"\n size=\"small\"\n [allowEmpty]=\"false\"\n [ngModel]=\"selectedPreset()\"\n [options]=\"presets\"\n (ngModelChange)=\"onPresetChange($event)\" />\n </div>\n @if (showMenuModeButton()) {\n <div class=\"flex flex-col gap-2\">\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.menuMode' | translate }}</span>\n <p-selectButton\n id=\"oip-app-configurator-menu-mode-select-button\"\n size=\"small\"\n [allowEmpty]=\"false\"\n [ngModel]=\"menuMode()\"\n [options]=\"menuModeOptions\"\n (ngModelChange)=\"onMenuModeChange($event)\">\n <ng-template pTemplate=\"item\" let-item>\n {{ item.label | translate }}\n </ng-template>\n </p-selectButton>\n </div>\n }\n </div>\n `,\n host: {\n class:\n 'hidden absolute top-[3.25rem] right-0 w-72 p-4 bg-surface-0 dark:bg-surface-900 border border-surface rounded-border origin-top shadow-[0px_3px_5px_rgba(0,0,0,0.02),0px_0px_2px_rgba(0,0,0,0.05),0px_1px_4px_rgba(0,0,0,0.08)]'\n }\n})\nexport class AppConfiguratorComponent implements OnInit {\n private readonly translations = provideTranslations({ en, ru });\n\n router = inject(Router);\n\n config: PrimeNG = inject(PrimeNG);\n\n layoutService: LayoutService = inject(LayoutService);\n\n platformId = inject(PLATFORM_ID);\n\n primeng = inject(PrimeNG);\n\n private readonly injectedThemePresets = inject(APP_THEME_PRESETS);\n private readonly themePresetMergeMode = inject(APP_THEME_PRESETS_MERGE_MODE);\n\n private readonly themePresets = this.getThemePresets();\n\n private readonly themePresetsMap = new Map(this.themePresets.map((theme) => [theme.id, theme]));\n\n private readonly defaultThemePreset = this.themePresets[0] ?? DEFAULT_THEME_PRESETS[0];\n\n /**\n * Presets resolved so far, keyed by theme id. Seeded with the eagerly provided ones and filled in\n * as loaders resolve; it is a signal so the color swatches recompute once a preset arrives.\n */\n private readonly resolvedPresets = signal<ReadonlyMap<string, Preset>>(\n new Map(\n this.themePresets\n .filter((theme) => !isPresetLoader(theme.preset))\n .map((theme) => [theme.id, theme.preset as Preset])\n )\n );\n\n private readonly pendingPresets = new Map<string, Promise<Preset>>();\n\n private readonly fallbackPrimaryColors = ((\n DEFAULT_THEME_PRESETS[0].preset as { primitive?: Record<string, PaletteDesignToken> }\n ).primitive ?? {}) as Record<string, PaletteDesignToken>;\n\n presets = this.themePresets.map((theme) => ({ label: theme.label ?? theme.id, value: theme.id }));\n\n showMenuModeButton = signal(!this.router.url.includes('auth'));\n\n menuModeOptions = [\n { label: 'app-configurator.menuModeStatic', value: 'static' },\n { label: 'app-configurator.menuModeOverlay', value: 'overlay' }\n ];\n\n ngOnInit() {\n if (isPlatformBrowser(this.platformId)) {\n const presetId = this.ensureValidThemeId(this.layoutService.layoutConfig().preset);\n void this.onPresetChange(presetId);\n }\n }\n\n surfaces: SurfacesType[] = [\n {\n name: 'slate',\n palette: {\n 0: '#ffffff',\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n 950: '#020617'\n }\n },\n {\n name: 'gray',\n palette: {\n 0: '#ffffff',\n 50: '#f9fafb',\n 100: '#f3f4f6',\n 200: '#e5e7eb',\n 300: '#d1d5db',\n 400: '#9ca3af',\n 500: '#6b7280',\n 600: '#4b5563',\n 700: '#374151',\n 800: '#1f2937',\n 900: '#111827',\n 950: '#030712'\n }\n },\n {\n name: 'zinc',\n palette: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#a1a1aa',\n 500: '#71717a',\n 600: '#52525b',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n 950: '#09090b'\n }\n },\n {\n name: 'neutral',\n palette: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#e5e5e5',\n 300: '#d4d4d4',\n 400: '#a3a3a3',\n 500: '#737373',\n 600: '#525252',\n 700: '#404040',\n 800: '#262626',\n 900: '#171717',\n 950: '#0a0a0a'\n }\n },\n {\n name: 'stone',\n palette: {\n 0: '#ffffff',\n 50: '#fafaf9',\n 100: '#f5f5f4',\n 200: '#e7e5e4',\n 300: '#d6d3d1',\n 400: '#a8a29e',\n 500: '#78716c',\n 600: '#57534e',\n 700: '#44403c',\n 800: '#292524',\n 900: '#1c1917',\n 950: '#0c0a09'\n }\n },\n {\n name: 'soho',\n palette: {\n 0: '#ffffff',\n 50: '#ececec',\n 100: '#dedfdf',\n 200: '#c4c4c6',\n 300: '#adaeb0',\n 400: '#97979b',\n 500: '#7f8084',\n 600: '#6a6b70',\n 700: '#55565b',\n 800: '#3f4046',\n 900: '#2c2c34',\n 950: '#16161d'\n }\n },\n {\n name: 'viva',\n palette: {\n 0: '#ffffff',\n 50: '#f3f3f3',\n 100: '#e7e7e8',\n 200: '#cfd0d0',\n 300: '#b7b8b9',\n 400: '#9fa1a1',\n 500: '#87898a',\n 600: '#6e7173',\n 700: '#565a5b',\n 800: '#3e4244',\n 900: '#262b2c',\n 950: '#0e1315'\n }\n },\n {\n name: 'ocean',\n palette: {\n 0: '#ffffff',\n 50: '#fbfcfc',\n 100: '#F7F9F8',\n 200: '#EFF3F2',\n 300: '#DADEDD',\n 400: '#B1B7B6',\n 500: '#828787',\n 600: '#5F7274',\n 700: '#415B61',\n 800: '#29444E',\n 900: '#183240',\n 950: '#0c1920'\n }\n }\n ];\n\n selectedPrimaryColor = computed(() => {\n return this.layoutService.layoutConfig().primary;\n });\n\n selectedSurfaceColor = computed(() => this.layoutService.layoutConfig().surface);\n\n selectedPreset = computed(() => this.layoutService.layoutConfig().preset);\n\n menuMode = computed(() => this.layoutService.layoutConfig().menuMode);\n\n primaryColors = computed<SurfacesType[]>(() => {\n const activeThemePreset = this.getThemeById(this.layoutService.layoutConfig().preset);\n return this.getPrimaryColorOptions(activeThemePreset);\n });\n\n surfaceColors = computed<SurfacesType[]>(() => {\n const activeThemePreset = this.getThemeById(this.layoutService.layoutConfig().preset);\n return this.getSurfaceColorOptions(activeThemePreset);\n });\n\n getPresetExt() {\n const color: SurfacesType = this.primaryColors().find((c) => c.name === this.selectedPrimaryColor()) || {};\n const preset = this.getThemeById(this.layoutService.layoutConfig().preset).id;\n\n if (color.name === 'noir') {\n return {\n semantic: {\n primary: {\n 50: '{surface.50}',\n 100: '{surface.100}',\n 200: '{surface.200}',\n 300: '{surface.300}',\n 400: '{surface.400}',\n 500: '{surface.500}',\n 600: '{surface.600}',\n 700: '{surface.700}',\n 800: '{surface.800}',\n 900: '{surface.900}',\n 950: '{surface.950}'\n },\n colorScheme: {\n light: {\n primary: {\n color: '{primary.950}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.800}',\n activeColor: '{primary.700}'\n },\n highlight: {\n background: '{primary.950}',\n focusBackground: '{primary.700}',\n color: '#ffffff',\n focusColor: '#ffffff'\n }\n },\n dark: {\n primary: {\n color: '{primary.50}',\n contrastColor: '{primary.950}',\n hoverColor: '{primary.200}',\n activeColor: '{primary.300}'\n },\n highlight: {\n background: '{primary.50}',\n focusBackground: '{primary.300}',\n color: '{primary.950}',\n focusColor: '{primary.950}'\n }\n }\n }\n }\n };\n } else if (preset === 'Nora') {\n return {\n semantic: {\n primary: color.palette,\n colorScheme: {\n light: {\n primary: {\n color: '{primary.600}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.700}',\n activeColor: '{primary.800}'\n },\n highlight: {\n background: '{primary.600}',\n focusBackground: '{primary.700}',\n color: '#ffffff',\n focusColor: '#ffffff'\n }\n },\n dark: {\n primary: {\n color: '{primary.500}',\n contrastColor: '{surface.900}',\n hoverColor: '{primary.400}',\n activeColor: '{primary.300}'\n },\n highlight: {\n background: '{primary.500}',\n focusBackground: '{primary.400}',\n color: '{surface.900}',\n focusColor: '{surface.900}'\n }\n }\n }\n }\n };\n } else {\n return {\n semantic: {\n primary: color.palette,\n colorScheme: {\n light: {\n primary: {\n color: '{primary.500}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.600}',\n activeColor: '{primary.700}'\n },\n highlight: {\n background: '{primary.50}',\n focusBackground: '{primary.100}',\n color: '{primary.700}',\n focusColor: '{primary.800}'\n }\n },\n dark: {\n primary: {\n color: '{primary.400}',\n contrastColor: '{surface.900}',\n hoverColor: '{primary.300}',\n activeColor: '{primary.200}'\n },\n highlight: {\n background: 'color-mix(in srgb, {primary.400}, transparent 84%)',\n focusBackground: 'color-mix(in srgb, {primary.400}, transparent 76%)',\n color: 'rgba(255,255,255,.87)',\n focusColor: 'rgba(255,255,255,.87)'\n }\n }\n }\n }\n };\n }\n }\n\n private getThemePresets(): AppThemePreset[] {\n const source = this.themePresetMergeMode === 'replaceDefaults' ? [] : [...DEFAULT_THEME_PRESETS];\n const result = [...source];\n for (const theme of this.injectedThemePresets ?? []) {\n if (!theme?.id || !theme?.preset) {\n continue;\n }\n const index = result.findIndex((item) => item.id === theme.id);\n if (index >= 0) {\n result[index] = theme;\n } else {\n result.push(theme);\n }\n }\n return result;\n }\n\n private getThemeById(themeId?: string): AppThemePreset {\n return this.themePresetsMap.get(themeId ?? '') ?? this.defaultThemePreset;\n }\n\n /**\n * The preset of a theme, or `undefined` while its loader is still in flight.\n */\n private getResolvedPreset(theme: AppThemePreset): Preset | undefined {\n return isPresetLoader(theme.preset) ? this.resolvedPresets().get(theme.id) : theme.preset;\n }\n\n /**\n * Resolves a theme preset, running its loader at most once and caching the result.\n * A failed load falls back to the default preset so the configurator stays usable.\n */\n private async loadPreset(theme: AppThemePreset): Promise<Preset> {\n const resolved = this.getResolvedPreset(theme);\n if (resolved) {\n return resolved;\n }\n\n const pending = this.pendingPresets.get(theme.id);\n if (pending) {\n return pending;\n }\n\n const load = (theme.preset as AppThemePresetLoader)()\n .then((preset) => {\n this.resolvedPresets.update((presets) => new Map(presets).set(theme.id, preset));\n return preset;\n })\n .catch((error) => {\n console.error(`[AppConfigurator] Failed to load theme preset \"${theme.id}\".`, error);\n return this.getResolvedPreset(this.defaultThemePreset) ?? (Aura as Preset);\n })\n .finally(() => this.pendingPresets.delete(theme.id));\n\n this.pendingPresets.set(theme.id, load);\n return load;\n }\n\n private getPrimaryColorOptions(activeThemePreset: AppThemePreset): SurfacesType[] {\n if (activeThemePreset.primaryColors) {\n return Object.entries(activeThemePreset.primaryColors)\n .filter((entry): entry is [string, PaletteDesignToken] => Boolean(entry[1]))\n .map(([name, palette]) => ({ name, palette }));\n }\n\n const presetPalette =\n (this.getResolvedPreset(activeThemePreset) as { primitive?: Record<string, PaletteDesignToken> } | undefined)\n ?.primitive ?? {};\n const palettes: SurfacesType[] = [{ name: 'noir', palette: {} }];\n\n PRIMARY_COLORS.forEach((color) => {\n palettes.push({\n name: color,\n palette: presetPalette[color] ?? this.fallbackPrimaryColors[color]\n });\n });\n\n return palettes;\n }\n\n private getSurfaceColorOptions(activeThemePreset: AppThemePreset): SurfacesType[] {\n if (activeThemePreset.surfaceColors) {\n return Object.entries(activeThemePreset.surfaceColors)\n .filter((entry): entry is [string, PaletteDesignToken] => Boolean(entry[1]))\n .map(([name, palette]) => ({ name, palette }));\n }\n\n return this.surfaces;\n }\n\n private ensureValidThemeId(themeId?: string): string {\n if (themeId && this.themePresetsMap.has(themeId)) {\n return themeId;\n }\n\n if (themeId && isPlatformBrowser(this.platformId)) {\n console.warn(`[AppConfigurator] Unknown theme preset \"${themeId}\", fallback to \"${this.defaultThemePreset.id}\".`);\n }\n\n return this.defaultThemePreset.id;\n }\n\n updateColors(event: MouseEvent, type: string, color: SurfacesType) {\n if (type === 'primary') {\n this.layoutService.layoutConfig.update((state) => ({\n ...state,\n primary: color.name\n }));\n } else if (type === 'surface') {\n this.layoutService.layoutConfig.update((state) => ({\n ...state,\n surface: color.name\n }));\n }\n this.applyTheme(type, color);\n\n event.stopPropagation();\n }\n\n applyTheme(type: string, color: SurfacesType) {\n if (type === 'primary') {\n updatePreset(this.getPresetExt());\n } else if (type === 'surface') {\n updateSurfacePalette(color.palette);\n }\n }\n\n async onPresetChange(event: string) {\n const nextThemeId = this.ensureValidThemeId(event);\n const nextTheme = this.getThemeById(nextThemeId);\n const preset = await this.loadPreset(nextTheme);\n const primaryColors = this.getPrimaryColorOptions(nextTheme);\n const surfaceColors = this.getSurfaceColorOptions(nextTheme);\n\n this.layoutService.layoutConfig.update((state) => ({\n ...state,\n preset: nextThemeId,\n primary: primaryColors.some((color) => color.name === state.primary)\n ? state.primary\n : (primaryColors[0]?.name ?? state.primary),\n surface:\n nextTheme.surfaceColors && !surfaceColors.some((color) => color.name === state.surface)\n ? (surfaceColors[0]?.name ?? state.surface)\n : state.surface\n }));\n const surfacePalette = this.surfaceColors().find((s) => s.name === this.selectedSurfaceColor())?.palette;\n $t().preset(preset).preset(this.getPresetExt()).surfacePalette(surfacePalette).use({ useDefaultOptions: true });\n }\n\n onMenuModeChange(event: string) {\n this.layoutService.layoutConfig.update((prev) => ({\n ...prev,\n menuMode: event\n }));\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\nimport {\n ApiExceptionResponse,\n GetUserPhotoByIdParams,\n PostUserPhotoPayload,\n UserSettingsDto,\n} from \"./users-data-contracts\";\n\n@Injectable()\nexport class UserProfileApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getUserPhoto = (params: RequestParams = {}) =>\n this.request<Blob, ApiExceptionResponse>({\n path: `/api/user-profile/get-user-photo`,\n method: \"GET\",\n secure: true,\n format: \"blob\",\n ...params,\n });\n getUserPhotoById = (\n { userId, ...query }: GetUserPhotoByIdParams,\n params: RequestParams = {},\n ) =>\n this.request<Blob, ApiExceptionResponse>({\n path: `/api/user-profile/get-user-photo-by-id/${userId}`,\n method: \"GET\",\n secure: true,\n format: \"blob\",\n ...params,\n });\n postUserPhoto = (data: PostUserPhotoPayload, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/user-profile/post-user-photo`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.FormData,\n ...params,\n });\n deleteUserPhoto = (params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/user-profile/delete-user-photo`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n getSettings = (params: RequestParams = {}) =>\n this.request<UserSettingsDto, ApiExceptionResponse>({\n path: `/api/user-profile/get-settings`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n setSettings = (data: UserSettingsDto, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/user-profile/set-settings`,\n method: \"PUT\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { SecurityService } from './security.service';\nimport { distinctUntilChanged, filter, map } from 'rxjs/operators';\nimport { UserProfileApi } from '../api/user-profile.api';\nimport { MsgService } from './msg.service';\nimport { TranslateService } from '@ngx-translate/core';\n\n/**\n * UserService is responsible for retrieving and handling user-related data,\n * including the user's photo and short label for avatar display.\n */\n@Injectable()\nexport class UserService {\n private readonly securityService = inject(SecurityService);\n private readonly userProfileApi = inject(UserProfileApi);\n private readonly msgService = inject(MsgService);\n private readonly translateService = inject(TranslateService);\n private requestedPhotoKey: string | null = null;\n\n constructor() {\n this.securityService\n .getCurrentUser$()\n .pipe(\n map((user) => this.getCurrentUserPhotoKey(user)),\n filter((photoKey) => !!photoKey),\n distinctUntilChanged()\n )\n .subscribe(() => {\n this.getUserPhoto();\n });\n }\n\n /**\n * Stores the user's photo as a data URL or binary blob, depending on how it's processed.\n */\n photo: any = null;\n\n /**\n * Indicates whether the user photo has finished loading.\n */\n photoLoaded: boolean = false;\n\n /**\n * Returns a short label composed of the user's initials.\n * Typically used for avatar display when a photo is unavailable.\n */\n get shortLabel(): string {\n const data = this.securityService.getCurrentUser();\n const givenNameInitial = data?.given_name?.trim()?.[0];\n const familyNameInitial = data?.family_name?.trim()?.[0];\n const displayNameInitials = this.getInitials(\n data?.displayName ?? data?.name ?? data?.userName ?? data?.preferred_username\n );\n\n return `${givenNameInitial ?? ''}${familyNameInitial ?? ''}`.toUpperCase() || displayNameInitials;\n }\n\n get userName(): string {\n const data = this.securityService.getCurrentUser();\n return (\n [data?.given_name, data?.family_name].filter(Boolean).join(' ') ||\n data?.displayName ||\n data?.name ||\n data?.userName ||\n data?.preferred_username ||\n data?.email ||\n ''\n );\n }\n\n /**\n * Initiates an HTTP request to fetch the current user's photo,\n * and updates the `photo` and `photoLoaded` properties accordingly.\n */\n getUserPhoto(): void {\n const photoKey = this.getCurrentUserPhotoKey(this.securityService.getCurrentUser());\n\n if (!photoKey) {\n return;\n }\n\n if (this.requestedPhotoKey === photoKey && (this.photoLoaded || this.photo)) {\n return;\n }\n\n this.requestedPhotoKey = photoKey;\n\n this.userProfileApi.getUserPhoto().then(\n (data) => {\n this.createImageFromBlob(data as Blob);\n this.photoLoaded = true;\n },\n (error) => {\n // A 404 just means the user hasn't uploaded a photo yet (e.g. on first login) —\n // that's an expected state, not a failure, so fall back to initials silently.\n if ((error as { status?: number })?.status !== 404) {\n this.msgService.errorFromException(error, this.translateService.instant('userService.failedToLoadPhoto'));\n }\n this.photoLoaded = false;\n }\n );\n }\n\n refreshUserPhoto(): void {\n this.requestedPhotoKey = null;\n this.photo = null;\n this.photoLoaded = false;\n this.getUserPhoto();\n }\n\n /**\n * Converts a Blob image into a Base64 data URL and stores it in the `photo` property.\n *\n * @param image - The image Blob to be converted.\n */\n private createImageFromBlob(image: Blob): void {\n const reader = new FileReader();\n reader.addEventListener(\n 'load',\n () => {\n this.photo = reader.result;\n },\n false\n );\n if (image) {\n reader.readAsDataURL(image);\n }\n }\n\n private getInitials(value?: string): string {\n return (\n value\n ?.trim()\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, 2)\n .map((part) => part[0])\n .join('')\n .toUpperCase() ?? ''\n );\n }\n\n private getCurrentUserPhotoKey(user: any): string | null {\n return user?.sub || user?.userName || user?.preferred_username || user?.displayName || user?.name || null;\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'logo',\n standalone: true,\n template: `\n <svg\n viewBox=\"0.8516 1.7159 60.0074 64.7142\"\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.height]=\"height + 'px'\"\n [attr.width]=\"width + 'px'\">\n <path\n class=\"primary-logo-color\"\n d=\"M -130.45 -104.78 C -130.45 -105.9 -130.43 -107.01 -130.45 -108.13 C -130.49 -108.52 -130.28 -108.9 -129.92 -109.07 C -125.87 -111.4 -121.82 -113.74 -117.77 -116.08 C -115.7 -117.26 -113.63 -118.45 -111.58 -119.67 C -111.26 -119.89 -110.83 -119.89 -110.51 -119.67 C -101.66 -114.53 -92.787 -109.41 -83.915 -104.29 C -83.752 -104.2 -83.479 -104.16 -83.475 -103.94 C -83.472 -103.72 -83.766 -103.65 -83.947 -103.54 C -86.326 -102.16 -88.716 -100.79 -91.092 -99.39 C -91.377 -99.18 -91.761 -99.18 -92.046 -99.39 C -98.211 -102.98 -104.38 -106.55 -110.56 -110.12 C -110.85 -110.33 -111.23 -110.33 -111.52 -110.12 C -114.88 -108.16 -118.25 -106.22 -121.63 -104.28 C -122.01 -104.11 -122.24 -103.71 -122.2 -103.3 C -122.18 -101.11 -122.2 -98.922 -122.2 -96.736 C -122.19 -95.98 -122.21 -95.98 -122.84 -96.335 C -125.2 -97.7 -127.57 -99.07 -129.93 -100.42 C -130.27 -100.57 -130.49 -100.92 -130.46 -101.3 C -130.43 -102.46 -130.45 -103.62 -130.45 -104.78 Z\"\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\n <path\n class=\"primary-logo-color\"\n d=\"M -70.504 -100.94 L -70.504 -90.438 C -70.447 -89.98 -70.692 -89.537 -71.11 -89.342 C -78.942 -84.839 -86.769 -80.325 -94.592 -75.8 C -95.635 -75.2 -96.684 -74.612 -97.713 -73.988 C -98.17 -73.708 -98.255 -73.846 -98.255 -74.314 L -98.255 -82.785 C -98.268 -83.116 -98.07 -83.419 -97.762 -83.541 C -92.003 -86.86 -86.269 -90.236 -80.468 -93.47 C -79.181 -94.179 -78.667 -94.934 -78.731 -96.441 C -78.869 -99.76 -78.791 -103.09 -78.755 -106.42 C -78.694 -107 -79.02 -107.56 -79.56 -107.8 C -81.436 -108.83 -83.28 -109.93 -85.138 -110.99 C -85.734 -111.34 -85.734 -111.34 -85.113 -111.7 C -82.748 -113.07 -80.379 -114.43 -78.021 -115.82 C -77.707 -116.05 -77.283 -116.06 -76.957 -115.84 C -74.962 -114.66 -72.953 -113.5 -70.929 -112.37 C -70.62 -112.19 -70.456 -111.84 -70.521 -111.49 C -70.514 -107.99 -70.508 -104.48 -70.504 -100.94 Z\"\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\n <path\n class=\"primary-logo-color\"\n d=\"M -108.68 -85.743 L -108.68 -75.169 C -108.72 -74.754 -108.5 -74.358 -108.12 -74.179 C -104.77 -72.267 -101.44 -70.339 -98.117 -68.396 C -97.762 -68.141 -97.284 -68.141 -96.929 -68.396 C -95.028 -69.527 -93.096 -70.598 -91.195 -71.725 C -90.667 -72.041 -90.581 -71.892 -90.581 -71.371 C -90.596 -68.591 -90.596 -65.811 -90.581 -63.03 C -90.551 -62.7 -90.729 -62.386 -91.028 -62.243 C -93.083 -61.073 -95.13 -59.891 -97.17 -58.697 C -97.436 -58.537 -97.775 -58.569 -98.007 -58.775 C -102.74 -61.517 -107.47 -64.254 -112.22 -66.984 C -113.63 -67.796 -115.01 -68.615 -116.42 -69.406 C -116.77 -69.561 -116.97 -69.913 -116.94 -70.286 C -116.93 -80.555 -116.93 -90.823 -116.94 -101.09 C -116.94 -101.63 -116.86 -101.75 -116.35 -101.44 C -113.98 -100.05 -111.59 -98.667 -109.19 -97.303 C -108.84 -97.135 -108.62 -96.76 -108.66 -96.367 C -108.68 -92.833 -108.69 -89.291 -108.68 -85.743 Z\"\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\n <path\n class=\"secondary-logo-color\"\n d=\"M -122.18 -85.807 L -122.18 -82.129 C -122.18 -81.637 -122.34 -81.615 -122.72 -81.839 C -125.16 -83.257 -127.6 -84.667 -130.05 -86.069 C -130.35 -86.219 -130.53 -86.535 -130.5 -86.867 L -130.5 -94.09 C -130.5 -94.64 -130.34 -94.679 -129.89 -94.417 C -127.49 -92.998 -125.09 -91.607 -122.67 -90.243 C -122.35 -90.103 -122.15 -89.772 -122.18 -89.42 C -122.21 -88.214 -122.18 -87.012 -122.18 -85.807 Z M -82.688 -119.15 C -83.954 -118.41 -85.17 -117.7 -86.365 -117.02 C -87.748 -116.22 -89.138 -115.44 -90.514 -114.63 C -90.761 -114.45 -91.093 -114.45 -91.34 -114.63 C -93.432 -115.86 -95.535 -117.07 -97.649 -118.27 C -98.053 -118.5 -98.191 -118.63 -97.67 -118.93 C -95.216 -120.32 -92.776 -121.74 -90.337 -123.15 C -90.134 -123.33 -89.845 -123.36 -89.61 -123.23 L -82.918 -119.33 C -82.862 -119.28 -82.812 -119.24 -82.688 -119.15 Z M -85.365 -65.616 L -85.365 -72.062 L -85.365 -74.622 C -85.403 -74.928 -85.24 -75.223 -84.961 -75.353 C -82.886 -76.534 -80.83 -77.736 -78.77 -78.931 C -78.174 -79.286 -78.135 -79.257 -78.135 -78.576 L -78.135 -70.303 C -78.135 -69.991 -78.135 -69.711 -78.468 -69.52 C -80.656 -68.275 -82.833 -67.013 -85.014 -65.761 C -85.127 -65.704 -85.245 -65.655 -85.365 -65.616 Z\"\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\n </svg>\n `,\n styles: [\n `\n .primary-logo-color {\n fill: var(--primary-color);\n }\n\n .secondary-logo-color {\n fill: var(--p-primary-600);\n }\n `\n ]\n})\nexport class LogoComponent {\n @Input() width: number;\n @Input() height: number;\n}\n","import { Injectable, Type, InjectionToken, inject } from '@angular/core';\nimport { LogoComponent } from '../components/logo/logo.component';\nimport { Provider } from '@angular/core';\n\nexport const LOGO_COMPONENT_TOKEN = new InjectionToken<Type<any>>('LOGO_COMPONENT_TOKEN');\n\nexport function provideLogoComponent(component: Type<any>): Provider {\n return {\n provide: LOGO_COMPONENT_TOKEN,\n useValue: component\n };\n}\n\n@Injectable({ providedIn: 'root' })\nexport class LogoService {\n private customLogoComponent = inject(LOGO_COMPONENT_TOKEN, { optional: true });\n\n getLogoComponent(): Type<any> {\n return this.customLogoComponent || LogoComponent;\n }\n}\n","import { inject, Injectable, InjectionToken, Provider } from '@angular/core';\n\n/**\n * Application information value. A function or a signal is read on every change detection,\n * so it can return a localized value.\n */\nexport type AppInfoValue = string | (() => string);\n\n/**\n * Application information displayed by the shell components.\n */\nexport interface AppInfo {\n /**\n * Application version, for example generated at build time from package.json.\n */\n version?: AppInfoValue;\n\n /**\n * Application name displayed in the footer.\n */\n footer?: AppInfoValue;\n\n /**\n * Application name displayed in the top bar.\n */\n title?: AppInfoValue;\n}\n\nexport const APP_INFO_TOKEN = new InjectionToken<AppInfo>('APP_INFO_TOKEN');\n\n/**\n * Provides application information instead of the `app-info.*` translation keys.\n */\nexport function provideAppInfo(appInfo: AppInfo): Provider {\n return {\n provide: APP_INFO_TOKEN,\n useValue: appInfo\n };\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AppInfoService {\n private appInfo = inject(APP_INFO_TOKEN, { optional: true });\n\n /**\n * Returns the provided version or null when it should be taken from translations.\n */\n getVersion(): string | null {\n return this.resolve(this.appInfo?.version);\n }\n\n /**\n * Returns the provided application name or null when it should be taken from translations.\n */\n getFooter(): string | null {\n return this.resolve(this.appInfo?.footer);\n }\n\n /**\n * Returns the provided application name or null when it should be taken from translations.\n */\n getTitle(): string | null {\n return this.resolve(this.appInfo?.title);\n }\n\n private resolve(value: AppInfoValue | undefined): string | null {\n return (typeof value === 'function' ? value() : value) || null;\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport { HttpClient, RequestParams } from \"./http-client\";\nimport {\n ApiExceptionResponse,\n GetNotificationByIdParams,\n GetNotificationByUserParams,\n MarkNotificationAsReadParams,\n UserNotificationCountResponse,\n UserNotificationDto,\n UserNotificationListResponse,\n} from \"./notification-data-contracts\";\n\n@Injectable()\nexport class NotificationApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getNotificationByUser = (\n query: GetNotificationByUserParams,\n params: RequestParams = {},\n ) =>\n this.request<UserNotificationListResponse, ApiExceptionResponse>({\n path: `/api/notification/get-notification-by-user`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n getNotificationCountByUser = (params: RequestParams = {}) =>\n this.request<UserNotificationCountResponse, ApiExceptionResponse>({\n path: `/api/notification/get-notification-count-by-user`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n markNotificationAsRead = (\n { id, ...query }: MarkNotificationAsReadParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/notification/mark-notification-as-read/${id}`,\n method: \"POST\",\n secure: true,\n ...params,\n });\n getNotificationById = (\n query: GetNotificationByIdParams,\n params: RequestParams = {},\n ) =>\n this.request<UserNotificationDto, ApiExceptionResponse>({\n path: `/api/notification/get-notification-by-id`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","import * as signalR from '@microsoft/signalr';\nimport { SecurityService } from './security.service';\nimport { inject, Injectable, signal } from '@angular/core';\nimport { MsgService } from './msg.service';\nimport { NotificationApi } from '../api/notification.api';\n\n@Injectable({ providedIn: 'root' })\nexport class NotificationService {\n private connection: signalR.HubConnection;\n private securityService = inject(SecurityService);\n private msgService = inject(MsgService);\n private notificationApi = inject(NotificationApi);\n unreadNotificationCount = signal<number | undefined>(undefined);\n\n constructor() {\n this.connection = new signalR.HubConnectionBuilder()\n .withUrl('/hubs/notification', {\n withCredentials: true,\n skipNegotiation: true,\n transport: signalR.HttpTransportType.WebSockets\n })\n .configureLogging(signalR.LogLevel.Error)\n .build();\n\n this.connection.on('ReceiveNotification', (notification) => {\n const opt = {\n severity: notification.severity,\n summary: notification.subject,\n detail: notification.message,\n life: 0\n };\n this.msgService.add(opt);\n this.unreadNotificationCount.update((count) => (count ?? 0) + 1);\n });\n\n this.securityService.isAuthenticated().subscribe((authenticated) => {\n if (!authenticated) {\n this.unreadNotificationCount.set(undefined);\n if (this.connection.state !== signalR.HubConnectionState.Disconnected) {\n this.connection.stop();\n }\n return;\n }\n\n this.loadUnreadNotificationCount();\n\n if (this.connection.state === signalR.HubConnectionState.Disconnected) {\n this.connection.start().catch((error) => console.error('Failed to start notification connection', error));\n return;\n }\n\n this.connection.stop().then(() => {\n this.connection.start().catch((error) => console.error('Failed to restart notification connection', error));\n });\n });\n }\n\n loadUnreadNotificationCount(): void {\n this.notificationApi\n .getNotificationCountByUser()\n .then((response) => this.unreadNotificationCount.set(response.count ?? 0))\n .catch((error) => console.error('Failed to load notification count', error));\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, ViewChild, computed, inject } from '@angular/core';\nimport { BadgeModule } from 'primeng/badge';\nimport { ButtonModule } from 'primeng/button';\nimport { PaginatorModule, PaginatorState } from 'primeng/paginator';\nimport { Popover } from 'primeng/popover';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { Tag } from 'primeng/tag';\nimport { Tooltip } from 'primeng/tooltip';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { NotificationApi } from '../../api/notification.api';\nimport { UserNotificationDto } from '../../api/notification-data-contracts';\nimport { MsgService } from '../../services/msg.service';\nimport { NotificationService } from '../../services/notification.service';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/user-notifications.en.json';\nimport ru from './l10n/user-notifications.ru.json';\n\n@Component({\n selector: 'app-user-notifications',\n standalone: true,\n imports: [\n CommonModule,\n BadgeModule,\n ButtonModule,\n PaginatorModule,\n Popover,\n ProgressSpinnerModule,\n Tag,\n Tooltip,\n TranslatePipe\n ],\n template: `\n <button\n class=\"layout-topbar-action relative\"\n id=\"oip-app-topbar-notification-button\"\n type=\"button\"\n [attr.aria-label]=\"'Notifications: ' + unreadNotificationCount()\"\n (click)=\"toggle($event)\">\n <i class=\"pi pi-bell\"></i>\n @if (unreadNotificationCount() > 0) {\n <p-badge\n class=\"absolute -top-1 -right-1\"\n severity=\"danger\"\n [badgeSize]=\"'small'\"\n [value]=\"unreadNotificationBadge()\" />\n }\n </button>\n\n <p-popover #popover styleClass=\"w-[min(92vw,34rem)]\">\n <div class=\"flex items-center justify-between gap-3 mb-4\">\n <div class=\"font-semibold text-lg\">\n {{ 'userNotifications.title' | translate }}\n </div>\n <p-button\n icon=\"pi pi-refresh\"\n rounded=\"true\"\n severity=\"secondary\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"loading\"\n [pTooltip]=\"'userNotifications.refresh' | translate\"\n (onClick)=\"loadNotifications()\"></p-button>\n </div>\n\n @if (loading && notifications.length === 0) {\n <div class=\"flex justify-center py-8\">\n <p-progressSpinner style=\"w-8 h-8\"></p-progressSpinner>\n </div>\n } @else if (notifications.length === 0) {\n <div class=\"text-center py-8 text-surface-500\">\n {{ 'userNotifications.empty' | translate }}\n </div>\n } @else {\n <div class=\"flex flex-col gap-3 max-h-[26rem] overflow-y-auto pr-1\">\n @for (notification of notifications; track notification.notificationUserId) {\n <div class=\"border border-surface-200 dark:border-surface-700 rounded-md p-3\">\n <div class=\"flex items-start justify-between gap-3\">\n <div class=\"min-w-0\">\n <div class=\"font-medium leading-snug break-words\">\n {{ notification.subject }}\n </div>\n <div class=\"text-xs text-surface-500 mt-1\">\n {{ notification.createdAt | date: 'dd.MM.yyyy HH:mm' }}\n </div>\n </div>\n @if (notification.importance) {\n <p-tag\n class=\"shrink-0\"\n [severity]=\"getImportanceSeverity(notification.importance)\"\n [value]=\"notification.importance\"></p-tag>\n }\n </div>\n\n <div class=\"text-sm text-surface-700 dark:text-surface-200 mt-3 whitespace-pre-line break-words\">\n {{ notification.message }}\n </div>\n\n <div class=\"flex justify-end mt-3\">\n <p-button\n icon=\"pi pi-check\"\n size=\"small\"\n [label]=\"'userNotifications.markAsRead' | translate\"\n [loading]=\"readingNotificationId === notification.notificationUserId\"\n (onClick)=\"markAsRead(notification)\"></p-button>\n </div>\n </div>\n }\n </div>\n\n <p-paginator\n class=\"mt-3\"\n [first]=\"skip\"\n [rows]=\"take\"\n [rowsPerPageOptions]=\"[5, 10, 20]\"\n [totalRecords]=\"totalCount\"\n (onPageChange)=\"onPageChange($event)\"></p-paginator>\n }\n </p-popover>\n `\n})\nexport class UserNotificationsComponent {\n private readonly translations = provideTranslations({ en, ru });\n\n @ViewChild('popover') private popover?: Popover;\n\n protected notifications: UserNotificationDto[] = [];\n protected totalCount = 0;\n protected skip = 0;\n protected take = 5;\n protected loading = false;\n protected readingNotificationId?: number;\n\n private readonly notificationApi = inject(NotificationApi);\n private readonly notificationService = inject(NotificationService);\n private readonly msgService = inject(MsgService);\n private readonly translateService = inject(TranslateService);\n\n protected readonly unreadNotificationCount = computed(() => this.notificationService.unreadNotificationCount() ?? 0);\n protected readonly unreadNotificationBadge = computed(() => {\n const count = this.unreadNotificationCount();\n\n return count > 99 ? '99+' : count.toString();\n });\n\n protected async toggle(event: Event): Promise<void> {\n this.popover?.toggle(event);\n await this.loadNotifications();\n }\n\n async loadNotifications(): Promise<void> {\n this.loading = true;\n\n try {\n const response = await this.notificationApi.getNotificationByUser({\n skip: this.skip,\n take: this.take,\n unreadOnly: true\n });\n\n this.notifications = response.notifications ?? [];\n this.totalCount = response.totalCount ?? 0;\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.loading = false;\n }\n }\n\n async onPageChange(event: PaginatorState): Promise<void> {\n this.skip = event.first ?? 0;\n this.take = event.rows ?? this.take;\n await this.loadNotifications();\n }\n\n async markAsRead(notification: UserNotificationDto): Promise<void> {\n if (!notification.notificationUserId) {\n return;\n }\n\n this.readingNotificationId = notification.notificationUserId;\n\n try {\n await this.notificationApi.markNotificationAsRead({ id: notification.notificationUserId });\n this.msgService.success(this.translateService.instant('userNotifications.markedAsRead'));\n this.notificationService.loadUnreadNotificationCount();\n\n if (this.notifications.length === 1 && this.skip > 0) {\n this.skip = Math.max(this.skip - this.take, 0);\n }\n\n await this.loadNotifications();\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.readingNotificationId = undefined;\n }\n }\n\n protected getImportanceSeverity(importance: string): 'success' | 'info' | 'warn' | 'danger' | 'secondary' {\n switch (importance) {\n case 'Critical':\n case 'High':\n return 'danger';\n case 'Medium':\n return 'warn';\n case 'Low':\n return 'info';\n default:\n return 'secondary';\n }\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n ApiExceptionResponse,\n ApplicationRegistryItemDto,\n DeleteApplicationRegistryItemParams,\n GetApplicationRegistryItemByCodeParams,\n UpdateApplicationRegistryItemParams,\n} from \"./applications-data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class ApplicationsApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getApplicationRegistryItems = (params: RequestParams = {}) =>\n this.request<ApplicationRegistryItemDto[], ApiExceptionResponse>({\n path: `/api/applications/get-application-registry-items`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getApplicationRegistryItemByCode = (\n { code, ...query }: GetApplicationRegistryItemByCodeParams,\n params: RequestParams = {},\n ) =>\n this.request<any, ApiExceptionResponse>({\n path: `/api/applications/get-application-registry-item-by-code/${code}`,\n method: \"GET\",\n secure: true,\n ...params,\n });\n createApplicationRegistryItem = (\n data: ApplicationRegistryItemDto,\n params: RequestParams = {},\n ) =>\n this.request<any, ApiExceptionResponse>({\n path: `/api/applications/create-application-registry-item`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n updateApplicationRegistryItem = (\n { code, ...query }: UpdateApplicationRegistryItemParams,\n data: ApplicationRegistryItemDto,\n params: RequestParams = {},\n ) =>\n this.request<any, ApiExceptionResponse>({\n path: `/api/applications/update-application-registry-item/${code}`,\n method: \"PUT\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n deleteApplicationRegistryItem = (\n { code, ...query }: DeleteApplicationRegistryItemParams,\n params: RequestParams = {},\n ) =>\n this.request<any, ApiExceptionResponse>({\n path: `/api/applications/delete-application-registry-item/${code}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ApplicationsApi } from '../api/applications.api';\nimport { ApplicationRegistryItemDto } from '../api/applications-data-contracts';\n\n@Injectable()\nexport class ApplicationRegistryService {\n private readonly applicationsApi = inject(ApplicationsApi);\n\n applications: ApplicationRegistryItemDto[] = [];\n currentApplication: ApplicationRegistryItemDto | null = null;\n\n async loadApplications(): Promise<void> {\n this.applications = await this.applicationsApi.getApplicationRegistryItems();\n this.currentApplication = this.applications.find((application) => application.isCurrent) ?? null;\n }\n\n openApplication(application: ApplicationRegistryItemDto): void {\n if (application.isCurrent || !application.baseUrl) {\n return;\n }\n\n window.location.href = application.baseUrl;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MenuItem } from 'primeng/api';\nimport { ButtonModule } from 'primeng/button';\nimport { MenuModule } from 'primeng/menu';\nimport { ApplicationsApi } from '../../api/applications.api';\nimport { ApplicationRegistryItemDto } from '../../api/applications-data-contracts';\nimport { ApplicationRegistryService } from '../../services/application-registry.service';\n\n@Component({\n selector: 'app-topbar-application-switcher',\n standalone: true,\n imports: [CommonModule, ButtonModule, MenuModule, TranslatePipe],\n template: `\n @if (applicationRegistryService.applications.length > 1) {\n <p-button\n class=\"layout-topbar-action\"\n id=\"oip-app-topbar-application-switcher-button\"\n severity=\"secondary\"\n type=\"button\"\n [rounded]=\"true\"\n [text]=\"true\"\n (click)=\"applicationMenu.toggle($event)\">\n <i [ngClass]=\"applicationRegistryService.currentApplication?.icon || 'pi pi-th-large'\"></i>\n <span class=\"ml-2 hidden md:inline\">\n {{ applicationRegistryService.currentApplication?.displayName || ('topbar.applications' | translate) }}\n </span>\n </p-button>\n <p-menu #applicationMenu [model]=\"applicationMenuItems\" [popup]=\"true\" />\n }\n `,\n providers: [ApplicationsApi, ApplicationRegistryService]\n})\nexport class AppTopbarApplicationSwitcherComponent implements OnInit {\n protected applicationMenuItems: MenuItem[] = [];\n protected readonly applicationRegistryService = inject(ApplicationRegistryService);\n\n async ngOnInit(): Promise<void> {\n try {\n await this.applicationRegistryService.loadApplications();\n this.applicationMenuItems = this.applicationRegistryService.applications.map((application) =>\n this.createApplicationMenuItem(application)\n );\n } catch {\n this.applicationMenuItems = [];\n }\n }\n\n private createApplicationMenuItem(application: ApplicationRegistryItemDto): MenuItem {\n return {\n id: `oip-app-switcher-${application.code}`,\n label: application.displayName ?? '',\n icon: application.icon ?? undefined,\n disabled: application.isCurrent,\n command: () => this.applicationRegistryService.openApplication(application)\n };\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { ConfirmationService } from 'primeng/api';\nimport { RouterModule } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { StyleClassModule } from 'primeng/styleclass';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { AppConfiguratorComponent } from '../app-configurator/app-configurator.component';\nimport { SecurityService } from '../../services/security.service';\nimport { TopBarService } from '../../services/top-bar.service';\nimport { Tab, TabList, Tabs } from 'primeng/tabs';\nimport { AvatarModule } from 'primeng/avatar';\nimport { UserService } from '../../services/user.service';\nimport { ButtonModule } from 'primeng/button';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { LogoService } from '../../services/logo.service';\nimport { AppInfoService } from '../../services/app-info.service';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { UserNotificationsComponent } from '../user-notifications/user-notifications.component';\nimport { AppTopbarApplicationSwitcherComponent } from '../top-bar-application-switcher/top-bar-application-switcher.component';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/topbar.en.json';\nimport ru from './l10n/topbar.ru.json';\n\n@Component({\n selector: 'app-topbar',\n standalone: true,\n imports: [\n RouterModule,\n CommonModule,\n StyleClassModule,\n AppConfiguratorComponent,\n Tabs,\n TabList,\n Tab,\n AvatarModule,\n ButtonModule,\n ConfirmDialog,\n UserNotificationsComponent,\n TranslatePipe,\n AppTopbarApplicationSwitcherComponent\n ],\n template: `\n <div class=\"layout-topbar\">\n <p-confirmDialog appendTo=\"body\"/>\n <div class=\"layout-topbar-logo-container\">\n <button class=\"layout-menu-button layout-topbar-action\" (click)=\"layoutService.onMenuToggle()\">\n <i class=\"pi pi-bars\"></i>\n </button>\n <a class=\"layout-topbar-logo\" id=\"oip-app-topbar-logo-link\" routerLink=\"\">\n <ng-container\n *ngComponentOutlet=\"logoService.getLogoComponent(); inputs: { width: 36, height: 36 }\"></ng-container>\n <span>{{ appInfoService.getTitle() ?? ('app-info.title' | translate) }}</span>\n </a>\n </div>\n\n @if (securityService.isAdmin() && topBarService.topBarItems.length > 0) {\n <p-tabs\n class=\"layout-topbar-tabs ml-2\"\n [value]=\"topBarService.activeId\"\n (valueChange)=\"onActiveTabChange($event)\">\n <p-tablist>\n @for (tab of topBarService.availableTopBarItems; track tab.id) {\n <p-tab id=\"oip-app-topbar-tab-{{ tab.id }}\" [value]=\"tab.id\">\n <i class=\"pi {{ tab.icon }}\"></i>\n <span class=\"ml-2\">{{ tab.caption }}</span>\n </p-tab>\n }\n </p-tablist>\n </p-tabs>\n }\n <div class=\"layout-topbar-actions\">\n <div class=\"layout-config-menu\">\n <app-topbar-application-switcher/>\n <app-user-notifications/>\n <p-button\n class=\"layout-topbar-action\"\n id=\"oip-app-topbar-theme-button\"\n severity=\"secondary\"\n type=\"button\"\n [rounded]=\"true\"\n [text]=\"true\"\n (click)=\"toggleDarkMode()\">\n <i\n class=\"pi\"\n [ngClass]=\"{\n 'pi-moon': layoutService.isDarkTheme(),\n 'pi-sun': !layoutService.isDarkTheme()\n }\"></i>\n </p-button>\n <div class=\"relative\">\n <p-button\n class=\"layout-topbar-action layout-topbar-action-highlight\"\n enterActiveClass=\"animate-scalein\"\n enterFromClass=\"hidden\"\n id=\"oip-app-topbar-palette-button\"\n leaveActiveClass=\"animate-fadeout\"\n leaveToClass=\"hidden\"\n pStyleClass=\"@next\"\n [hideOnOutsideClick]=\"true\"\n [rounded]=\"true\">\n <i class=\"pi pi-palette\"></i>\n </p-button>\n <app-configurator/>\n </div>\n </div>\n\n <button\n class=\"layout-topbar-menu-button layout-topbar-action\"\n enterActiveClass=\"animate-scalein\"\n enterFromClass=\"hidden\"\n id=\"oip-app-topbar-menu-expand-button\"\n leaveActiveClass=\"animate-fadeout\"\n leaveToClass=\"hidden\"\n pStyleClass=\"@next\"\n [hideOnOutsideClick]=\"true\">\n <i class=\"pi pi-ellipsis-v\"></i>\n </button>\n\n <div class=\"layout-topbar-menu hidden lg:block\">\n <div class=\"layout-topbar-menu-content\">\n <button\n class=\"layout-topbar-action\"\n id=\"oip-app-topbar-logout-button\"\n type=\"button\"\n (click)=\"confirmLogout()\"\n (keydown)=\"logoutKeyDown($event)\">\n <i class=\"pi pi-sign-out\"></i>\n <span>{{ 'topbar.logout' | translate }}</span>\n </button>\n <button class=\"layout-topbar-action\" routerLink=\"config\">\n <p-avatar\n class=\"p-link flex align-items-center\"\n id=\"oip-app-topbar-user-avatar\"\n shape=\"circle\"\n size=\"normal\"\n [image]=\"userService.photoLoaded ? userService.photo : null\"\n >{{ !userService.photoLoaded ? userService.shortLabel : null }}\n </p-avatar>\n <span class=\"ml-2\">{{ 'topbar.profile' | translate }}</span>\n </button>\n </div>\n </div>\n </div>\n </div>`,\n providers: [ConfirmationService]\n})\nexport class AppTopbar {\n private readonly translations = provideTranslations({ en, ru });\n\n securityService = inject(SecurityService);\n topBarService = inject(TopBarService);\n userService = inject(UserService);\n layoutService = inject(LayoutService);\n logoService = inject(LogoService);\n appInfoService = inject(AppInfoService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly translateService = inject(TranslateService);\n\n onActiveTabChange(value: string | number | undefined) {\n this.topBarService.activeId = value == null ? undefined : String(value);\n }\n\n toggleDarkMode() {\n this.layoutService.layoutConfig.update((state) => ({\n ...state,\n darkTheme: !state.darkTheme\n }));\n }\n\n logoutKeyDown($event: KeyboardEvent) {\n if ($event.key === 'Enter') {\n $event.preventDefault();\n this.confirmLogout();\n }\n }\n\n confirmLogout() {\n this.confirmationService.confirm({\n header: this.translateService.instant('topbar.logoutConfirmHeader'),\n message: this.translateService.instant('topbar.logoutConfirmMessage'),\n icon: 'pi pi-sign-out',\n rejectButtonProps: {\n label: this.translateService.instant('topbar.logoutConfirmCancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('topbar.logoutConfirmAccept'),\n severity: 'danger'\n },\n accept: () => {\n this.securityService.logout();\n }\n });\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { NgComponentOutlet } from '@angular/common';\nimport { LogoService } from '../../services/logo.service';\nimport { AppInfoService } from '../../services/app-info.service';\n\n@Component({\n selector: 'app-footer',\n template: `\n <div class=\"layout-footer\">\n <div class=\"flex justify-center flex-1\">\n <div class=\"mr-2 -my-0.5\">\n <ng-container\n *ngComponentOutlet=\"logoService.getLogoComponent(); inputs: { width: 18, height: 18 }\"></ng-container>\n </div>\n <span class=\"font-medium\">{{ appInfoService.getFooter() ?? ('app-info.footer' | translate) }}</span>\n </div>\n <p class=\"mr-auto\">{{ appInfoService.getVersion() ?? ('app-info.version' | translate) }}</p>\n </div>\n `,\n standalone: true,\n imports: [TranslatePipe, NgComponentOutlet]\n})\nexport class FooterComponent {\n protected logoService = inject(LogoService);\n protected appInfoService = inject(AppInfoService);\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n AddModuleInstanceDto,\n ApiExceptionResponse,\n ChangeOrderParams,\n DeleteModuleInstanceParams,\n EditModuleInstanceDto,\n GetModuleInstanceRightsParams,\n IntKeyValueDto,\n ModuleInstanceDto,\n SetStartModuleParams,\n} from \"./data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class MenuApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n get = (params: RequestParams = {}) =>\n this.request<ModuleInstanceDto[], any>({\n path: `/api/menu/get`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n setStartModule = (\n { id, ...query }: SetStartModuleParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/set-start-module/${id}`,\n method: \"POST\",\n secure: true,\n ...params,\n });\n deleteStartModule = (params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/delete-start-module`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n getModuleInstanceRights = (\n query: GetModuleInstanceRightsParams,\n params: RequestParams = {},\n ) =>\n this.request<string[], ApiExceptionResponse>({\n path: `/api/menu/get-module-instance-rights`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n getAdminMenu = (params: RequestParams = {}) =>\n this.request<ModuleInstanceDto[], any>({\n path: `/api/menu/get-admin-menu`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getModules = (params: RequestParams = {}) =>\n this.request<IntKeyValueDto[], any>({\n path: `/api/menu/get-modules`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n addModuleInstance = (\n data: AddModuleInstanceDto,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/add-module-instance`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n editModuleInstance = (\n data: EditModuleInstanceDto,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/edit-module-instance`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n deleteModuleInstance = (\n query: DeleteModuleInstanceParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/delete-module-instance`,\n method: \"DELETE\",\n query: query,\n secure: true,\n ...params,\n });\n changeOrder = (query: ChangeOrderParams, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/change-order`,\n method: \"POST\",\n query: query,\n secure: true,\n ...params,\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { MenuChangeEvent } from '../events/menu-change.event';\nimport { MenuApi } from '../api/menu.api';\nimport { AppTitleService } from './app-title.service';\nimport { LayoutService } from './app.layout.service';\nimport {\n AddModuleInstanceDto,\n DeleteModuleInstanceParams,\n EditModuleInstanceDto,\n ModuleInstanceDto\n} from '../api/data-contracts';\n\n@Injectable()\nexport class MenuService {\n private readonly menuSource = new Subject<MenuChangeEvent>();\n private readonly resetSource = new Subject();\n private readonly titleService = inject(AppTitleService);\n private readonly menuDataService = inject(MenuApi);\n private readonly layoutService = inject(LayoutService);\n menuSource$ = this.menuSource.asObservable();\n resetSource$ = this.resetSource.asObservable();\n contextMenuItem: any;\n\n public menu: ModuleInstanceDto[] = [];\n\n get adminMode(): boolean {\n return this.layoutService.adminMode();\n }\n\n set adminMode(value: boolean) {\n this.layoutService.layoutConfig.update((config) => ({ ...config, adminMode: value }));\n }\n\n async loadMenu() {\n this.menu = this.adminMode ? await this.getAdminMenu() : await this.getMenu();\n }\n\n /**\n * Handles changes in the menu state.\n * @param {MenuChangeEvent} event - The event containing information about the menu state change.\n * @return {void}\n */\n onMenuStateChange(event: MenuChangeEvent): void {\n this.menuSource.next(event);\n if (!event.item.items?.length) {\n this.titleService.setTitle(event.item.label);\n }\n }\n\n reset() {\n this.resetSource.next(true);\n }\n\n getMenu() {\n return this.menuDataService.get();\n }\n\n getAdminMenu() {\n return this.menuDataService.getAdminMenu();\n }\n\n getModules() {\n return this.menuDataService.getModules();\n }\n\n addModuleInstance(addModuleInstance: AddModuleInstanceDto) {\n return this.menuDataService.addModuleInstance(addModuleInstance as AddModuleInstanceDto);\n }\n\n deleteItem(moduleInstanceId: number) {\n return this.menuDataService.deleteModuleInstance({ id: moduleInstanceId } as DeleteModuleInstanceParams);\n }\n\n editModuleInstance(item: EditModuleInstanceDto) {\n return this.menuDataService.editModuleInstance(item);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Router, UrlTree } from '@angular/router';\nimport { ModuleInstanceDto } from '../api/data-contracts';\nimport { MenuApi } from '../api/menu.api';\nimport { SecurityService } from './security.service';\n\n/**\n * Resolves the module instance the current user lands on when no explicit route is requested.\n *\n * The menu returned by the backend is already filtered by the rights of the current user, so the\n * first navigable leaf of that menu is always a module the user may open. When the user picked a\n * start module explicitly it comes back marked with `isStart`, and a module that was deleted or\n * whose rights were revoked simply disappears from the menu, which falls back to the first leaf.\n *\n * The resolved url is cached per user and dropped whenever the authenticated user changes or the\n * start module is reassigned.\n */\n@Injectable({ providedIn: 'root' })\nexport class StartPageService {\n private readonly menuApi = inject(MenuApi);\n private readonly router = inject(Router);\n private readonly securityService = inject(SecurityService);\n private request: Promise<UrlTree | null> | undefined = undefined;\n private cachedIdentity: string | undefined = undefined;\n\n constructor() {\n this.securityService.payload.subscribe((payload) => {\n // The menu depends on both the user and the roles of the current session.\n const roles: string[] = payload?.realm_access?.roles ?? [];\n const identity = `${payload?.preferred_username ?? ''}|${[...roles].sort().join(',')}`;\n if (identity !== this.cachedIdentity) {\n this.cachedIdentity = identity;\n this.clearCache();\n }\n });\n }\n\n /**\n * Gets the url of the start module instance.\n *\n * @returns The url tree to navigate to, or `null` when the user has no module available.\n */\n public resolveStartUrl(): Promise<UrlTree | null> {\n if (this.request) {\n return this.request;\n }\n\n this.request = this.loadStartUrl().catch((error) => {\n this.request = undefined;\n throw error;\n });\n\n return this.request;\n }\n\n /**\n * Makes the module instance the start page of the current user.\n *\n * @param moduleInstanceId Module instance to open by default.\n */\n public async setStartModule(moduleInstanceId: number): Promise<void> {\n await this.menuApi.setStartModule({ id: moduleInstanceId });\n this.clearCache();\n }\n\n /**\n * Clears the start page of the current user, falling back to the first available module.\n */\n public async clearStartModule(): Promise<void> {\n await this.menuApi.deleteStartModule();\n this.clearCache();\n }\n\n /**\n * Drops the cached url, for example after the menu was changed.\n */\n public clearCache(): void {\n this.request = undefined;\n }\n\n private async loadStartUrl(): Promise<UrlTree | null> {\n const menu = (await this.menuApi.get()) ?? [];\n const item = this.findStartItem(menu);\n\n return item ? this.router.createUrlTree(item.routerLink!) : null;\n }\n\n private findStartItem(menu: ModuleInstanceDto[]): ModuleInstanceDto | null {\n const leaves = this.collectNavigableLeaves(menu);\n return leaves.find((item) => item.isStart) ?? leaves[0] ?? null;\n }\n\n private collectNavigableLeaves(items: ModuleInstanceDto[]): ModuleInstanceDto[] {\n const result: ModuleInstanceDto[] = [];\n\n for (const item of [...items].sort((a, b) => (a.order ?? 0) - (b.order ?? 0))) {\n if (item.separator) {\n continue;\n }\n\n if (item.items?.length) {\n // A folder is never a landing page itself, its children are.\n result.push(...this.collectNavigableLeaves(item.items));\n continue;\n }\n\n // A module without a real route would resolve back to the empty path and loop.\n if (item.routerLink?.some((segment) => !!segment && segment !== '/')) {\n result.push(item);\n }\n }\n\n return result;\n }\n}\n","import { ChangeDetectorRef, Component, HostBinding, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { NavigationEnd, Router, RouterLinkActive, RouterLink } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { MenuService } from '../../services/app.menu.service';\nimport { RippleModule } from 'primeng/ripple';\nimport { NgClass } from '@angular/common';\nimport { ConfirmationService, ContextMenuService, MenuItem, MenuItemCommandEvent, PrimeIcons } from 'primeng/api';\nimport { MenuItemCreateDialogComponent } from './menu-item-create-dialog.component';\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\nimport { MsgService } from '../../services/msg.service';\nimport { MenuItemEditDialogComponent } from './menu-item-edit-dialog.component';\nimport { ContextMenuItemDto } from '../../dtos/context-menu-item.dto';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { MenuApi } from '../../api/menu.api';\nimport { ChangeOrderParams, DeleteModuleInstanceParams, ModuleInstanceDto } from '../../api/data-contracts';\nimport { SecurityService } from '../../services/security.service';\nimport { StartPageService } from '../../services/start-page.service';\n\ninterface MenuItemComponentTranslation {\n delete: string;\n edit: string;\n new: string;\n deleteItemConfirmHeader: string;\n deleteItemConfirmMessage: string;\n deleteItemSuccessMessage: string;\n deleteItemConfirmRejectButtonPropsLabel: string;\n deleteItemConfirmAcceptButtonPropsLabel: string;\n moveUp: string;\n moveDown: string;\n setStartModule: string;\n unsetStartModule: string;\n setStartModuleSuccessMessage: string;\n unsetStartModuleSuccessMessage: string;\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[app-menuitem]',\n template: `\n <ng-container>\n <p-confirm-dialog />\n @if (root && item.visible !== false) {\n <div class=\"layout-menuitem-root-text\" (contextmenu)=\"onContextMenu($event, item)\">\n {{ item.label }}\n </div>\n }\n @if ((!item.routerLink || item.items) && item.visible !== false) {\n <a\n pRipple\n tabindex=\"0\"\n [attr.href]=\"item.url\"\n [attr.target]=\"item.target\"\n [ngClass]=\"item.class\"\n (click)=\"itemClick($event)\"\n (contextmenu)=\"onContextMenu($event, item)\">\n <i class=\"layout-menuitem-icon\" [ngClass]=\"item.icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\n @if (item.items) {\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"></i>\n }\n </a>\n }\n @if (item.routerLink && !item.items && item.visible !== false) {\n <a\n pRipple\n routerLinkActive=\"active-route\"\n tabindex=\"0\"\n [attr.target]=\"item.target\"\n [fragment]=\"item.fragment\"\n [ngClass]=\"item.class\"\n [preserveFragment]=\"item.preserveFragment\"\n [queryParams]=\"item.queryParams\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [replaceUrl]=\"item.replaceUrl\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActiveOptions]=\"\n item.routerLinkActiveOptions || {\n paths: 'exact',\n queryParams: 'ignored',\n matrixParams: 'ignored',\n fragment: 'ignored'\n }\n \"\n [skipLocationChange]=\"item.skipLocationChange\"\n [state]=\"item.state\"\n (click)=\"itemClick($event)\"\n (contextmenu)=\"onContextMenu($event, item)\">\n <i class=\"layout-menuitem-icon\" [ngClass]=\"item.icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\n @if (item.items) {\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"></i>\n }\n </a>\n }\n\n @if (item.items && item.visible !== false) {\n <ul class=\"layout-submenu\" [class.layout-submenu-expanded]=\"isSubmenuExpanded\">\n @for (child of item.items; track child; let i = $index) {\n <li\n app-menuitem\n [class]=\"child.badgeClass\"\n [contextMenu]=\"contextMenu\"\n [index]=\"i\"\n [item]=\"child\"\n [menuItemCreateDialogComponent]=\"menuItemCreateDialogComponent\"\n [menuItemEditDialogComponent]=\"menuItemEditDialogComponent\"\n [parentKey]=\"key\"></li>\n }\n </ul>\n }\n </ng-container>\n `,\n imports: [RippleModule, NgClass, RouterLinkActive, RouterLink, ContextMenuModule, ConfirmDialog],\n providers: [ConfirmationService]\n})\nexport class MenuItemComponent implements OnInit, OnDestroy {\n private readonly layoutService = inject(LayoutService);\n private readonly translateService = inject(TranslateService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly msgService = inject(MsgService);\n private readonly menuDataService = inject(MenuApi);\n private readonly securityService = inject(SecurityService);\n private readonly startPageService = inject(StartPageService);\n\n @Input() item: ContextMenuItemDto;\n @Input() index!: number;\n @Input() @HostBinding('class.layout-root-menuitem') root!: boolean;\n @Input() parentKey!: string;\n @Input() menuItemCreateDialogComponent: MenuItemCreateDialogComponent;\n @Input() menuItemEditDialogComponent: MenuItemEditDialogComponent;\n @Input() contextMenu: ContextMenu;\n\n private active = false;\n private subscriptions: Subscription[] = [];\n private localization: MenuItemComponentTranslation = {} as MenuItemComponentTranslation;\n\n protected key: string = '';\n\n constructor(\n private readonly cd: ChangeDetectorRef,\n public router: Router,\n private readonly menuService: MenuService\n ) {\n this.subscriptions.push(\n this.menuService.menuSource$.subscribe((value) => {\n Promise.resolve(null).then(() => {\n if (value.routeEvent && (value.key === this.key || value.key.startsWith(this.key + '-'))) {\n this.active = true;\n }\n });\n })\n );\n\n this.subscriptions.push(\n this.menuService.resetSource$.subscribe(() => {\n this.active = false;\n })\n );\n\n this.subscriptions.push(\n this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe((params) => {\n if (this.item.routerLink) {\n this.updateActiveStateFromRoute();\n }\n })\n );\n\n this.subscriptions.push(\n this.translateService.get('menuItemComponent').subscribe((value: MenuItemComponentTranslation) => {\n this.localization = value;\n })\n );\n }\n\n ngOnInit() {\n this.key = this.parentKey ? this.parentKey + '-' + this.index : String(this.index);\n if (this.item.routerLink) {\n this.updateActiveStateFromRoute();\n }\n }\n\n updateActiveStateFromRoute() {\n const activeRoute = this.router.isActive(this.item.routerLink[0], {\n paths: 'exact',\n queryParams: 'ignored',\n matrixParams: 'ignored',\n fragment: 'ignored'\n });\n\n if (activeRoute) {\n this.menuService.onMenuStateChange({\n key: this.key,\n item: this.item,\n routeEvent: true\n });\n }\n }\n\n itemClick(event: Event) {\n // avoid processing disabled items\n if (this.item.disabled) {\n event.preventDefault();\n return;\n }\n\n // execute command\n if (this.item.command) {\n this.item.command({ originalEvent: event, item: this.item });\n }\n\n // toggle active state\n if (this.item.items) {\n this.active = !this.active;\n }\n\n this.menuService.onMenuStateChange({ key: this.key, item: this.item });\n }\n\n get isSubmenuExpanded() {\n return this.root || this.active;\n }\n\n @HostBinding('class.active-menuitem')\n get activeClass() {\n return this.active && !this.root;\n }\n\n ngOnDestroy() {\n this.subscriptions.map((s) => s.unsubscribe());\n }\n\n private newClick(e: MenuItemCommandEvent) {\n this.menuItemCreateDialogComponent.showDialog();\n }\n\n onContextMenu($event: MouseEvent, item: any) {\n const startModuleItems = this.getStartModuleItems(item);\n // Choosing a start page is available to every user, the rest of the menu is administrative.\n if (!this.securityService.isAdmin()) {\n if (startModuleItems.length === 0) {\n return;\n }\n\n $event.stopPropagation();\n $event.preventDefault();\n\n this.menuService.contextMenuItem = item;\n this.contextMenu.model = startModuleItems;\n this.contextMenu.show($event);\n return;\n }\n\n $event.stopPropagation();\n $event.preventDefault();\n\n this.menuService.contextMenuItem = item;\n this.contextMenu.model = [\n ...startModuleItems,\n { separator: true, visible: startModuleItems.length > 0 },\n {\n label: this.localization.new,\n icon: PrimeIcons.PLUS,\n command: (event) => this.newClick(event)\n },\n {\n label: this.localization.edit,\n icon: PrimeIcons.FILE_EDIT,\n command: (event) => this.editClick(event)\n },\n { separator: true },\n {\n label: this.localization.delete,\n icon: PrimeIcons.TRASH,\n command: (event) => this.deleteItem(event)\n },\n { separator: true, visible: this.hasVisibleNext(item) || this.hasVisiblePrev(item) },\n {\n label: this.localization.moveUp,\n icon: PrimeIcons.ANGLE_UP,\n command: (event) => {\n this.moveUp(item);\n $event.stopPropagation();\n $event.preventDefault();\n },\n visible: this.hasVisiblePrev(item)\n },\n {\n label: this.localization.moveDown,\n icon: PrimeIcons.ANGLE_DOWN,\n command: (event) => {\n this.moveDown(item);\n $event.stopPropagation();\n $event.preventDefault();\n },\n visible: this.hasVisibleNext(item)\n }\n ];\n this.contextMenu.show($event);\n }\n\n /**\n * Builds the start page entries of the context menu. Only a navigable leaf can be a start page.\n */\n private getStartModuleItems(item: ContextMenuItemDto): MenuItem[] {\n if (!item?.routerLink || item.items?.length) {\n return [];\n }\n\n return item.isStart\n ? [\n {\n label: this.localization.unsetStartModule,\n icon: PrimeIcons.STAR,\n command: () => this.clearStartModule()\n }\n ]\n : [\n {\n label: this.localization.setStartModule,\n icon: PrimeIcons.STAR_FILL,\n command: () => this.setStartModule(item)\n }\n ];\n }\n\n private async setStartModule(item: ContextMenuItemDto) {\n await this.startPageService.setStartModule(item.moduleInstanceId);\n this.msgService.success(this.localization.setStartModuleSuccessMessage);\n await this.menuService.loadMenu();\n }\n\n private async clearStartModule() {\n await this.startPageService.clearStartModule();\n this.msgService.success(this.localization.unsetStartModuleSuccessMessage);\n await this.menuService.loadMenu();\n }\n\n private deleteItem(event: MenuItemCommandEvent) {\n this.confirmationService.confirm({\n header: this.localization.deleteItemConfirmHeader,\n message: this.localization.deleteItemConfirmMessage,\n icon: PrimeIcons.TRASH,\n rejectButtonProps: {\n label: this.localization.deleteItemConfirmRejectButtonPropsLabel,\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.localization.deleteItemConfirmAcceptButtonPropsLabel,\n severity: 'danger'\n },\n accept: async () => {\n await this.menuDataService.deleteModuleInstance({\n id: this.menuService.contextMenuItem?.moduleInstanceId\n } as DeleteModuleInstanceParams);\n this.msgService.success(this.localization.deleteItemSuccessMessage);\n await this.menuService.loadMenu();\n }\n });\n }\n\n private editClick(event: MenuItemCommandEvent) {\n this.menuItemEditDialogComponent.showDialog().then();\n }\n\n moveUp(currentItem: any) {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId === currentItem.moduleInstanceId);\n\n if (currentIndex > 0) {\n const prevVisibleItem = this.findPrevVisibleItem(items, currentIndex);\n if (prevVisibleItem !== null) {\n this.swapItems(items[currentIndex], items[prevVisibleItem]);\n }\n }\n }\n\n moveDown(currentItem: any) {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId === currentItem.moduleInstanceId);\n\n if (currentIndex < items.length - 1) {\n const nextVisibleIndex = this.findNextVisibleIndex(items, currentIndex);\n if (nextVisibleIndex !== -1) {\n this.swapItems(items[currentIndex], items[nextVisibleIndex]);\n }\n }\n }\n\n private findPrevVisibleItem(items: any[], currentIndex: number): number {\n for (let i = currentIndex - 1; i >= 0; i--) {\n if (items[i].visible !== false) {\n return i;\n }\n }\n return -1;\n }\n\n private findNextVisibleIndex(items: any[], currentIndex: number): number {\n for (let i = currentIndex + 1; i < items.length; i++) {\n if (items[i].visible !== false) {\n return i;\n }\n }\n return -1;\n }\n\n private swapItems(firstModule: any, secondModule: any) {\n const items = this.getItems(firstModule);\n\n const firstIndex = items.findIndex((item) => item.moduleInstanceId === firstModule.moduleInstanceId);\n const secondIndex = items.findIndex((item) => item.moduleInstanceId === secondModule.moduleInstanceId);\n\n [items[firstIndex], items[secondIndex]] = [items[secondIndex], items[firstIndex]];\n\n this.menuDataService\n .changeOrder({\n firstModuleId: firstModule.moduleInstanceId,\n secondModuleId: secondModule.moduleInstanceId\n } as ChangeOrderParams)\n .then();\n }\n\n hasVisiblePrev(currentItem: any): boolean {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId == currentItem.moduleInstanceId);\n return this.findPrevVisibleItem(items, currentIndex) !== -1;\n }\n\n private getItems(currentItem: any): ModuleInstanceDto[] {\n if (!currentItem.parentId) {\n return this.menuService.menu;\n }\n\n return this.findItemByModuleInstanceId(this.menuService.menu, currentItem.parentId)?.items ?? [];\n }\n\n private findItemByModuleInstanceId(items: ModuleInstanceDto[], moduleInstanceId: number): ModuleInstanceDto | null {\n for (const item of items) {\n if (item.moduleInstanceId == moduleInstanceId) {\n return item;\n }\n\n const foundItem = this.findItemByModuleInstanceId(item.items ?? [], moduleInstanceId);\n if (foundItem) {\n return foundItem;\n }\n }\n\n return null;\n }\n\n hasVisibleNext(currentItem: any): boolean {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId == currentItem.moduleInstanceId);\n return this.findNextVisibleIndex(items, currentIndex) !== -1;\n }\n}\n","import { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { PrimeIcons } from 'primeng/api';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { AddModuleInstanceDto, IntKeyValueDto } from '../../api/data-contracts';\nimport { MenuApi } from '../../api/menu.api';\nimport { MenuService } from '../../services/app.menu.service';\nimport { MsgService } from '../../services/msg.service';\n\ntype PrimeIconOption = {\n label: string;\n value: string;\n};\n\n@Component({\n selector: 'menu-item-create-dialog',\n standalone: true,\n imports: [ButtonModule, DialogModule, InputTextModule, SelectModule, FormsModule, TranslatePipe],\n template: `\n <p-dialog\n header=\"{{ 'menuItemCreateDialogComponent.header' | translate }}\"\n [modal]=\"true\"\n [style]=\"{ width: '40rem' }\"\n [(visible)]=\"visible\"\n (keydown.enter)=\"save()\">\n @if (menuService.contextMenuItem) {\n <div class=\"flex items-center gap-4 mb-4 mt-1\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-dialog-parent-input\">\n {{ 'menuItemCreateDialogComponent.parentLabel' | translate }}\n </label>\n <input\n autocomplete=\"off\"\n class=\"flex-auto\"\n disabled\n id=\"oip-menu-item-create-dialog-parent-input\"\n pInputText\n [ngModel]=\"menuService.contextMenuItem?.label\" />\n </div>\n }\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-label\">\n {{ 'menuItemCreateDialogComponent.label' | translate }}\n </label>\n <input autocomplete=\"off\" class=\"flex-auto\" id=\"oip-menu-item-create-label\" pInputText [(ngModel)]=\"label\" />\n </div>\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-module\">\n {{ 'menuItemCreateDialogComponent.module' | translate }}\n </label>\n <p-select\n appendTo=\"body\"\n class=\"flex-auto\"\n filterBy=\"value\"\n filterPlaceholder=\"{{ 'menuItemCreateDialogComponent.searchModule' | translate }}\"\n id=\"oip-menu-item-create-module\"\n optionLabel=\"value\"\n optionValue=\"key\"\n placeholder=\"{{ 'menuItemCreateDialogComponent.selectModule' | translate }}\"\n scrollHeight=\"18rem\"\n [filter]=\"true\"\n [options]=\"modules\"\n [(ngModel)]=\"selectModule\" />\n </div>\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-dialog-icon\">\n {{ 'menuItemCreateDialogComponent.icon' | translate }}\n </label>\n <p-select\n appendTo=\"body\"\n class=\"flex-auto\"\n filterBy=\"label,value\"\n id=\"oip-menu-item-create-dialog-icon\"\n optionLabel=\"label\"\n optionValue=\"value\"\n scrollHeight=\"18rem\"\n [filter]=\"true\"\n [options]=\"iconOptions\"\n [(ngModel)]=\"selectIcon\">\n <ng-template let-icon pTemplate=\"selectedItem\">\n <div class=\"flex items-center gap-2\">\n <i [class]=\"icon.value\"></i>\n <span>{{ icon.label }}</span>\n </div>\n </ng-template>\n <ng-template let-icon pTemplate=\"item\">\n <div class=\"flex items-center gap-2\">\n <i [class]=\"icon.value\"></i>\n <span>{{ icon.label }}</span>\n </div>\n </ng-template>\n </p-select>\n </div>\n <div class=\"flex justify-end gap-2\">\n <p-button\n id=\"oip-menu-item-create-cancel\"\n label=\"{{ 'menuItemCreateDialogComponent.cancel' | translate }}\"\n severity=\"secondary\"\n [disabled]=\"saving\"\n (click)=\"changeVisible()\" />\n <p-button\n id=\"oip-menu-item-create-save\"\n label=\"{{ 'menuItemCreateDialogComponent.save' | translate }}\"\n [disabled]=\"!canSave\"\n [loading]=\"saving\"\n (click)=\"save()\" />\n </div>\n </p-dialog>\n `\n})\nexport class MenuItemCreateDialogComponent implements OnInit {\n protected readonly menuService = inject(MenuService);\n protected readonly menu = inject(MenuApi);\n private readonly msgService = inject(MsgService);\n @Input() visible!: boolean;\n @Output() visibleChange = new EventEmitter<boolean>();\n modules: IntKeyValueDto[] = [];\n iconOptions: PrimeIconOption[] = Object.values(PrimeIcons)\n .filter((icon): icon is string => typeof icon === 'string')\n .map((icon) => ({\n label: icon.replace('pi pi-', ''),\n value: icon\n }))\n .sort((left, right) => left.label.localeCompare(right.label));\n selectModule: any;\n label: string;\n selectIcon: string = 'pi pi-box';\n saving = false;\n\n get canSave(): boolean {\n return !this.saving && !!this.selectModule;\n }\n\n async ngOnInit() {\n this.modules = await this.menu.getModules();\n }\n\n changeVisible() {\n this.visible = !this.visible;\n this.visibleChange.emit(this.visible);\n }\n\n async save() {\n if (this.saving) {\n return;\n }\n\n if (!this.selectModule) {\n return;\n }\n\n const item: AddModuleInstanceDto = {\n moduleId: this.selectModule,\n label: this.label,\n icon: this.selectIcon,\n parentId: this.menuService.contextMenuItem?.moduleInstanceId\n };\n\n this.saving = true;\n try {\n await this.menuService.addModuleInstance(item);\n await this.menuService.loadMenu();\n this.hide();\n } catch (error) {\n this.msgService.errorFromException(error, 'Unexpected error');\n } finally {\n this.saving = false;\n }\n }\n\n hide() {\n this.visible = false;\n this.visibleChange.emit(this.visible);\n }\n\n showDialog() {\n this.visible = true;\n this.visibleChange.emit(this.visible);\n }\n}\n","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { PrimeIcons } from 'primeng/api';\nimport { FormsModule } from '@angular/forms';\nimport { MenuService } from '../../services/app.menu.service';\nimport { MsgService } from '../../services/msg.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { EditModuleInstanceDto } from '../../api/data-contracts';\nimport { SecurityApi } from '../../api/security.api';\n\ntype PrimeIconOption = {\n label: string;\n value: string;\n};\n\n@Component({\n imports: [ButtonModule, DialogModule, InputTextModule, SelectModule, FormsModule, TranslatePipe, MultiSelectModule],\n selector: 'menu-item-edit-dialog',\n standalone: true,\n template: `\n <p-dialog\n header=\"{{ 'menuItemEditDialogComponent.header' | translate }}\"\n [modal]=\"true\"\n [style]=\"{ width: '40rem' }\"\n [(visible)]=\"visible\"\n (keydown.enter)=\"save()\">\n <div class=\"flex items-center gap-4 mb-4 mt-1\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-edit-dialog-menu-input\">\n {{ 'menuItemEditDialogComponent.label' | translate }}\n </label>\n <input\n autocomplete=\"off\"\n class=\"flex-auto\"\n id=\"oip-menu-item-edit-dialog-menu-input\"\n pInputText\n [(ngModel)]=\"item.label\" />\n </div>\n\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-edit-dialog-module\">\n {{ 'menuItemEditDialogComponent.module' | translate }}\n </label>\n <input\n autocomplete=\"off\"\n class=\"flex-auto\"\n disabled\n id=\"oip-menu-item-edit-dialog-module\"\n pInputText\n [ngModel]=\"moduleName\" />\n </div>\n\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-edit-dialog-icon\">\n {{ 'menuItemEditDialogComponent.icon' | translate }}\n </label>\n <p-select\n appendTo=\"body\"\n class=\"flex-auto\"\n filterBy=\"label,value\"\n id=\"oip-menu-item-edit-dialog-icon\"\n optionLabel=\"label\"\n optionValue=\"value\"\n scrollHeight=\"18rem\"\n [filter]=\"true\"\n [options]=\"iconOptions\"\n [(ngModel)]=\"item.icon\">\n <ng-template let-icon pTemplate=\"selectedItem\">\n <div class=\"flex items-center gap-2\">\n <i [class]=\"icon.value\"></i>\n <span>{{ icon.label }}</span>\n </div>\n </ng-template>\n <ng-template let-icon pTemplate=\"item\">\n <div class=\"flex items-center gap-2\">\n <i [class]=\"icon.value\"></i>\n <span>{{ icon.label }}</span>\n </div>\n </ng-template>\n </p-select>\n </div>\n\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"security\">\n {{ 'menuItemEditDialogComponent.security' | translate }}\n </label>\n <p-multiSelect\n appendTo=\"body\"\n class=\"flex-auto\"\n id=\"oip-menu-item-edit-dialog-roles-multi-select\"\n placeholder=\"Select roles\"\n [maxSelectedLabels]=\"10\"\n [options]=\"roles\"\n [(ngModel)]=\"item.viewRoles\" />\n </div>\n\n <div class=\"flex justify-end gap-2\">\n <p-button\n id=\"oip-menu-item-edit-dialog-cancel-edit-button\"\n label=\"{{ 'menuItemEditDialogComponent.cancel' | translate }}\"\n severity=\"secondary\"\n [disabled]=\"saving\"\n (click)=\"changeVisible()\" />\n <p-button\n id=\"oip-menu-item-edit-dialog-save-edit-button\"\n label=\"{{ 'menuItemEditDialogComponent.save' | translate }}\"\n [disabled]=\"saving\"\n [loading]=\"saving\"\n (click)=\"save()\" />\n </div>\n </p-dialog>\n `\n})\nexport class MenuItemEditDialogComponent {\n private readonly menuService = inject(MenuService);\n private readonly securityApi = inject(SecurityApi);\n private readonly msgService = inject(MsgService);\n\n @Input() visible!: boolean;\n @Output() visibleChange = new EventEmitter<boolean>();\n\n roles: string[] = [];\n moduleName = '';\n iconOptions: PrimeIconOption[] = Object.values(PrimeIcons)\n .filter((icon): icon is string => typeof icon === 'string')\n .map((icon) => ({\n label: icon.replace('pi pi-', ''),\n value: icon\n }))\n .sort((left, right) => left.label.localeCompare(right.label));\n item: EditModuleInstanceDto = {\n icon: '',\n label: '',\n viewRoles: [''],\n moduleId: 0,\n moduleInstanceId: 0,\n parentId: 0\n };\n saving = false;\n\n changeVisible() {\n this.visible = !this.visible;\n this.visibleChange.emit(this.visible);\n }\n\n async save() {\n if (this.saving) {\n return;\n }\n\n this.saving = true;\n try {\n await this.menuService.editModuleInstance(this.item);\n await this.menuService.loadMenu();\n this.hide();\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.saving = false;\n }\n }\n\n hide() {\n this.visible = false;\n this.visibleChange.emit(this.visible);\n }\n\n async showDialog() {\n this.item = {\n moduleInstanceId: this.menuService.contextMenuItem?.moduleInstanceId,\n moduleId: this.menuService.contextMenuItem?.moduleId,\n parentId: this.menuService.contextMenuItem?.parentId,\n label: this.menuService.contextMenuItem?.label,\n icon: this.menuService.contextMenuItem?.icon,\n viewRoles: this.menuService.contextMenuItem?.securities\n };\n\n const [roles, modules] = await Promise.all([this.securityApi.getRealmRoles(), this.menuService.getModules()]);\n this.roles = roles;\n this.moduleName = modules.find((module) => module.key === this.item.moduleId)?.value ?? '';\n\n this.visible = true;\n this.visibleChange.emit(this.visible);\n }\n}\n","import { Component, inject, OnInit, ViewChild } from '@angular/core';\nimport { MenuService } from '../../services/app.menu.service';\nimport { ButtonModule } from 'primeng/button';\nimport { SecurityService } from '../../services/security.service';\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\nimport { DialogModule } from 'primeng/dialog';\nimport { MenuItemCommandEvent, PrimeIcons } from 'primeng/api';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { FormsModule } from '@angular/forms';\nimport { MenuItemComponent } from './menu-item.component';\nimport { MenuItemCreateDialogComponent } from './menu-item-create-dialog.component';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MenuItemEditDialogComponent } from './menu-item-edit-dialog.component';\nimport { MenuApi } from '../../api/menu.api';\n\nimport { provideTranslations } from '../../helpers/l10n.helper';\nimport en from './l10n/menu.en.json';\nimport ru from './l10n/menu.ru.json';\n\n@Component({\n imports: [\n MenuItemComponent,\n ButtonModule,\n ContextMenuModule,\n DialogModule,\n InputTextModule,\n MenuItemCreateDialogComponent,\n FormsModule,\n MenuItemEditDialogComponent\n ],\n providers: [MenuApi],\n selector: 'app-menu',\n standalone: true,\n template: ` <div #empty class=\"layout-sidebar\" (contextmenu)=\"onContextMenu($event)\">\n <ul class=\"layout-menu\">\n @for (item of menuService.menu; track item; let i = $index) {\n <ng-container>\n @if (item.separator) {\n <li class=\"menu-separator\"></li>\n } @else {\n <li\n app-menuitem\n [contextMenu]=\"contextMenu\"\n [index]=\"i\"\n [item]=\"item\"\n [menuItemCreateDialogComponent]=\"menuItemCreateDialogComponent\"\n [menuItemEditDialogComponent]=\"menuItemEditDialogComponent\"\n [root]=\"true\"></li>\n }\n </ng-container>\n }\n </ul>\n </div>\n <!-- Always rendered: choosing a start page is available to every user, not only to admins. -->\n <p-contextMenu />\n @if (securityService.isAdmin()) {\n <menu-item-create-dialog />\n <menu-item-edit-dialog />\n }`\n})\nexport class MenuComponent implements OnInit {\n // Registers the whole menu/l10n/menu.*.json bundle, which also covers\n // menuItemComponent, menuItemEditDialogComponent and menuItemCreateDialogComponent.\n private readonly translations = provideTranslations({ en, ru });\n\n readonly menuService = inject(MenuService);\n readonly securityService = inject(SecurityService);\n readonly translateService = inject(TranslateService);\n @ViewChild(MenuItemCreateDialogComponent) menuItemCreateDialogComponent: MenuItemCreateDialogComponent;\n @ViewChild(MenuItemEditDialogComponent) menuItemEditDialogComponent: MenuItemEditDialogComponent;\n @ViewChild(ContextMenu) contextMenu: ContextMenu;\n\n ngOnInit() {\n this.menuService.loadMenu().then();\n }\n\n private newClick(e: MenuItemCommandEvent) {\n this.menuItemCreateDialogComponent.showDialog();\n }\n\n protected onContextMenu($event: MouseEvent) {\n if (!this.securityService.isAdmin()) {\n return;\n }\n\n $event.preventDefault();\n $event.stopPropagation();\n\n this.menuService.contextMenuItem = null;\n this.contextMenu.model = [\n {\n label: this.translateService.instant('menuComponent.new'),\n icon: PrimeIcons.PLUS,\n command: (event) => this.newClick(event)\n }\n ];\n this.contextMenu.show($event);\n }\n}\n","import { Component } from '@angular/core';\nimport { MenuComponent } from '../menu/menu.component';\n\n@Component({\n selector: 'app-sidebar',\n template: ` <app-menu></app-menu>`,\n standalone: true,\n imports: [MenuComponent]\n})\nexport class SidebarComponent {\n constructor() {}\n}\n","import { Component, effect, inject, OnDestroy, signal, untracked } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ProgressSpinner } from 'primeng/progressspinner';\nimport { provideTranslations } from '../../helpers/l10n.helper';\nimport { ModuleLoadingService } from '../../services/module-loading.service';\n\nimport en from './l10n/block-loader.en.json';\nimport ru from './l10n/block-loader.ru.json';\n\n/**\n * Full screen blocker shown while the application switches between modules.\n *\n * Render it as a sibling of `.layout-wrapper`, not inside it: while the blocker is visible the\n * wrapper is marked `inert`, which would also disable an overlay nested in it.\n *\n * The blocker appears only when a transition outlasts {@link showDelayMs} and then stays for at\n * least {@link minVisibleMs}, so quick navigation does not flash a spinner.\n */\n@Component({\n selector: 'block-loader',\n standalone: true,\n imports: [ProgressSpinner, TranslatePipe],\n template: `\n @if (visible()) {\n <div\n class=\"animate-fadein fixed inset-0 z-[1200] flex flex-col items-center justify-center gap-4 bg-surface-0/70 dark:bg-surface-900/70\"\n role=\"status\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n (pointerdown)=\"$event.preventDefault()\"\n (contextmenu)=\"$event.preventDefault()\">\n <p-progress-spinner [style]=\"{ width: '3rem', height: '3rem' }\" animationDuration=\".8s\" strokeWidth=\"4\" />\n <span class=\"text-color font-medium\">{{ 'blockLoader.loading' | translate }}</span>\n </div>\n }\n `\n})\nexport class BlockLoaderComponent implements OnDestroy {\n private static readonly showDelayMs = 150;\n private static readonly minVisibleMs = 300;\n\n private readonly translations = provideTranslations({ en, ru });\n private readonly moduleLoadingService = inject(ModuleLoadingService);\n\n private showHandle?: ReturnType<typeof setTimeout>;\n private hideHandle?: ReturnType<typeof setTimeout>;\n private shownAt = 0;\n\n protected readonly visible = signal(false);\n\n constructor() {\n effect(() => {\n const loading = this.moduleLoadingService.loading();\n untracked(() => (loading ? this.scheduleShow() : this.scheduleHide()));\n });\n\n effect(() => {\n this.blockInteraction(this.visible());\n });\n }\n\n ngOnDestroy(): void {\n this.clearTimers();\n this.blockInteraction(false);\n }\n\n private scheduleShow(): void {\n this.clearTimer('hide');\n if (this.visible() || this.showHandle != null) {\n return;\n }\n\n this.showHandle = setTimeout(() => {\n this.showHandle = undefined;\n this.shownAt = Date.now();\n this.visible.set(true);\n }, BlockLoaderComponent.showDelayMs);\n }\n\n private scheduleHide(): void {\n this.clearTimer('show');\n if (!this.visible() || this.hideHandle != null) {\n return;\n }\n\n const remaining = BlockLoaderComponent.minVisibleMs - (Date.now() - this.shownAt);\n if (remaining <= 0) {\n this.visible.set(false);\n return;\n }\n\n this.hideHandle = setTimeout(() => {\n this.hideHandle = undefined;\n this.visible.set(false);\n }, remaining);\n }\n\n private clearTimer(timer: 'show' | 'hide'): void {\n const handle = timer === 'show' ? this.showHandle : this.hideHandle;\n if (handle == null) {\n return;\n }\n\n clearTimeout(handle);\n if (timer === 'show') {\n this.showHandle = undefined;\n } else {\n this.hideHandle = undefined;\n }\n }\n\n private clearTimers(): void {\n this.clearTimer('show');\n this.clearTimer('hide');\n }\n\n /**\n * Takes the application out of the interaction and accessibility trees while the blocker is up,\n * so pointer, keyboard and screen reader input cannot reach a module that is still loading.\n */\n private blockInteraction(blocked: boolean): void {\n const wrapper = document.querySelector('.layout-wrapper');\n if (blocked) {\n wrapper?.setAttribute('inert', '');\n // Not the layout's `blocked-scroll` class: the layout drops it whenever it closes the menu.\n document.body.style.setProperty('overflow', 'hidden');\n } else {\n wrapper?.removeAttribute('inert');\n document.body.style.removeProperty('overflow');\n }\n }\n}\n","import { Component, DestroyRef, OnInit, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter, take } from 'rxjs/operators';\nimport { ButtonModule } from 'primeng/button';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { SecurityApi } from '../../api/security.api';\nimport { DefaultSecretFindingResponse, DefaultSecretsReportResponse } from '../../api/data-contracts';\nimport { SecurityService } from '../../services/security.service';\nimport { provideTranslations } from '../../helpers/l10n.helper';\nimport en from './l10n/default-secrets-banner.en.json';\nimport ru from './l10n/default-secrets-banner.ru.json';\n\n/**\n * Administrator banner listing the secret settings that still hold a value shipped with the repository.\n *\n * The report comes from the same cached validator that feeds the startup log and the `default-secrets`\n * health check, so the three never disagree. Only administrators see it - the endpoint is admin-only.\n *\n * Whether the banner is raised at all is decided by the server through `showBanner`: findings are reported in\n * every environment, but the banner appears only in Production. Set `ASPNETCORE_ENVIRONMENT=Production` to see\n * it locally.\n */\n@Component({\n selector: 'default-secrets-banner',\n standalone: true,\n imports: [ButtonModule, TranslatePipe],\n template: `\n @if (report(); as data) {\n <div\n class=\"mb-4 rounded-border border border-orange-300 bg-orange-50 p-4 dark:border-orange-700 dark:bg-orange-950\">\n <div class=\"flex flex-row items-start gap-3\">\n <i class=\"pi pi-exclamation-triangle mt-1 text-xl text-orange-600 dark:text-orange-400\"></i>\n <div class=\"flex flex-col gap-1\">\n <span class=\"font-bold text-surface-900 dark:text-surface-0\">\n {{ 'defaultSecretsBanner.title' | translate }}\n </span>\n <span class=\"text-surface-700 dark:text-surface-200\">\n {{\n 'defaultSecretsBanner.description'\n | translate: { count: data.findings?.length ?? 0, checked: data.checkedCount ?? 0 }\n }}\n </span>\n </div>\n <div class=\"ml-auto flex flex-row gap-2\">\n <p-button\n severity=\"secondary\"\n size=\"small\"\n [icon]=\"expanded() ? 'pi pi-chevron-up' : 'pi pi-chevron-down'\"\n [label]=\"\n (expanded() ? 'defaultSecretsBanner.actions.hide' : 'defaultSecretsBanner.actions.details') | translate\n \"\n [text]=\"true\"\n (click)=\"expanded.set(!expanded())\" />\n <p-button\n icon=\"pi pi-times\"\n severity=\"secondary\"\n size=\"small\"\n [ariaLabel]=\"'defaultSecretsBanner.actions.dismiss' | translate\"\n [text]=\"true\"\n (click)=\"dismiss()\" />\n </div>\n </div>\n\n @if (expanded()) {\n <div class=\"mt-3 overflow-x-auto\">\n <table class=\"w-full text-left text-sm\">\n <thead>\n <tr class=\"text-surface-600 dark:text-surface-300\">\n <th class=\"py-1 pr-4\" scope=\"col\">{{ 'defaultSecretsBanner.columns.configKey' | translate }}</th>\n <th class=\"py-1 pr-4\" scope=\"col\">{{ 'defaultSecretsBanner.columns.kind' | translate }}</th>\n <th class=\"py-1\" scope=\"col\">\n {{ 'defaultSecretsBanner.columns.environmentVariable' | translate }}\n </th>\n </tr>\n </thead>\n <tbody>\n @for (finding of data.findings; track finding.configKey) {\n <tr class=\"text-surface-900 dark:text-surface-0\">\n <td class=\"py-1 pr-4 font-mono\">{{ finding.configKey }}</td>\n <td class=\"py-1 pr-4\">{{ kindLabel(finding) | translate }}</td>\n <td class=\"py-1 font-mono\">{{ finding.environmentVariable }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n `\n})\nexport class DefaultSecretsBannerComponent implements OnInit {\n private readonly translations = provideTranslations({ en, ru });\n private readonly securityApi = inject(SecurityApi);\n private readonly securityService = inject(SecurityService);\n\n private readonly destroyRef = inject(DestroyRef);\n\n protected readonly report = signal<DefaultSecretsReportResponse | null>(null);\n protected readonly expanded = signal(false);\n\n ngOnInit(): void {\n // `payload` emits on every auth() call, and the auth guard calls it on every route activation. The report\n // cannot change while the page is open, so wait for the first payload that belongs to an administrator and\n // request it exactly once. A non-administrator never issues the request at all - it would only earn a 403.\n this.securityService.payload\n .pipe(\n filter(() => this.securityService.isAdmin()),\n take(1),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => this.load());\n }\n\n protected kindLabel(finding: DefaultSecretFindingResponse): string {\n return `defaultSecretsBanner.kind.${finding.kind}`;\n }\n\n protected dismiss(): void {\n this.report.set(null);\n }\n\n private load(): void {\n this.securityApi\n .getDefaultSecretsReport()\n .then((data) => this.report.set(data?.showBanner ? data : null))\n // A service without the endpoint, or a revoked admin role, must not break the layout.\n .catch(() => this.report.set(null));\n }\n}\n","import { Component, Renderer2, ViewChild, OnDestroy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { filter, Subscription } from 'rxjs';\nimport { AppTopbar } from '../top-bar/top-bar.component';\nimport { FooterComponent } from '../footer/footer.component';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { SidebarComponent } from '../sidebar/sidebar.component';\nimport { BlockLoaderComponent } from '../block-loader/block-loader.component';\nimport { MenuApi } from '../../api/menu.api';\nimport { MenuService } from '../../services/app.menu.service';\nimport { DefaultSecretsBannerComponent } from '../default-secrets-banner/default-secrets-banner.component';\n\n@Component({\n selector: 'app-layout',\n standalone: true,\n imports: [\n CommonModule,\n AppTopbar,\n SidebarComponent,\n RouterModule,\n FooterComponent,\n BlockLoaderComponent,\n DefaultSecretsBannerComponent\n ],\n template: `\n <div class=\"layout-wrapper\" [ngClass]=\"containerClass\">\n <app-topbar></app-topbar>\n <app-sidebar></app-sidebar>\n <div class=\"layout-main-container\">\n <default-secrets-banner />\n <div class=\"layout-main\">\n <router-outlet></router-outlet>\n </div>\n @if (layoutService.footerVisible()) {\n <app-footer></app-footer>\n }\n </div>\n <div class=\"layout-mask animate-fadein\"></div>\n </div>\n <!-- Outside the wrapper on purpose: the blocker marks the wrapper inert while it is visible. -->\n <block-loader />\n `,\n providers: [MenuService, MenuApi]\n})\nexport class AppLayoutComponent implements OnDestroy {\n protected layoutService = inject(LayoutService);\n protected router = inject(Router);\n protected renderer = inject(Renderer2);\n overlayMenuOpenSubscription: Subscription;\n\n menuOutsideClickListener: () => void;\n\n @ViewChild(SidebarComponent) appSidebar!: SidebarComponent;\n\n @ViewChild(AppTopbar) appTopBar!: AppTopbar;\n\n constructor() {\n this.overlayMenuOpenSubscription = this.layoutService.overlayOpen$.subscribe(() => {\n if (!this.menuOutsideClickListener) {\n this.menuOutsideClickListener = this.renderer.listen('document', 'click', (event) => {\n if (this.isOutsideClicked(event)) {\n this.hideMenu();\n }\n });\n }\n\n if (this.layoutService.layoutState().staticMenuMobileActive) {\n this.blockBodyScroll();\n }\n });\n\n this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe(() => {\n this.hideMenu();\n });\n }\n\n isOutsideClicked(event: MouseEvent) {\n const sidebarEl = document.querySelector('.layout-sidebar');\n const topbarEl = document.querySelector('.layout-menu-button');\n const eventTarget = event.target as Node;\n\n return !(\n sidebarEl?.isSameNode(eventTarget) ||\n sidebarEl?.contains(eventTarget) ||\n topbarEl?.isSameNode(eventTarget) ||\n topbarEl?.contains(eventTarget)\n );\n }\n\n hideMenu() {\n this.layoutService.layoutState.update((prev) => ({\n ...prev,\n overlayMenuActive: false,\n staticMenuMobileActive: false,\n menuHoverActive: false\n }));\n if (this.menuOutsideClickListener) {\n this.menuOutsideClickListener();\n this.menuOutsideClickListener = null;\n }\n this.unblockBodyScroll();\n }\n\n blockBodyScroll(): void {\n if (document.body.classList) {\n document.body.classList.add('blocked-scroll');\n } else {\n document.body.className += ' blocked-scroll';\n }\n }\n\n unblockBodyScroll(): void {\n if (document.body.classList) {\n document.body.classList.remove('blocked-scroll');\n } else {\n document.body.className = document.body.className.replace(\n new RegExp('(^|\\\\b)' + 'blocked-scroll'.split(' ').join('|') + '(\\\\b|$)', 'gi'),\n ' '\n );\n }\n }\n\n get containerClass() {\n return {\n 'layout-overlay': this.layoutService.layoutConfig().menuMode === 'overlay',\n 'layout-static': this.layoutService.layoutConfig().menuMode === 'static',\n 'layout-static-inactive':\n this.layoutService.layoutState().staticMenuDesktopInactive &&\n this.layoutService.layoutConfig().menuMode === 'static',\n 'layout-overlay-active': this.layoutService.layoutState().overlayMenuActive,\n 'layout-mobile-active': this.layoutService.layoutState().staticMenuMobileActive\n };\n }\n\n ngOnDestroy() {\n if (this.overlayMenuOpenSubscription) {\n this.overlayMenuOpenSubscription.unsubscribe();\n }\n\n if (this.menuOutsideClickListener) {\n this.menuOutsideClickListener();\n }\n }\n}\n","import { Component, computed, inject } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { StyleClassModule } from 'primeng/styleclass';\nimport { AppConfiguratorComponent } from '../app-configurator/app-configurator.component';\nimport { LayoutService } from '../../services/app.layout.service';\n\n@Component({\n selector: 'app-floating-configurator',\n imports: [ButtonModule, StyleClassModule, AppConfiguratorComponent],\n template: `\n <div class=\"fixed flex gap-4 top-8 right-8\">\n <p-button\n id=\"oip-app-floating-configurator-dark-theme-button\"\n severity=\"secondary\"\n type=\"button\"\n [icon]=\"isDarkTheme() ? 'pi pi-moon' : 'pi pi-sun'\"\n [rounded]=\"true\"\n (onClick)=\"toggleDarkMode()\" />\n <div class=\"relative\">\n <p-button\n enterActiveClass=\"animate-scalein\"\n enterFromClass=\"hidden\"\n icon=\"pi pi-palette\"\n id=\"oip-app-floating-configurator-next-button\"\n leaveActiveClass=\"animate-fadeout\"\n leaveToClass=\"hidden\"\n pStyleClass=\"@next\"\n type=\"button\"\n [hideOnOutsideClick]=\"true\"\n [rounded]=\"true\" />\n <app-configurator />\n </div>\n </div>\n `\n})\nexport class AppFloatingConfiguratorComponent {\n LayoutService = inject(LayoutService);\n\n isDarkTheme = computed(() => this.LayoutService.layoutConfig().darkTheme);\n\n toggleDarkMode() {\n this.LayoutService.layoutConfig.update((state) => ({\n ...state,\n darkTheme: !state.darkTheme\n }));\n }\n}\n","import { Component } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { LogoComponent } from '../logo/logo.component';\nimport { Button } from 'primeng/button';\nimport { AppFloatingConfiguratorComponent } from '../app-floating-configurator/app-floating-configurator.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/notfound.en.json';\nimport ru from './l10n/notfound.ru.json';\n\n@Component({\n selector: 'app-notfound',\n template: ` <app-floating-configurator />\n <div class=\"flex items-center justify-center min-h-screen overflow-hidden\">\n <div class=\"flex flex-col items-center justify-center\">\n <div\n style=\"border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, color-mix(in srgb, var(--primary-color), transparent 60%) 10%, var(--surface-ground) 30%)\">\n <div\n class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20 flex flex-col items-center\"\n style=\"border-radius: 53px\">\n <div class=\"flex flex-col items-center justify-center\">\n <logo [height]=\"96\" [width]=\"96\"></logo>\n </div>\n <span class=\"text-primary font-bold text-3xl\">{{ 'notfound.errorCode' | translate }}</span>\n <h1 class=\"text-surface-900 dark:text-surface-0 font-bold text-3xl lg:text-5xl mb-2\">\n {{ 'notfound.title' | translate }}\n </h1>\n <div class=\"text-surface-600 dark:text-surface-200 mb-8\">{{ 'notfound.description' | translate }}</div>\n <p-button id=\"oip-app-notfound-go-to-home-button\" routerLink=\"/\" [label]=\"'notfound.button' | translate\" />\n </div>\n </div>\n </div>\n </div>`,\n imports: [RouterLink, LogoComponent, Button, AppFloatingConfiguratorComponent, TranslateModule],\n standalone: true\n})\nexport class NotfoundComponent {\n private readonly translations = provideTranslations({ en, ru });\n}\n","import { Component, OnInit, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ButtonModule } from 'primeng/button';\nimport { RippleModule } from 'primeng/ripple';\nimport { LogoComponent } from '../../logo/logo.component';\nimport { BffSecurityService, SecurityService } from '../../../services/security.service';\nimport { AppFloatingConfiguratorComponent } from '../../app-floating-configurator/app-floating-configurator.component';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { provideTranslations } from '../../../helpers/l10n.helper';\n\nimport en from './l10n/unauthorized.en.json';\nimport ru from './l10n/unauthorized.ru.json';\n\n@Component({\n template: `\n <app-floating-configurator />\n <div\n class=\"bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-[100vw] overflow-hidden\">\n <div class=\"flex flex-col items-center justify-center\">\n <div\n style=\"border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%)\">\n <div class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20\" style=\"border-radius: 53px\">\n <div class=\"flex flex-col items-center justify-center\">\n <logo [height]=\"96\" [width]=\"96\" />\n </div>\n <div class=\"text-center mb-8\">\n <div class=\"text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4\">\n {{ 'unauthorized.welcomeToOip' | translate }}\n </div>\n <span class=\"text-muted-color font-medium\">{{ 'unauthorized.signInToContinue' | translate }}</span>\n </div>\n <div>\n <p-button\n id=\"oip-unauthorized-error-sign-in-button\"\n label=\"{{ 'unauthorized.signIn' | translate }}\"\n styleClass=\"w-full\"\n (click)=\"signIn()\"></p-button>\n </div>\n </div>\n </div>\n </div>\n </div>\n `,\n imports: [\n ButtonModule,\n RippleModule,\n LogoComponent,\n AppFloatingConfiguratorComponent,\n ReactiveFormsModule,\n TranslatePipe\n ]\n})\nexport class UnauthorizedComponent implements OnInit {\n private readonly translations = provideTranslations({ en, ru });\n\n protected readonly securityService = inject(SecurityService);\n private readonly route = inject(ActivatedRoute);\n\n ngOnInit(): void {\n const returnUrl = sessionStorage.getItem(BffSecurityService.authorizeAfterLogoutReturnUrlKey);\n if (!returnUrl) {\n return;\n }\n\n sessionStorage.removeItem(BffSecurityService.authorizeAfterLogoutReturnUrlKey);\n this.securityService.authorize(returnUrl);\n }\n\n protected signIn(): void {\n const returnUrl = this.route.snapshot.queryParamMap.get('returnUrl') || '/';\n this.securityService.authorize(returnUrl);\n }\n}\n","import { Component } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { ButtonModule } from 'primeng/button';\nimport { RippleModule } from 'primeng/ripple';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { provideTranslations } from '../../../helpers/l10n.helper';\n\nimport en from './l10n/access.en.json';\nimport ru from './l10n/access.ru.json';\n\n@Component({\n selector: 'app-access',\n template: `<div\n class=\"surface-ground flex align-items-center justify-content-center min-h-screen min-w-screen overflow-hidden\">\n <div class=\"flex flex-column align-items-center justify-content-center\">\n <img alt=\"Sakai logo\" class=\"mb-5 w-6rem flex-shrink-0\" src=\"assets/demo/images/access/logo-orange.svg\" />\n <div\n style=\"border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, rgba(247, 149, 48, 0.4) 10%, rgba(247, 149, 48, 0) 30%);\">\n <div\n class=\"w-full surface-card py-8 px-5 sm:px-8 flex flex-column align-items-center\"\n style=\"border-radius:53px\">\n <div class=\"grid flex-column align-items-center\">\n <div\n class=\"flex justify-content-center align-items-center bg-orange-500 border-circle\"\n style=\"width:3.2rem; height:3.2rem;\">\n <i class=\"text-50 pi pi-fw pi-lock text-2xl\"></i>\n </div>\n <h1 class=\"text-900 font-bold text-4xl lg:text-5xl mb-2\">{{ 'access.title' | translate }}</h1>\n <span class=\"text-600 mb-5\">{{ 'access.message' | translate }}</span>\n <img alt=\"Access denied\" class=\"mb-5\" src=\"assets/demo/images/access/asset-access.svg\" width=\"80%\" />\n <p-button\n class=\"p-button-text\"\n icon=\"pi pi-arrow-left\"\n id=\"oip-app-access-go-to-dashboard-button\"\n pButton\n pRipple\n [label]=\"'access.button' | translate\"\n [routerLink]=\"['/']\"></p-button>\n </div>\n </div>\n </div>\n </div>\n </div>`,\n imports: [RouterLink, ButtonModule, RippleModule, TranslatePipe],\n standalone: true\n})\nexport class AccessComponent {\n private readonly translations = provideTranslations({ en, ru });\n}\n","import { Component } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { RippleModule } from 'primeng/ripple';\nimport { RouterLink } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { provideTranslations } from '../../../helpers/l10n.helper';\n\nimport en from './l10n/error.en.json';\nimport ru from './l10n/error.ru.json';\n\n@Component({\n selector: 'app-error',\n template: `<div\n class=\"surface-ground flex align-items-center justify-content-center min-h-screen min-w-screen overflow-hidden\">\n <div class=\"flex flex-column align-items-center justify-content-center\">\n <img alt=\"Sakai logo\" class=\"mb-5 w-6rem flex-shrink-0\" src=\"assets/demo/images/error/logo-error.svg\" />\n <div\n style=\"border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, rgba(233, 30, 99, 0.4) 10%, rgba(33, 150, 243, 0) 30%);\">\n <div\n class=\"w-full surface-card py-8 px-5 sm:px-8 flex flex-column align-items-center\"\n style=\"border-radius:53px\">\n <div class=\"grid flex flex-column align-items-center\">\n <div\n class=\"flex justify-content-center align-items-center bg-pink-500 border-circle\"\n style=\"height:3.2rem; width:3.2rem;\">\n <i class=\"pi pi-fw pi-exclamation-circle text-2xl text-white\"></i>\n </div>\n <h1 class=\"text-900 font-bold text-5xl mb-2\">{{ 'error.title' | translate }}</h1>\n <span class=\"text-600 mb-5\">{{ 'error.message' | translate }}</span>\n <img alt=\"Error\" class=\"mb-5\" src=\"assets/demo/images/error/asset-error.svg\" width=\"80%\" />\n <button\n class=\"p-button-text\"\n icon=\"pi pi-arrow-left\"\n id=\"oip-app-error-go-to-dashboard-button\"\n pButton\n pRipple\n [label]=\"'error.button' | translate\"\n [routerLink]=\"['/']\"></button>\n </div>\n </div>\n </div>\n </div>\n </div>`,\n standalone: true,\n imports: [ButtonModule, RippleModule, RouterLink, TranslatePipe]\n})\nexport class ErrorComponent {\n private readonly translations = provideTranslations({ en, ru });\n}\n","import { Component, inject } from '@angular/core';\nimport { FileUploadModule } from 'primeng/fileupload';\nimport { ImageModule } from 'primeng/image';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ButtonModule } from 'primeng/button';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { ConfirmationService } from 'primeng/api';\nimport { MsgService } from '../../services/msg.service';\nimport { UserService } from '../../services/user.service';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { UserProfileApi } from '../../api/user-profile.api';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/profile.en.json';\nimport ru from './l10n/profile.ru.json';\n\n@Component({\n selector: 'user-profile',\n standalone: true,\n imports: [FileUploadModule, ImageModule, AvatarModule, ButtonModule, ConfirmDialog, TranslatePipe],\n providers: [ConfirmationService],\n template: `\n <p-confirmDialog></p-confirmDialog>\n <p-avatar\n class=\"mr-2\"\n id=\"oip-user-profile-photo-avatar\"\n shape=\"circle\"\n size=\"xlarge\"\n [image]=\"userService.photoLoaded ? userService.photo : null\" />\n <div class=\"mt-2 flex gap-2\">\n <p-fileupload\n accept=\"image/*\"\n chooseIcon=\"pi pi-upload\"\n chooseLabel=\"{{ 'profileComponent.changePhoto' | translate }}\"\n id=\"oip-user-profile-file-upload\"\n maxFileSize=\"1000000\"\n mode=\"basic\"\n name=\"files\"\n [auto]=\"true\"\n [customUpload]=\"true\"\n (uploadHandler)=\"uploadPhoto($event)\" />\n @if (userService.photoLoaded) {\n <p-button\n icon=\"pi pi-trash\"\n id=\"oip-user-profile-delete-photo\"\n label=\"{{ 'profileComponent.deletePhoto' | translate }}\"\n severity=\"danger\"\n [outlined]=\"true\"\n (onClick)=\"confirmDeletePhoto($event)\" />\n }\n </div>\n `\n})\nexport class UserProfileComponent {\n private readonly translations = provideTranslations({ en, ru });\n\n readonly userService = inject(UserService);\n readonly msgService = inject(MsgService);\n readonly translateService = inject(TranslateService);\n readonly userProfileApi = inject(UserProfileApi);\n private readonly confirmationService = inject(ConfirmationService);\n\n async uploadPhoto(event: any): Promise<void> {\n const file = event.files?.[0];\n if (!file) {\n return;\n }\n\n try {\n await this.userProfileApi.postUserPhoto({ files: file });\n this.userService.refreshUserPhoto();\n this.msgService.success(this.translateService.instant('profileComponent.successfullyUploaded'));\n } catch (error) {\n this.msgService.error(error);\n }\n }\n\n confirmDeletePhoto(event: Event): void {\n this.confirmationService.confirm({\n target: event.target as EventTarget,\n header: this.translateService.instant('profileComponent.deletePhotoConfirmHeader'),\n message: this.translateService.instant('profileComponent.deletePhotoConfirmMessage'),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.translateService.instant('profileComponent.deletePhotoConfirmRejectButtonPropsLabel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('profileComponent.deletePhotoConfirmAcceptButtonPropsLabel'),\n severity: 'danger'\n },\n accept: async () => {\n await this.deletePhoto();\n }\n });\n }\n\n private async deletePhoto(): Promise<void> {\n try {\n await this.userProfileApi.deleteUserPhoto();\n this.userService.refreshUserPhoto();\n this.msgService.success(this.translateService.instant('profileComponent.photoDeleted'));\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('profileComponent.failedToDeletePhoto'));\n }\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { UserProfileComponent } from '../user-profile/user-profile.component';\nimport { Tooltip } from 'primeng/tooltip';\nimport { FormsModule } from '@angular/forms';\nimport { Select } from 'primeng/select';\nimport { TableModule } from 'primeng/table';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { UserService } from '../../services/user.service';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { RouterLink } from '@angular/router';\nimport { SecurityService } from '../../services/security.service';\nimport { MenuService } from '../../services/app.menu.service';\nimport { Button } from 'primeng/button';\nimport { L10nService } from '../../services/l10n.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/config.en.json';\nimport ru from './l10n/config.ru.json';\n\n@Component({\n selector: 'app-config',\n template: `\n <div class=\"flex flex-col md:flex-row gap-4\">\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'config.profile' | translate }}</div>\n <div class=\"flex justify-content-end flex-wrap\">\n {{ userService.userName }}\n </div>\n <label>\n {{ 'config.photo' | translate }}\n <span\n class=\"pi pi-question-circle\"\n pTooltip=\"{{ 'config.usePhoto256x256Pixel' | translate }}\"\n tooltipPosition=\"right\"></span>\n </label>\n <div class=\"flex justify-content-end flex-wrap\">\n <user-profile></user-profile>\n </div>\n </div>\n </div>\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'config.localization' | translate }}</div>\n <label> {{ 'config.selectLanguage' | translate }} </label>\n <div class=\"flex justify-content-end flex-wrap\">\n <p-select\n class=\"w-full md:w-56\"\n optionLabel=\"name\"\n optionValue=\"code\"\n qa-id=\"oip-app-config-language-select\"\n [options]=\"l10nService.availableLanguages\"\n [(ngModel)]=\"selectedLanguage\"\n (onChange)=\"changeLanguage()\">\n <ng-template #selectedItem let-selectedOption>\n <div class=\"flex items-center gap-2\">\n <span [class]=\"selectedOption.icon\"></span>\n <div>{{ selectedOption.name }}</div>\n </div>\n </ng-template>\n <ng-template #item let-languages>\n <div class=\"flex items-center gap-2\">\n <span [class]=\"languages.icon\"></span>\n <div>{{ languages.name }}</div>\n </div>\n </ng-template>\n </p-select>\n </div>\n <div class=\"flex flex-col gap-5\">\n <div class=\"mt-5\">{{ 'config.dateTimeFormat' | translate }}</div>\n <p-select\n class=\"w-full md:w-56\"\n qa-id=\"oip-app-config-date-format-select\"\n [options]=\"dateFormats\"\n [placeholder]=\"'config.dateFormat' | translate\"\n [(ngModel)]=\"selectedDateFormat\"\n (onChange)=\"changeDateFormat()\" />\n <p-select\n class=\"w-full md:w-56\"\n qa-id=\"oip-app-config-time-format-select\"\n [options]=\"timeFormats\"\n [placeholder]=\"'config.timeFormat' | translate\"\n [(ngModel)]=\"selectedTimeFormat\"\n (onChange)=\"changeTimeFormat()\" />\n <div class=\"mt-5\">{{ 'config.timeZone' | translate }}</div>\n <p-select\n class=\"w-full md:w-56\"\n qa-id=\"oip-app-config-timezone-select\"\n [filter]=\"true\"\n [options]=\"allTimeZones\"\n [placeholder]=\"'config.timeZone' | translate\"\n [virtualScroll]=\"true\"\n [virtualScrollItemSize]=\"34\"\n [(ngModel)]=\"selectedTimeZone\"\n (onChange)=\"changeTimeZone()\" />\n </div>\n </div>\n </div>\n @if (securityService.isAdmin()) {\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'config.menu' | translate }}</div>\n <div class=\"flex items-center gap-2\">\n <label for=\"oip-app-config-admin-mode\">{{ 'config.all' | translate }}</label>\n <p-toggle-switch\n id=\"oip-app-config-admin-mode\"\n [(ngModel)]=\"menuService.adminMode\"\n (onChange)=\"onSwitchChange()\"></p-toggle-switch>\n </div>\n <div class=\"flex items-center gap-2\">\n <label for=\"oip-app-config-admin-mode\">{{ 'config.moduleManagement' | translate }}</label>\n <p-button icon=\"pi pi-cog\" label=\"{{ 'config.goTo' | translate }}\" routerLink=\"/modules\" />\n </div>\n <div class=\"flex items-center gap-2\">\n <label for=\"oip-app-config-applications-link\">{{ 'config.applicationManagement' | translate }}</label>\n <p-button\n icon=\"pi pi-th-large\"\n id=\"oip-app-config-applications-link\"\n label=\"{{ 'config.goTo' | translate }}\"\n routerLink=\"/applications\" />\n </div>\n </div>\n </div>\n }\n </div>\n `,\n imports: [\n UserProfileComponent,\n Tooltip,\n FormsModule,\n Select,\n TableModule,\n TranslatePipe,\n ToggleSwitchModule,\n Button,\n RouterLink\n ]\n})\nexport class ConfigComponent {\n private readonly translations = provideTranslations({ en, ru });\n\n private readonly layoutService = inject(LayoutService);\n protected readonly l10nService = inject(L10nService);\n protected readonly userService = inject(UserService);\n protected readonly securityService = inject(SecurityService);\n protected readonly menuService = inject(MenuService);\n protected readonly dateFormats: string[] = ['dd.MM.yyyy', 'dd.MM.yy', 'yyyy-MM-dd', 'dd.MMM.yyyy'];\n protected readonly timeFormats: string[] = ['HH:mm:ss', 'HH:mm'];\n // @ts-ignore\n protected readonly allTimeZones: any[] = Intl.supportedValuesOf('timeZone');\n\n protected selectedLanguage: any;\n protected selectedDateFormat: string;\n protected selectedTimeFormat: string;\n protected selectedTimeZone: string;\n\n constructor() {\n this.selectedLanguage = this.layoutService.language();\n this.selectedDateFormat = this.layoutService.dateFormat();\n this.selectedTimeFormat = this.layoutService.timeFormat();\n this.selectedTimeZone = this.layoutService.timeZone();\n }\n\n changeLanguage() {\n this.layoutService.layoutConfig.update((config) => ({\n ...config,\n language: this.selectedLanguage\n }));\n this.l10nService.use(this.selectedLanguage, 'config');\n }\n\n changeDateFormat() {\n this.layoutService.layoutConfig.update((config) => ({ ...config, dateFormat: this.selectedDateFormat }));\n }\n\n changeTimeFormat() {\n this.layoutService.layoutConfig.update((config) => ({ ...config, timeFormat: this.selectedTimeFormat }));\n }\n\n changeTimeZone() {\n this.layoutService.layoutConfig.update((config) => ({ ...config, timeZone: this.selectedTimeZone }));\n }\n\n async onSwitchChange(): Promise<void> {\n await this.menuService.loadMenu();\n }\n}\n","import { Component, inject, OnDestroy, OnInit } from '@angular/core';\nimport { TagModule } from 'primeng/tag';\nimport { ConfirmationService, SharedModule } from 'primeng/api';\nimport { TableModule } from 'primeng/table';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { TextareaModule } from 'primeng/textarea';\nimport { ButtonModule } from 'primeng/button';\nimport { FormsModule } from '@angular/forms';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { Tooltip } from 'primeng/tooltip';\nimport { BaseModuleComponent } from '../base-module/base-module.component';\nimport { NoSettingsDto } from '../../dtos/no-settings.dto';\nimport { SecurityComponent } from '../security/security.component';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { provideTranslations } from '../../helpers/l10n.helper';\nimport en from './l10n/db-migration.en.json';\nimport ru from './l10n/db-migration.ru.json';\n\nexport interface MigrationDto {\n name: string;\n applied: boolean;\n pending: boolean;\n exist: boolean;\n}\n\nexport interface ApplyMigrationRequest {\n name: string;\n}\n\n@Component({\n imports: [\n TableModule,\n SharedModule,\n TagModule,\n InputTextModule,\n TextareaModule,\n ButtonModule,\n FormsModule,\n ConfirmDialog,\n SecurityComponent,\n Tooltip,\n TranslatePipe\n ],\n selector: 'db-migration',\n template: `\n @if (isContent) {\n <div class=\"card\" style=\"height: 100%\">\n <p-confirmDialog />\n <div>\n <h5>{{ 'db-migration.migrationManager' | translate }}</h5>\n <div class=\"flex flex-row gap-2\">\n <p-button\n icon=\"pi pi-refresh\"\n severity=\"secondary\"\n tooltipPosition=\"bottom\"\n [outlined]=\"true\"\n [pTooltip]=\"'db-migration.actions.refresh' | translate\"\n (click)=\"refreshAction()\" />\n <p-button\n icon=\"pi pi-filter-slash\"\n severity=\"secondary\"\n tooltipPosition=\"bottom\"\n [outlined]=\"true\"\n [pTooltip]=\"'db-migration.actions.cleanFilter' | translate\"\n (click)=\"dt.clear()\" />\n </div>\n <div>\n <p-table #dt dataKey=\"name\" editMode=\"row\" size=\"small\" [scrollable]=\"true\" [value]=\"data\">\n <ng-template let-columns pTemplate=\"header\">\n <tr>\n <th pSortableColumn=\"name\" scope=\"col\">\n {{ 'db-migration.columns.name' | translate }}\n <p-columnFilter display=\"menu\" field=\"name\" type=\"text\" />\n </th>\n <th scope=\"col\">{{ 'db-migration.columns.applied' | translate }}</th>\n <th scope=\"col\">{{ 'db-migration.columns.exist' | translate }}</th>\n <th scope=\"col\">{{ 'db-migration.columns.pending' | translate }}</th>\n <th scope=\"col\"></th>\n </tr>\n </ng-template>\n\n <ng-template #body let-columns=\"columns\" let-editing=\"editing\" let-ri=\"rowIndex\" let-rowData>\n <tr [pEditableRow]=\"rowData\">\n <td>\n {{ rowData.name }}\n </td>\n <td>\n @if (rowData.applied) {\n <p-button icon=\"pi pi-check\" severity=\"success\" [rounded]=\"true\" [text]=\"true\"></p-button>\n }\n </td>\n <td>\n @if (rowData.exist) {\n <p-button icon=\"pi pi-check\" severity=\"success\" [rounded]=\"true\" [text]=\"true\" />\n }\n </td>\n <td>\n @if (rowData.pending) {\n <p-button icon=\"pi pi-check\" severity=\"success\" [rounded]=\"true\" [text]=\"true\"></p-button>\n }\n </td>\n <td>\n <p-button\n icon=\"pi pi-bolt\"\n pCancelEditableRow\n pTooltip=\"{{ 'db-migration.actions.applyMigration' | translate }}\"\n severity=\"secondary\"\n tooltipPosition=\"left\"\n [rounded]=\"true\"\n [text]=\"true\"\n (click)=\"applyMigration(rowData)\">\n </p-button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n </div>\n } @else if (isSecurity) {\n <security [controller]=\"controller\" [id]=\"id\" />\n }\n `,\n providers: [ConfirmationService]\n})\nexport class DbMigrationComponent\n extends BaseModuleComponent<NoSettingsDto, NoSettingsDto>\n implements OnInit, OnDestroy\n{\n private readonly translations = provideTranslations({ en, ru });\n\n data: MigrationDto[];\n\n async ngOnInit() {\n await super.ngOnInit();\n await this.refreshAction();\n }\n\n async refreshAction() {\n this.getData()\n .then((response) => {\n this.data = response;\n })\n .catch((error) => {\n console.log(error);\n this.msgService.error(this.l10nService.instant('db-migration.messages.errorRefreshing'));\n });\n }\n\n async getData() {\n return this.getMigrations<MigrationDto>();\n }\n\n async applyMigration(rowData: MigrationDto) {\n const request = { name: rowData.name } as ApplyMigrationRequest;\n return this.applyModuleMigration(request);\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n ApiExceptionResponse,\n DeleteExtensionModuleParams,\n GetExtensionModuleByKeyParams,\n ModuleDto,\n RegisterExtensionModuleRequest,\n UpdateExtensionModuleParams,\n UpdateExtensionModuleRequest,\n} from \"./data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class ExtensionModulesApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getExtensionModules = (params: RequestParams = {}) =>\n this.request<ModuleDto[], ApiExceptionResponse>({\n path: `/api/extension-modules/get-extension-modules`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n getExtensionModuleByKey = (\n { extensionKey, ...query }: GetExtensionModuleByKeyParams,\n params: RequestParams = {},\n ) =>\n this.request<ModuleDto, ApiExceptionResponse>({\n path: `/api/extension-modules/get-extension-module-by-key/${extensionKey}`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n registerExtensionModule = (\n data: RegisterExtensionModuleRequest,\n params: RequestParams = {},\n ) =>\n this.request<ModuleDto, ApiExceptionResponse>({\n path: `/api/extension-modules/register-extension-module`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n updateExtensionModule = (\n { id, ...query }: UpdateExtensionModuleParams,\n data: UpdateExtensionModuleRequest,\n params: RequestParams = {},\n ) =>\n this.request<ModuleDto, ApiExceptionResponse>({\n path: `/api/extension-modules/update-extension-module/${id}`,\n method: \"PUT\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n deleteExtensionModule = (\n { id, ...query }: DeleteExtensionModuleParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/extension-modules/delete-extension-module/${id}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n ApiExceptionResponse,\n ExistModuleDto,\n ModuleDeleteRequest,\n ModuleDto,\n} from \"./data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class ModuleApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getAll = (params: RequestParams = {}) =>\n this.request<ModuleDto[], ApiExceptionResponse>({\n path: `/api/module/get-all`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n insert = (data: ModuleDto, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/module/insert`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n delete = (data: ModuleDeleteRequest, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/module/delete`,\n method: \"DELETE\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n getModulesWithLoadStatus = (params: RequestParams = {}) =>\n this.request<ExistModuleDto[], ApiExceptionResponse>({\n path: `/api/module/get-modules-with-load-status`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { Tooltip } from 'primeng/tooltip';\nimport { FormsModule } from '@angular/forms';\nimport { TableModule } from 'primeng/table';\nimport { Tag } from 'primeng/tag';\nimport { ButtonModule } from 'primeng/button';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { MsgService } from '../../services/msg.service';\nimport { ConfirmationService } from 'primeng/api';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { L10nService } from '../../services/l10n.service';\nimport { ExtensionModulesApi } from '../../api/extension-modules.api';\nimport { ModuleApi } from '../../api/module.api';\nimport { ExistModuleDto } from '../../api/data-contracts';\nimport { AppTitleService } from '../../services/app-title.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { firstValueFrom } from 'rxjs';\n\nimport en from './l10n/app-modules.en.json';\nimport ru from './l10n/app-modules.ru.json';\n\nL10nService.registerTranslations({ en, ru });\n\n@Component({\n imports: [\n FormsModule,\n TableModule,\n Tag,\n ButtonModule,\n ToolbarModule,\n Tooltip,\n ConfirmDialog,\n TranslatePipe,\n InputTextModule\n ],\n providers: [ConfirmationService, ModuleApi, ExtensionModulesApi],\n selector: 'app-modules',\n template: `\n <p-confirmDialog></p-confirmDialog>\n <div class=\"flex flex-col md:flex-row gap-4\">\n <div class=\"card w-full\">\n <div class=\"font-semibold text-xl mb-4\">\n {{ 'app-modules.title' | translate }}\n </div>\n <div class=\"mb-4\">\n <p-toolbar>\n <div class=\"flex flex-col md:flex-row md:items-center gap-2 w-full\">\n <div class=\"flex flex-col sm:flex-row gap-2 flex-1\">\n <input\n class=\"w-full\"\n pInputText\n type=\"url\"\n [disabled]=\"registeringExternalModule\"\n [placeholder]=\"'app-modules.register.manifestUrlPlaceholder' | translate\"\n [(ngModel)]=\"externalModuleManifestUrl\"\n (keydown.enter)=\"registerExternalModule()\" />\n <p-button\n icon=\"pi pi-plus\"\n severity=\"success\"\n [disabled]=\"!canRegisterExternalModule\"\n [label]=\"'app-modules.register.button' | translate\"\n [loading]=\"registeringExternalModule\"\n (onClick)=\"registerExternalModule()\"></p-button>\n </div>\n <p-button\n icon=\"pi pi-refresh\"\n rounded=\"true\"\n severity=\"secondary\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [pTooltip]=\"'app-modules.refreshTooltip' | translate\"\n (onClick)=\"refreshAction()\"></p-button>\n </div>\n </p-toolbar>\n </div>\n <p-table class=\"mt-4\" [paginator]=\"true\" [rows]=\"100\" [value]=\"modules\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th>{{ 'app-modules.table.moduleId' | translate }}</th>\n <th>{{ 'app-modules.table.name' | translate }}</th>\n <th>{{ 'app-modules.table.currentlyLoaded' | translate }}</th>\n <th style=\"width: 4rem\"></th>\n </tr>\n </ng-template>\n <ng-template let-module pTemplate=\"body\">\n <tr>\n <td>{{ module.moduleId }}</td>\n <td>{{ module.name }}</td>\n <td>\n <p-tag\n [severity]=\"module.currentlyLoaded ? 'success' : 'danger'\"\n [value]=\"\n (module.currentlyLoaded ? 'app-modules.table.yes' : 'app-modules.table.no') | translate\n \"></p-tag>\n </td>\n <td>\n <p-button\n icon=\"pi pi-trash\"\n rounded=\"true\"\n severity=\"danger\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [pTooltip]=\"'app-modules.table.deleteTooltip' | translate\"\n (onClick)=\"deleteModule(module)\"></p-button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n `\n})\nexport class AppModulesComponent implements OnInit {\n protected modules: ExistModuleDto[] = [];\n protected msgService = inject(MsgService);\n protected confirmationService = inject(ConfirmationService);\n protected l10nService = inject(L10nService);\n protected titleService = inject(AppTitleService);\n protected externalModuleManifestUrl = '';\n protected registeringExternalModule = false;\n private moduleService = inject(ModuleApi);\n private extensionModulesService = inject(ExtensionModulesApi);\n private translationsReady: Promise<unknown>;\n\n constructor() {\n this.translationsReady = firstValueFrom(this.l10nService.loadComponentTranslations('app-modules'));\n }\n\n async ngOnInit() {\n await this.translationsReady;\n this.titleService.setTitle(this.t('app-modules.title'));\n await this.refreshAction();\n }\n\n async refreshAction() {\n this.modules = await this.moduleService.getModulesWithLoadStatus();\n }\n\n protected get canRegisterExternalModule() {\n return !!this.externalModuleManifestUrl.trim() && !this.registeringExternalModule;\n }\n\n async registerExternalModule() {\n if (!this.canRegisterExternalModule) {\n return;\n }\n\n await this.translationsReady;\n this.registeringExternalModule = true;\n\n try {\n await this.extensionModulesService.registerExtensionModule({\n manifestUrl: this.externalModuleManifestUrl.trim()\n });\n this.externalModuleManifestUrl = '';\n await this.refreshAction();\n this.msgService.success(this.t('app-modules.messages.registerSuccess'));\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.t('app-modules.messages.registerError'),\n this.t('app-modules.messages.registerError')\n );\n } finally {\n this.registeringExternalModule = false;\n }\n }\n\n async deleteModule(module: ExistModuleDto) {\n await this.translationsReady;\n\n this.confirmationService.confirm({\n header: this.t('app-modules.confirm.header'),\n message: this.t('app-modules.confirm.message'),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.t('app-modules.confirm.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.t('app-modules.confirm.delete'),\n severity: 'danger'\n },\n accept: async () => {\n try {\n await this.moduleService.delete({\n moduleId: module.moduleId\n });\n await this.refreshAction();\n this.msgService.success(this.t('app-modules.messages.deleteSuccess'));\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.t('app-modules.messages.deleteError'),\n this.t('app-modules.messages.deleteError')\n );\n }\n }\n });\n }\n\n t(key: string) {\n return this.l10nService.instant(key);\n }\n}\n","export enum ServiceType {\n Service = \"Service\",\n Application = \"Application\",\n}\n\nexport interface ApiExceptionResponse {\n title?: string | null;\n message?: string | null;\n statusCode?: number;\n stackTrace?: string | null;\n}\n\nexport interface ApplicationRegistryItemDto {\n code?: string | null;\n displayName?: string | null;\n baseUrl?: string | null;\n internalBaseUrl?: string | null;\n icon?: string | null;\n order?: number;\n enabled?: boolean;\n serviceType?: ServiceType;\n isCurrent?: boolean;\n}\n\nexport interface GetApplicationRegistryItemByCodeParams {\n code: string;\n}\n\nexport interface UpdateApplicationRegistryItemParams {\n code: string;\n}\n\nexport interface DeleteApplicationRegistryItemParams {\n code: string;\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ConfirmationService } from 'primeng/api';\nimport { ButtonModule } from 'primeng/button';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { InputText } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { TableModule } from 'primeng/table';\nimport { Tag } from 'primeng/tag';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { Tooltip } from 'primeng/tooltip';\nimport { firstValueFrom } from 'rxjs';\nimport { ApplicationsApi } from '../../api/applications.api';\nimport { ApplicationRegistryItemDto, ServiceType } from '../../api/applications-data-contracts';\nimport { AppTitleService } from '../../services/app-title.service';\nimport { L10nService } from '../../services/l10n.service';\nimport { MsgService } from '../../services/msg.service';\n\nimport en from './l10n/applications.en.json';\nimport ru from './l10n/applications.ru.json';\n\nL10nService.registerTranslations({ en, ru });\n\ninterface ApplicationEditModel {\n code: string;\n displayName: string;\n baseUrl: string;\n internalBaseUrl: string;\n icon: string;\n order: number;\n enabled: boolean;\n serviceType: NonNullable<ApplicationRegistryItemDto['serviceType']>;\n}\n\ninterface ApplicationTableItem extends ApplicationRegistryItemDto {\n _isEditing?: boolean;\n _isNew?: boolean;\n _editModel?: ApplicationEditModel;\n}\n\n@Component({\n imports: [\n FormsModule,\n TableModule,\n Tag,\n ButtonModule,\n ToolbarModule,\n Tooltip,\n ConfirmDialog,\n TranslatePipe,\n InputText,\n SelectModule,\n ToggleSwitchModule\n ],\n providers: [ApplicationsApi, ConfirmationService],\n selector: 'app-applications',\n template: `\n <p-confirmDialog></p-confirmDialog>\n <div class=\"flex flex-col gap-4\">\n <div class=\"card w-full\">\n <div class=\"flex flex-col gap-3 md:flex-row md:items-center md:justify-between\">\n <div>\n <div class=\"font-semibold text-xl mb-1\">\n {{ 'applications.title' | translate }}\n </div>\n <p class=\"m-0 text-surface-500\">{{ 'applications.subtitle' | translate }}</p>\n </div>\n <div class=\"flex flex-col gap-2 sm:flex-row\">\n <input\n class=\"w-full sm:w-72\"\n pInputText\n type=\"text\"\n [placeholder]=\"'applications.searchPlaceholder' | translate\"\n [(ngModel)]=\"globalFilter\"\n (keydown.enter)=\"applyGlobalFilter()\" />\n <p-button\n icon=\"pi pi-search\"\n [label]=\"'applications.search' | translate\"\n (onClick)=\"applyGlobalFilter()\"></p-button>\n <p-button\n icon=\"pi pi-filter-slash\"\n severity=\"secondary\"\n [label]=\"'applications.clear' | translate\"\n (onClick)=\"clearFilters()\"></p-button>\n </div>\n </div>\n\n <div class=\"my-4\">\n <p-toolbar>\n <p-button\n icon=\"pi pi-plus\"\n severity=\"success\"\n [disabled]=\"loading || activeRowAction\"\n [label]=\"'applications.add' | translate\"\n (onClick)=\"beginCreateApplication()\"></p-button>\n <p-button\n icon=\"pi pi-refresh\"\n rounded=\"true\"\n severity=\"secondary\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"loading || activeRowAction\"\n [pTooltip]=\"'applications.refreshTooltip' | translate\"\n (onClick)=\"refreshAction()\"></p-button>\n </p-toolbar>\n </div>\n\n <p-table\n #table\n dataKey=\"code\"\n responsiveLayout=\"scroll\"\n [globalFilterFields]=\"globalFilterFields\"\n [loading]=\"loading\"\n [paginator]=\"true\"\n [rows]=\"25\"\n [rowsPerPageOptions]=\"[10, 25, 50, 100]\"\n [value]=\"visibleApplications\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th pSortableColumn=\"code\">\n {{ 'applications.table.code' | translate }}\n <p-sortIcon field=\"code\"></p-sortIcon>\n </th>\n <th pSortableColumn=\"displayName\">\n {{ 'applications.table.displayName' | translate }}\n <p-sortIcon field=\"displayName\"></p-sortIcon>\n </th>\n <th pSortableColumn=\"baseUrl\">\n {{ 'applications.table.baseUrl' | translate }}\n <p-sortIcon field=\"baseUrl\"></p-sortIcon>\n </th>\n <th pSortableColumn=\"internalBaseUrl\">\n {{ 'applications.table.internalBaseUrl' | translate }}\n <p-sortIcon field=\"internalBaseUrl\"></p-sortIcon>\n </th>\n <th pSortableColumn=\"icon\">\n {{ 'applications.table.icon' | translate }}\n <p-sortIcon field=\"icon\"></p-sortIcon>\n </th>\n <th class=\"text-right\" pSortableColumn=\"order\">\n {{ 'applications.table.order' | translate }}\n <p-sortIcon field=\"order\"></p-sortIcon>\n </th>\n <th class=\"text-center\">{{ 'applications.table.enabled' | translate }}</th>\n <th pSortableColumn=\"serviceType\">\n {{ 'applications.table.serviceType' | translate }}\n <p-sortIcon field=\"serviceType\"></p-sortIcon>\n </th>\n <th class=\"text-center\">{{ 'applications.table.current' | translate }}</th>\n <th class=\"text-center min-w-36\">{{ 'applications.table.actions' | translate }}</th>\n </tr>\n </ng-template>\n\n <ng-template let-application pTemplate=\"body\">\n <tr>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input\n class=\"w-full min-w-32\"\n pInputText\n [disabled]=\"!application._isNew\"\n [(ngModel)]=\"editModel.code\" />\n } @else {\n <span class=\"font-medium\">{{ application.code }}</span>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-40\" pInputText [(ngModel)]=\"editModel.displayName\" />\n } @else {\n {{ application.displayName }}\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-56\" pInputText [(ngModel)]=\"editModel.baseUrl\" />\n } @else {\n <span class=\"break-all\">{{ application.baseUrl }}</span>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-56\" pInputText [(ngModel)]=\"editModel.internalBaseUrl\" />\n } @else {\n <span class=\"break-all\">{{ application.internalBaseUrl }}</span>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-32\" pInputText [(ngModel)]=\"editModel.icon\" />\n } @else {\n <div class=\"flex items-center gap-2\">\n <i [class]=\"application.icon || 'pi pi-th-large'\"></i>\n <span>{{ application.icon }}</span>\n </div>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <input class=\"w-full min-w-24 text-right\" pInputText type=\"number\" [(ngModel)]=\"editModel.order\" />\n } @else {\n <span class=\"block text-right tabular-nums\">{{ application.order }}</span>\n }\n </td>\n <td class=\"text-center\">\n @if (application._isEditing && application._editModel; as editModel) {\n <p-toggle-switch [(ngModel)]=\"editModel.enabled\"></p-toggle-switch>\n } @else {\n <p-tag\n [severity]=\"application.enabled ? 'success' : 'danger'\"\n [value]=\"\n (application.enabled ? 'applications.table.yes' : 'applications.table.no') | translate\n \"></p-tag>\n }\n </td>\n <td>\n @if (application._isEditing && application._editModel; as editModel) {\n <p-select\n appendTo=\"body\"\n class=\"w-full min-w-36\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [options]=\"serviceTypeOptions\"\n [(ngModel)]=\"editModel.serviceType\"></p-select>\n } @else {\n {{ serviceTypeLabel(application.serviceType) }}\n }\n </td>\n <td class=\"text-center\">\n <p-tag\n [severity]=\"application.isCurrent ? 'info' : 'secondary'\"\n [value]=\"\n (application.isCurrent ? 'applications.table.yes' : 'applications.table.no') | translate\n \"></p-tag>\n </td>\n <td>\n <div class=\"flex items-center justify-center gap-2\">\n @if (application._isEditing) {\n <p-button\n icon=\"pi pi-check\"\n severity=\"success\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"activeRowAction\"\n [pTooltip]=\"'applications.table.saveTooltip' | translate\"\n (onClick)=\"saveApplication(application)\"></p-button>\n <p-button\n icon=\"pi pi-times\"\n severity=\"secondary\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"activeRowAction\"\n [pTooltip]=\"'applications.table.cancelTooltip' | translate\"\n (onClick)=\"cancelEdit(application)\"></p-button>\n } @else {\n <p-button\n icon=\"pi pi-pencil\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"activeRowAction\"\n [pTooltip]=\"'applications.table.editTooltip' | translate\"\n (onClick)=\"editApplication(application)\"></p-button>\n <p-button\n icon=\"pi pi-trash\"\n severity=\"danger\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [disabled]=\"activeRowAction\"\n [pTooltip]=\"'applications.table.deleteTooltip' | translate\"\n (onClick)=\"deleteApplication(application)\"></p-button>\n }\n </div>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td class=\"py-8 text-center text-surface-500\" colspan=\"10\">\n {{ 'applications.empty' | translate }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n `\n})\nexport class ApplicationsComponent implements OnInit {\n protected readonly globalFilterFields = ['code', 'displayName', 'baseUrl', 'internalBaseUrl', 'icon', 'serviceType'];\n protected get serviceTypeOptions(): {\n label: string;\n value: NonNullable<ApplicationRegistryItemDto['serviceType']>;\n }[] {\n return [\n {\n label: this.t('applications.serviceTypes.service'),\n value: ServiceType.Service\n },\n {\n label: this.t('applications.serviceTypes.application'),\n value: ServiceType.Application\n }\n ];\n }\n protected applications: ApplicationTableItem[] = [];\n protected visibleApplications: ApplicationTableItem[] = [];\n protected globalFilter = '';\n protected loading = false;\n protected activeRowAction = false;\n\n private readonly applicationsApi = inject(ApplicationsApi);\n private readonly msgService = inject(MsgService);\n private readonly l10nService = inject(L10nService);\n private readonly titleService = inject(AppTitleService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly translationsReady: Promise<unknown>;\n private draftApplication: ApplicationTableItem | null = null;\n\n constructor() {\n this.translationsReady = firstValueFrom(this.l10nService.loadComponentTranslations('applications'));\n }\n\n async ngOnInit(): Promise<void> {\n await this.translationsReady;\n this.titleService.setTitle(this.t('applications.title'));\n await this.refreshAction();\n }\n\n protected async refreshAction(): Promise<void> {\n this.loading = true;\n this.cancelAllEdits();\n\n try {\n this.applications = (await this.applicationsApi.getApplicationRegistryItems()).map(\n (application: ApplicationRegistryItemDto) => ({ ...application })\n );\n this.syncVisibleApplications();\n } catch (error) {\n this.applications = [];\n this.syncVisibleApplications();\n this.msgService.error(error);\n } finally {\n this.loading = false;\n }\n }\n\n protected applyGlobalFilter(): void {\n this.visibleApplications = this.filterApplications(this.globalFilter);\n }\n\n protected clearFilters(): void {\n this.globalFilter = '';\n this.syncVisibleApplications();\n }\n\n protected beginCreateApplication(): void {\n this.cancelAllEdits();\n this.draftApplication = {\n code: '',\n displayName: '',\n baseUrl: '',\n internalBaseUrl: '',\n icon: 'pi pi-th-large',\n order: this.getNextOrder(),\n enabled: true,\n serviceType: ServiceType.Service,\n isCurrent: false,\n _isNew: true,\n _isEditing: true,\n _editModel: this.createEditModel()\n };\n this.draftApplication._editModel.order = this.draftApplication.order ?? 0;\n this.syncVisibleApplications();\n }\n\n protected editApplication(application: ApplicationTableItem): void {\n this.cancelAllEdits(application);\n application._isEditing = true;\n application._editModel = this.createEditModel(application);\n this.syncVisibleApplications();\n }\n\n protected cancelEdit(application: ApplicationTableItem): void {\n if (application._isNew) {\n this.draftApplication = null;\n } else {\n application._isEditing = false;\n application._editModel = undefined;\n }\n\n this.syncVisibleApplications();\n }\n\n protected async saveApplication(application: ApplicationTableItem): Promise<void> {\n const editModel = application._editModel;\n if (!editModel) {\n return;\n }\n\n const request = this.normalizeEditModel(editModel);\n if (!request.code || !request.displayName || !request.baseUrl) {\n this.msgService.error(this.t('applications.messages.requiredFields'));\n return;\n }\n\n this.activeRowAction = true;\n\n try {\n if (application._isNew) {\n await this.applicationsApi.createApplicationRegistryItem(request);\n this.draftApplication = null;\n this.msgService.success(this.t('applications.messages.createSuccess'));\n } else {\n await this.applicationsApi.updateApplicationRegistryItem({ code: application.code as string }, request);\n application._isEditing = false;\n application._editModel = undefined;\n this.msgService.success(this.t('applications.messages.updateSuccess'));\n }\n\n await this.refreshAction();\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.activeRowAction = false;\n }\n }\n\n protected async deleteApplication(application: ApplicationTableItem): Promise<void> {\n await this.translationsReady;\n\n if (application._isNew) {\n this.cancelEdit(application);\n return;\n }\n\n if (!application.code) {\n return;\n }\n\n this.confirmationService.confirm({\n header: this.t('applications.confirm.header'),\n message: this.t('applications.confirm.message', { displayName: application.displayName || application.code }),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.t('applications.confirm.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.t('applications.confirm.delete'),\n severity: 'danger'\n },\n accept: async () => {\n this.activeRowAction = true;\n\n try {\n await this.applicationsApi.deleteApplicationRegistryItem({ code: application.code as string });\n this.msgService.success(this.t('applications.messages.deleteSuccess'));\n await this.refreshAction();\n } catch (error) {\n this.msgService.error(error);\n } finally {\n this.activeRowAction = false;\n }\n }\n });\n }\n\n private createEditModel(application?: ApplicationRegistryItemDto): ApplicationEditModel {\n return {\n code: application?.code ?? '',\n displayName: application?.displayName ?? '',\n baseUrl: application?.baseUrl ?? '',\n internalBaseUrl: application?.internalBaseUrl ?? '',\n icon: application?.icon ?? 'pi pi-th-large',\n order: application?.order ?? 0,\n enabled: application?.enabled ?? true,\n serviceType: application?.serviceType ?? ServiceType.Service\n };\n }\n\n private normalizeEditModel(model: ApplicationEditModel): ApplicationRegistryItemDto {\n return {\n code: model.code.trim(),\n displayName: model.displayName.trim(),\n baseUrl: model.baseUrl.trim(),\n internalBaseUrl: model.internalBaseUrl.trim(),\n icon: model.icon.trim(),\n order: Number(model.order) || 0,\n enabled: model.enabled,\n serviceType: model.serviceType\n };\n }\n\n protected serviceTypeLabel(serviceType: ApplicationRegistryItemDto['serviceType']): string {\n return this.t(\n serviceType === ServiceType.Application\n ? 'applications.serviceTypes.application'\n : 'applications.serviceTypes.service'\n );\n }\n\n private cancelAllEdits(exceptApplication?: ApplicationTableItem): void {\n if (!exceptApplication?._isNew) {\n this.draftApplication = null;\n }\n\n for (const application of this.applications) {\n if (application === exceptApplication) {\n continue;\n }\n\n application._isEditing = false;\n application._editModel = undefined;\n }\n }\n\n private syncVisibleApplications(): void {\n this.visibleApplications = this.filterApplications(this.globalFilter);\n }\n\n private filterApplications(filter: string): ApplicationTableItem[] {\n const source = this.draftApplication ? [this.draftApplication, ...this.applications] : [...this.applications];\n const normalizedFilter = filter.trim().toLocaleLowerCase();\n\n if (!normalizedFilter) {\n return source;\n }\n\n return source.filter((application) =>\n this.globalFilterFields.some((field) =>\n String(application[field as keyof ApplicationRegistryItemDto] ?? '')\n .toLocaleLowerCase()\n .includes(normalizedFilter)\n )\n );\n }\n\n private getNextOrder(): number {\n return Math.max(0, ...this.applications.map((application) => application.order ?? 0)) + 1;\n }\n\n private t(key: string, params?: Record<string, unknown>): string {\n return this.l10nService.instant(key, params) as string;\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n AddReactionRequest,\n ApiExceptionResponse,\n AttachmentDto,\n CommentDto,\n CommentHistoryDto,\n CommentReactionDto,\n CreateCommentRequest,\n DeleteAttachmentParams,\n DeleteParams,\n GetAttachmentContentParams,\n GetByIdParams,\n GetByObjectParams,\n GetHistoryParams,\n MentionUserDto,\n RemoveReactionParams,\n SearchMentionUsersParams,\n UpdateCommentRequest,\n UpdateParams,\n UploadAttachmentPayload,\n} from \"./discussion-data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class DiscussionApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getByObject = (query: GetByObjectParams, params: RequestParams = {}) =>\n this.request<CommentDto[], ApiExceptionResponse>({\n path: `/api/discussion/get-by-object`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n getById = (query: GetByIdParams, params: RequestParams = {}) =>\n this.request<CommentDto, ApiExceptionResponse>({\n path: `/api/discussion/get-by-id`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n create = (data: CreateCommentRequest, params: RequestParams = {}) =>\n this.request<CommentDto, ApiExceptionResponse>({\n path: `/api/discussion/create`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n update = (\n { id, ...query }: UpdateParams,\n data: UpdateCommentRequest,\n params: RequestParams = {},\n ) =>\n this.request<CommentDto, ApiExceptionResponse>({\n path: `/api/discussion/update/${id}`,\n method: \"PUT\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n delete = ({ id, ...query }: DeleteParams, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/discussion/delete/${id}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n getHistory = (\n { id, ...query }: GetHistoryParams,\n params: RequestParams = {},\n ) =>\n this.request<CommentHistoryDto[], ApiExceptionResponse>({\n path: `/api/discussion/get-history/${id}`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n uploadAttachment = (\n data: UploadAttachmentPayload,\n params: RequestParams = {},\n ) =>\n this.request<AttachmentDto, ApiExceptionResponse>({\n path: `/api/discussion/upload-attachment`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.FormData,\n format: \"json\",\n ...params,\n });\n deleteAttachment = (\n { id, ...query }: DeleteAttachmentParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/discussion/delete-attachment/${id}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n getAttachmentContent = (\n { id, ...query }: GetAttachmentContentParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/discussion/get-attachment-content/${id}`,\n method: \"GET\",\n secure: true,\n ...params,\n });\n addReaction = (data: AddReactionRequest, params: RequestParams = {}) =>\n this.request<CommentReactionDto[], ApiExceptionResponse>({\n path: `/api/discussion/add-reaction`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n removeReaction = (query: RemoveReactionParams, params: RequestParams = {}) =>\n this.request<CommentReactionDto[], ApiExceptionResponse>({\n path: `/api/discussion/remove-reaction`,\n method: \"DELETE\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n searchMentionUsers = (\n query: SearchMentionUsersParams,\n params: RequestParams = {},\n ) =>\n this.request<MentionUserDto[], ApiExceptionResponse>({\n path: `/api/discussion/search-mention-users`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","export function getInitialsFromString(input: string): string {\n if (!input || input.trim().length === 0) {\n return '';\n }\n\n const words = input.trim().split(/\\s+/);\n\n if (words.length === 1) {\n return words[0].charAt(0).toUpperCase();\n }\n\n const firstInitial = words[0].charAt(0).toUpperCase();\n const lastInitial = words[words.length - 1].charAt(0).toUpperCase();\n\n return firstInitial + lastInitial;\n}\n","import { CommonModule, DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n SecurityContext,\n SimpleChanges,\n inject,\n OnInit\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { ConfirmationService } from 'primeng/api';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { DividerModule } from 'primeng/divider';\nimport { PanelModule } from 'primeng/panel';\nimport { PopoverModule } from 'primeng/popover';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { TagModule } from 'primeng/tag';\nimport { Textarea } from 'primeng/textarea';\nimport {\n AttachmentDto,\n CommentDto,\n CommentHistoryDto,\n CommentReactionDto,\n MentionUserDto\n} from '../../api/discussion-data-contracts';\nimport { DiscussionApi } from '../../api/discussion.api';\nimport { MsgService } from '../../services/msg.service';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { getInitialsFromString } from '../../helpers/avatar.helper';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/discussion.en.json';\nimport ru from './l10n/discussion.ru.json';\n\ntype HistoryState = {\n loading: boolean;\n opened: boolean;\n items: DiscussionHistoryItem[];\n};\n\ntype DiscussionAttachment = Required<AttachmentDto>;\ntype DiscussionReaction = Required<CommentReactionDto>;\ntype DiscussionMentionUser = Required<MentionUserDto>;\ntype DiscussionComment = Omit<CommentDto, 'attachments' | 'reactions' | 'mentions'> & {\n commentId: number;\n content: string;\n authorDisplayName: string;\n authorEmail: string;\n isEdited: boolean;\n historyCount: number;\n canEdit: boolean;\n canDelete: boolean;\n attachments: DiscussionAttachment[];\n reactions: DiscussionReaction[];\n};\ntype DiscussionHistoryItem = Required<CommentHistoryDto>;\n\n@Component({\n selector: 'discussion',\n standalone: true,\n providers: [ConfirmationService, DiscussionApi],\n imports: [\n CommonModule,\n FormsModule,\n AvatarModule,\n ButtonModule,\n CardModule,\n ConfirmDialog,\n DividerModule,\n PanelModule,\n PopoverModule,\n ProgressSpinnerModule,\n TagModule,\n Textarea,\n DatePipe,\n TranslatePipe\n ],\n template: `\n <p-confirmDialog />\n\n <section class=\"flex flex-col gap-4\">\n <p-card class=\"block\">\n <div class=\"flex flex-col gap-4\">\n @if (!previewMode) {\n <textarea\n class=\"min-h-28 w-full\"\n pTextarea\n rows=\"5\"\n [autoResize]=\"true\"\n [placeholder]=\"'discussionComponent.writeCommentPlaceholder' | translate\"\n [(ngModel)]=\"newComment\"\n (ngModelChange)=\"onComposerInput()\"></textarea>\n } @else {\n <div\n class=\"markdown-preview min-h-28 rounded-2xl border border-surface-200 bg-surface-50 px-4 py-3 leading-7 dark:border-surface-700 dark:bg-surface-900/40\"\n [innerHTML]=\"renderMarkdown(newComment)\"></div>\n }\n\n @if (mentionSuggestions.length > 0) {\n <p-panel class=\"block\">\n <ng-template pTemplate=\"header\">\n <div class=\"inline-flex items-center gap-2 text-sm font-medium\">\n <i class=\"pi pi-at\"></i>\n <span>{{ 'discussionComponent.mentionSuggestions' | translate }}</span>\n </div>\n </ng-template>\n\n <div class=\"flex flex-col gap-3\">\n @for (candidate of mentionSuggestions; track candidate.userId) {\n <button\n class=\"flex w-full items-center justify-between gap-4 rounded-xl border border-transparent px-3 py-3 text-left transition hover:border-primary-200 hover:bg-primary-50 dark:hover:border-primary-800 dark:hover:bg-primary-950/30\"\n type=\"button\"\n (click)=\"insertMention(candidate)\">\n <div class=\"min-w-0\">\n <strong>{{ candidate.displayName }}</strong>\n <small class=\"mt-1 block text-surface-500\">{{ candidate.email }}</small>\n </div>\n <i class=\"pi pi-arrow-up-left shrink-0 text-surface-400\"></i>\n </button>\n }\n </div>\n </p-panel>\n }\n\n @if (pendingFiles.length > 0) {\n <div class=\"flex flex-col gap-3\">\n @for (file of pendingFiles; track file.name + file.size) {\n <div\n class=\"flex flex-col gap-3 rounded-2xl border border-surface-200 px-4 py-3 sm:flex-row sm:items-center sm:justify-between dark:border-surface-700\">\n <div class=\"inline-flex items-center gap-2\">\n <i class=\"pi pi-file\"></i>\n <span class=\"break-all\">{{ file.name }}</span>\n <p-tag severity=\"contrast\" [value]=\"formatBytes(file.size)\" />\n </div>\n <p-button\n icon=\"pi pi-times\"\n severity=\"danger\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"removePendingFile(file)\" />\n </div>\n }\n </div>\n }\n\n <div class=\"flex flex-col gap-2 sm:flex-row sm:justify-end\">\n <p-button\n severity=\"secondary\"\n [icon]=\"previewMode ? 'pi pi-pencil' : 'pi pi-eye'\"\n [label]=\"\n previewMode ? ('discussionComponent.edit' | translate) : ('discussionComponent.preview' | translate)\n \"\n [text]=\"true\"\n (onClick)=\"previewMode = !previewMode\" />\n\n <label class=\"file-trigger\">\n <p-button\n icon=\"pi pi-paperclip\"\n severity=\"secondary\"\n [label]=\"'discussionComponent.attachFiles' | translate\"\n [text]=\"true\" />\n <input multiple type=\"file\" (change)=\"onFilesSelected($event)\" />\n </label>\n <p-button\n icon=\"pi pi-send\"\n [disabled]=\"submitting || !newComment.trim()\"\n [label]=\"'discussionComponent.send' | translate\"\n [loading]=\"submitting\"\n (onClick)=\"createComment()\" />\n </div>\n </div>\n </p-card>\n\n @if (loading) {\n <div\n class=\"flex min-h-20 flex-col items-center justify-center gap-3 rounded-2xl border border-surface-200 px-4 py-5 text-surface-500 dark:border-surface-700\">\n <p-progressSpinner strokeWidth=\"4\" />\n <span>{{ 'discussionComponent.loadingComments' | translate }}</span>\n </div>\n } @else if (comments.length === 0) {\n <div\n class=\"flex min-h-20 items-center justify-center gap-3 rounded-2xl border border-surface-200 px-4 py-5 text-surface-500 dark:border-surface-700\">\n <i class=\"pi pi-inbox\"></i>\n <span>{{ 'discussionComponent.noCommentsYet' | translate }}</span>\n </div>\n } @else {\n <div class=\"flex flex-col gap-4\">\n @for (comment of comments; track comment.commentId) {\n <p-card class=\"block\">\n <ng-template pTemplate=\"content\">\n <div class=\"grid gap-4 md:grid-cols-[3.2rem_minmax(0,1fr)]\">\n <div>\n <p-avatar shape=\"circle\" [label]=\"getInitialsFromString(comment.authorDisplayName)\" />\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex flex-row gap-3 justify-between\">\n <div class=\"flex flex-wrap items-center gap-2\">\n <strong>{{ comment.authorDisplayName }}</strong>\n <span class=\"text-sm text-surface-500\">{{\n comment.createdAt | date: layoutService.dateTimeFormat()\n }}</span>\n </div>\n\n <div class=\"flex flex-wrap items-center justify-end gap-2\">\n <div class=\"flex flex-wrap items-center\">\n @if (comment.isEdited) {\n <p-tag\n icon=\"pi pi-pencil\"\n severity=\"warn\"\n [value]=\"'discussionComponent.edited' | translate\" />\n }\n </div>\n @if (comment.canEdit) {\n <p-button\n icon=\"pi pi-pencil\"\n severity=\"secondary\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"startEdit(comment)\" />\n }\n @if (comment.historyCount > 0) {\n <p-button\n icon=\"pi pi-history\"\n severity=\"secondary\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"toggleHistory(comment)\" />\n }\n @if (comment.canDelete) {\n <p-button\n icon=\"pi pi-trash\"\n severity=\"danger\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"deleteComment(comment)\" />\n }\n </div>\n </div>\n @if (editingCommentId === comment.commentId) {\n <div class=\"flex flex-col gap-4\">\n <textarea\n class=\"min-h-24 w-full\"\n pTextarea\n rows=\"4\"\n [autoResize]=\"true\"\n [placeholder]=\"'discussionComponent.editCommentPlaceholder' | translate\"\n [(ngModel)]=\"editContent\"></textarea>\n <div class=\"flex flex-col gap-2 sm:flex-row sm:justify-end\">\n <div>\n <label class=\"file-trigger\">\n <p-button\n icon=\"pi pi-paperclip\"\n severity=\"secondary\"\n [label]=\"'discussionComponent.addAttachment' | translate\"\n [text]=\"true\" />\n <input multiple type=\"file\" (change)=\"onInlineFilesSelected(comment, $event)\" />\n </label>\n </div>\n\n <p-button\n icon=\"pi pi-check\"\n [disabled]=\"!editContent.trim()\"\n [label]=\"'discussionComponent.save' | translate\"\n (onClick)=\"saveEdit(comment)\" />\n <p-button\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [label]=\"'discussionComponent.cancel' | translate\"\n [text]=\"true\"\n (onClick)=\"cancelEdit()\" />\n </div>\n </div>\n } @else {\n <div class=\"markdown-preview\" [innerHTML]=\"renderMarkdown(comment.content)\"></div>\n }\n\n @if (comment.attachments.length > 0) {\n <div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-col gap-3\">\n @for (attachment of comment.attachments; track attachment.attachmentId) {\n <div class=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-end\">\n <div class=\"inline-flex items-center gap-2\">\n <i class=\"pi pi-file\"></i>\n <button\n class=\"break-all bg-transparent p-0 text-left font-semibold text-primary-600 transition hover:text-primary-500\"\n type=\"button\"\n (click)=\"downloadAttachment(attachment)\">\n {{ attachment.fileName }}\n </button>\n <p-tag severity=\"contrast\" [value]=\"formatBytes(attachment.fileSize)\" />\n </div>\n\n @if (comment.canEdit) {\n <p-button\n icon=\"pi pi-times\"\n severity=\"danger\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"deleteAttachment(comment, attachment)\" />\n }\n </div>\n }\n </div>\n </div>\n }\n\n <div class=\"flex flex-wrap items-center gap-2\">\n @for (reaction of getReactions(comment); track reaction.emojiCode) {\n <p-button\n severity=\"secondary\"\n [label]=\"reaction.emojiCode + ' ' + reaction.count\"\n [outlined]=\"false\"\n (onClick)=\"toggleReaction(comment, reaction)\" />\n }\n\n @if (!hasUserReaction(comment)) {\n <p-button\n icon=\"pi pi-face-smile\"\n severity=\"secondary\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"reactionPopover.toggle($event)\" />\n <p-popover #reactionPopover>\n <div class=\"emoji-popover\">\n @for (emoji of emojiPalette; track emoji) {\n <button\n class=\"emoji-option\"\n type=\"button\"\n (click)=\"reactWithEmoji(comment, emoji, reactionPopover)\">\n {{ emoji }}\n </button>\n }\n </div>\n </p-popover>\n }\n </div>\n\n @if (historyByComment[comment.commentId]?.opened) {\n <p-panel class=\"block\" [collapsed]=\"false\" [toggleable]=\"true\">\n <ng-template pTemplate=\"header\">\n <div class=\"inline-flex items-center gap-2 text-sm font-medium\">\n <i class=\"pi pi-history\"></i>\n <span>{{ 'discussionComponent.editHistory' | translate }}</span>\n </div>\n </ng-template>\n\n @if (historyByComment[comment.commentId]?.loading) {\n <div class=\"flex items-center gap-3 text-surface-500\">\n <p-progressSpinner strokeWidth=\"4\" />\n <span>{{ 'discussionComponent.loadingHistory' | translate }}</span>\n </div>\n } @else {\n <div class=\"flex flex-col gap-4\">\n @for (\n item of historyByComment[comment.commentId]?.items ?? [];\n track item.commentEditHistoryId\n ) {\n <div class=\"rounded-2xl border border-surface-200 px-4 py-4 dark:border-surface-700\">\n <div class=\"mb-3 inline-flex items-center gap-2 text-sm font-semibold\">\n <i class=\"pi pi-clock\"></i>\n <span>{{ item.editedByDisplayName }} · {{ item.editedAt | date: 'short' }}</span>\n </div>\n <div class=\"grid gap-4 lg:grid-cols-2\">\n <div class=\"flex flex-col gap-2\">\n <p-tag severity=\"secondary\" [value]=\"'discussionComponent.before' | translate\" />\n <div\n class=\"history-markdown rounded-2xl bg-surface-50 px-4 py-3 leading-7 dark:bg-surface-900/40\"\n [innerHTML]=\"renderMarkdown(item.oldContent)\"></div>\n </div>\n <div class=\"flex flex-col gap-2\">\n <p-tag severity=\"success\" [value]=\"'discussionComponent.after' | translate\" />\n <div\n class=\"history-markdown rounded-2xl bg-surface-50 px-4 py-3 leading-7 dark:bg-surface-900/40\"\n [innerHTML]=\"renderMarkdown(item.newContent)\"></div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n </p-panel>\n }\n </div>\n </div>\n </ng-template>\n </p-card>\n }\n </div>\n }\n </section>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .file-trigger {\n position: relative;\n display: inline-flex;\n }\n\n .file-trigger input {\n position: absolute;\n inset: 0;\n opacity: 0;\n cursor: pointer;\n }\n\n .markdown-preview,\n .history-markdown {\n word-break: break-word;\n }\n\n .markdown-preview :is(h1, h2, h3),\n .history-markdown :is(h1, h2, h3) {\n margin: 0 0 0.75rem;\n font-weight: 600;\n }\n\n .markdown-preview a,\n .history-markdown a {\n color: #2563eb;\n text-decoration: underline;\n text-underline-offset: 0.18em;\n }\n\n .emoji-popover {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n max-width: 16rem;\n }\n\n .emoji-option {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n font-size: 1.25rem;\n cursor: pointer;\n }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DiscussionComponent implements OnChanges, OnDestroy, OnInit {\n private readonly msgService = inject(MsgService);\n private readonly translations = provideTranslations({ en, ru });\n\n private readonly discussionApi = inject(DiscussionApi);\n private readonly sanitizer = inject(DomSanitizer);\n private readonly translateService = inject(TranslateService);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly confirmationService = inject(ConfirmationService);\n protected readonly layoutService = inject(LayoutService);\n\n @Input({ required: true }) objectTypeId = 1;\n @Input({ required: true }) objectId = 1;\n\n comments: DiscussionComment[] = [];\n loading = false;\n submitting = false;\n previewMode = false;\n newComment = '';\n editContent = '';\n editingCommentId: number | null = null;\n pendingFiles: File[] = [];\n mentionSuggestions: DiscussionMentionUser[] = [];\n historyByComment: Record<number, HistoryState> = {};\n emojiPalette = ['👍', '👎', '🐳', '🍆', '🍑'];\n private mentionSearchTimer: ReturnType<typeof setTimeout> | null = null;\n\n ngOnChanges(changes: SimpleChanges): void {\n if ((changes['objectTypeId'] || changes['objectId']) && this.objectTypeId && this.objectId) {\n this.loadComments().then();\n }\n }\n\n async ngOnInit() {\n await this.loadComments();\n }\n\n ngOnDestroy(): void {\n if (this.mentionSearchTimer) {\n clearTimeout(this.mentionSearchTimer);\n }\n }\n\n async loadComments(): Promise<void> {\n if (!this.objectTypeId || !this.objectId) {\n return;\n }\n\n this.loading = true;\n this.cdr.markForCheck();\n\n try {\n const items = await this.discussionApi.getByObject({\n objectTypeId: this.objectTypeId,\n objectId: this.objectId,\n skip: 0,\n take: 50\n });\n this.comments = items.map((item) => this.normalizeComment(item));\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.loadComments')\n );\n } finally {\n this.loading = false;\n this.cdr.markForCheck();\n }\n }\n\n async createComment(): Promise<void> {\n const content = this.newComment.trim();\n if (!content) {\n return;\n }\n\n this.submitting = true;\n this.cdr.markForCheck();\n\n try {\n const created = await this.discussionApi.create({\n objectTypeId: this.objectTypeId,\n objectId: this.objectId,\n content\n });\n\n if (this.pendingFiles.length > 0) {\n for (const file of this.pendingFiles) {\n await this.discussionApi.uploadAttachment({\n CommentId: created.commentId as number,\n File: file\n });\n }\n }\n\n this.newComment = '';\n this.pendingFiles = [];\n this.previewMode = false;\n this.mentionSuggestions = [];\n await this.loadComments();\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.createComment')\n );\n } finally {\n this.submitting = false;\n this.cdr.markForCheck();\n }\n }\n\n startEdit(comment: DiscussionComment): void {\n this.editingCommentId = comment.commentId;\n this.editContent = comment.content;\n }\n\n cancelEdit(): void {\n this.editingCommentId = null;\n this.editContent = '';\n }\n\n async saveEdit(comment: DiscussionComment): Promise<void> {\n try {\n const updated = await this.discussionApi.update({ id: comment.commentId }, { content: this.editContent.trim() });\n this.comments = this.comments.map((item) =>\n item.commentId === comment.commentId ? this.normalizeComment(updated) : item\n );\n this.cancelEdit();\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.updateComment')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n deleteComment(comment: DiscussionComment): void {\n this.confirmationService.confirm({\n header: this.translateService.instant('discussionComponent.warning'),\n message: this.translateService.instant('discussionComponent.confirmDeleteComment'),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.translateService.instant('discussionComponent.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('discussionComponent.delete'),\n severity: 'danger'\n },\n accept: async () => {\n await this.performDeleteComment(comment);\n }\n });\n }\n\n async toggleHistory(comment: DiscussionComment): Promise<void> {\n const current = this.historyByComment[comment.commentId];\n if (current?.opened) {\n this.historyByComment[comment.commentId] = { ...current, opened: false };\n return;\n }\n\n this.historyByComment[comment.commentId] = {\n opened: true,\n loading: true,\n items: current?.items ?? []\n };\n this.cdr.markForCheck();\n\n try {\n const items = await this.discussionApi.getHistory({ id: comment.commentId });\n this.historyByComment[comment.commentId] = {\n opened: true,\n loading: false,\n items: items.map((item) => this.normalizeHistoryItem(item))\n };\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.loadEditHistory')\n );\n this.historyByComment[comment.commentId] = {\n opened: false,\n loading: false,\n items: []\n };\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n onFilesSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.pendingFiles = [...this.pendingFiles, ...Array.from(input.files ?? [])];\n input.value = '';\n }\n\n removePendingFile(file: File): void {\n this.pendingFiles = this.pendingFiles.filter((item) => item !== file);\n }\n\n async onInlineFilesSelected(comment: DiscussionComment, event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files ?? []);\n input.value = '';\n\n try {\n for (const file of files) {\n await this.discussionApi.uploadAttachment({\n CommentId: comment.commentId,\n File: file\n });\n }\n await this.loadComments();\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.uploadAttachment')\n );\n this.cdr.markForCheck();\n }\n }\n\n deleteAttachment(comment: DiscussionComment, attachment: DiscussionAttachment): void {\n this.confirmationService.confirm({\n header: this.translateService.instant('discussionComponent.warning'),\n message: this.translateService.instant('discussionComponent.confirmDeleteFile', {\n fileName: attachment.fileName\n }),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.translateService.instant('discussionComponent.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('discussionComponent.delete'),\n severity: 'danger'\n },\n accept: async () => {\n await this.performDeleteAttachment(comment, attachment);\n }\n });\n }\n\n private async performDeleteComment(comment: DiscussionComment): Promise<void> {\n try {\n await this.discussionApi.delete({ id: comment.commentId });\n this.comments = this.comments.filter((item) => item.commentId !== comment.commentId);\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.deleteComment')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n private async performDeleteAttachment(comment: DiscussionComment, attachment: DiscussionAttachment): Promise<void> {\n try {\n await this.discussionApi.deleteAttachment({ id: attachment.attachmentId });\n this.comments = this.comments.map((item) =>\n item.commentId === comment.commentId\n ? { ...item, attachments: item.attachments.filter((entry) => entry.attachmentId !== attachment.attachmentId) }\n : item\n );\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.deleteAttachment')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n async downloadAttachment(attachment: DiscussionAttachment): Promise<void> {\n try {\n const blob = (await this.discussionApi.getAttachmentContent(\n { id: attachment.attachmentId },\n { format: 'blob' }\n )) as unknown as Blob;\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = attachment.fileName;\n link.click();\n URL.revokeObjectURL(url);\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.downloadAttachment')\n );\n this.cdr.markForCheck();\n }\n }\n\n async toggleReaction(comment: DiscussionComment, reaction: DiscussionReaction): Promise<void> {\n try {\n const reactions = reaction.reactedByCurrentUser\n ? await this.discussionApi.removeReaction({ commentId: comment.commentId, emojiCode: reaction.emojiCode })\n : await this.discussionApi.addReaction({ commentId: comment.commentId, emojiCode: reaction.emojiCode });\n this.applyReactions(\n comment.commentId,\n reactions.map((item) => this.normalizeReaction(item))\n );\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.updateReaction')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n async reactWithEmoji(comment: DiscussionComment, emojiCode: string, popover?: { hide: () => void }): Promise<void> {\n try {\n const reactions = await this.discussionApi.addReaction({ commentId: comment.commentId, emojiCode });\n this.applyReactions(\n comment.commentId,\n reactions.map((item) => this.normalizeReaction(item))\n );\n popover?.hide();\n } catch (error) {\n this.msgService.errorFromException(\n error,\n this.translateService.instant('discussionComponent.errors.addReaction')\n );\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n onComposerInput(): void {\n if (this.mentionSearchTimer) {\n clearTimeout(this.mentionSearchTimer);\n }\n\n const token = this.extractMentionQuery(this.newComment);\n if (!token || token.length < 2) {\n this.mentionSuggestions = [];\n this.cdr.markForCheck();\n return;\n }\n\n this.mentionSearchTimer = setTimeout(async () => {\n try {\n const users = await this.discussionApi.searchMentionUsers({ term: token });\n this.mentionSuggestions = users.map((item) => this.normalizeMentionUser(item));\n } catch {\n this.mentionSuggestions = [];\n } finally {\n this.cdr.markForCheck();\n }\n }, 250);\n }\n\n insertMention(candidate: DiscussionMentionUser): void {\n const query = this.extractMentionQuery(this.newComment);\n if (!query) {\n return;\n }\n\n this.newComment = this.newComment.replace(/@[\\w.+\\-@]*$/, `@${candidate.email} `);\n this.mentionSuggestions = [];\n }\n\n renderMarkdown(markdown: string): string {\n const escaped = markdown.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n\n const html = escaped\n .replace(/^### (.*)$/gm, '<h3>$1</h3>')\n .replace(/^## (.*)$/gm, '<h2>$1</h2>')\n .replace(/^# (.*)$/gm, '<h1>$1</h1>')\n .replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\n .replace(/\\*(.+?)\\*/g, '<em>$1</em>')\n .replace(/`(.+?)`/g, '<code>$1</code>')\n .replace(/\\[([^\\]]+)\\]\\((https?:\\/\\/[^\\s]+)\\)/g, '<a href=\"$2\" target=\"_blank\" rel=\"noopener\">$1</a>')\n .replace(/(^|\\s)@([A-Za-z0-9._+\\-@]+)/g, '$1<span class=\"mention-token\">@$2</span>')\n .replace(/\\n/g, '<br>');\n\n return this.sanitizer.sanitize(SecurityContext.HTML, html) ?? '';\n }\n\n formatBytes(value: number): string {\n if (value < 1024) {\n return `${value} ${this.translateService.instant('discussionComponent.units.bytes')}`;\n }\n if (value < 1024 * 1024) {\n return `${(value / 1024).toFixed(1)} ${this.translateService.instant('discussionComponent.units.kilobytes')}`;\n }\n return `${(value / (1024 * 1024)).toFixed(1)} ${this.translateService.instant('discussionComponent.units.megabytes')}`;\n }\n\n hasUserReaction(comment: DiscussionComment): boolean {\n return comment.reactions.some((reaction) => reaction.reactedByCurrentUser);\n }\n\n getReactions(comment: DiscussionComment): DiscussionReaction[] {\n return comment.reactions;\n }\n\n private applyReactions(commentId: number, reactions: DiscussionReaction[]): void {\n this.comments = this.comments.map((item) => (item.commentId === commentId ? { ...item, reactions } : item));\n }\n\n private normalizeComment(comment: CommentDto): DiscussionComment {\n return {\n ...comment,\n commentId: comment.commentId ?? 0,\n content: comment.content ?? '',\n authorDisplayName: comment.authorDisplayName ?? '',\n authorEmail: comment.authorEmail ?? '',\n isEdited: comment.isEdited ?? false,\n historyCount: comment.historyCount ?? 0,\n canEdit: comment.canEdit ?? false,\n canDelete: comment.canDelete ?? false,\n attachments: (comment.attachments ?? []).map((item) => this.normalizeAttachment(item)),\n reactions: (comment.reactions ?? []).map((item) => this.normalizeReaction(item))\n };\n }\n\n private normalizeAttachment(attachment: AttachmentDto): DiscussionAttachment {\n return {\n attachmentId: attachment.attachmentId ?? 0,\n fileName: attachment.fileName ?? '',\n fileType: attachment.fileType ?? '',\n fileSize: attachment.fileSize ?? 0,\n uploadedAt: attachment.uploadedAt ?? new Date(0),\n storageFileId: attachment.storageFileId ?? '',\n downloadUrl: attachment.downloadUrl ?? ''\n };\n }\n\n private normalizeReaction(reaction: CommentReactionDto): DiscussionReaction {\n return {\n emojiCode: reaction.emojiCode ?? '',\n count: reaction.count ?? 0,\n reactedByCurrentUser: reaction.reactedByCurrentUser ?? false\n };\n }\n\n private normalizeMentionUser(user: MentionUserDto): DiscussionMentionUser {\n return {\n userId: user.userId ?? 0,\n displayName: user.displayName ?? '',\n email: user.email ?? ''\n };\n }\n\n private normalizeHistoryItem(item: CommentHistoryDto): DiscussionHistoryItem {\n return {\n commentEditHistoryId: item.commentEditHistoryId ?? 0,\n oldContent: item.oldContent ?? '',\n newContent: item.newContent ?? '',\n editedByUserId: item.editedByUserId ?? 0,\n editedByDisplayName: item.editedByDisplayName ?? '',\n editedAt: item.editedAt ?? new Date(0)\n };\n }\n\n private extractMentionQuery(value: string): string | null {\n const match = value.match(/@([A-Za-z0-9._+\\-@]*)$/);\n return match?.[1] ?? null;\n }\n\n protected readonly getInitialsFromString = getInitialsFromString;\n}\n","import { Component, ElementRef, inject, OnDestroy, OnInit, Renderer2, ViewChild } from '@angular/core';\nimport { BaseModuleComponent } from '../base-module/base-module.component';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { InputText } from 'primeng/inputtext';\nimport { FormsModule } from '@angular/forms';\nimport { Button } from 'primeng/button';\nimport { SecurityComponent } from '../security/security.component';\nimport { IframeModuleSettings } from '../../api/data-contracts';\nimport { provideTranslations } from '../../helpers/l10n.helper';\nimport en from './l10n/iframe-module.en.json';\nimport ru from './l10n/iframe-module.ru.json';\n\n@Component({\n standalone: true,\n imports: [SecurityComponent, TranslatePipe, InputText, FormsModule, Button],\n template: `\n @if (isContent) {\n <iframe\n #iframe\n class=\"w-full h-screen\"\n style=\"background-color: var(--surface-ground)\"\n title=\"Main iframe\"\n (error)=\"onIframeError()\">\n </iframe>\n } @else if (isSettings) {\n <div class=\"flex flex-col md:flex-row gap-8\">\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'baseComponent.settings' | translate }}</div>\n <div class=\"col-span-30 md:col-span-10 w-full\">\n <input\n class=\"w-full\"\n pInputText\n placeholder=\"{{ 'iframe-module.iframeModule.urlPlaceholder' | translate }}\"\n qa-id=\"iframe-module-settings-site-url-input\"\n type=\"text\"\n [(ngModel)]=\"settings.url\" />\n </div>\n <div class=\"flex justify-end\">\n <p-button\n icon=\"pi pi-save\"\n label=\"{{ 'iframe-module.iframeModule.settingSaveButtonLabel' | translate }}\"\n qa-id=\"iframe-module-settings-save-button\"\n (onClick)=\"saveSettings(settings)\">\n </p-button>\n </div>\n </div>\n </div>\n </div>\n } @else if (isSecurity) {\n <security [controller]=\"controller\" [id]=\"id\" />\n }\n `\n})\nexport class IframeModuleComponent\n extends BaseModuleComponent<IframeModuleSettings, IframeModuleSettings>\n implements OnInit, OnDestroy\n{\n private readonly translations = provideTranslations({ en, ru });\n\n private iframe?: ElementRef<HTMLIFrameElement>;\n private readonly renderer = inject(Renderer2);\n private readonly translate = inject(TranslateService);\n\n protected iframeUrl: string | null = null;\n\n constructor() {\n super();\n }\n\n @ViewChild('iframe')\n private set iframeElement(element: ElementRef<HTMLIFrameElement> | undefined) {\n this.iframe = element;\n this.updateIframeSrc();\n }\n\n private setIframeUrl(url: string | null | undefined): void {\n const iframeUrl = url?.trim();\n\n if (!iframeUrl) {\n this.iframeUrl = null;\n this.updateIframeSrc();\n const message: string = this.translate.instant('iframe-module.iframeModule.emptyUrlMessage');\n this.msgService.warn(message);\n return;\n }\n\n if (!this.isAllowedIframeUrl(iframeUrl)) {\n this.iframeUrl = null;\n this.updateIframeSrc();\n const message: string = this.translate.instant('iframe-module.iframeModule.siteLoadingMessage');\n this.msgService.error(message);\n return;\n }\n\n this.iframeUrl = iframeUrl;\n this.updateIframeSrc();\n }\n\n private isAllowedIframeUrl(url: string): boolean {\n try {\n const parsedUrl = new URL(url, window.location.origin);\n\n return parsedUrl.protocol === 'http:' || parsedUrl.protocol === 'https:';\n } catch {\n return false;\n }\n }\n\n protected override async onModuleInstanceChange(): Promise<void> {\n this.setIframeUrl(this.settings.url);\n }\n\n private updateIframeSrc(): void {\n if (!this.iframe) {\n return;\n }\n\n if (!this.iframeUrl) {\n this.renderer.removeAttribute(this.iframe.nativeElement, 'src');\n return;\n }\n\n this.renderer.setAttribute(this.iframe.nativeElement, 'src', this.iframeUrl);\n }\n\n onIframeError() {\n const errorMessage = this.translate.instant('iframe-module.iframeModule.siteLoadingMessage');\n this.msgService.error(errorMessage);\n }\n}\n","import { OipExtensionHostContext, OipExtensionNavigateEvent, OipExtensionNotifyEvent } from './extension-host.types';\n\nexport const OIP_EXTENSION_EVENTS = {\n contextChange: 'oip:context-change',\n titleChange: 'oip:title-change',\n settingsChange: 'oip:settings-change',\n notify: 'oip:notify',\n navigate: 'oip:navigate',\n error: 'oip:error'\n} as const;\n\nexport function emitOipTitleChange(element: HTMLElement, title: string): void {\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.titleChange, { detail: title, bubbles: true }));\n}\n\nexport function emitOipSettingsChange(element: HTMLElement, settings: unknown): void {\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.settingsChange, { detail: settings, bubbles: true }));\n}\n\nexport function emitOipNotify(element: HTMLElement, notification: OipExtensionNotifyEvent): void {\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.notify, { detail: notification, bubbles: true }));\n}\n\nexport function emitOipNavigate(element: HTMLElement, navigation: OipExtensionNavigateEvent): void {\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.navigate, { detail: navigation, bubbles: true }));\n}\n\nexport function emitOipError(element: HTMLElement, error: unknown): void {\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.error, { detail: error, bubbles: true }));\n}\n\nexport function emitOipContextChange(element: HTMLElement, context: OipExtensionHostContext): void {\n element.dispatchEvent(new CustomEvent(OIP_EXTENSION_EVENTS.contextChange, { detail: context }));\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ExtensionLoaderService {\n private readonly loadedScripts = new Map<string, Promise<void>>();\n\n loadScript(scriptUrl: string): Promise<void> {\n const existing = this.loadedScripts.get(scriptUrl);\n if (existing) {\n return existing;\n }\n\n const loadPromise = new Promise<void>((resolve, reject) => {\n const script = document.createElement('script');\n script.type = 'module';\n script.src = scriptUrl;\n script.async = true;\n script.onload = () => resolve();\n script.onerror = () => {\n this.loadedScripts.delete(scriptUrl);\n reject(new Error(`Extension script could not be loaded: ${scriptUrl}`));\n };\n\n document.head.appendChild(script);\n });\n\n this.loadedScripts.set(scriptUrl, loadPromise);\n return loadPromise;\n }\n}\n","import { ChangeDetectorRef, Component, ElementRef, inject, OnDestroy, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SecurityComponent } from '../security/security.component';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Button } from 'primeng/button';\nimport { firstValueFrom } from 'rxjs';\nimport { ExtensionModulesApi } from '../../api/extension-modules.api';\nimport { BaseModuleComponent } from '../base-module/base-module.component';\nimport { ExtensionLoaderService } from '../../extension-host/extension-loader.service';\nimport { Router } from '@angular/router';\nimport {\n OipExtensionHostContext,\n OipExtensionModuleMetadata,\n OipExtensionNavigateEvent,\n OipExtensionNotifyEvent\n} from '../../extension-host/extension-host.types';\nimport { emitOipContextChange, OIP_EXTENSION_EVENTS } from '../../extension-host/extension-host.events';\n\n@Component({\n standalone: true,\n imports: [CommonModule, SecurityComponent, TranslatePipe, Button],\n providers: [ExtensionModulesApi],\n template: `\n @if (showContent) {\n <div class=\"min-h-[calc(100vh-10rem)] w-full\">\n @if (loadError) {\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ loadError }}</div>\n <p-button icon=\"pi pi-refresh\" label=\"Retry\" (onClick)=\"reloadExtension()\"></p-button>\n </div>\n } @else {\n <div #extensionContainer class=\"w-full\"></div>\n }\n </div>\n } @else if (showSettings) {\n <div class=\"flex flex-col md:flex-row gap-8\">\n <div class=\"md:w-1/2\">\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ 'baseComponent.settings' | translate }}</div>\n <p-button icon=\"pi pi-save\" label=\"Save\" (onClick)=\"saveSettings(settings)\"></p-button>\n </div>\n </div>\n </div>\n } @else if (showSecurity) {\n <security [controller]=\"controller\" [id]=\"id\" />\n }\n `\n})\nexport class CustomElementExtensionModuleHostComponent\n extends BaseModuleComponent<unknown, unknown>\n implements OnDestroy\n{\n @ViewChild('extensionContainer')\n private set extensionContainer(element: ElementRef<HTMLElement> | undefined) {\n this.container = element;\n this.queueRenderExtension();\n }\n\n private readonly extensionLoader = inject(ExtensionLoaderService);\n private readonly router = inject(Router);\n private readonly hostChangeDetectorRef = inject(ChangeDetectorRef);\n private readonly extensionModulesApi = inject(ExtensionModulesApi);\n private container?: ElementRef<HTMLElement>;\n private extensionElement?: HTMLElement;\n private extensionMetadata?: OipExtensionModuleMetadata;\n private removeListeners: Array<() => void> = [];\n private renderQueued = false;\n private activeTabSyncQueued = false;\n private activeTabId = this.getCurrentActiveTabId();\n private destroyed = false;\n\n protected loadError: string | null = null;\n\n protected get showContent(): boolean {\n return this.isActiveTab('content');\n }\n\n protected get showSettings(): boolean {\n return this.isActiveTab('settings');\n }\n\n protected get showSecurity(): boolean {\n return this.isActiveTab('security');\n }\n\n private get extensionKey(): string {\n return this.route.snapshot.paramMap.get('extensionKey') ?? '';\n }\n\n constructor() {\n super();\n this.subscriptions.push(\n this.topBarService.activeId$.subscribe(() => {\n this.queueActiveTabSync();\n })\n );\n }\n\n protected override async onModuleInstanceChange(): Promise<void> {\n await this.loadExtensionMetadata();\n await this.renderExtension();\n }\n\n protected override onSecurityRightsChange(): void {\n this.updateExtensionContext();\n }\n\n override ngOnDestroy(): void {\n this.destroyed = true;\n this.destroyExtensionElement();\n super.ngOnDestroy();\n }\n\n async reloadExtension(): Promise<void> {\n this.loadError = null;\n this.extensionMetadata = undefined;\n await this.moduleLoadingService.track(this.loadExtensionMetadata());\n await this.renderExtension();\n }\n\n private async loadExtensionMetadata(): Promise<void> {\n if (this.extensionMetadata) {\n return;\n }\n\n if (!this.extensionKey) {\n this.loadError = 'Extension key is missing.';\n return;\n }\n\n this.extensionMetadata = (await this.extensionModulesApi.getExtensionModuleByKey({\n extensionKey: this.extensionKey\n })) as unknown as OipExtensionModuleMetadata;\n\n await this.loadExtensionTranslations(this.extensionMetadata);\n }\n\n /** Blocks the UI while the extension is (re)mounted, including the queued render after the view init. */\n private renderExtension(): Promise<void> {\n return this.moduleLoadingService.track(this.renderExtensionInternal());\n }\n\n private async renderExtensionInternal(): Promise<void> {\n if (this.destroyed || !this.container || !this.extensionMetadata || !this.showContent) {\n return;\n }\n\n try {\n this.loadError = null;\n this.destroyExtensionElement();\n await this.renderCustomElementExtension(this.extensionMetadata);\n } catch (error) {\n this.loadError = error instanceof Error ? error.message : 'Extension could not be loaded.';\n this.msgService.error(error);\n }\n }\n\n private queueRenderExtension(): void {\n if (this.renderQueued) {\n return;\n }\n this.renderQueued = true;\n queueMicrotask(() => {\n this.renderQueued = false;\n void this.renderExtension();\n });\n }\n\n private isActiveTab(id: string): boolean {\n return this.activeTabId === id;\n }\n\n private queueActiveTabSync(): void {\n const nextActiveTabId = this.getCurrentActiveTabId();\n if (this.activeTabId === nextActiveTabId || this.activeTabSyncQueued) {\n return;\n }\n\n this.activeTabSyncQueued = true;\n queueMicrotask(() => {\n this.activeTabSyncQueued = false;\n if (this.destroyed) {\n return;\n }\n\n this.activeTabId = this.getCurrentActiveTabId();\n this.hostChangeDetectorRef.detectChanges();\n\n if (this.showContent) {\n this.queueRenderExtension();\n } else {\n this.destroyExtensionElement();\n }\n });\n }\n\n private getCurrentActiveTabId(): string {\n return this.topBarService.activeTopBarItem?.id ?? 'content';\n }\n\n private updateExtensionContext(): void {\n if (!this.extensionElement || !this.extensionMetadata?.extensionKey) {\n return;\n }\n\n const context: OipExtensionHostContext = {\n moduleInstanceId: this.id,\n extensionKey: this.extensionMetadata.extensionKey,\n apiBasePath: this.buildUrl(`api/extensions/${this.extensionMetadata.extensionKey}`),\n settings: this.settings,\n locale: this.layoutService.language(),\n theme: this.layoutService.layoutConfig(),\n user: this.securityService.getCurrentUser(),\n activeTabId: this.topBarService.activeId ?? 'content',\n permissions: {\n canRead: this.canRead,\n canEdit: this.canEdit,\n canDelete: this.canDelete\n }\n };\n\n Object.assign(this.extensionElement, { oipContext: context });\n emitOipContextChange(this.extensionElement, context);\n }\n\n private attachListeners(element: HTMLElement): void {\n this.addListener(element, OIP_EXTENSION_EVENTS.titleChange, (event) => {\n const title = (event as CustomEvent<string>).detail;\n if (title) {\n this.appTitleService.setTitle(title);\n }\n });\n\n this.addListener(element, OIP_EXTENSION_EVENTS.settingsChange, (event) => {\n this.settings = (event as CustomEvent<unknown>).detail;\n void this.saveSettings(this.settings);\n });\n\n this.addListener(element, OIP_EXTENSION_EVENTS.notify, (event) => {\n const detail = (event as CustomEvent<OipExtensionNotifyEvent>).detail;\n const severity = detail?.severity ?? 'info';\n const message = detail?.detail ?? detail?.summary ?? '';\n switch (severity) {\n case 'success':\n this.msgService.success(message, detail?.summary);\n break;\n case 'warn':\n this.msgService.warn(message, detail?.summary);\n break;\n case 'error':\n this.msgService.error(message, detail?.summary);\n break;\n default:\n this.msgService.info(message, detail?.summary);\n }\n });\n\n this.addListener(element, OIP_EXTENSION_EVENTS.navigate, (event) => {\n const detail = (event as CustomEvent<OipExtensionNavigateEvent>).detail;\n if (detail?.commands) {\n void this.router.navigate(detail.commands as any[]);\n } else if (detail?.url) {\n void this.router.navigateByUrl(detail.url);\n }\n });\n\n this.addListener(element, OIP_EXTENSION_EVENTS.error, (event) => {\n this.msgService.error((event as CustomEvent<unknown>).detail);\n });\n }\n\n private buildUrl(path: string): string {\n const baseUrl = document.getElementsByTagName('base')[0]?.href ?? `${window.location.origin}/`;\n return `${baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`}${path}`;\n }\n\n private async loadExtensionTranslations(metadata: OipExtensionModuleMetadata): Promise<void> {\n const extensionKey = metadata.extensionKey ?? this.extensionKey;\n const apiBaseUrl = metadata.apiBaseUrl;\n if (!extensionKey || !apiBaseUrl) {\n return;\n }\n\n const lang = this.translateService.currentLang || this.layoutService.language() || 'en';\n const url = this.buildExtensionI18nUrl(apiBaseUrl, extensionKey, lang);\n try {\n await firstValueFrom(this.l10nService.loadTranslationsFromUrl(extensionKey, url, lang));\n } catch (error) {\n console.error(`No translations found for extension ${extensionKey}.${lang}.json`, error);\n }\n }\n\n private buildExtensionI18nUrl(apiBaseUrl: string, extensionKey: string, lang: string): string {\n return `${apiBaseUrl.replace(/\\/+$/, '')}/assets/i18n/${encodeURIComponent(extensionKey)}.${encodeURIComponent(lang)}.json`;\n }\n\n private addListener(element: HTMLElement, eventName: string, listener: EventListener): void {\n element.addEventListener(eventName, listener);\n this.removeListeners.push(() => element.removeEventListener(eventName, listener));\n }\n\n private destroyExtensionElement(): void {\n this.removeListeners.forEach((remove) => remove());\n this.removeListeners = [];\n this.extensionElement?.remove();\n this.extensionElement = undefined;\n }\n\n private async renderCustomElementExtension(metadata: OipExtensionModuleMetadata): Promise<void> {\n const { elementName, scriptUrl } = metadata;\n if (!this.container || !elementName || !scriptUrl) {\n this.loadError = 'Custom Element extension metadata is incomplete.';\n return;\n }\n\n await this.extensionLoader.loadScript(scriptUrl);\n await customElements.whenDefined(elementName);\n const element = document.createElement(elementName);\n this.extensionElement = element;\n this.attachListeners(element);\n this.container.nativeElement.appendChild(element);\n this.updateExtensionContext();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ComponentRef,\n EnvironmentInjector,\n inject,\n Injector,\n OnDestroy,\n Type,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { loadRemoteModule } from '@angular-architects/module-federation';\nimport { Button } from 'primeng/button';\nimport { firstValueFrom } from 'rxjs';\nimport { BaseModuleComponent } from '../base-module/base-module.component';\nimport { emitOipContextChange } from '../../extension-host/extension-host.events';\nimport { ExtensionModulesApi } from '../../api/extension-modules.api';\nimport { OipExtensionHostContext, OipExtensionModuleMetadata } from '../../extension-host/extension-host.types';\nimport { CustomElementExtensionModuleHostComponent } from '../custom-element-extension-module-host/custom-element-extension-module-host.component';\n\n@Component({\n standalone: true,\n imports: [CommonModule, Button],\n providers: [ExtensionModulesApi],\n template: `\n @if (loadError) {\n <div class=\"card flex flex-col gap-4\">\n <div class=\"font-semibold text-xl\">{{ loadError }}</div>\n <p-button icon=\"pi pi-refresh\" label=\"Retry\" (onClick)=\"reloadExtension()\"></p-button>\n </div>\n } @else {\n <ng-container #extensionContainer></ng-container>\n }\n `\n})\nexport class ExtensionModuleHostComponent extends BaseModuleComponent<unknown, unknown> implements OnDestroy {\n @ViewChild('extensionContainer', { read: ViewContainerRef })\n private set extensionViewContainer(viewContainer: ViewContainerRef | undefined) {\n this.viewContainer = viewContainer;\n this.queueRenderExtension();\n }\n\n private readonly injector = inject(Injector);\n private readonly environmentInjector = inject(EnvironmentInjector);\n private readonly extensionModulesApi = inject(ExtensionModulesApi);\n private viewContainer?: ViewContainerRef;\n private extensionComponent?: ComponentRef<unknown>;\n private extensionElement?: HTMLElement;\n private extensionMetadata?: OipExtensionModuleMetadata;\n private renderQueued = false;\n private destroyed = false;\n\n protected loadError: string | null = null;\n\n private get extensionKey(): string {\n return this.route.snapshot.paramMap.get('extensionKey') ?? '';\n }\n\n constructor() {\n super();\n this.subscriptions.push(\n this.topBarService.activeId$.subscribe(() => {\n this.updateExtensionContext();\n })\n );\n }\n\n async reloadExtension(): Promise<void> {\n this.loadError = null;\n this.extensionMetadata = undefined;\n await this.moduleLoadingService.track(this.loadExtensionMetadata());\n await this.renderExtension();\n }\n\n protected override async onModuleInstanceChange(): Promise<void> {\n await this.loadExtensionMetadata();\n await this.renderExtension();\n }\n\n protected override onSecurityRightsChange(): void {\n this.updateExtensionContext();\n }\n\n override ngOnDestroy(): void {\n this.destroyed = true;\n this.destroyExtensionComponent();\n super.ngOnDestroy();\n }\n\n private async loadExtensionMetadata(): Promise<void> {\n if (this.extensionMetadata) {\n return;\n }\n\n if (!this.extensionKey) {\n this.loadError = 'Extension key is missing.';\n return;\n }\n\n this.extensionMetadata = (await this.extensionModulesApi.getExtensionModuleByKey({\n extensionKey: this.extensionKey\n })) as unknown as OipExtensionModuleMetadata;\n\n await this.loadExtensionTranslations(this.extensionMetadata);\n }\n\n /** Blocks the UI while the extension is (re)mounted, including the queued render after the view init. */\n private renderExtension(): Promise<void> {\n return this.moduleLoadingService.track(this.renderExtensionInternal());\n }\n\n private async renderExtensionInternal(): Promise<void> {\n if (this.destroyed || !this.viewContainer) {\n return;\n }\n\n try {\n this.loadError = null;\n await this.loadExtensionMetadata();\n if (!this.extensionMetadata) {\n return;\n }\n\n this.destroyExtensionComponent();\n\n if (this.extensionMetadata.loadType === 'moduleFederation') {\n await this.renderFederatedExtension(this.extensionMetadata);\n } else {\n this.extensionComponent = this.viewContainer.createComponent(CustomElementExtensionModuleHostComponent, {\n injector: this.injector,\n environmentInjector: this.environmentInjector\n });\n }\n } catch (error) {\n this.loadError = error instanceof Error ? error.message : 'Extension could not be loaded.';\n console.error(error);\n }\n }\n\n private queueRenderExtension(): void {\n if (this.renderQueued) {\n return;\n }\n this.renderQueued = true;\n queueMicrotask(() => {\n this.renderQueued = false;\n void this.renderExtension();\n });\n }\n\n private destroyExtensionComponent(): void {\n this.extensionComponent?.destroy();\n this.extensionComponent = undefined;\n this.extensionElement = undefined;\n this.viewContainer?.clear();\n }\n\n private async renderFederatedExtension(metadata: OipExtensionModuleMetadata): Promise<void> {\n const { remoteEntryUrl, exposedModule, componentName } = metadata;\n if (!remoteEntryUrl || !exposedModule || !componentName) {\n this.loadError = 'Module Federation extension metadata is incomplete.';\n return;\n }\n\n const remoteModule = await loadRemoteModule<Record<string, Type<unknown>>>({\n type: 'module',\n remoteEntry: remoteEntryUrl,\n exposedModule\n });\n const component = remoteModule[componentName];\n if (!component) {\n throw new Error(`Remote component '${componentName}' was not exported by '${exposedModule}'.`);\n }\n\n this.extensionComponent = this.viewContainer?.createComponent(component, {\n environmentInjector: this.environmentInjector\n });\n this.extensionElement = this.extensionComponent?.location.nativeElement as HTMLElement | undefined;\n this.updateExtensionContext();\n }\n\n private async loadExtensionTranslations(metadata: OipExtensionModuleMetadata): Promise<void> {\n const extensionKey = metadata.extensionKey ?? this.extensionKey;\n const apiBaseUrl = metadata.apiBaseUrl;\n if (!extensionKey || !apiBaseUrl) {\n return;\n }\n\n const lang = this.translateService.currentLang || this.layoutService.language() || 'en';\n for (const namespace of this.getExtensionTranslationNamespaces(metadata, extensionKey)) {\n const url = this.buildExtensionI18nUrl(apiBaseUrl, namespace, lang);\n try {\n await firstValueFrom(this.l10nService.loadTranslationsFromUrl(namespace, url, lang));\n return;\n } catch (error) {\n console.error(`No translations found for extension ${namespace}.${lang}.json`, error);\n }\n }\n }\n\n private buildExtensionI18nUrl(apiBaseUrl: string, extensionKey: string, lang: string): string {\n return `${apiBaseUrl.replace(/\\/+$/, '')}/assets/i18n/${encodeURIComponent(extensionKey)}.${encodeURIComponent(lang)}.json`;\n }\n\n private getExtensionTranslationNamespaces(metadata: OipExtensionModuleMetadata, extensionKey: string): string[] {\n const namespaces = [extensionKey];\n const componentNamespace = this.toKebabCase(metadata.componentName?.replace(/Component$/, '') ?? '');\n if (componentNamespace && !namespaces.includes(componentNamespace)) {\n namespaces.push(componentNamespace);\n }\n\n return namespaces;\n }\n\n private toKebabCase(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n }\n\n private updateExtensionContext(): void {\n if (!this.extensionElement || !this.extensionMetadata?.extensionKey) {\n return;\n }\n\n const context: OipExtensionHostContext = {\n moduleInstanceId: this.id,\n extensionKey: this.extensionMetadata.extensionKey,\n apiBasePath: this.buildUrl(`api/extensions/${this.extensionMetadata.extensionKey}`),\n settings: this.settings,\n locale: this.layoutService.language(),\n theme: this.layoutService.layoutConfig(),\n user: this.securityService.getCurrentUser(),\n activeTabId: this.topBarService.activeId ?? 'content',\n permissions: {\n canRead: this.canRead,\n canEdit: this.canEdit,\n canDelete: this.canDelete\n }\n };\n\n Object.assign(this.extensionElement, { oipContext: context });\n emitOipContextChange(this.extensionElement, context);\n }\n\n private buildUrl(path: string): string {\n const baseUrl = document.getElementsByTagName('base')[0]?.href ?? `${window.location.origin}/`;\n return `${baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`}${path}`;\n }\n}\n","import { Component } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { provideTranslations } from '../../helpers/l10n.helper';\n\nimport en from './l10n/no-modules.en.json';\nimport ru from './l10n/no-modules.ru.json';\n\n/**\n * Landing page shown when the user has no module instance to open.\n *\n * Rendered inside the shell on purpose: the menu and the top bar stay available, so an\n * administrator can keep working while a regular user sees why the page is empty.\n */\n@Component({\n selector: 'app-no-modules',\n template: `<div class=\"flex flex-col items-center justify-center text-center gap-4 py-20\">\n <i class=\"pi pi-inbox text-5xl text-surface-400\"></i>\n <h1 class=\"text-surface-900 dark:text-surface-0 font-bold text-2xl lg:text-3xl m-0\">\n {{ 'noModules.title' | translate }}\n </h1>\n <div class=\"text-surface-600 dark:text-surface-200 max-w-2xl\">{{ 'noModules.description' | translate }}</div>\n </div>`,\n imports: [TranslateModule],\n standalone: true\n})\nexport class NoModulesComponent {\n private readonly translations = provideTranslations({ en, ru });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\nimport { SecurityService } from './security.service';\n\n/**\n * A route guard that ensures the user is authenticated and has a valid access token.\n * If the access token is expired, it attempts to refresh the session.\n * If authentication fails or refresh is unsuccessful, redirects to the unauthorized page.\n */\n@Injectable()\nexport class AuthGuardService {\n private readonly oidcSecurityService = inject(SecurityService);\n\n /**\n * Checks whether the route can be activated.\n * - Returns `true` if the user is authenticated and the token is valid.\n * - Attempts to refresh the token if expired.\n * - Starts the authorization flow if not authenticated or refresh fails.\n *\n * @returns {Observable<boolean>} A stream resolving to true (allow), or false after starting authorization.\n */\n canActivate(returnUrl = '/'): Observable<boolean> {\n this.oidcSecurityService.auth();\n return this.oidcSecurityService.isAuthenticated().pipe(\n map((authenticated) => {\n if (authenticated) {\n return true;\n }\n\n this.oidcSecurityService.authorize(returnUrl);\n return false;\n })\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { MenuApi } from '../api/menu.api';\nimport { SecurityService } from './security.service';\n\n/**\n * Reads the rights the current user has on a module instance.\n *\n * Results are cached per instance and dropped whenever the authenticated user changes.\n */\n@Injectable()\nexport class ModuleInstanceRightsService {\n public static readonly readRight = 'read';\n\n private readonly menuApi = inject(MenuApi);\n private readonly securityService = inject(SecurityService);\n private readonly cache = new Map<number, Promise<string[]>>();\n private cachedIdentity: string | undefined = undefined;\n\n constructor() {\n this.securityService.payload.subscribe((payload) => {\n // Rights depend on both the user and the roles of the current session.\n const roles: string[] = payload?.realm_access?.roles ?? [];\n const identity = `${payload?.preferred_username ?? ''}|${[...roles].sort().join(',')}`;\n if (identity !== this.cachedIdentity) {\n this.cachedIdentity = identity;\n this.clearCache();\n }\n });\n }\n\n /**\n * Gets the rights of the current user on the given module instance.\n */\n public getRights(moduleInstanceId: number): Promise<string[]> {\n const cached = this.cache.get(moduleInstanceId);\n if (cached) {\n return cached;\n }\n\n const request = this.menuApi\n .getModuleInstanceRights({ id: moduleInstanceId })\n .then((rights) => rights ?? [])\n .catch((error) => {\n this.cache.delete(moduleInstanceId);\n throw error;\n });\n\n this.cache.set(moduleInstanceId, request);\n return request;\n }\n\n /**\n * Checks whether the current user has the `read` right on the given module instance.\n */\n public async canRead(moduleInstanceId: number): Promise<boolean> {\n const rights = await this.getRights(moduleInstanceId);\n return rights.includes(ModuleInstanceRightsService.readRight);\n }\n\n /**\n * Drops every cached result, for example after module security was changed.\n */\n public clearCache(): void {\n this.cache.clear();\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateChildFn, Router } from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\nimport { ModuleInstanceRightsService } from './module-instance-rights.service';\nimport { SecurityService } from './security.service';\n\n/**\n * Route data flag marking a route that only administrators may open.\n */\nexport interface ModuleAccessRouteData {\n requireAdmin?: boolean;\n}\n\n/**\n * Guards module routes against direct navigation without the required rights.\n *\n * - Routes flagged with `data: { requireAdmin: true }` require the `admin` role.\n * - Routes carrying an `:id` segment require the `read` right on that module instance.\n * - Everything else is left to {@link AuthGuardService}.\n *\n * Denied navigation is redirected to the access denied page. This is a UX guard only:\n * the backend checks the same rights on every module endpoint.\n */\nexport const moduleAccessGuard: CanActivateChildFn = async (route) => {\n const router = inject(Router);\n const securityService = inject(SecurityService);\n const rightsService = inject(ModuleInstanceRightsService);\n const accessDenied = router.parseUrl('/access');\n\n if ((route.data as ModuleAccessRouteData)?.requireAdmin) {\n // Wait for the session payload so a direct URL entry does not read roles before they are loaded.\n await firstValueFrom(\n securityService.payload.pipe(\n filter((payload) => payload != null),\n take(1)\n )\n );\n return securityService.isAdmin() ? true : accessDenied;\n }\n\n const routeId = route.paramMap.get('id');\n if (routeId == null) {\n return true;\n }\n\n const moduleInstanceId = Number(routeId);\n if (!Number.isFinite(moduleInstanceId)) {\n return accessDenied;\n }\n\n try {\n return (await rightsService.canRead(moduleInstanceId)) ? true : accessDenied;\n } catch (error) {\n console.error('Failed to load module instance rights', error);\n return accessDenied;\n }\n};\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { FilterMetadata } from 'primeng/api';\nimport { Table } from 'primeng/table';\n\n/**\n * Prime-ng table filter service\n */\n@Injectable()\nexport class TableFilterService {\n public filterState: { [field: string]: boolean } = {};\n private filtersState = new BehaviorSubject<boolean>(false);\n public filtersState$ = this.filtersState.asObservable();\n\n /**\n * Updates filter state\n * @param filters\n */\n public updateFiltersState(filters: any) {\n const hasFilters = Object.values(filters).some((filterArray: any) => {\n if (Array.isArray(filterArray)) {\n return filterArray.some((filter) => !!filter.value);\n }\n return false;\n });\n this.filtersState.next(hasFilters);\n }\n\n /**\n * Checks if a filter is active\n * @param {FilterMetadata | FilterMetadata[]} filter\n * @return {boolean}\n */\n public isFilterActive(filter: FilterMetadata | FilterMetadata[]): boolean {\n if (!filter) return false;\n\n if (Array.isArray(filter)) {\n return filter.some((f) => !!f.value && f.matchMode !== 'unspecified');\n } else {\n return !!filter.value && filter.matchMode !== 'unspecified';\n }\n }\n\n /**\n * Checks the state of table filters\n * @param {Table} table\n * @param {FilterMetadata | FilterMetadata[]} filters\n */\n public updateFilterFieldStates(table: Table, filters: FilterMetadata | FilterMetadata[]) {\n if (table && filters) {\n Object.keys(filters).forEach((field) => {\n const filter = filters[field];\n this.filterState[field] = this.isFilterActive(filter);\n });\n }\n this.updateFiltersState(filters);\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport {\n APP_THEME_PRESETS,\n APP_THEME_PRESETS_MERGE_MODE,\n AppThemePreset,\n AppThemePresetMergeMode\n} from './theme-presets.token';\n\nexport interface ProvideAppThemesOptions {\n mode?: AppThemePresetMergeMode;\n}\n\nexport function provideAppThemes(themes: AppThemePreset[], options?: ProvideAppThemesOptions): EnvironmentProviders {\n const mode = options?.mode ?? 'mergeWithDefaults';\n return makeEnvironmentProviders([\n { provide: APP_THEME_PRESETS, useValue: themes },\n { provide: APP_THEME_PRESETS_MERGE_MODE, useValue: mode }\n ]);\n}\n\nexport function mergeWithDefaults(themes: AppThemePreset[]): EnvironmentProviders {\n return provideAppThemes(themes, { mode: 'mergeWithDefaults' });\n}\n\nexport function replaceDefaults(themes: AppThemePreset[]): EnvironmentProviders {\n return provideAppThemes(themes, { mode: 'replaceDefaults' });\n}\n","import { definePreset } from '@primeng/themes';\nimport Aura from '@primeng/themes/aura';\nimport { primitive } from '@primeng/themes/aura/base';\nimport { AppThemePreset } from './theme-presets.token';\n\nexport const defaultTheme: AppThemePreset[] = [\n {\n id: 'Oip',\n label: 'Oip',\n preset: definePreset(Aura, {\n components: {\n toolbar: {\n colorScheme: {\n light: {\n root: {\n borderRadius: '0.7rem'\n }\n },\n dark: {\n root: {\n borderRadius: '0.7rem'\n }\n }\n }\n }\n }\n }),\n primaryColors: {\n rose: primitive['red']\n },\n surfaceColors: {\n zinc: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#a1a1aa',\n 500: '#71717a',\n 600: '#52525b',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n 950: '#09090b'\n }\n }\n }\n];\n","import { inject } from '@angular/core';\nimport { HttpInterceptorFn } from '@angular/common/http';\nimport { switchMap, take } from 'rxjs/operators';\nimport { LayoutService } from '../services/app.layout.service';\nimport { SecurityService } from '../services/security.service';\n\nexport const langIntercept: HttpInterceptorFn = (req, next) => {\n const layoutService = inject(LayoutService);\n const securityService = inject(SecurityService);\n const lang = layoutService.language() ? layoutService.language() : 'en';\n const headers = req.headers.set('Accept-language', lang).set('X-Timezone', layoutService.timeZone());\n const reqWithCredentials = req.clone({\n headers,\n withCredentials: true\n });\n\n if (!['POST', 'PUT', 'PATCH', 'DELETE'].includes(req.method.toUpperCase())) {\n return next(reqWithCredentials);\n }\n\n if (req.url.includes('/api/security/create-auth-session') || req.url.includes('/api/security/get-auth-csrf-token')) {\n return next(reqWithCredentials);\n }\n\n return securityService.getCsrfToken().pipe(\n take(1),\n switchMap((csrfToken) =>\n next(\n csrfToken?.token\n ? reqWithCredentials.clone({\n headers: reqWithCredentials.headers.set(csrfToken.headerName, csrfToken.token)\n })\n : reqWithCredentials\n )\n )\n );\n};\n","import { LocationStrategy, PathLocationStrategy } from '@angular/common';\nimport { HttpClient, provideHttpClient, withFetch, withInterceptors } from '@angular/common/http';\nimport { importProvidersFrom, makeEnvironmentProviders } from '@angular/core';\nimport { TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\nimport { MessageService } from 'primeng/api';\nimport { MenuApi } from '../api/menu.api';\nimport { NotificationApi } from '../api/notification.api';\nimport { SecurityApi } from '../api/security.api';\nimport { UserProfileApi } from '../api/user-profile.api';\nimport { langIntercept } from '../intercepts/i18n-intercept.service';\nimport { AuthGuardService } from '../services/auth-guard.service';\nimport { ModuleInstanceRightsService } from '../services/module-instance-rights.service';\nimport { NotificationService } from '../services/notification.service';\nimport { BffSecurityService, SecurityService } from '../services/security.service';\nimport { UserService } from '../services/user.service';\n\nconst httpLoaderFactory: (http: HttpClient) => TranslateHttpLoader = (http: HttpClient) =>\n new TranslateHttpLoader(http);\n\nexport function provideOip() {\n return makeEnvironmentProviders([\n provideHttpClient(withInterceptors([langIntercept]), withFetch()),\n { provide: LocationStrategy, useClass: PathLocationStrategy },\n { provide: SecurityService, useClass: BffSecurityService },\n AuthGuardService,\n ModuleInstanceRightsService,\n MessageService,\n UserService,\n NotificationService,\n UserProfileApi,\n SecurityApi,\n NotificationApi,\n MenuApi,\n importProvidersFrom([\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: httpLoaderFactory,\n deps: [HttpClient]\n }\n })\n ])\n ]);\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport { ApiExceptionResponse, FolderModuleSettings } from \"./data-contracts\";\nimport { HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class FolderModuleApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getModuleInstanceSettings = (params: RequestParams = {}) =>\n this.request<FolderModuleSettings, ApiExceptionResponse>({\n path: `/api/folder-module/get-module-instance-settings`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport { ApiExceptionResponse, IframeModuleSettings } from \"./data-contracts\";\nimport { HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class IframeModuleApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n getModuleInstanceSettings = (params: RequestParams = {}) =>\n this.request<IframeModuleSettings, ApiExceptionResponse>({\n path: `/api/iframe-module/get-module-instance-settings`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n"," import { inject, Type } from '@angular/core';\nimport { CanActivateFn, Route, Router, Routes } from '@angular/router';\nimport { AppLayoutComponent } from '../components/app.layout/app.layout.component';\nimport { AccessComponent } from '../components/auth/access/access.component';\nimport { NotfoundComponent } from '../components/notfound/notfound.component';\nimport { AuthGuardService } from '../services/auth-guard.service';\nimport { ModuleLoadingService } from '../services/module-loading.service';\nimport { moduleAccessGuard } from '../services/module-access-guard.service';\nimport { StartPageService } from '../services/start-page.service';\n\n/**\n * Guard that requires an authenticated session and preserves the requested url as the return url.\n *\n * Use it on every application route rendered inside the oip shell instead of repeating the\n * `inject(AuthGuardService)` lambda.\n */\nexport const oipAuthGuard: CanActivateFn = (_, state) => inject(AuthGuardService).canActivate(state.url);\n\n/**\n * Route data read by {@link oipStartRedirectGuard}.\n */\nexport interface StartRouteData {\n /** Explicit start route of the host application, taking precedence over the user's own choice. */\n startRoute?: string;\n /** Where to go when the user has no module available. */\n noModulesPath?: string;\n}\n\n/**\n * Redirects the empty route to the module instance the user lands on by default.\n *\n * The order is: the explicit `startRoute` of the host application, then the module the user marked\n * as their start page, then the first module available to them, and finally the no modules page.\n */\nexport const oipStartRedirectGuard: CanActivateFn = async (route) => {\n const router = inject(Router);\n const startPageService = inject(StartPageService);\n const moduleLoading = inject(ModuleLoadingService);\n const data = (route.data ?? {}) as StartRouteData;\n const noModules = router.parseUrl(`/${data.noModulesPath ?? 'no-modules'}`);\n\n if (data.startRoute) {\n return router.parseUrl(data.startRoute);\n }\n\n try {\n // Resolving reads the menu over the network, so keep the blocker up until the target is known.\n return (await moduleLoading.track(startPageService.resolveStartUrl())) ?? noModules;\n } catch (error) {\n console.error('Failed to resolve the start module', error);\n return noModules;\n }\n};\n\n/**\n * Page shown when the user has no module instance to open.\n */\nexport function oipNoModulesRoute(path = 'no-modules'): Route {\n return {\n path,\n loadComponent: () => import('../components/no-modules/no-modules.component').then((m) => m.NoModulesComponent),\n canActivate: [oipAuthGuard]\n };\n}\n\n/**\n * Empty route redirecting to the start module of the current user.\n *\n * Registered last among the shell children so a host application can claim the empty path itself.\n */\nexport function oipStartRoute(path = '', data: StartRouteData = {}): Route {\n return {\n path,\n pathMatch: 'full',\n canActivate: [oipAuthGuard, oipStartRedirectGuard],\n children: [],\n data\n };\n}\n\n/**\n * Access denied page. Referenced by {@link AuthGuardService} and {@link moduleAccessGuard} redirects,\n * so keep it registered unless the host application provides its own `access` route.\n */\nexport function oipAccessRoute(path = 'access'): Route {\n return { path, component: AccessComponent };\n}\n\n/** Authentication error page. */\nexport function oipErrorRoute(path = 'error'): Route {\n return {\n path,\n loadComponent: () => import('../components/auth/error/error.component').then((m) => m.ErrorComponent)\n };\n}\n\n/** Current user profile. */\nexport function oipProfileRoute(path = 'profile'): Route {\n return {\n path,\n loadComponent: () =>\n import('../components/user-profile/user-profile.component').then((m) => m.UserProfileComponent),\n canActivate: [oipAuthGuard]\n };\n}\n\n/** Application configuration. */\nexport function oipConfigRoute(path = 'config'): Route {\n return {\n path,\n loadComponent: () => import('../components/config/config.component').then((m) => m.ConfigComponent),\n canActivate: [oipAuthGuard]\n };\n}\n\n/** Registered applications, administrators only. */\nexport function oipApplicationsRoute(path = 'applications'): Route {\n return {\n path,\n loadComponent: () =>\n import('../components/applications/applications.component').then((m) => m.ApplicationsComponent),\n canActivate: [oipAuthGuard],\n data: { requireAdmin: true }\n };\n}\n\n/** Module registry, administrators only. */\nexport function oipModulesRoute(path = 'modules'): Route {\n return {\n path,\n loadComponent: () => import('../components/app-modules/app-modules.component').then((m) => m.AppModulesComponent),\n canActivate: [oipAuthGuard],\n data: { requireAdmin: true }\n };\n}\n\n/** Discussion module. The path must keep an `:id` segment. */\nexport function oipDiscussionRoute(path = 'discussion/:id'): Route {\n return {\n path,\n loadComponent: () => import('../components/discussion/discussion.component').then((m) => m.DiscussionComponent),\n canActivate: [oipAuthGuard]\n };\n}\n\n/** Database migration module. The path must keep an `:id` segment. */\nexport function oipDbMigrationRoute(path = 'db-migration/:id'): Route {\n return {\n path,\n loadComponent: () =>\n import('../components/db-migration/db-migration.component').then((m) => m.DbMigrationComponent),\n canActivate: [oipAuthGuard]\n };\n}\n\n/** Iframe module host. The path must keep an `:id` segment. */\nexport function oipIframeModuleRoute(path = 'iframe-module/:id'): Route {\n return {\n path,\n loadComponent: () =>\n import('../components/iframe-module/iframe-module.component').then((m) => m.IframeModuleComponent),\n canActivate: [oipAuthGuard]\n };\n}\n\n/** Extension module host. The path must keep the `:extensionKey` and `:id` segments. */\nexport function oipExtensionsRoute(path = 'extensions/:extensionKey/:id'): Route {\n return {\n path,\n loadComponent: () =>\n import('../components/extension-module-host/extension-module-host.component').then(\n (m) => m.ExtensionModuleHostComponent\n ),\n canActivate: [oipAuthGuard]\n };\n}\n\n/**\n * Switch for a built-in route.\n *\n * - `true` enables the route under its default path.\n * - `false` disables it.\n * - a string enables it under that path, which must keep the same route parameters as the default.\n */\nexport type OipRouteToggle = boolean | string;\n\n/**\n * Built-in routes provided by oip-common. Every one of them is enabled by default; disable the ones\n * a host application does not expose.\n */\nexport interface OipRouteFeatures {\n /** Access denied page. Default path: `access`. */\n access?: OipRouteToggle;\n /** Authentication error page. Default path: `error`. */\n error?: OipRouteToggle;\n /** Current user profile. Default path: `profile`. */\n profile?: OipRouteToggle;\n /** Application configuration. Default path: `config`. */\n config?: OipRouteToggle;\n /** Registered applications, administrators only. Default path: `applications`. */\n applications?: OipRouteToggle;\n /** Module registry, administrators only. Default path: `modules`. */\n modules?: OipRouteToggle;\n /** Discussion module. Default path: `discussion/:id`. */\n discussion?: OipRouteToggle;\n /** Database migration module. Default path: `db-migration/:id`. */\n dbMigration?: OipRouteToggle;\n /** Iframe module host. Default path: `iframe-module/:id`. */\n iframeModule?: OipRouteToggle;\n /** Extension module host. Default path: `extensions/:extensionKey/:id`. */\n extensions?: OipRouteToggle;\n /** Page shown when no module is available. Default path: `no-modules`. */\n noModules?: OipRouteToggle;\n /** Empty route redirecting to the start module. Default path: `` (the shell root). */\n start?: OipRouteToggle;\n}\n\n/**\n * Options accepted by {@link provideOipRoutes}.\n */\nexport interface OipRoutesOptions {\n /** Application specific routes rendered inside the shell. */\n children?: Routes;\n /** Which built-in routes to register, and under which paths. All of them are on by default. */\n features?: OipRouteFeatures;\n /**\n * Route opened by the empty path, overriding the start module of the user. Leave it unset to land\n * on the module the user chose, or on the first module available to them.\n */\n startRoute?: string;\n /** Shell component wrapping every child route. Default: {@link AppLayoutComponent}. */\n layout?: Type<unknown>;\n /** Routes registered outside the shell, before the not found handling. */\n rootRoutes?: Routes;\n /** Path of the not found page. Default: `notfound`. */\n notFoundPath?: string;\n /** Path of the unauthorized page. Default: `unauthorized`. */\n unauthorizedPath?: string;\n /**\n * Whether to append the `**` route redirecting to the not found page.\n * Disable it when the host application registers its own catch-all after these routes.\n * Default: `true`.\n */\n wildcard?: boolean;\n}\n\nfunction builtInRoute(toggle: OipRouteToggle | undefined, factory: (path?: string) => Route, into: Routes): void {\n if (toggle === false) {\n return;\n }\n into.push(typeof toggle === 'string' ? factory(toggle) : factory());\n}\n\n/**\n * Builds the standard oip route tree: an authenticated shell holding the application routes and the\n * built-in pages, followed by the unauthorized, not found and catch-all routes.\n *\n * The returned array is ordered so that the `**` route stays last; concatenating anything after it\n * makes those routes unreachable.\n *\n * @example\n * export const appRoutes = provideOipRoutes({\n * children: [\n * {\n * path: 'dashboard/:id',\n * loadComponent: () => import('./dashboard.component').then((m) => m.DashboardComponent),\n * canActivate: [oipAuthGuard]\n * }\n * ],\n * features: { dbMigration: 'legacy-migration/:id', modules: false },\n * startRoute: '/dashboard/1'\n * });\n */\nexport function provideOipRoutes(options: OipRoutesOptions = {}): Routes {\n const features = options.features ?? {};\n const children: Routes = [...(options.children ?? [])];\n\n builtInRoute(features.access, oipAccessRoute, children);\n builtInRoute(features.error, oipErrorRoute, children);\n builtInRoute(features.profile, oipProfileRoute, children);\n builtInRoute(features.config, oipConfigRoute, children);\n builtInRoute(features.applications, oipApplicationsRoute, children);\n builtInRoute(features.modules, oipModulesRoute, children);\n builtInRoute(features.discussion, oipDiscussionRoute, children);\n builtInRoute(features.dbMigration, oipDbMigrationRoute, children);\n builtInRoute(features.iframeModule, oipIframeModuleRoute, children);\n builtInRoute(features.extensions, oipExtensionsRoute, children);\n builtInRoute(features.noModules, oipNoModulesRoute, children);\n\n // Registered last so a host application that declares its own empty path keeps it.\n if (features.start !== false && !children.some((route) => route.path === '')) {\n const noModulesPath = typeof features.noModules === 'string' ? features.noModules : 'no-modules';\n const startPath = typeof features.start === 'string' ? features.start : '';\n children.push(oipStartRoute(startPath, { startRoute: options.startRoute, noModulesPath }));\n }\n\n const notFoundPath = options.notFoundPath ?? 'notfound';\n\n const routes: Routes = [\n {\n path: '',\n component: options.layout ?? AppLayoutComponent,\n canActivate: [oipAuthGuard],\n canActivateChild: [moduleAccessGuard],\n children\n },\n {\n path: options.unauthorizedPath ?? 'unauthorized',\n loadComponent: () =>\n import('../components/auth/unauthorized/unauthorized.component').then((m) => m.UnauthorizedComponent)\n },\n ...(options.rootRoutes ?? []),\n { path: notFoundPath, component: NotfoundComponent }\n ];\n\n if (options.wildcard !== false) {\n routes.push({ path: '**', redirectTo: `/${notFoundPath}` });\n }\n\n return routes;\n}\n","// Components\nexport { BaseModuleComponent } from './components/base-module/base-module.component';\nexport { SecurityComponent } from './components/security/security.component';\nexport { AppTopbar } from './components/top-bar/top-bar.component';\nexport { FooterComponent } from './components/footer/footer.component';\nexport { MenuComponent } from './components/menu/menu.component';\nexport { AppLayoutComponent } from './components/app.layout/app.layout.component';\nexport { SidebarComponent } from './components/sidebar/sidebar.component';\nexport { LogoComponent } from './components/logo/logo.component';\nexport { NotfoundComponent } from './components/notfound/notfound.component';\nexport { UnauthorizedComponent } from './components/auth/unauthorized/unauthorized.component';\nexport { AccessComponent } from './components/auth/access/access.component';\nexport { ErrorComponent } from './components/auth/error/error.component';\nexport { UserProfileComponent } from './components/user-profile/user-profile.component';\nexport { ConfigComponent } from './components/config/config.component';\nexport { DbMigrationComponent } from './components/db-migration/db-migration.component';\nexport { AppModulesComponent } from './components/app-modules/app-modules.component';\nexport { ApplicationsComponent } from './components/applications/applications.component';\nexport { AppConfiguratorComponent } from './components/app-configurator/app-configurator.component';\nexport { AppFloatingConfiguratorComponent } from './components/app-floating-configurator/app-floating-configurator.component';\nexport { DiscussionComponent } from './components/discussion/discussion.component';\nexport { IframeModuleComponent } from './components/iframe-module/iframe-module.component';\nexport { ExtensionModuleHostComponent } from './components/extension-module-host/extension-module-host.component';\nexport { UserNotificationsComponent } from './components/user-notifications/user-notifications.component';\nexport { AppTopbarApplicationSwitcherComponent } from './components/top-bar-application-switcher/top-bar-application-switcher.component';\nexport { BlockLoaderComponent } from './components/block-loader/block-loader.component';\nexport { NoModulesComponent } from './components/no-modules/no-modules.component';\nexport { DefaultSecretsBannerComponent } from './components/default-secrets-banner/default-secrets-banner.component';\n\n// DTOs\nexport { TopBarDto } from './dtos/top-bar.dto';\nexport { SecurityDto } from './dtos/security.dto';\nexport { PutSecurityDto } from './dtos/put-security.dto';\nexport { NoSettingsDto } from './dtos/no-settings.dto';\n\n// Services\nexport { TopBarService } from './services/top-bar.service';\nexport { AuthCsrfToken, BffSecurityService, SecurityService } from './services/security.service';\nexport { MsgService } from './services/msg.service';\nexport { AuthGuardService } from './services/auth-guard.service';\nexport { moduleAccessGuard, ModuleAccessRouteData } from './services/module-access-guard.service';\nexport { ModuleInstanceRightsService } from './services/module-instance-rights.service';\nexport { AppConfig, LayoutService } from './services/app.layout.service';\nexport { MenuService } from './services/app.menu.service';\nexport { UserService } from './services/user.service';\nexport { L10nService, LanguageDto } from './services/l10n.service';\nexport { provideLogoComponent, LogoService, LOGO_COMPONENT_TOKEN } from './services/logo.service';\nexport { provideAppInfo, AppInfoService, APP_INFO_TOKEN, AppInfo, AppInfoValue } from './services/app-info.service';\nexport { NotificationService } from './services/notification.service';\nexport { ApplicationRegistryService } from './services/application-registry.service';\nexport { TableFilterService } from './services/table-filter.service';\nexport { ModuleLoadingService } from './services/module-loading.service';\nexport { StartPageService } from './services/start-page.service';\nexport { ExtensionLoaderService } from './extension-host/extension-loader.service';\nexport {\n APP_THEME_PRESETS,\n APP_THEME_PRESETS_MERGE_MODE,\n AppThemePreset,\n AppThemePresetLoader,\n AppThemePresetMergeMode\n} from './services/theme-presets.token';\nexport { mergeWithDefaults, provideAppThemes, replaceDefaults } from './services/theme-presets.provider';\nexport { defaultTheme } from './services/app-default.theme';\nexport { provideOip } from './providers/oip.provider';\n\n// Events\nexport { MenuChangeEvent } from './events/menu-change.event';\n\n// other\nexport { langIntercept } from './intercepts/i18n-intercept.service';\nexport { ContentType, HttpClient, RequestParams } from './api/http-client';\nexport {\n OipExtensionHostContext,\n OipExtensionLoadType,\n OipExtensionManifest,\n OipExtensionModuleMetadata,\n OipExtensionNavigateEvent,\n OipExtensionNotifyEvent\n} from './extension-host/extension-host.types';\nexport {\n OIP_EXTENSION_EVENTS,\n emitOipContextChange,\n emitOipError,\n emitOipNavigate,\n emitOipNotify,\n emitOipSettingsChange,\n emitOipTitleChange\n} from './extension-host/extension-host.events';\nexport { FolderModuleApi } from './api/folder-module.api';\nexport { IframeModuleApi } from './api/iframe-module.api';\nexport { SecurityApi } from './api/security.api';\nexport { ApplicationsApi } from './api/applications.api';\nexport { UserProfileApi } from './api/user-profile.api';\nexport { convertToPrimeNgDateFormat } from './helpers/date.helper';\nexport { provideTranslations } from './helpers/l10n.helper';\nexport { NotificationApi } from './api/notification.api';\nexport { CustomElementExtensionModuleHostComponent } from './components/custom-element-extension-module-host/custom-element-extension-module-host.component';\n\n// Routing\nexport {\n oipAuthGuard,\n provideOipRoutes,\n oipAccessRoute,\n oipErrorRoute,\n oipProfileRoute,\n oipConfigRoute,\n oipApplicationsRoute,\n oipModulesRoute,\n oipDiscussionRoute,\n oipDbMigrationRoute,\n oipIframeModuleRoute,\n oipExtensionsRoute,\n oipNoModulesRoute,\n oipStartRoute,\n oipStartRedirectGuard,\n StartRouteData,\n OipRouteFeatures,\n OipRouteToggle,\n OipRoutesOptions\n} from './routing/oip.routes';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["en","ru","HttpClient","tap","i3","i1","i2","i4","i5","i2.MenuService","i6","i7","filter","i10"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAOa,aAAa,CAAA;AAQxB,IAAA,IAAI,oBAAoB,GAAA;QACtB,OAAO,IAAI,CAAC,WAAW;IACzB;AAEA,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;AAChC,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAqB,KAAK,UAAU,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC;IAC3F;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;IAEA,IAAI,QAAQ,CAAC,KAAyB,EAAA;AACpC,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB;QAC9C,IAAI,gBAAgB,EAAE,KAAK;YAAE,gBAAgB,CAAC,KAAK,EAAE;AACrD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC;AAEA,IAAA,WAAA,GAAA;QA7BA,IAAA,CAAA,WAAW,GAAgB,EAAE;AACZ,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAsB;AAE3D,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IA0BzC;;AAGf,IAAA,cAAc,CAAC,KAAkB,EAAA;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;IAC1B;AAEA,IAAA,OAAO,CAAC,EAAU,EAAA;AAChB,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB;AAC9C,QAAA,MAAM,MAAM,GAAG,gBAAgB,KAAK,SAAS,GAAG,EAAE,KAAK,SAAS,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE;AAC5F,QAAA,OAAO,MAAM;IACf;+GAzCW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,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;;4FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCCY,UAAU,CAAA;AADvB,IAAA,WAAA,GAAA;AAEqB,QAAA,IAAA,CAAA,cAAc,GAAmB,MAAM,CAAC,cAAc,CAAC;AACzD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACpC,IAAA,CAAA,QAAQ,GAAW,IAAI;AAmJzC,IAAA;AAjJC,IAAA,GAAG,CAAC,GAAwB,EAAA;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;IAC9B;AAEA,IAAA,OAAO,CAAC,MAAW,EAAE,OAAA,GAAe,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,IAAA,GAAe,IAAI,CAAC,QAAQ,EAAA;AAC5G,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;IACJ;AAEA,IAAA,IAAI,CAAC,MAAW,EAAE,OAAA,GAAe,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,IAAA,GAAe,IAAI,CAAC,QAAQ,EAAA;AACtG,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;IACJ;AAEA,IAAA,IAAI,CAAC,MAAW,EAAE,OAAA,GAAe,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,IAAA,GAAe,IAAI,CAAC,QAAQ,EAAA;AACtG,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;IACJ;AAEA,IAAA,KAAK,CAAC,MAAW,EAAE,OAAA,GAAe,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,IAAA,GAAe,IAAI,CAAC,QAAQ,EAAA;AACxG,QAAA,IAAI,MAAM,YAAY,iBAAiB,EAAE;YACvC,OAAO,GAAG,CAAA,OAAA,EAAU,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAA,CAAE;AACxD,YAAA,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAA,EAAG,MAAM,CAAC,IAAI,CAAA,MAAA,EAAS,MAAM,CAAC,OAAO,CAAA,CAAE,CAAC;QACpF;aAAO;YACL,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC/G;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;IACJ;IAEA,mBAAmB,CAAC,KAAc,EAAE,QAAgB,EAAA;QAClD,MAAM,iBAAiB,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;QAC9D,IAAI,iBAAiB,EAAE;AACrB,YAAA,OAAO,iBAAiB;QAC1B;QAEA,MAAM,mBAAmB,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC;QAClE,IAAI,mBAAmB,EAAE;AACvB,YAAA,OAAO,mBAAmB;QAC5B;AAEA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE;YACjG,OAAO,KAAK,CAAC,OAAO;QACtB;AAEA,QAAA,OAAO,QAAQ;IACjB;AAEQ,IAAA,wBAAwB,CAAC,KAAc,EAAA;QAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC;AAC5D,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC;QAEnH,IAAI,CAAC,gBAAgB,EAAE;AACrB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB;AAC7C,aAAA,MAAM,CAAW,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE;AACxG,aAAA,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAE1C,QAAA,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;IACzD;AAEQ,IAAA,0BAA0B,CAAC,KAAc,EAAA;QAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC;AAC5D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC;AAC5G,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC;AAEtG,QAAA,IAAI,OAAO,IAAI,KAAK,EAAE;AACpB,YAAA,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,OAAO,EAAE;QAC/B;QAEA,OAAO,OAAO,IAAI,KAAK;IACzB;IAEQ,oBAAoB,CAAC,KAAa,EAAE,KAAc,EAAA;AACxD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO;iBACJ,MAAM,CAAC,CAAC,OAAO,KAAwB,OAAO,OAAO,KAAK,QAAQ;AAClE,iBAAA,GAAG,CAAC,CAAC,OAAO,KAAK,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAC;QAC7C;AAEA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,OAAO,CAAC,CAAA,EAAG,KAAK,KAAK,KAAK,CAAA,CAAE,CAAC;QAC/B;AAEA,QAAA,OAAO,EAAE;IACX;IAEQ,iBAAiB,CAAC,MAAe,EAAE,QAAgB,EAAA;AACzD,QAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,EAAE,QAAQ,IAAI,MAAM,CAAC,EAAE;AAC1E,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,KAAK,GAAI,MAAkC,CAAC,QAAQ,CAAC;AAC3D,QAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,GAAI,KAAiC,GAAG,IAAI;IAChG;IAEQ,iBAAiB,CAAC,MAAe,EAAE,QAAgB,EAAA;AACzD,QAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,EAAE,QAAQ,IAAI,MAAM,CAAC,EAAE;AAC1E,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,KAAK,GAAI,MAAkC,CAAC,QAAQ,CAAC;AAC3D,QAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI;IACrE;IAEA,kBAAkB,CAAC,KAAc,EAAE,QAAgB,EAAE,OAAA,GAAkB,QAAQ,EAAE,IAAA,GAAe,IAAI,CAAC,QAAQ,EAAA;AAC3G,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC;IACtE;AAEA,IAAA,QAAQ,CAAC,MAAW,EAAE,OAAA,GAAe,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,IAAA,GAAe,IAAI,CAAC,QAAQ,EAAA;AAC3G,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;IACJ;AAEA,IAAA,SAAS,CAAC,MAAW,EAAE,OAAA,GAAe,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,IAAA,GAAe,IAAI,CAAC,QAAQ,EAAA;AAChH,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE,WAAW;AACrB,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;IACJ;+GArJW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAV,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,UAAU,cADG,MAAM,EAAA,CAAA,CAAA;;4FACnB,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACFlC;;AAEG;MAEU,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;AAC/C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAUjD,IAAA;AARC;;;AAGG;AACH,IAAA,QAAQ,CAAC,QAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;IAClC;+GAZW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,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,eAAe,cADF,MAAM,EAAA,CAAA,CAAA;;4FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACPlC;;;AAGG;AACG,SAAU,YAAY,CAAC,IAAU,EAAA;AACrC,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;IAC/B,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC/D,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAEtD,IAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,GAAG,EAAE;AAClC;AAEA;;;AAGG;AACG,SAAU,YAAY,CAAC,IAAY,EAAA;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACtC,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;IAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAEvC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;AACnC;AAEA;;;;AAIG;AACG,SAAU,OAAO,CAAC,IAAU,EAAE,IAAY,EAAA;AAC9C,IAAA,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC;IACxC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AAC/C,IAAA,OAAO,UAAU;AACnB;AAEA;;;AAGG;SACa,YAAY,GAAA;AAC1B,IAAA,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE;AACvB,IAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AACtE;AAEA;AACM,SAAU,0BAA0B,CAAC,UAAkB,EAAA;IAC3D,QAAQ,UAAU;AAChB,QAAA,KAAK,YAAY;AACf,YAAA,OAAO,UAAU;AACnB,QAAA,KAAK,UAAU;AACb,YAAA,OAAO,SAAS;AAClB,QAAA,KAAK,YAAY;AACf,YAAA,OAAO,UAAU;AACnB,QAAA,KAAK,aAAa;AAChB,YAAA,OAAO,SAAS;AAClB,QAAA;AACE,YAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,UAAU,CAAA,CAAE,CAAC;;AAE9D;AAEA;;;AAGG;AACG,SAAU,YAAY,CAAC,GAAQ,EAAA;AACnC,IAAA,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;AAAE,QAAA,OAAO,GAAG;AAEvD,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9C;IAEA,MAAM,MAAM,GAAG,EAAE;AACjB,IAAA,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;AACrB,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;QAEtB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;YACjD,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;QAC/B;AAAO,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,EAAE;YAClF,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;QACnC;aAAO;AACL,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK;QACrB;IACF;AACA,IAAA,OAAO,MAAM;AACf;AAEA;;;AAGG;AACG,SAAU,SAAS,CAAC,GAAW,EAAA;AACnC,IAAA,OAAO,gDAAgD,CAAC,IAAI,CAAC,GAAG,CAAC;AACnE;;MC7Da,aAAa,CAAA;AAmFxB,IAAA,WAAA,GAAA;AAlFA,QAAA,IAAA,CAAA,OAAO,GAAc,IAAI,CAAC,uBAAuB,EAAE;AAEnD,QAAA,IAAA,CAAA,MAAM,GAAgB;AACpB,YAAA,yBAAyB,EAAE,KAAK;AAChC,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,oBAAoB,EAAE,KAAK;AAC3B,YAAA,sBAAsB,EAAE,KAAK;AAC7B,YAAA,eAAe,EAAE;SAClB;AAED,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAY,IAAI,CAAC,OAAO,wDAAC;AAE9C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAc,IAAI,CAAC,MAAM,uDAAC;AAE7B,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAa;AAEvC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAO;AAEhC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAmB;AAE3C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAE;AAE5C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;AAE5C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;AAE9C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAEhD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;QAE9C,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;QAE3E,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,iBAAiB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,sBAAsB,2DAAC;AAEnH,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,uDAAC;AAE3D,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,sDAAC;AAExD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,sDAAC;AAExD,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,QAAQ,KAAK,SAAS,qDAAC;AAEtE,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,QAAQ,oDAAC;AAEvD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU,sDAAC;AAE3D,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,0BAA0B,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC,6DAAC;AAE9F,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU,sDAAC;QAE3D,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU,CAAA,CAAA,EAAI,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU,CAAA,CAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEtG,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;YAC1B,MAAM,KAAK,GAAG,KAAK;YACnB,MAAM,WAAW,GAAG,0BAA0B;YAC9C,MAAM,YAAY,GAAG,0BAA0B,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC;YAC/E,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;AAC5C,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACtD,gBAAA,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK;sBACrB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE;sBAChC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/B,0BAAE,MAAM,CAAC,SAAS,CAAC,CAAC;AACpB,0BAAE,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9C;AACA,YAAA,OAAO,YAAY;AACrB,QAAA,CAAC,uDAAC;AAEF,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,QAAQ,oDAAC;AAEvD,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,IAAI,KAAK,qDAAC;AAElE,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAU,KAAK,8DAAC;AAE3C;;;AAGG;AACH,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAU,IAAI,yDAAC;QAE7B,IAAA,CAAA,WAAW,GAAG,KAAK;QAGzB,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;YAClC,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,cAAc,EAAE;YACvB;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;YAElC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE;AAChC,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;gBACvB;YACF;AAEA,YAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;AACvC,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;IACK,uBAAuB,GAAA;QAC7B,MAAM,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC;AAC9D,QAAA,IAAI,iBAAiB,IAAI,IAAI,EAAE;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAc;AACzD,YAAA,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ;AACpE,YAAA,OAAO,MAAM;QACf;QACA,OAAO;AACL,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,UAAU,EAAE,YAAY;AACxB,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,cAAc,EAAE,qBAAqB;YACrC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ;AAC1D,YAAA,SAAS,EAAE;SACZ;IACH;AAEQ,IAAA,wBAAwB,CAAC,MAAiB,EAAA;AAChD,QAAA,IAAK,QAAgB,CAAC,mBAAmB,EAAE;AACzC,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAClC;aAAO;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;YAC3B,IAAI,CAAC,eAAe,EAAE;QACxB;IACF;AAEQ,IAAA,mBAAmB,CAAC,MAAiB,EAAA;AAC3C,QAAA,MAAM,UAAU,GAAI,QAAgB,CAAC,mBAAmB,CAAC,MAAK;AAC5D,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAC7B,QAAA,CAAC,CAAC;AAEF,QAAA,UAAU,CAAC;aACR,IAAI,CAAC,MAAK;YACT,IAAI,CAAC,eAAe,EAAE;AACxB,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;IACpB;AAEA,IAAA,cAAc,CAAC,MAAkB,EAAA;QAC/B,MAAM,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE;AAC7C,QAAA,IAAI,OAAO,CAAC,SAAS,EAAE;YACrB,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;QACpD;aAAO;YACL,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;QACvD;IACF;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;QACjC,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;AACpC,QAAA,CAAC,CAAC;IACJ;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,iBAAiB,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAE1G,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,iBAAiB,EAAE;AACxC,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7B;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM;AACjC,gBAAA,GAAG,IAAI;AACP,gBAAA,yBAAyB,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAChD,aAAA,CAAC,CAAC;QACL;aAAO;YACL,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM;AACjC,gBAAA,GAAG,IAAI;AACP,gBAAA,sBAAsB,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC7C,aAAA,CAAC,CAAC;AAEH,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,sBAAsB,EAAE;AAC7C,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7B;QACF;IACF;IAEA,SAAS,GAAA;AACP,QAAA,OAAO,MAAM,CAAC,UAAU,GAAG,GAAG;IAChC;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;IAC1B;IAEA,cAAc,GAAA;QACZ,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE;QACzC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AAC3C,QAAA,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3E;AAEA,IAAA,iBAAiB,CAAC,KAAsB,EAAA;AACtC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7B;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;+GApNW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,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,cADA,MAAM,EAAA,CAAA,CAAA;;4FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBlC;;;AAGG;AACH,MAAM,kBAAkB,GAAuB,MAAEA,IAAE,MAAEC,IAAE,EAAE;AAQzD;;AAEG;MAEU,WAAW,CAAA;AAStB;;AAEG;AACqB,IAAA,SAAA,IAAA,CAAA,kBAAkB,GAAoC,IAAI,GAAG,EAAE,CAAC;AAExF;;;;;;;AAOG;AACI,IAAA,OAAO,oBAAoB,CAAC,MAAsC,EAAE,SAAkB,EAAA;QAC3F,IAAI,CAAC,MAAM,EAAE;YACX;QACF;QACA,IAAI,SAAS,EAAE;YACb,WAAW,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;QACvD;QACA,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YAChD,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;gBACjD,WAAW,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;YACvD;QACF;IACF;AAEA,IAAA,WAAA,GAAA;AAnCQ,QAAA,IAAA,CAAA,kBAAkB,GAAgB,IAAI,GAAG,EAAE;AAC3C,QAAA,IAAA,CAAA,mBAAmB,GAAqC,IAAI,GAAG,EAAE;AACjE,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAACC,YAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;;AAgCpD,QAAA,WAAW,CAAC,oBAAoB,CAAC,kBAAkB,CAAC;QACpD,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;;QAG/G,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;YACrD,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;gBAChD,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBACvC,IAAI,YAAY,EAAE;oBAChB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC;gBACjD;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;AACI,IAAA,yBAAyB,CAAC,SAAiB,EAAA;AAChD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,IAAI;QACvF,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC;IAC/C;AAEA;;;AAGG;AACI,IAAA,uBAAuB,CAAC,SAAiB,EAAE,GAAW,EAAE,IAAa,EAAA;AAC1E,QAAA,MAAM,YAAY,GAAG,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,IAAI;QACvG,MAAM,GAAG,GAAG,CAAA,EAAG,SAAS,IAAI,YAAY,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE;QACjD,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACpC,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;QAEA,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC;QACjD,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,OAAO;QAChB;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAC3C,GAAG,CAAC,CAAC,YAAY,KAAI;AACnB,YAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,YAAiC,CAAC;AACtE,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC;AAChC,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC;AACtC,QAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;QAED,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC;QAC1C,OAAO,CAAC,SAAS,CAAC;AAChB,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC;gBACpC,OAAO,CAAC,KAAK,CAAC,CAAA,0BAAA,EAA6B,SAAS,CAAA,CAAA,EAAI,YAAY,CAAA,SAAA,EAAY,GAAG,CAAA,CAAE,CAAC;AACtF,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YAClB;AACD,SAAA,CAAC;AAEF,QAAA,OAAO,OAAO;IAChB;AAEA;;;AAGG;AACI,IAAA,GAAG,CAAC,GAAW,EAAA;AACpB,QAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;IACvC;AAEA;;;;;AAKG;IACK,gBAAgB,CAAC,SAAiB,EAAE,IAAY,EAAA;AACtD,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,IAAI,EAAE;QAClC,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACpC,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;QAEA,MAAM,kBAAkB,GAAG,WAAW,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;QACxE,IAAI,CAAC,kBAAkB,EAAE;AACvB,YAAA,OAAO,CAAC,KAAK,CAAC,6CAA6C,SAAS,CAAA,EAAA,CAAI,CAAC;AACzE,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;AAEA,QAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC;QAC7C,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC;QAC3C;AACA,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC;AAEhC,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC;IACjB;AAEA;;;;AAIG;IACK,gBAAgB,CAAC,IAAY,EAAE,YAA+B,EAAA;AACpE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE;AAC9D,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,YAAY,EAAE,EAAE,IAAI,CAAC;IACnF;AAEA;;AAEG;AACH,IAAA,GAAG,CAAC,gBAAwB,EAAE,GAAA,GAAc,IAAI,EAAA;QAC9C,IAAI,GAAG,EAAE;AACP,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACf;AACA,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC7C;AAEA,IAAA,IAAI,CAAC,SAAwB,EAAA;AAC3B,QAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;AACnC,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,IAAI;AACjF,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC;QAC1C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAK;AAC7C,YAAA,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC;YAC1C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAC3F,QAAA,CAAC,CAAC;IACJ;IAEA,OAAO,CAAC,GAAsB,EAAE,iBAA2C,EAAA;QACzE,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAC;IAC9D;+GAvKW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,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,WAAW,cADE,MAAM,EAAA,CAAA,CAAA;;4FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCOZ,eAAe,CAAA;AA2BpC;MAGY,kBAAkB,CAAA;AAD/B,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAACA,YAAU,CAAC;AACzB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAiB,IAAI,CAAC;AACzD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAM,IAAI,CAAC;AAC5C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,aAAa,CAAuB,CAAC,CAAC;AAEvD,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAM,IAAI,CAAC;AA6LzD,IAAA;aApMwB,IAAA,CAAA,gCAAgC,GAAG,mCAAH,CAAuC;IAS9F,IAAI,GAAA;AACF,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAsB,IAAI,CAAC,QAAQ,CAAC,uCAAuC,CAAC,EAAE;AAChF,YAAA,eAAe,EAAE;SAClB;AACA,aAAA,IAAI,CACHC,KAAG,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EAC5C,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,qBAAqB,EAAE;AAC5B,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACjB,QAAA,CAAC,CAAC;AAEH,aAAA,SAAS,EAAE;IAChB;IAEA,MAAM,GAAA;AACJ,QAAA,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAI;YACrD,IAAI,CAAC,kCAAkC,EAAE;AAEzC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC;AACnF,YAAA,IAAI,SAAS,EAAE,KAAK,EAAE;gBACpB,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAClD,gBAAA,UAAU,CAAC,IAAI,GAAG,QAAQ;AAC1B,gBAAA,UAAU,CAAC,IAAI,GAAG,4BAA4B;AAC9C,gBAAA,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK;AAClC,gBAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;YAC9B;AACA,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAC/B,IAAI,CAAC,MAAM,EAAE;AACf,QAAA,CAAC,CAAC;IACJ;IAEA,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,IAAI,CAC3C,MAAM,CAAC,CAAC,KAAK,KAAuB,KAAK,KAAK,IAAI,CAAC,EACnD,oBAAoB,EAAE,CACvB;IACH;IAEA,cAAc,GAAA;AACZ,QAAA,OAAO,EAAE,CAAC,EAAE,CAAC;IACf;IAEA,cAAc,GAAA;AACZ,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC;IAClB;IAEA,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;IACpC;IAEA,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;IACxC;IAEA,mBAAmB,GAAA;QACjB,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,OAAO,EAAE,CAAC;YACR,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,IAAI;AACvD,YAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ;AACpC,SAAA,CAAC;IACJ;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC;AACF,aAAA,GAAG,CAAgB,IAAI,CAAC,QAAQ,CAAC,kCAAkC,CAAC,EAAE;AACrE,YAAA,eAAe,EAAE;SAClB;aACA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;AAC/B,aAAA,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAEnD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;IACtC;IAEA,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK;IACjF;AAEA,IAAA,SAAS,CAAC,SAAkB,EAAA;QAC1B,MAAM,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;AAC9D,QAAA,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,CAAC;AAEpD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC;AACnF,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,MAAM,EAAE;IACf;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;IACzB;AAEQ,IAAA,YAAY,CAAC,OAA4B,EAAA;AAC/C,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC;QAEnD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;AAChD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;IACzD;IAEQ,iBAAiB,CAAC,OAA4B,EAAE,KAAe,EAAA;AACrE,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK;QAC5E,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;QAEpD,OAAO;YACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,WAAW;YACX,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK;YACL,kBAAkB,EAAE,OAAO,CAAC,QAAQ;AACpC,YAAA,IAAI,EAAE,WAAW;YACjB,UAAU,EAAE,SAAS,CAAC,SAAS;YAC/B,WAAW,EAAE,SAAS,CAAC;SACxB;IACH;AAEQ,IAAA,gBAAgB,CAAC,WAAoB,EAAA;AAC3C,QAAA,MAAM,KAAK,GAAG,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;QAEpE,OAAO;AACL,YAAA,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;YACnB,UAAU,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;SAC3D;IACH;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3B;AAEQ,IAAA,cAAc,CAAC,MAAc,EAAA;QACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC3B,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,kBAAkB,CAAC,SAAkB,EAAA;AAC3C,QAAA,MAAM,SAAS,GAAG,SAAS,EAAE,IAAI,EAAE;QACnC,IAAI,CAAC,SAAS,IAAI,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAC3D,YAAA,OAAO,GAAG;QACZ;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAC5D,YAAA,OAAO,GAAG;QACZ;AAEA,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtD,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;AACzC,gBAAA,OAAO,GAAG;YACZ;AAEA,YAAA,MAAM,aAAa,GAAG,CAAA,EAAG,GAAG,CAAC,QAAQ,CAAA,EAAG,GAAG,CAAC,MAAM,CAAA,EAAG,GAAG,CAAC,IAAI,EAAE;AAC/D,YAAA,OAAO,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,GAAG,GAAG,aAAa;QACxE;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,GAAG;QACZ;IACF;AAEQ,IAAA,0BAA0B,CAAC,SAAiB,EAAA;AAClD,QAAA,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QAClE,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC;AAExD,QAAA,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAA,EAAG,eAAe,CAAC,MAAM,CAAA,CAAE,CAAC;IACjG;IAEQ,kCAAkC,GAAA;AACxC,QAAA,cAAc,CAAC,OAAO,CACpB,kBAAkB,CAAC,gCAAgC,EACnD,IAAI,CAAC,kBAAkB,CAAC,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAC,CACvG;IACH;AAEQ,IAAA,QAAQ,CAAC,IAAY,EAAA;QAC3B,OAAO,CAAA,EAAG,IAAI,CAAC,UAAU,EAAE,CAAA,EAAG,IAAI,EAAE;IACtC;IAEQ,UAAU,GAAA;AAChB,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;AAC7D,QAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,CAAA,EAAG,OAAO,GAAG;IACxD;+GApMW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAlB,kBAAkB,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;;ACjED;AACA;AACA;IAoDY;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,kBAAyB;AACzB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,0BAAoC;AACpC,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,qBAAgC;AAChC,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,mCAAgD;AAChD,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,YAAmB;AACrB,CAAC,EANW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;MASV,UAAU,CAAA;AADvB,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC1B,IAAA,CAAA,OAAO,GAAW,EAAE;QACnB,IAAA,CAAA,cAAc,GACpB,MAAK;AACH,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,0BAA0B,EAAE;YAC1D,OAAO;AACL,gBAAA,OAAO,EAAE;AACP,oBAAA,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ;AAC5C,0BAAE,IAAI,CAAC,aAAa,CAAC,QAAQ;AAC7B,0BAAE,IAAI;AACR,oBAAA,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;oBAC3C,IAAI,gBAAgB,IAAI;0BACpB,EAAE,sBAAsB,EAAE,MAAM,CAAC,gBAAgB,CAAC;0BAClD,EAAE,CAAC;AACR,iBAAA;aACF;AACH,QAAA,CAAC;AAqBK,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,GAAG,EAAgC;AAC1D,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,GAAG,WAAqC,KAC7D,KAAK,CAAC,GAAG,WAAW,CAAC;AAEf,QAAA,IAAA,CAAA,aAAa,GAAkB;AACrC,YAAA,WAAW,EAAE,aAAa;AAC1B,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,cAAc,EAAE,aAAa;SAC9B;AAEM,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,IAA6B,KAAI,EAAE,CAAC;AAmCtD,QAAA,IAAA,CAAA,iBAAiB,GAA6C;YACpE,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,KAAU,KAC7B,KAAK,KAAK,IAAI,KAAK,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;AACvE,kBAAE,IAAI,CAAC,SAAS,CAAC,KAAK;AACtB,kBAAE,KAAK;YACX,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,KAAU,KAChC,KAAK,KAAK,IAAI,KAAK,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;AACvE,kBAAE,IAAI,CAAC,SAAS,CAAC,KAAK;AACtB,kBAAE,KAAK;AACX,YAAA,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,KAAU,KAC7B,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK;AACjC,kBAAE,IAAI,CAAC,SAAS,CAAC,KAAK;AACtB,kBAAE,KAAK;YACX,CAAC,WAAW,CAAC,QAAQ,GAAG,CAAC,KAAU,KAAI;AACrC,gBAAA,IAAI,KAAK,YAAY,QAAQ,EAAE;AAC7B,oBAAA,OAAO,KAAK;gBACd;AAEA,gBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,GAAG,KAAI;AACvD,oBAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC;AAC3B,oBAAA,QAAQ,CAAC,MAAM,CACb,GAAG,EACH,QAAQ,YAAY;AAClB,0BAAE;0BACA,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK;AAC7C,8BAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;AACzB,8BAAE,CAAA,EAAG,QAAQ,CAAA,CAAE,CACpB;AACD,oBAAA,OAAO,QAAQ;AACjB,gBAAA,CAAC,EAAE,IAAI,QAAQ,EAAE,CAAC;YACpB,CAAC;AACD,YAAA,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,KAAU,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;SACpE;AAkBS,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAC5B,WAAwB,KACG;YAC3B,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;gBAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC;gBAC9D,IAAI,eAAe,EAAE;oBACnB,OAAO,eAAe,CAAC,MAAM;gBAC/B;gBACA,OAAO,KAAK,CAAC;YACf;AAEA,YAAA,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE;YAC7C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,eAAe,CAAC;YACvD,OAAO,eAAe,CAAC,MAAM;AAC/B,QAAA,CAAC;AAEM,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,WAAwB,KAAI;YACjD,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC;YAE9D,IAAI,eAAe,EAAE;gBACnB,eAAe,CAAC,KAAK,EAAE;AACvB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC;YAC3C;AACF,QAAA,CAAC;QAEM,IAAA,CAAA,OAAO,GAAG,OAAyB,EACxC,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,MAAM,EACN,OAAO,EACP,WAAW,EACX,GAAG,MAAM,EACS,KAAgB;YAClC,MAAM,YAAY,GAChB,CAAC,CAAC,OAAO,MAAM,KAAK,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM;AAChE,gBAAA,IAAI,CAAC,cAAc;iBAClB,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACnC,gBAAA,EAAE;AACJ,YAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;AACvE,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAC3C,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,EAC7C,UAAU,CACX;YACD,MAAM,WAAW,GAAG,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACtD,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC;AACzE,YAAA,IAAI,cAAc,GAAG,MAAM,IAAI,aAAa,CAAC,MAAM;YAEnD,OAAO,IAAI,CAAC,WAAW,CACrB,CAAA,EAAG,OAAO,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,WAAW,GAAG,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,GAAG,EAAE,CAAA,CAAE,EAChF;AACE,gBAAA,GAAG,aAAa;AAChB,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC;AAChC,oBAAA,IAAI,IAAI,IAAI,IAAI,KAAK,WAAW,CAAC;AAC/B,0BAAE,EAAE,cAAc,EAAE,IAAI;0BACtB,EAAE,CAAC;AACR,iBAAA;gBACD,MAAM,EACJ,CAAC;AACC,sBAAE,IAAI,CAAC,iBAAiB,CAAC,WAAW;AACpC,sBAAE,aAAa,CAAC,MAAM,KAAK,IAAI;gBACnC,IAAI,EACF,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK;AACtC,sBAAE;AACF,sBAAE,gBAAgB,CAAC,IAAI,CAAC;AAC7B,aAAA,CACF,CAAC,IAAI,CAAC,OAAO,QAAQ,KAAI;gBACxB,MAAM,CAAC,GAAG,QAA8B;AACxC,gBAAA,CAAC,CAAC,IAAI,GAAG,IAAoB;AAC7B,gBAAA,CAAC,CAAC,KAAK,GAAG,IAAoB;AAE9B,gBAAA,IAAI,OAAO,CAAC,KAAK,SAAS,IAAI,cAAc,KAAK,SAAS;oBACxD,cAAc,GAAG,MAAM;AAEzB,gBAAA,MAAM,eAAe,GAAG,cAAc,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,QAAQ;gBACpE,MAAM,IAAI,GAAG,CAAC;AACZ,sBAAE;AACF,sBAAE,MAAM,eAAe,CAAC,cAAc,CAAC;AAClC,yBAAA,IAAI,CAAC,CAAC,IAAI,KAAI;AACb,wBAAA,IAAI,CAAC,CAAC,EAAE,EAAE;AACR,4BAAA,CAAC,CAAC,IAAI,GAAG,IAAI;wBACf;6BAAO;AACL,4BAAA,CAAC,CAAC,KAAK,GAAG,IAAI;wBAChB;AACA,wBAAA,OAAO,CAAC;AACV,oBAAA,CAAC;AACA,yBAAA,KAAK,CAAC,CAAC,CAAC,KAAI;AACX,wBAAA,CAAC,CAAC,KAAK,GAAG,CAAC;AACX,wBAAA,OAAO,CAAC;AACV,oBAAA,CAAC,CAAC;gBAER,IAAI,WAAW,EAAE;AACf,oBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC3C;AAEA,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AAChB,oBAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,IAAI,CAAC;AAC5C,oBAAA,MAAM,IAAI;gBACZ;gBACA,OAAO,IAAI,CAAC,IAAI;AAClB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AAsCF,IAAA;AAjQC;;;AAGG;IACO,0BAA0B,GAAA;;QAElC,IAAI,KAAK,GACP,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI;QAC/B,IAAI,EAAE,GAAkB,IAAI;QAE5B,OAAO,KAAK,EAAE;AACZ,YAAA,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC9C,YAAA,KAAK,GAAG,KAAK,CAAC,UAAU;QAC1B;AAEA,QAAA,MAAM,MAAM,GAAG,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,GAAG;AACnD,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS;IACrD;IAeU,gBAAgB,CAAC,GAAW,EAAE,KAAU,EAAA;AAChD,QAAA,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC;QAC1C,OAAO,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,kBAAkB,CAAC,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,GAAG,KAAK,CAAA,CAAE,CAAC,CAAA,CAAE;IAC9F;IAEU,aAAa,CAAC,KAAsB,EAAE,GAAW,EAAA;QACzD,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/C;IAEU,kBAAkB,CAAC,KAAsB,EAAE,GAAW,EAAA;AAC9D,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;QACxB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACvE;AAEU,IAAA,aAAa,CAAC,QAA0B,EAAA;AAChD,QAAA,MAAM,KAAK,GAAG,QAAQ,IAAI,EAAE;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CACpC,CAAC,GAAG,KAAK,WAAW,KAAK,OAAO,KAAK,CAAC,GAAG,CAAC,CAC3C;AACD,QAAA,OAAO;AACJ,aAAA,GAAG,CAAC,CAAC,GAAG,KACP,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;cACpB,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG;cAClC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC;aAEnC,IAAI,CAAC,GAAG,CAAC;IACd;AAEU,IAAA,cAAc,CAAC,QAA0B,EAAA;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;QAChD,OAAO,WAAW,GAAG,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,GAAG,EAAE;IAC7C;IAoCU,kBAAkB,CAC1B,OAAsB,EACtB,OAAuB,EAAA;QAEvB,OAAO;YACL,GAAG,IAAI,CAAC,aAAa;AACrB,YAAA,GAAG,OAAO;AACV,YAAA,IAAI,OAAO,IAAI,EAAE,CAAC;AAClB,YAAA,OAAO,EAAE;gBACP,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC;AACrC,gBAAA,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC1B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,EAAE,CAAC;AACxC,aAAA;SACF;IACH;IA4GQ,uBAAuB,CAAC,QAAkB,EAAE,IAAY,EAAA;AAC9D,QAAA,IACE,QAAQ,CAAC,MAAM,KAAK,GAAG;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAClD;YACA;QACF;QAEA,IAAI,CAAC,eAAe,CAAC,SAAS,CAC5B,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,CAC9E;IACH;AAEQ,IAAA,MAAM,oBAAoB,CAChC,MAA0B,EAC1B,IAAY,EAAA;AAEZ,QAAA,IACE,CAAC,MAAM;AACP,YAAA,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAClE;AACA,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,IACE,IAAI,CAAC,QAAQ,CAAC,mCAAmC,CAAC;AAClD,YAAA,IAAI,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAClD;AACA,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;QAC3E,OAAO,SAAS,EAAE;AAChB,cAAE,EAAE,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE;cACtD,EAAE;IACR;+GArRW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAV,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,UAAU,cADG,MAAM,EAAA,CAAA,CAAA;;4FACnB,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACzDlC;;;;;;;;;;;;;;;;;;AAkBG;AACG,SAAU,mBAAmB,CAAC,MAA0B,EAAA;IAC5D,IAAI,SAAS,EAAE,EAAE;QACf,iBAAiB,CAAC,MAAM,CAAC;IAC3B;AAEA,IAAA,WAAW,CAAC,oBAAoB,CAAC,MAAM,CAAC;AAExC,IAAA,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC;IACrC,OAAO,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;AAChE;AAEA,SAAS,WAAW,CAAC,MAA0B,EAAA;IAC7C,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC9C,IAAA,OAAO,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;AAClE;AAEA;;;;AAIG;AACH,SAAS,iBAAiB,CAAC,MAA0B,EAAA;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACjC,IAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB;IACF;IAEA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,QAAQ,EAAE,GAAG,UAAU,CAAC,GAAG,KAAK;IACvC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAE;IAC1C,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,qBAAqB;AAE9D,IAAA,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;QAC7B,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAE;QACtC,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE/D,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,YAAA,OAAO,CAAC,IAAI,CACV,0BAA0B,SAAS,CAAA,IAAA,EAAO,IAAI,CAAA,8BAAA,EAAiC,QAAQ,CAAA,GAAA,EAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAClH;QACH;AACA,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,YAAA,OAAO,CAAC,IAAI,CACV,0BAA0B,SAAS,CAAA,IAAA,EAAO,IAAI,CAAA,iCAAA,EAAoC,QAAQ,CAAA,GAAA,EAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CACnH;QACH;IACF;AACF;AAEA;;;AAGG;AACH,SAAS,eAAe,CAAC,KAAc,EAAE,MAAM,GAAG,EAAE,EAAE,KAAA,GAAqB,IAAI,GAAG,EAAE,EAAA;AAClF,IAAA,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxE,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE;AAC3E,YAAA,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,CAAA,EAAG,MAAM,IAAI,GAAG,CAAA,CAAE,GAAG,GAAG,EAAE,KAAK,CAAC;QAClE;IACF;SAAO;AACL,QAAA,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;IACnB;AAEA,IAAA,OAAO,KAAK;AACd;;AC7EA;;;;;;;;;AASG;MAEU,oBAAoB,CAAA;;aAEP,IAAA,CAAA,iBAAiB,GAAG,MAAH,CAAU;AAUnD,IAAA,WAAA,GAAA;AARiB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,CAAC,mDAAC;;AAIpB,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,mDAAC;AAG/E,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAChE,YAAA,IAAI,KAAK,YAAY,eAAe,EAAE;AACpC,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YAC3B;iBAAO,IACL,KAAK,YAAY,aAAa;AAC9B,gBAAA,KAAK,YAAY,gBAAgB;AACjC,gBAAA,KAAK,YAAY,eAAe;gBAChC,KAAK,YAAY,iBAAiB,EAClC;AACA,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;YAC5B;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;IACI,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,WAAW,EAAE;IACpB;;IAGO,GAAG,GAAA;QACR,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW,EAAE;IACpB;AAEA;;;;;AAKG;IACI,MAAM,KAAK,CAAI,IAAoB,EAAA;QACxC,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI;YACF,OAAO,MAAM,IAAI;QACnB;gBAAU;YACR,IAAI,CAAC,GAAG,EAAE;QACZ;IACF;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;AAC/B,YAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AACjC,YAAA,IAAI,CAAC,cAAc,GAAG,SAAS;QACjC;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YACxB;QACF;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAK;AACpC,YAAA,IAAI,CAAC,cAAc,GAAG,SAAS;YAC/B,OAAO,CAAC,IAAI,CACV,CAAA,0DAAA,EAA6D,oBAAoB,CAAC,iBAAiB,CAAA,6BAAA,CAA+B,CACnI;AACD,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACrB,QAAA,CAAC,EAAE,oBAAoB,CAAC,iBAAiB,CAAC;IAC5C;+GA1EW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;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;;4FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;MCmBZ,mBAAmB,CAAA;aACf,IAAA,CAAA,SAAS,GAAG,MAAH,CAAU;aACnB,IAAA,CAAA,SAAS,GAAG,MAAH,CAAU;aACnB,IAAA,CAAA,WAAW,GAAG,QAAH,CAAY;AAoG/C;;;AAGG;IACK,cAAc,GAAA;AACpB,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAChD,IAAI,CAAC,cAAc,GAAG,EAAC,GAAG,IAAI,CAAC,aAAa,EAAE,EAAC;YAC/C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;AAClD,YAAA,YAAY,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,EAAE,CAAA,CAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClF;IACF;IAEQ,uBAAuB,GAAA;AAC7B,QAAA,IAAI;AACF,YAAA,MAAM,0BAA0B,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA,SAAA,EAAY,IAAI,CAAC,EAAE,CAAA,CAAE,CAAC;AAC9E,YAAA,IAAI,0BAA0B,IAAI,IAAI,EAAE;AACtC,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAwB,CAAC;YACvF;iBAAO;AACL,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAyB,CAAC;YACnD;QACF;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,6BAA6B,CAAC;AAC3D,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAyB,CAAC;QACnD;IACF;AAcA;;;AAGG;AACH,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC;IAC9C;AAEA;;;AAGG;AACH,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC;IAC/C;AAEA;;;AAGG;AACH,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC;IAC/C;AAWA;;AAEG;IACI,CAAC,CAAC,GAAsB,EAAE,iBAA2C,EAAA;QAC1E,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAC;IAC9D;AAEA;;AAEG;AACI,IAAA,QAAQ,CAAC,IAAY,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC;IAC/E;AAEA;;AAEG;AACH,IAAA,WAAA,GAAA;QA1LU,IAAA,CAAA,aAAa,GAAG,KAAK;AAE/B;;;AAGG;QACO,IAAA,CAAA,UAAU,GAAG,KAAK;AAElB,QAAA,IAAA,CAAA,2BAA2B,GAAkB,OAAO,CAAC,OAAO,EAAE;QAE9D,IAAA,CAAA,aAAa,GAAa,EAAE;QAC5B,IAAA,CAAA,gBAAgB,GAAkB,EAAE;AAC3B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAElD;;AAEG;AACa,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrD;;;AAGG;AACa,QAAA,IAAA,CAAA,aAAa,GAAkB,MAAM,CAAC,aAAa,CAAC;AAEpE;;;AAGG;AACa,QAAA,IAAA,CAAA,KAAK,GAAmB,MAAM,CAAC,cAAc,CAAC;AAE9D;;AAEG;AACa,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAE/C;;AAEG;AACa,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE3D;;AAEG;AACa,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAEzD;;AAEG;AACK,QAAA,IAAA,CAAA,iBAAiB,GAAsB,MAAM,CAAC,iBAAiB,CAAC;AAExE;;;;AAIG;QACI,IAAA,CAAA,aAAa,GAAmB,EAAE;AACzC;;;AAGG;QACI,IAAA,CAAA,QAAQ,GAA0B,EAA2B;AAEpE;;;AAGG;QACI,IAAA,CAAA,cAAc,GAAwB,EAAyB;AAEtE;;;;AAIG;AACI,QAAA,IAAA,CAAA,aAAa,GAAwC,MAAM,CAAsB,IAAI,CAAC,cAAc,yDAAC;AAE5G;;;AAGG;AACI,QAAA,IAAA,CAAA,mBAAmB,GAAiC,IAAI,OAAO,EAAuB;QAQ5E,IAAA,CAAA,gBAAgB,GAAG,mBAAmB,CAAC,MAAEH,IAAE,MAAEC,IAAE,EAAE,CAAC;AAE5D,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACjC,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,oBAAoB,GAAG,KAAK;AA4BnC;;;AAGG;QACH,IAAA,CAAA,EAAE,GAAuB,SAAS;AAgClC;;AAEG;AACI,QAAA,IAAA,CAAA,WAAW,GAAgB;YAChC,EAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAC;YAC5C,EAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAC;YAC7C,EAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;SAC9C;QAoBC,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;YACnC,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,cAAc,EAAE;YACvB;AACF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;YAC/B,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;QAC/B,CAAC,CAAC,CACH;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YACvC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC,YAAA,MAAM,MAAM,GAAG,OAAO,IAAI,IAAI,GAAG,CAAC,OAAO,GAAG,SAAS;AACrD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,KAAK,MAAM;AAEpC,YAAA,IAAI,CAAC,EAAE,GAAG,MAAM;YAChB,IAAI,CAAC,uBAAuB,EAAE;AAE9B,YAAA,IAAI,IAAI,CAAC,aAAa,IAAI,SAAS,EAAE;AACnC,gBAAA,KAAK,IAAI,CAAC,oBAAoB,EAAE;YAClC;QACF,CAAC,CAAC,CACH;IACH;AAEA;;;;;AAKG;IACH,WAAW,GAAA;QACT,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1C,QAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE;AACpD,QAAA,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE;AACtC,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACpD;AAEA;;;;;;AAMG;AACH,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AAEtD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC,KAAgC,KAAI;YAC3F,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;gBAChC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AAC/B,YAAA,CAAC,CAAC;QACJ,CAAC,CAAC,CACH;QAED,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACnD,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE;AAEpD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,MAAM,IAAI,CAAC,oBAAoB,EAAE;AAEjC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC9C,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;QACxC,CAAC,CAAC,CACH;IACH;AAEA;;;AAGG;AACH,IAAA,MAAM,WAAW,GAAA;AACf,QAAA,IAAI;AACF,YAAA,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE;gBACnB;YACF;YAEA,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAyB;QAC/E;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;QAC9B;IACF;AAEA;;;;AAIG;IACH,MAAM,YAAY,CAAC,QAA+B,EAAA;AAChD,QAAA,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,uBAAuB,CAAC;YAC9C;QACF;QAEA,MAAM,IAAI,CAAC,0BAA0B,CAAC;YACpC,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,YAAA,QAAQ,EAAE;SACX;aACE,IAAI,CAAC,MAAK;AACT,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;AACjF,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;AAC9B,QAAA,CAAC,CAAC;IACN;AAEA;;;AAGG;AACO,IAAA,MAAM,sBAAsB,GAAA;IACtC;AAEA;;AAEG;IACO,sBAAsB,GAAA;IAChC;AAEA;;AAEG;IACO,mBAAmB,CAAC,aAAqB,IAAI,CAAC,UAAU,EAAE,EAAA,GAAyB,IAAI,CAAC,EAAE,EAAA;AAClG,QAAA,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE;QACtC,IAAI,CAAC,gBAAgB,EAAE;AAEvB,QAAA,IAAI,CAAC,UAAU,IAAI,EAAE,IAAI,IAAI,EAAE;AAC7B,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;QAC1B;AAEA,QAAA,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;YACnC,IAAI,OAAO,GAAG,KAAK;YACnB,MAAM,MAAM,GAAG,MAAK;gBAClB,IAAI,CAAC,OAAO,EAAE;oBACZ,OAAO,GAAG,IAAI;AACd,oBAAA,OAAO,EAAE;gBACX;AACF,YAAA,CAAC;AAED,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC;iBAC5C,IAAI,CACH,SAAS,CAAC,CAAC,OAAO,KAChB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,gBAAgB,MAAM,EAAC,OAAO,EAAE,gBAAgB,EAAC,CAAC,CAAC,CAAC,CACtG,EACD,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEpC,iBAAA,SAAS,CAAC;gBACT,IAAI,EAAE,CAAC,EAAC,OAAO,EAAE,gBAAgB,EAAC,KAAI;oBACpC,MAAM,KAAK,GAAG,OAAO,EAAE,YAAY,EAAE,KAAK,IAAI,EAAE;AAChD,oBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,CAAC;AAC/C,oBAAA,MAAM,EAAE;gBACV,CAAC;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,oBAAA,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC;oBAClD,IAAI,CAAC,sBAAsB,EAAE;AAC7B,oBAAA,MAAM,EAAE;gBACV;AACD,aAAA,CAAC;AACN,QAAA,CAAC,CAAC;IACJ;IAEQ,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;IAC5B;IAEQ,iBAAiB,CAAC,KAAe,EAAE,gBAA+B,EAAA;AACxE,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AACxC,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,SAAS,CAAC;AAC5F,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,SAAS,CAAC;AAC5F,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,WAAW,CAAC;AAChG,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;QAChC,IAAI,CAAC,sBAAsB,EAAE;IAC/B;AAEU,IAAA,gBAAgB,CAAC,KAAe,EAAE,gBAA+B,EAAE,IAAY,EAAA;AACvF,QAAA,QACE,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK;IAErH;IAEU,WAAW,CAAC,aAAqB,IAAI,CAAC,UAAU,EAAE,EAAA,GAAyB,IAAI,CAAC,EAAE,EAAA;AAC1F,QAAA,IAAI,CAAC,UAAU,IAAI,EAAE,IAAI,IAAI,EAAE;AAC7B,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B;AAEA,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAsC;YAClE,IAAI,EAAE,CAAA,KAAA,EAAQ,UAAU,CAAA,aAAA,CAAe;AACvC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE;AACT,SAAA,CAAC;IACJ;AAEU,IAAA,YAAY,CAAC,OAAuB,EAAE,UAAA,GAAqB,IAAI,CAAC,UAAU,EAAA;AAClF,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAgC;YAC5D,IAAI,EAAE,CAAA,KAAA,EAAQ,UAAU,CAAA,aAAA,CAAe;AACvC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW,CAAC;AACnB,SAAA,CAAC;IACJ;AAEU,IAAA,yBAAyB,CAAY,UAAA,GAAqB,IAAI,CAAC,UAAU,EAAA;AACjF,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAkC;YAC9D,IAAI,EAAE,CAAA,KAAA,EAAQ,UAAU,CAAA,6BAAA,CAA+B;AACvD,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE;AACT,SAAA,CAAC;IACJ;AAEU,IAAA,0BAA0B,CAClC,OAA4C,EAC5C,UAAA,GAAqB,IAAI,CAAC,UAAU,EAAA;AAEpC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAgC;YAC5D,IAAI,EAAE,CAAA,KAAA,EAAQ,UAAU,CAAA,6BAAA,CAA+B;AACvD,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW,CAAC;AACnB,SAAA,CAAC;IACJ;AAEU,IAAA,aAAa,CAAa,UAAA,GAAqB,IAAI,CAAC,UAAU,EAAA;AACtE,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAqC;YACjE,IAAI,EAAE,CAAA,KAAA,EAAQ,UAAU,CAAA,eAAA,CAAiB;AACzC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE;AACT,SAAA,CAAC;IACJ;AAEU,IAAA,oBAAoB,CAAC,OAAgB,EAAE,UAAA,GAAqB,IAAI,CAAC,UAAU,EAAA;AACnF,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAgC;YAC5D,IAAI,EAAE,CAAA,KAAA,EAAQ,UAAU,CAAA,gBAAA,CAAkB;AAC1C,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW,CAAC;AACnB,SAAA,CAAC;IACJ;AAEQ,IAAA,MAAM,oBAAoB,GAAA;;QAEhC,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,MACvE,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAC7B,CAAC,YAAW;;AAEV,YAAA,MAAM,IAAI,CAAC,mBAAmB,EAAE;AAChC,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB;YACF;AAEA,YAAA,MAAM,IAAI,CAAC,WAAW,EAAE;AACxB,YAAA,MAAM,IAAI,CAAC,sBAAsB,EAAE;AACrC,QAAA,CAAC,GAAG,CACL,CACF;QAED,MAAM,IAAI,CAAC,2BAA2B;IACxC;+GAndoB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,wEADD,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;4FACpB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBADxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAC;;;ACvC3C;AACA;AACA;AAYM,MAAO,WAEX,SAAQ,UAA4B,CAAA;AAHtC,IAAA,WAAA,GAAA;;QAIE,IAAA,CAAA,qBAAqB,GAAG,CAAC,MAAA,GAAwB,EAAE,KACjD,IAAI,CAAC,OAAO,CAA4C;AACtD,YAAA,IAAI,EAAE,CAAA,sCAAA,CAAwC;AAC9C,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;QACJ,IAAA,CAAA,iBAAiB,GAAG,CAAC,MAAA,GAAwB,EAAE,KAC7C,IAAI,CAAC,OAAO,CAAmC;AAC7C,YAAA,IAAI,EAAE,CAAA,iCAAA,CAAmC;AACzC,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;QACJ,IAAA,CAAA,iBAAiB,GAAG,CAAC,MAAA,GAAwB,EAAE,KAC7C,IAAI,CAAC,OAAO,CAAmC;AAC7C,YAAA,IAAI,EAAE,CAAA,iCAAA,CAAmC;AACzC,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;QACJ,IAAA,CAAA,gBAAgB,GAAG,CAAC,MAAA,GAAwB,EAAE,KAC5C,IAAI,CAAC,OAAO,CAA8C;AACxD,YAAA,IAAI,EAAE,CAAA,iCAAA,CAAmC;AACzC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;QACJ,IAAA,CAAA,aAAa,GAAG,CAAC,MAAA,GAAwB,EAAE,KACzC,IAAI,CAAC,OAAO,CAAgB;AAC1B,YAAA,IAAI,EAAE,CAAA,6BAAA,CAA+B;AACrC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;QACJ,IAAA,CAAA,uBAAuB,GAAG,CAAC,MAAA,GAAwB,EAAE,KACnD,IAAI,CAAC,OAAO,CAAqD;AAC/D,YAAA,IAAI,EAAE,CAAA,wCAAA,CAA0C;AAChD,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACL,IAAA;+GAjDY,WAAW,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAX,WAAW,EAAA,CAAA,CAAA;;4FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB;;;;;;;;;;;;;;;;;;;;;;;MCyCY,iBAAiB,CAAA;AAtC9B,IAAA,WAAA,GAAA;QAuCmB,IAAA,CAAA,YAAY,GAAG,mBAAmB,CAAC,MAAED,IAAE,MAAEC,IAAE,EAAE,CAAC;AAE9C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAC1C,IAAA,CAAA,iBAAiB,GAAG,CAAC;QAE7B,IAAA,CAAA,YAAY,GAAkB,EAAE;QAGhC,IAAA,CAAA,KAAK,GAAa,EAAE;AA0FrB,IAAA;IAxFC,WAAW,GAAA;;IAEX;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE;AAC1C,YAAA,KAAK,IAAI,CAAC,YAAY,EAAE;QAC1B;IACF;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,IAAI,CACnC,CAAC,MAAM,KAAI;AACT,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACrB,QAAA,CAAC,EACD,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CACxC;IACH;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,uBAAuB,CAAC;YAC9C;QACF;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,wBAAwB,CAAC;YAC/C;QACF;AAEA,QAAA,MAAM,OAAO,GAAmB;YAC9B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,UAAU,EAAE,IAAI,CAAC;SAClB;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAC9C,CAAC,MAAM,KAAI;AACT,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;AAC3F,QAAA,CAAC,EACD,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CACxC;IACH;AAEA,IAAA,WAAW,CAAC,MAAqB,EAAA;AAC/B,QAAA,IAAI,MAAM,CAAC,GAAG,KAAK,OAAO,IAAI,MAAM,CAAC,GAAG,KAAK,OAAO,EAAE;YACpD,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;AAEQ,IAAA,MAAM,YAAY,GAAA;AACxB,QAAA,MAAM,SAAS,GAAG,EAAE,IAAI,CAAC,iBAAiB;AAC1C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;AAClC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;AAElB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AAEtB,QAAA,IAAI,CAAC,UAAU,IAAI,EAAE,IAAI,IAAI,EAAE;YAC7B;QACF;AAEA,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AACjD,YAAA,IAAI,SAAS,KAAK,IAAI,CAAC,iBAAiB,EAAE;AACxC,gBAAA,IAAI,CAAC,YAAY,GAAG,MAAM;YAC5B;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,SAAS,KAAK,IAAI,CAAC,iBAAiB,EAAE;AACxC,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;YAC9B;QACF;IACF;AAEQ,IAAA,WAAW,CAAC,UAAkB,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAgB;YAC5C,IAAI,EAAE,CAAA,KAAA,EAAQ,UAAU,CAAA,aAAA,CAAe;AACvC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE;AACT,SAAA,CAAC;IACJ;IAEQ,YAAY,CAAC,UAAkB,EAAE,OAAuB,EAAA;AAC9D,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAU;YACtC,IAAI,EAAE,CAAA,KAAA,EAAQ,UAAU,CAAA,aAAA,CAAe;AACvC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW,CAAC;AACnB,SAAA,CAAC;IACJ;+GArGW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACS,iBAAiB,8xCAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,UAAA,EAAA,IAAA,EAAE,YAAY,2bAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGzE,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAtC7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCT,EAAA,CAAA;oBACD,OAAO,EAAE,CAAC,iBAAiB,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC;AACrF,oBAAA,UAAU,EAAE;AACb,iBAAA;;sBAWE;;sBACA;;;MCvCU,iBAAiB,GAAG,IAAI,cAAc,CAAgC,mBAAmB,EAAE;AACtG,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;MAEY,4BAA4B,GAAG,IAAI,cAAc,CAC5D,8BAA8B,EAC9B;AACE,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;ACZH;;;;AAIG;AACH,MAAM,qBAAqB,GAAkC;IAC3D,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAc,EAAE;AACrD,IAAA,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAiB,CAAC,EAAE;AAC5G,IAAA,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAiB,CAAC;CAC3G;AAED,SAAS,cAAc,CAAC,MAAgC,EAAA;AACtD,IAAA,OAAO,OAAO,MAAM,KAAK,UAAU;AACrC;AAEA,MAAM,cAAc,GAAG;IACrB,SAAS;IACT,OAAO;IACP,MAAM;IACN,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,MAAM;IACN;CACQ;MA0FG,wBAAwB,CAAA;AAnFrC,IAAA,WAAA,GAAA;QAoFmB,IAAA,CAAA,YAAY,GAAG,mBAAmB,CAAC,MAAEJ,IAAE,MAAEC,IAAE,EAAE,CAAC;AAE/D,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAEvB,QAAA,IAAA,CAAA,MAAM,GAAY,MAAM,CAAC,OAAO,CAAC;AAEjC,QAAA,IAAA,CAAA,aAAa,GAAkB,MAAM,CAAC,aAAa,CAAC;AAEpD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAEhC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AAER,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAChD,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAE3D,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;QAErC,IAAA,CAAA,eAAe,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AAE9E,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC;AAEtF;;;AAGG;QACc,IAAA,CAAA,eAAe,GAAG,MAAM,CACvC,IAAI,GAAG,CACL,IAAI,CAAC;AACF,aAAA,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;AAC/C,aAAA,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,MAAgB,CAAC,CAAC,CACtD,2DACF;AAEgB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,GAAG,EAA2B;AAEnD,QAAA,IAAA,CAAA,qBAAqB,IACpC,qBAAqB,CAAC,CAAC,CAAC,CAAC,MAC1B,CAAC,SAAS,IAAI,EAAE,CAAuC;AAExD,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;AAEjG,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,8DAAC;AAE9D,QAAA,IAAA,CAAA,eAAe,GAAG;AAChB,YAAA,EAAE,KAAK,EAAE,iCAAiC,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC7D,YAAA,EAAE,KAAK,EAAE,kCAAkC,EAAE,KAAK,EAAE,SAAS;SAC9D;AASD,QAAA,IAAA,CAAA,QAAQ,GAAmB;AACzB,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,OAAO,EAAE;AACP,oBAAA,CAAC,EAAE,SAAS;AACZ,oBAAA,EAAE,EAAE,SAAS;AACb,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE;AACN;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,OAAO,EAAE;AACP,oBAAA,CAAC,EAAE,SAAS;AACZ,oBAAA,EAAE,EAAE,SAAS;AACb,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE;AACN;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,OAAO,EAAE;AACP,oBAAA,CAAC,EAAE,SAAS;AACZ,oBAAA,EAAE,EAAE,SAAS;AACb,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE;AACN;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,OAAO,EAAE;AACP,oBAAA,CAAC,EAAE,SAAS;AACZ,oBAAA,EAAE,EAAE,SAAS;AACb,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE;AACN;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,OAAO,EAAE;AACP,oBAAA,CAAC,EAAE,SAAS;AACZ,oBAAA,EAAE,EAAE,SAAS;AACb,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE;AACN;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,OAAO,EAAE;AACP,oBAAA,CAAC,EAAE,SAAS;AACZ,oBAAA,EAAE,EAAE,SAAS;AACb,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE;AACN;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,OAAO,EAAE;AACP,oBAAA,CAAC,EAAE,SAAS;AACZ,oBAAA,EAAE,EAAE,SAAS;AACb,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE;AACN;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,OAAO,EAAE;AACP,oBAAA,CAAC,EAAE,SAAS;AACZ,oBAAA,EAAE,EAAE,SAAS;AACb,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,GAAG,EAAE;AACN;AACF;SACF;AAED,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;YACnC,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,OAAO;AAClD,QAAA,CAAC,gEAAC;AAEF,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,OAAO,gEAAC;AAEhF,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,MAAM,0DAAC;AAEzE,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,QAAQ,oDAAC;AAErE,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAiB,MAAK;AAC5C,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC;AACrF,YAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC;AACvD,QAAA,CAAC,yDAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAiB,MAAK;AAC5C,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC;AACrF,YAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC;AACvD,QAAA,CAAC,yDAAC;AA4RH,IAAA;IAhcC,QAAQ,GAAA;AACN,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACtC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC;AAClF,YAAA,KAAK,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;QACpC;IACF;IAiKA,YAAY,GAAA;QACV,MAAM,KAAK,GAAiB,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,EAAE;AAC1G,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE;AAE7E,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;YACzB,OAAO;AACL,gBAAA,QAAQ,EAAE;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,EAAE,EAAE,cAAc;AAClB,wBAAA,GAAG,EAAE,eAAe;AACpB,wBAAA,GAAG,EAAE,eAAe;AACpB,wBAAA,GAAG,EAAE,eAAe;AACpB,wBAAA,GAAG,EAAE,eAAe;AACpB,wBAAA,GAAG,EAAE,eAAe;AACpB,wBAAA,GAAG,EAAE,eAAe;AACpB,wBAAA,GAAG,EAAE,eAAe;AACpB,wBAAA,GAAG,EAAE,eAAe;AACpB,wBAAA,GAAG,EAAE,eAAe;AACpB,wBAAA,GAAG,EAAE;AACN,qBAAA;AACD,oBAAA,WAAW,EAAE;AACX,wBAAA,KAAK,EAAE;AACL,4BAAA,OAAO,EAAE;AACP,gCAAA,KAAK,EAAE,eAAe;AACtB,gCAAA,aAAa,EAAE,SAAS;AACxB,gCAAA,UAAU,EAAE,eAAe;AAC3B,gCAAA,WAAW,EAAE;AACd,6BAAA;AACD,4BAAA,SAAS,EAAE;AACT,gCAAA,UAAU,EAAE,eAAe;AAC3B,gCAAA,eAAe,EAAE,eAAe;AAChC,gCAAA,KAAK,EAAE,SAAS;AAChB,gCAAA,UAAU,EAAE;AACb;AACF,yBAAA;AACD,wBAAA,IAAI,EAAE;AACJ,4BAAA,OAAO,EAAE;AACP,gCAAA,KAAK,EAAE,cAAc;AACrB,gCAAA,aAAa,EAAE,eAAe;AAC9B,gCAAA,UAAU,EAAE,eAAe;AAC3B,gCAAA,WAAW,EAAE;AACd,6BAAA;AACD,4BAAA,SAAS,EAAE;AACT,gCAAA,UAAU,EAAE,cAAc;AAC1B,gCAAA,eAAe,EAAE,eAAe;AAChC,gCAAA,KAAK,EAAE,eAAe;AACtB,gCAAA,UAAU,EAAE;AACb;AACF;AACF;AACF;aACF;QACH;AAAO,aAAA,IAAI,MAAM,KAAK,MAAM,EAAE;YAC5B,OAAO;AACL,gBAAA,QAAQ,EAAE;oBACR,OAAO,EAAE,KAAK,CAAC,OAAO;AACtB,oBAAA,WAAW,EAAE;AACX,wBAAA,KAAK,EAAE;AACL,4BAAA,OAAO,EAAE;AACP,gCAAA,KAAK,EAAE,eAAe;AACtB,gCAAA,aAAa,EAAE,SAAS;AACxB,gCAAA,UAAU,EAAE,eAAe;AAC3B,gCAAA,WAAW,EAAE;AACd,6BAAA;AACD,4BAAA,SAAS,EAAE;AACT,gCAAA,UAAU,EAAE,eAAe;AAC3B,gCAAA,eAAe,EAAE,eAAe;AAChC,gCAAA,KAAK,EAAE,SAAS;AAChB,gCAAA,UAAU,EAAE;AACb;AACF,yBAAA;AACD,wBAAA,IAAI,EAAE;AACJ,4BAAA,OAAO,EAAE;AACP,gCAAA,KAAK,EAAE,eAAe;AACtB,gCAAA,aAAa,EAAE,eAAe;AAC9B,gCAAA,UAAU,EAAE,eAAe;AAC3B,gCAAA,WAAW,EAAE;AACd,6BAAA;AACD,4BAAA,SAAS,EAAE;AACT,gCAAA,UAAU,EAAE,eAAe;AAC3B,gCAAA,eAAe,EAAE,eAAe;AAChC,gCAAA,KAAK,EAAE,eAAe;AACtB,gCAAA,UAAU,EAAE;AACb;AACF;AACF;AACF;aACF;QACH;aAAO;YACL,OAAO;AACL,gBAAA,QAAQ,EAAE;oBACR,OAAO,EAAE,KAAK,CAAC,OAAO;AACtB,oBAAA,WAAW,EAAE;AACX,wBAAA,KAAK,EAAE;AACL,4BAAA,OAAO,EAAE;AACP,gCAAA,KAAK,EAAE,eAAe;AACtB,gCAAA,aAAa,EAAE,SAAS;AACxB,gCAAA,UAAU,EAAE,eAAe;AAC3B,gCAAA,WAAW,EAAE;AACd,6BAAA;AACD,4BAAA,SAAS,EAAE;AACT,gCAAA,UAAU,EAAE,cAAc;AAC1B,gCAAA,eAAe,EAAE,eAAe;AAChC,gCAAA,KAAK,EAAE,eAAe;AACtB,gCAAA,UAAU,EAAE;AACb;AACF,yBAAA;AACD,wBAAA,IAAI,EAAE;AACJ,4BAAA,OAAO,EAAE;AACP,gCAAA,KAAK,EAAE,eAAe;AACtB,gCAAA,aAAa,EAAE,eAAe;AAC9B,gCAAA,UAAU,EAAE,eAAe;AAC3B,gCAAA,WAAW,EAAE;AACd,6BAAA;AACD,4BAAA,SAAS,EAAE;AACT,gCAAA,UAAU,EAAE,oDAAoD;AAChE,gCAAA,eAAe,EAAE,oDAAoD;AACrE,gCAAA,KAAK,EAAE,uBAAuB;AAC9B,gCAAA,UAAU,EAAE;AACb;AACF;AACF;AACF;aACF;QACH;IACF;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,KAAK,iBAAiB,GAAG,EAAE,GAAG,CAAC,GAAG,qBAAqB,CAAC;AAChG,QAAA,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,oBAAoB,IAAI,EAAE,EAAE;YACnD,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;gBAChC;YACF;AACA,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;AAC9D,YAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK;YACvB;iBAAO;AACL,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YACpB;QACF;AACA,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,YAAY,CAAC,OAAgB,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,kBAAkB;IAC3E;AAEA;;AAEG;AACK,IAAA,iBAAiB,CAAC,KAAqB,EAAA;QAC7C,OAAO,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM;IAC3F;AAEA;;;AAGG;IACK,MAAM,UAAU,CAAC,KAAqB,EAAA;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;QAC9C,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,QAAQ;QACjB;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,OAAO;QAChB;AAEA,QAAA,MAAM,IAAI,GAAI,KAAK,CAAC,MAA+B;AAChD,aAAA,IAAI,CAAC,CAAC,MAAM,KAAI;YACf,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAChF,YAAA,OAAO,MAAM;AACf,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,KAAK,KAAI;YACf,OAAO,CAAC,KAAK,CAAC,CAAA,+CAAA,EAAkD,KAAK,CAAC,EAAE,CAAA,EAAA,CAAI,EAAE,KAAK,CAAC;YACpF,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAK,IAAe;AAC5E,QAAA,CAAC;AACA,aAAA,OAAO,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEtD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC;AACvC,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,sBAAsB,CAAC,iBAAiC,EAAA;AAC9D,QAAA,IAAI,iBAAiB,CAAC,aAAa,EAAE;AACnC,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,aAAa;AAClD,iBAAA,MAAM,CAAC,CAAC,KAAK,KAA4C,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1E,iBAAA,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAClD;AAEA,QAAA,MAAM,aAAa,GAChB,IAAI,CAAC,iBAAiB,CAAC,iBAAiB;cACrC,SAAS,IAAI,EAAE;AACrB,QAAA,MAAM,QAAQ,GAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAEhE,QAAA,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YAC/B,QAAQ,CAAC,IAAI,CAAC;AACZ,gBAAA,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK;AAClE,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,QAAQ;IACjB;AAEQ,IAAA,sBAAsB,CAAC,iBAAiC,EAAA;AAC9D,QAAA,IAAI,iBAAiB,CAAC,aAAa,EAAE;AACnC,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,aAAa;AAClD,iBAAA,MAAM,CAAC,CAAC,KAAK,KAA4C,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1E,iBAAA,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAClD;QAEA,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEQ,IAAA,kBAAkB,CAAC,OAAgB,EAAA;QACzC,IAAI,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAChD,YAAA,OAAO,OAAO;QAChB;QAEA,IAAI,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACjD,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,wCAAA,EAA2C,OAAO,CAAA,gBAAA,EAAmB,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAA,EAAA,CAAI,CAAC;QACnH;AAEA,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,EAAE;IACnC;AAEA,IAAA,YAAY,CAAC,KAAiB,EAAE,IAAY,EAAE,KAAmB,EAAA;AAC/D,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;AACjD,gBAAA,GAAG,KAAK;gBACR,OAAO,EAAE,KAAK,CAAC;AAChB,aAAA,CAAC,CAAC;QACL;AAAO,aAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;AACjD,gBAAA,GAAG,KAAK;gBACR,OAAO,EAAE,KAAK,CAAC;AAChB,aAAA,CAAC,CAAC;QACL;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;QAE5B,KAAK,CAAC,eAAe,EAAE;IACzB;IAEA,UAAU,CAAC,IAAY,EAAE,KAAmB,EAAA;AAC1C,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,YAAA,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACnC;AAAO,aAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AAC7B,YAAA,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC;QACrC;IACF;IAEA,MAAM,cAAc,CAAC,KAAa,EAAA;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC;QAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC;AAE5D,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;AACjD,YAAA,GAAG,KAAK;AACR,YAAA,MAAM,EAAE,WAAW;AACnB,YAAA,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO;kBAC/D,KAAK,CAAC;AACR,mBAAG,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC;YAC7C,OAAO,EACL,SAAS,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO;AACpF,mBAAG,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,KAAK,CAAC,OAAO;kBACxC,KAAK,CAAC;AACb,SAAA,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,oBAAoB,EAAE,CAAC,EAAE,OAAO;AACxG,QAAA,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;IACjH;AAEA,IAAA,gBAAgB,CAAC,KAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM;AAChD,YAAA,GAAG,IAAI;AACP,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC,CAAC;IACL;+GAhfW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,iOAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/EzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA1ES,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,UAAA,EAAA,IAAA,EAAE,kBAAkB,0dAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAgF3D,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAnFpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,CAAC;AACvE,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyET,EAAA,CAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EACH;AACH;AACF,iBAAA;;;AC/ID;AACA;AACA;AAYM,MAAO,cAEX,SAAQ,UAA4B,CAAA;AAHtC,IAAA,WAAA,GAAA;;QAIE,IAAA,CAAA,YAAY,GAAG,CAAC,MAAA,GAAwB,EAAE,KACxC,IAAI,CAAC,OAAO,CAA6B;AACvC,YAAA,IAAI,EAAE,CAAA,gCAAA,CAAkC;AACxC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,gBAAgB,GAAG,CACjB,EAAE,MAAM,EAAE,GAAG,KAAK,EAA0B,EAC5C,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAA6B;YACvC,IAAI,EAAE,CAAA,uCAAA,EAA0C,MAAM,CAAA,CAAE;AACxD,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,aAAa,GAAG,CAAC,IAA0B,EAAE,MAAA,GAAwB,EAAE,KACrE,IAAI,CAAC,OAAO,CAA6B;AACvC,YAAA,IAAI,EAAE,CAAA,iCAAA,CAAmC;AACzC,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW,CAAC,QAAQ;AAC1B,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;QACJ,IAAA,CAAA,eAAe,GAAG,CAAC,MAAA,GAAwB,EAAE,KAC3C,IAAI,CAAC,OAAO,CAA6B;AACvC,YAAA,IAAI,EAAE,CAAA,mCAAA,CAAqC;AAC3C,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;QACJ,IAAA,CAAA,WAAW,GAAG,CAAC,MAAA,GAAwB,EAAE,KACvC,IAAI,CAAC,OAAO,CAAwC;AAClD,YAAA,IAAI,EAAE,CAAA,8BAAA,CAAgC;AACtC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,IAAqB,EAAE,MAAA,GAAwB,EAAE,KAC9D,IAAI,CAAC,OAAO,CAA6B;AACvC,YAAA,IAAI,EAAE,CAAA,8BAAA,CAAgC;AACtC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW,CAAC,IAAI;AACtB,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACL,IAAA;+GAvDY,cAAc,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAd,cAAc,EAAA,CAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;;ACND;;;AAGG;MAEU,WAAW,CAAA;AAOtB,IAAA,WAAA,GAAA;AANiB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACpD,IAAA,CAAA,iBAAiB,GAAkB,IAAI;AAe/C;;AAEG;QACH,IAAA,CAAA,KAAK,GAAQ,IAAI;AAEjB;;AAEG;QACH,IAAA,CAAA,WAAW,GAAY,KAAK;AApB1B,QAAA,IAAI,CAAC;AACF,aAAA,eAAe;AACf,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,EAChD,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,CAAC,EAChC,oBAAoB,EAAE;aAEvB,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,YAAY,EAAE;AACrB,QAAA,CAAC,CAAC;IACN;AAYA;;;AAGG;AACH,IAAA,IAAI,UAAU,GAAA;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE;AAClD,QAAA,MAAM,gBAAgB,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AACtD,QAAA,MAAM,iBAAiB,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACxD,MAAM,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAC1C,IAAI,EAAE,WAAW,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,QAAQ,IAAI,IAAI,EAAE,kBAAkB,CAC9E;AAED,QAAA,OAAO,CAAA,EAAG,gBAAgB,IAAI,EAAE,GAAG,iBAAiB,IAAI,EAAE,CAAA,CAAE,CAAC,WAAW,EAAE,IAAI,mBAAmB;IACnG;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE;AAClD,QAAA,QACE,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/D,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,EAAE;IAEN;AAEA;;;AAGG;IACH,YAAY,GAAA;AACV,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC;QAEnF,IAAI,CAAC,QAAQ,EAAE;YACb;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,QAAQ,KAAK,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;YAC3E;QACF;AAEA,QAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ;QAEjC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,IAAI,CACrC,CAAC,IAAI,KAAI;AACP,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAY,CAAC;AACtC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACzB,QAAA,CAAC,EACD,CAAC,KAAK,KAAI;;;AAGR,YAAA,IAAK,KAA6B,EAAE,MAAM,KAAK,GAAG,EAAE;AAClD,gBAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;YAC3G;AACA,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AAC1B,QAAA,CAAC,CACF;IACH;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QACxB,IAAI,CAAC,YAAY,EAAE;IACrB;AAEA;;;;AAIG;AACK,IAAA,mBAAmB,CAAC,KAAW,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,QAAA,MAAM,CAAC,gBAAgB,CACrB,MAAM,EACN,MAAK;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM;QAC5B,CAAC,EACD,KAAK,CACN;QACD,IAAI,KAAK,EAAE;AACT,YAAA,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;QAC7B;IACF;AAEQ,IAAA,WAAW,CAAC,KAAc,EAAA;AAChC,QAAA,QACE;AACE,cAAE,IAAI;aACL,KAAK,CAAC,KAAK;aACX,MAAM,CAAC,OAAO;AACd,aAAA,KAAK,CAAC,CAAC,EAAE,CAAC;aACV,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;aACrB,IAAI,CAAC,EAAE;AACP,aAAA,WAAW,EAAE,IAAI,EAAE;IAE1B;AAEQ,IAAA,sBAAsB,CAAC,IAAS,EAAA;QACtC,OAAO,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,QAAQ,IAAI,IAAI,EAAE,kBAAkB,IAAI,IAAI,EAAE,WAAW,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI;IAC3G;+GApIW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAX,WAAW,EAAA,CAAA,CAAA;;4FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB;;;MC8BY,aAAa,CAAA;+GAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApCd;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kGAAA,CAAA,EAAA,CAAA,CAAA;;4FAaU,aAAa,EAAA,UAAA,EAAA,CAAA;kBAvCzB,SAAS;+BACE,MAAM,EAAA,UAAA,EACJ,IAAI,EAAA,QAAA,EACN;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,kGAAA,CAAA,EAAA;;sBAcA;;sBACA;;;MCvCU,oBAAoB,GAAG,IAAI,cAAc,CAAY,sBAAsB;AAElF,SAAU,oBAAoB,CAAC,SAAoB,EAAA;IACvD,OAAO;AACL,QAAA,OAAO,EAAE,oBAAoB;AAC7B,QAAA,QAAQ,EAAE;KACX;AACH;MAGa,WAAW,CAAA;AADxB,IAAA,WAAA,GAAA;QAEU,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAK/E,IAAA;IAHC,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,mBAAmB,IAAI,aAAa;IAClD;+GALW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,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,WAAW,cADE,MAAM,EAAA,CAAA,CAAA;;4FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCerB,cAAc,GAAG,IAAI,cAAc,CAAU,gBAAgB;AAE1E;;AAEG;AACG,SAAU,cAAc,CAAC,OAAgB,EAAA;IAC7C,OAAO;AACL,QAAA,OAAO,EAAE,cAAc;AACvB,QAAA,QAAQ,EAAE;KACX;AACH;MAGa,cAAc,CAAA;AAD3B,IAAA,WAAA,GAAA;QAEU,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AA0B7D,IAAA;AAxBC;;AAEG;IACH,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;IAC5C;AAEA;;AAEG;IACH,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;IAC3C;AAEA;;AAEG;IACH,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;IAC1C;AAEQ,IAAA,OAAO,CAAC,KAA+B,EAAA;AAC7C,QAAA,OAAO,CAAC,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,EAAE,GAAG,KAAK,KAAK,IAAI;IAChE;+GA1BW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,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,cAAc,cADD,MAAM,EAAA,CAAA,CAAA;;4FACnB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACxClC;AACA;AACA;AAeM,MAAO,eAEX,SAAQ,UAA4B,CAAA;AAHtC,IAAA,WAAA,GAAA;;AAIE,QAAA,IAAA,CAAA,qBAAqB,GAAG,CACtB,KAAkC,EAClC,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAAqD;AAC/D,YAAA,IAAI,EAAE,CAAA,0CAAA,CAA4C;AAClD,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;QACJ,IAAA,CAAA,0BAA0B,GAAG,CAAC,MAAA,GAAwB,EAAE,KACtD,IAAI,CAAC,OAAO,CAAsD;AAChE,YAAA,IAAI,EAAE,CAAA,gDAAA,CAAkD;AACxD,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,sBAAsB,GAAG,CACvB,EAAE,EAAE,EAAE,GAAG,KAAK,EAAgC,EAC9C,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAA6B;YACvC,IAAI,EAAE,CAAA,4CAAA,EAA+C,EAAE,CAAA,CAAE;AACzD,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,mBAAmB,GAAG,CACpB,KAAgC,EAChC,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAA4C;AACtD,YAAA,IAAI,EAAE,CAAA,wCAAA,CAA0C;AAChD,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACL,IAAA;+GA7CY,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAf,eAAe,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;MCTY,mBAAmB,CAAA;AAO9B,IAAA,WAAA,GAAA;AALQ,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACjD,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAqB,SAAS,mEAAC;AAG7D,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,OAAO,CAAC,oBAAoB;aAC/C,OAAO,CAAC,oBAAoB,EAAE;AAC7B,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,SAAS,EAAE,OAAO,CAAC,iBAAiB,CAAC;SACtC;AACA,aAAA,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK;AACvC,aAAA,KAAK,EAAE;QAEV,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,YAAY,KAAI;AACzD,YAAA,MAAM,GAAG,GAAG;gBACV,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,OAAO,EAAE,YAAY,CAAC,OAAO;gBAC7B,MAAM,EAAE,YAAY,CAAC,OAAO;AAC5B,gBAAA,IAAI,EAAE;aACP;AACD,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;AACxB,YAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;AAClE,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,CAAC,aAAa,KAAI;YACjE,IAAI,CAAC,aAAa,EAAE;AAClB,gBAAA,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,SAAS,CAAC;AAC3C,gBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,OAAO,CAAC,kBAAkB,CAAC,YAAY,EAAE;AACrE,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;gBACxB;gBACA;YACF;YAEA,IAAI,CAAC,2BAA2B,EAAE;AAElC,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,OAAO,CAAC,kBAAkB,CAAC,YAAY,EAAE;gBACrE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;gBACzG;YACF;YAEA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAK;gBAC/B,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;AAC7G,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,2BAA2B,GAAA;AACzB,QAAA,IAAI,CAAC;AACF,aAAA,0BAA0B;AAC1B,aAAA,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;AACxE,aAAA,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;IAChF;+GAvDW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;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;;4FACnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;MCoHrB,0BAA0B,CAAA;AAvGvC,IAAA,WAAA,GAAA;QAwGmB,IAAA,CAAA,YAAY,GAAG,mBAAmB,CAAC,MAAEN,IAAE,MAAEC,IAAE,EAAE,CAAC;QAIrD,IAAA,CAAA,aAAa,GAA0B,EAAE;QACzC,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,OAAO,GAAG,KAAK;AAGR,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEzC,QAAA,IAAA,CAAA,uBAAuB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,EAAE,IAAI,CAAC,mEAAC;AACjG,QAAA,IAAA,CAAA,uBAAuB,GAAG,QAAQ,CAAC,MAAK;AACzD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,EAAE;AAE5C,YAAA,OAAO,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE;AAC9C,QAAA,CAAC,mEAAC;AAqEH,IAAA;IAnEW,MAAM,MAAM,CAAC,KAAY,EAAA;AACjC,QAAA,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;AAC3B,QAAA,MAAM,IAAI,CAAC,iBAAiB,EAAE;IAChC;AAEA,IAAA,MAAM,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AAEnB,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC;gBAChE,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,UAAU,EAAE;AACb,aAAA,CAAC;YAEF,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,IAAI,EAAE;YACjD,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,CAAC;QAC5C;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;QAC9B;gBAAU;AACR,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACtB;IACF;IAEA,MAAM,YAAY,CAAC,KAAqB,EAAA;QACtC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI;AACnC,QAAA,MAAM,IAAI,CAAC,iBAAiB,EAAE;IAChC;IAEA,MAAM,UAAU,CAAC,YAAiC,EAAA;AAChD,QAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE;YACpC;QACF;AAEA,QAAA,IAAI,CAAC,qBAAqB,GAAG,YAAY,CAAC,kBAAkB;AAE5D,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,kBAAkB,EAAE,CAAC;AAC1F,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;AACxF,YAAA,IAAI,CAAC,mBAAmB,CAAC,2BAA2B,EAAE;AAEtD,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;AACpD,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAChD;AAEA,YAAA,MAAM,IAAI,CAAC,iBAAiB,EAAE;QAChC;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;QAC9B;gBAAU;AACR,YAAA,IAAI,CAAC,qBAAqB,GAAG,SAAS;QACxC;IACF;AAEU,IAAA,qBAAqB,CAAC,UAAkB,EAAA;QAChD,QAAQ,UAAU;AAChB,YAAA,KAAK,UAAU;AACf,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,QAAQ;AACjB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,MAAM;AACf,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,MAAM;AACf,YAAA;AACE,gBAAA,OAAO,WAAW;;IAExB;+GA1FW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzF3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAjGC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,YAAY,+bACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,sBAAA,EAAA,2BAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACP,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,0DAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,GAAG,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACH,OAAO,0YACP,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FA2FJ,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAvGtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,YAAY;wBACZ,eAAe;wBACf,OAAO;wBACP,qBAAqB;wBACrB,GAAG;wBACH,OAAO;wBACP;AACD,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFT,EAAA;AACF,iBAAA;;sBAIE,SAAS;uBAAC,SAAS;;;AC7HtB;AACA;AACA;AAaM,MAAO,eAEX,SAAQ,UAA4B,CAAA;AAHtC,IAAA,WAAA,GAAA;;QAIE,IAAA,CAAA,2BAA2B,GAAG,CAAC,MAAA,GAAwB,EAAE,KACvD,IAAI,CAAC,OAAO,CAAqD;AAC/D,YAAA,IAAI,EAAE,CAAA,gDAAA,CAAkD;AACxD,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,gCAAgC,GAAG,CACjC,EAAE,IAAI,EAAE,GAAG,KAAK,EAA0C,EAC1D,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAA4B;YACtC,IAAI,EAAE,CAAA,wDAAA,EAA2D,IAAI,CAAA,CAAE;AACvE,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,6BAA6B,GAAG,CAC9B,IAAgC,EAChC,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAA4B;AACtC,YAAA,IAAI,EAAE,CAAA,kDAAA,CAAoD;AAC1D,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW,CAAC,IAAI;AACtB,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,6BAA6B,GAAG,CAC9B,EAAE,IAAI,EAAE,GAAG,KAAK,EAAuC,EACvD,IAAgC,EAChC,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAA4B;YACtC,IAAI,EAAE,CAAA,mDAAA,EAAsD,IAAI,CAAA,CAAE;AAClE,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW,CAAC,IAAI;AACtB,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,6BAA6B,GAAG,CAC9B,EAAE,IAAI,EAAE,GAAG,KAAK,EAAuC,EACvD,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAA4B;YACtC,IAAI,EAAE,CAAA,mDAAA,EAAsD,IAAI,CAAA,CAAE;AAClE,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACL,IAAA;+GAxDY,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAf,eAAe,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;MCTY,0BAA0B,CAAA;AADvC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAE1D,IAAA,CAAA,YAAY,GAAiC,EAAE;QAC/C,IAAA,CAAA,kBAAkB,GAAsC,IAAI;AAc7D,IAAA;AAZC,IAAA,MAAM,gBAAgB,GAAA;QACpB,IAAI,CAAC,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,2BAA2B,EAAE;QAC5E,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,SAAS,CAAC,IAAI,IAAI;IAClG;AAEA,IAAA,eAAe,CAAC,WAAuC,EAAA;QACrD,IAAI,WAAW,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;YACjD;QACF;QAEA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC,OAAO;IAC5C;+GAjBW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAA1B,0BAA0B,EAAA,CAAA,CAAA;;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC;;;MC8BY,qCAAqC,CAAA;AAxBlD,IAAA,WAAA,GAAA;QAyBY,IAAA,CAAA,oBAAoB,GAAe,EAAE;AAC5B,QAAA,IAAA,CAAA,0BAA0B,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAsBnF,IAAA;AApBC,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,EAAE;YACxD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,KACvF,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAC5C;QACH;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;QAChC;IACF;AAEQ,IAAA,yBAAyB,CAAC,WAAuC,EAAA;QACvE,OAAO;AACL,YAAA,EAAE,EAAE,CAAA,iBAAA,EAAoB,WAAW,CAAC,IAAI,CAAA,CAAE;AAC1C,YAAA,KAAK,EAAE,WAAW,CAAC,WAAW,IAAI,EAAE;AACpC,YAAA,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,SAAS;YACnC,QAAQ,EAAE,WAAW,CAAC,SAAS;YAC/B,OAAO,EAAE,MAAM,IAAI,CAAC,0BAA0B,CAAC,eAAe,CAAC,WAAW;SAC3E;IACH;+GAvBW,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qCAAqC,8EAFrC,CAAC,eAAe,EAAE,0BAA0B,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlB9C;;;;;;;;;;;;;;;;;AAiBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAlBS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,UAAU,wUAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAqBpD,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBAxBjD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iCAAiC;AAC3C,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,CAAC;AAChE,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;AAiBT,EAAA,CAAA;AACD,oBAAA,SAAS,EAAE,CAAC,eAAe,EAAE,0BAA0B;AACxD,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MCkHY,SAAS,CAAA;AA3HtB,IAAA,WAAA,GAAA;QA4HmB,IAAA,CAAA,YAAY,GAAG,mBAAmB,CAAC,MAAEN,IAAE,MAAEC,IAAE,EAAE,CAAC;AAE/D,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACtB,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAuC7D,IAAA;AArCC,IAAA,iBAAiB,CAAC,KAAkC,EAAA;AAClD,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,KAAK,IAAI,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;IACzE;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;AACjD,YAAA,GAAG,KAAK;AACR,YAAA,SAAS,EAAE,CAAC,KAAK,CAAC;AACnB,SAAA,CAAC,CAAC;IACL;AAEA,IAAA,aAAa,CAAC,MAAqB,EAAA;AACjC,QAAA,IAAI,MAAM,CAAC,GAAG,KAAK,OAAO,EAAE;YAC1B,MAAM,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;YAC/B,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,4BAA4B,CAAC;YACnE,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,6BAA6B,CAAC;AACrE,YAAA,IAAI,EAAE,gBAAgB;AACtB,YAAA,iBAAiB,EAAE;gBACjB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,4BAA4B,CAAC;AAClE,gBAAA,QAAQ,EAAE,WAAW;AACrB,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA,iBAAiB,EAAE;gBACjB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,4BAA4B,CAAC;AAClE,gBAAA,QAAQ,EAAE;AACX,aAAA;YACD,MAAM,EAAE,MAAK;AACX,gBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;YAC/B;AACD,SAAA,CAAC;IACJ;+GAhDW,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAT,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,SAAA,EAFT,CAAC,mBAAmB,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvGtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAsGD,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EApHP,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,sCAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,kCAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,gBAAgB,oUAChB,wBAAwB,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,GAAG,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACH,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,aAAa,+mBACb,0BAA0B,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAE1B,qCAAqC,EAAA,QAAA,EAAA,iCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EADrC,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FA4GJ,SAAS,EAAA,UAAA,EAAA,CAAA;kBA3HrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,YAAY;wBACZ,gBAAgB;wBAChB,wBAAwB;wBACxB,IAAI;wBACJ,OAAO;wBACP,GAAG;wBACH,YAAY;wBACZ,YAAY;wBACZ,aAAa;wBACb,0BAA0B;wBAC1B,aAAa;wBACb;AACD,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsGD,UAAA,CAAA;oBACT,SAAS,EAAE,CAAC,mBAAmB;AAChC,iBAAA;;;MC3HY,eAAe,CAAA;AAjB5B,IAAA,WAAA,GAAA;AAkBY,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAClD,IAAA;+GAHY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAfhB;;;;;;;;;;;GAWT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEwB,iBAAiB,wTAAhC,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEZ,eAAe,EAAA,UAAA,EAAA,CAAA;kBAjB3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE;;;;;;;;;;;AAWT,EAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,iBAAiB;AAC3C,iBAAA;;;ACtBD;AACA;AACA;AAiBM,MAAO,OAEX,SAAQ,UAA4B,CAAA;AAHtC,IAAA,WAAA,GAAA;;QAIE,IAAA,CAAA,GAAG,GAAG,CAAC,MAAA,GAAwB,EAAE,KAC/B,IAAI,CAAC,OAAO,CAA2B;AACrC,YAAA,IAAI,EAAE,CAAA,aAAA,CAAe;AACrB,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,cAAc,GAAG,CACf,EAAE,EAAE,EAAE,GAAG,KAAK,EAAwB,EACtC,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAA6B;YACvC,IAAI,EAAE,CAAA,2BAAA,EAA8B,EAAE,CAAA,CAAE;AACxC,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;QACJ,IAAA,CAAA,iBAAiB,GAAG,CAAC,MAAA,GAAwB,EAAE,KAC7C,IAAI,CAAC,OAAO,CAA6B;AACvC,YAAA,IAAI,EAAE,CAAA,6BAAA,CAA+B;AACrC,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,uBAAuB,GAAG,CACxB,KAAoC,EACpC,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAAiC;AAC3C,YAAA,IAAI,EAAE,CAAA,oCAAA,CAAsC;AAC5C,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;QACJ,IAAA,CAAA,YAAY,GAAG,CAAC,MAAA,GAAwB,EAAE,KACxC,IAAI,CAAC,OAAO,CAA2B;AACrC,YAAA,IAAI,EAAE,CAAA,wBAAA,CAA0B;AAChC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;QACJ,IAAA,CAAA,UAAU,GAAG,CAAC,MAAA,GAAwB,EAAE,KACtC,IAAI,CAAC,OAAO,CAAwB;AAClC,YAAA,IAAI,EAAE,CAAA,qBAAA,CAAuB;AAC7B,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAClB,IAA0B,EAC1B,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAA6B;AACvC,YAAA,IAAI,EAAE,CAAA,6BAAA,CAA+B;AACrC,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW,CAAC,IAAI;AACtB,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,kBAAkB,GAAG,CACnB,IAA2B,EAC3B,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAA6B;AACvC,YAAA,IAAI,EAAE,CAAA,8BAAA,CAAgC;AACtC,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW,CAAC,IAAI;AACtB,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,oBAAoB,GAAG,CACrB,KAAiC,EACjC,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAA6B;AACvC,YAAA,IAAI,EAAE,CAAA,gCAAA,CAAkC;AACxC,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,KAAwB,EAAE,MAAA,GAAwB,EAAE,KACjE,IAAI,CAAC,OAAO,CAA6B;AACvC,YAAA,IAAI,EAAE,CAAA,sBAAA,CAAwB;AAC9B,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACL,IAAA;+GAnGY,OAAO,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAP,OAAO,EAAA,CAAA,CAAA;;4FAAP,OAAO,EAAA,UAAA,EAAA,CAAA;kBADnB;;;MCJY,WAAW,CAAA;AADxB,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAmB;AAC3C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAE;AAC3B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;AACtC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC;AACjC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACtD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;AAC5C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;QAGvC,IAAA,CAAA,IAAI,GAAwB,EAAE;AAqDtC,IAAA;AAnDC,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;IACvC;IAEA,IAAI,SAAS,CAAC,KAAc,EAAA;QAC1B,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,MAAM,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IACvF;AAEA,IAAA,MAAM,QAAQ,GAAA;QACZ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;IAC/E;AAEA;;;;AAIG;AACH,IAAA,iBAAiB,CAAC,KAAsB,EAAA;AACtC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;YAC7B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9C;IACF;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;IAEA,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;IACnC;IAEA,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IAC5C;IAEA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;IAC1C;AAEA,IAAA,iBAAiB,CAAC,iBAAuC,EAAA;QACvD,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,iBAAyC,CAAC;IAC1F;AAEA,IAAA,UAAU,CAAC,gBAAwB,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAgC,CAAC;IAC1G;AAEA,IAAA,kBAAkB,CAAC,IAA2B,EAAA;QAC5C,OAAO,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC;IACtD;+GA9DW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAX,WAAW,EAAA,CAAA,CAAA;;4FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB;;;ACPD;;;;;;;;;;AAUG;MAEU,gBAAgB,CAAA;AAO3B,IAAA,WAAA,GAAA;AANiB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAClD,IAAA,CAAA,OAAO,GAAwC,SAAS;QACxD,IAAA,CAAA,cAAc,GAAuB,SAAS;QAGpD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,KAAI;;YAEjD,MAAM,KAAK,GAAa,OAAO,EAAE,YAAY,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,QAAQ,GAAG,CAAA,EAAG,OAAO,EAAE,kBAAkB,IAAI,EAAE,CAAA,CAAA,EAAI,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE;AACtF,YAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,cAAc,EAAE;AACpC,gBAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;gBAC9B,IAAI,CAAC,UAAU,EAAE;YACnB;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;;AAIG;IACI,eAAe,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO,IAAI,CAAC,OAAO;QACrB;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;AACjD,YAAA,IAAI,CAAC,OAAO,GAAG,SAAS;AACxB,YAAA,MAAM,KAAK;AACb,QAAA,CAAC,CAAC;QAEF,OAAO,IAAI,CAAC,OAAO;IACrB;AAEA;;;;AAIG;IACI,MAAM,cAAc,CAAC,gBAAwB,EAAA;AAClD,QAAA,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC;QAC3D,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA;;AAEG;AACI,IAAA,MAAM,gBAAgB,GAAA;AAC3B,QAAA,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;QACtC,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA;;AAEG;IACI,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS;IAC1B;AAEQ,IAAA,MAAM,YAAY,GAAA;AACxB,QAAA,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAErC,QAAA,OAAO,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,UAAW,CAAC,GAAG,IAAI;IAClE;AAEQ,IAAA,aAAa,CAAC,IAAyB,EAAA;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;QAChD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI;IACjE;AAEQ,IAAA,sBAAsB,CAAC,KAA0B,EAAA;QACvD,MAAM,MAAM,GAAwB,EAAE;AAEtC,QAAA,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE;AAC7E,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB;YACF;AAEA,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;;AAEtB,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvD;YACF;;YAGA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,CAAC,EAAE;AACpE,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACnB;QACF;AAEA,QAAA,OAAO,MAAM;IACf;+GA/FW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,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,gBAAgB,cADH,MAAM,EAAA,CAAA,CAAA;;4FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCqGrB,iBAAiB,CAAA;AAuB5B,IAAA,WAAA,CACmB,EAAqB,EAC/B,MAAc,EACJ,WAAwB,EAAA;QAFxB,IAAA,CAAA,EAAE,GAAF,EAAE;QACZ,IAAA,CAAA,MAAM,GAAN,MAAM;QACI,IAAA,CAAA,WAAW,GAAX,WAAW;AAzBb,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC;AACjC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAUpD,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,aAAa,GAAmB,EAAE;QAClC,IAAA,CAAA,YAAY,GAAiC,EAAkC;QAE7E,IAAA,CAAA,GAAG,GAAW,EAAE;AAOxB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;YAC/C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAK;gBAC9B,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE;AACxF,oBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;gBACpB;AACF,YAAA,CAAC,CAAC;QACJ,CAAC,CAAC,CACH;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AAC3C,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACrB,CAAC,CAAC,CACH;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC9F,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACxB,IAAI,CAAC,0BAA0B,EAAE;YACnC;QACF,CAAC,CAAC,CACH;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,CAAC,KAAmC,KAAI;AAC/F,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QAC3B,CAAC,CAAC,CACH;IACH;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAClF,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACxB,IAAI,CAAC,0BAA0B,EAAE;QACnC;IACF;IAEA,0BAA0B,GAAA;AACxB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AAChE,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,YAAY,EAAE,SAAS;AACvB,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;QAEF,IAAI,WAAW,EAAE;AACf,YAAA,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC;gBACjC,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,UAAU,EAAE;AACb,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,SAAS,CAAC,KAAY,EAAA;;AAEpB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACtB,KAAK,CAAC,cAAc,EAAE;YACtB;QACF;;AAGA,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9D;;AAGA,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM;QAC5B;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACxE;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM;IACjC;AAEA,IAAA,IACI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI;IAClC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAChD;AAEQ,IAAA,QAAQ,CAAC,CAAuB,EAAA;AACtC,QAAA,IAAI,CAAC,6BAA6B,CAAC,UAAU,EAAE;IACjD;IAEA,aAAa,CAAC,MAAkB,EAAE,IAAS,EAAA;QACzC,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;;QAEvD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE;AACnC,YAAA,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;gBACjC;YACF;YAEA,MAAM,CAAC,eAAe,EAAE;YACxB,MAAM,CAAC,cAAc,EAAE;AAEvB,YAAA,IAAI,CAAC,WAAW,CAAC,eAAe,GAAG,IAAI;AACvC,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,gBAAgB;AACzC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7B;QACF;QAEA,MAAM,CAAC,eAAe,EAAE;QACxB,MAAM,CAAC,cAAc,EAAE;AAEvB,QAAA,IAAI,CAAC,WAAW,CAAC,eAAe,GAAG,IAAI;AACvC,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG;AACvB,YAAA,GAAG,gBAAgB;YACnB,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;AACzD,YAAA;AACE,gBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG;gBAC5B,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,OAAO,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK;AACxC,aAAA;AACD,YAAA;AACE,gBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;gBAC7B,IAAI,EAAE,UAAU,CAAC,SAAS;gBAC1B,OAAO,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK;AACzC,aAAA;YACD,EAAE,SAAS,EAAE,IAAI,EAAE;AACnB,YAAA;AACE,gBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;gBAC/B,IAAI,EAAE,UAAU,CAAC,KAAK;gBACtB,OAAO,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK;AAC1C,aAAA;AACD,YAAA,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;AACpF,YAAA;AACE,gBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;gBAC/B,IAAI,EAAE,UAAU,CAAC,QAAQ;AACzB,gBAAA,OAAO,EAAE,CAAC,KAAK,KAAI;AACjB,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;oBACjB,MAAM,CAAC,eAAe,EAAE;oBACxB,MAAM,CAAC,cAAc,EAAE;gBACzB,CAAC;AACD,gBAAA,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;AAClC,aAAA;AACD,YAAA;AACE,gBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ;gBACjC,IAAI,EAAE,UAAU,CAAC,UAAU;AAC3B,gBAAA,OAAO,EAAE,CAAC,KAAK,KAAI;AACjB,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACnB,MAAM,CAAC,eAAe,EAAE;oBACxB,MAAM,CAAC,cAAc,EAAE;gBACzB,CAAC;AACD,gBAAA,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;AAClC;SACF;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B;AAEA;;AAEG;AACK,IAAA,mBAAmB,CAAC,IAAwB,EAAA;QAClD,IAAI,CAAC,IAAI,EAAE,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;AAC3C,YAAA,OAAO,EAAE;QACX;QAEA,OAAO,IAAI,CAAC;AACV,cAAE;AACE,gBAAA;AACE,oBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB;oBACzC,IAAI,EAAE,UAAU,CAAC,IAAI;AACrB,oBAAA,OAAO,EAAE,MAAM,IAAI,CAAC,gBAAgB;AACrC;AACF;AACH,cAAE;AACE,gBAAA;AACE,oBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,cAAc;oBACvC,IAAI,EAAE,UAAU,CAAC,SAAS;oBAC1B,OAAO,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI;AACxC;aACF;IACP;IAEQ,MAAM,cAAc,CAAC,IAAwB,EAAA;QACnD,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,4BAA4B,CAAC;AACvE,QAAA,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;IACnC;AAEQ,IAAA,MAAM,gBAAgB,GAAA;AAC5B,QAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE;QAC9C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,8BAA8B,CAAC;AACzE,QAAA,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;IACnC;AAEQ,IAAA,UAAU,CAAC,KAA2B,EAAA;AAC5C,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;AAC/B,YAAA,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,uBAAuB;AACjD,YAAA,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,wBAAwB;YACnD,IAAI,EAAE,UAAU,CAAC,KAAK;AACtB,YAAA,iBAAiB,EAAE;AACjB,gBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,uCAAuC;AAChE,gBAAA,QAAQ,EAAE,WAAW;AACrB,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA,iBAAiB,EAAE;AACjB,gBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,uCAAuC;AAChE,gBAAA,QAAQ,EAAE;AACX,aAAA;YACD,MAAM,EAAE,YAAW;AACjB,gBAAA,MAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC;AAC9C,oBAAA,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;AACT,iBAAA,CAAC;gBAChC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC;AACnE,gBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;YACnC;AACD,SAAA,CAAC;IACJ;AAEQ,IAAA,SAAS,CAAC,KAA2B,EAAA;QAC3C,IAAI,CAAC,2BAA2B,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE;IACtD;AAEA,IAAA,MAAM,CAAC,WAAgB,EAAA;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;AACxC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,KAAK,WAAW,CAAC,gBAAgB,CAAC;AAEtG,QAAA,IAAI,YAAY,GAAG,CAAC,EAAE;YACpB,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,YAAY,CAAC;AACrE,YAAA,IAAI,eAAe,KAAK,IAAI,EAAE;AAC5B,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;YAC7D;QACF;IACF;AAEA,IAAA,QAAQ,CAAC,WAAgB,EAAA;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;AACxC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,KAAK,WAAW,CAAC,gBAAgB,CAAC;QAEtG,IAAI,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,YAAY,CAAC;AACvE,YAAA,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE;AAC3B,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC9D;QACF;IACF;IAEQ,mBAAmB,CAAC,KAAY,EAAE,YAAoB,EAAA;AAC5D,QAAA,KAAK,IAAI,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,EAAE;AAC9B,gBAAA,OAAO,CAAC;YACV;QACF;QACA,OAAO,CAAC,CAAC;IACX;IAEQ,oBAAoB,CAAC,KAAY,EAAE,YAAoB,EAAA;AAC7D,QAAA,KAAK,IAAI,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpD,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,EAAE;AAC9B,gBAAA,OAAO,CAAC;YACV;QACF;QACA,OAAO,CAAC,CAAC;IACX;IAEQ,SAAS,CAAC,WAAgB,EAAE,YAAiB,EAAA;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;AAExC,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,KAAK,WAAW,CAAC,gBAAgB,CAAC;AACpG,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,KAAK,YAAY,CAAC,gBAAgB,CAAC;QAEtG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;AAEjF,QAAA,IAAI,CAAC;AACF,aAAA,WAAW,CAAC;YACX,aAAa,EAAE,WAAW,CAAC,gBAAgB;YAC3C,cAAc,EAAE,YAAY,CAAC;SACT;AACrB,aAAA,IAAI,EAAE;IACX;AAEA,IAAA,cAAc,CAAC,WAAgB,EAAA;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;AACxC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,IAAI,WAAW,CAAC,gBAAgB,CAAC;QACrG,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IAC7D;AAEQ,IAAA,QAAQ,CAAC,WAAgB,EAAA;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AACzB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI;QAC9B;AAEA,QAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,KAAK,IAAI,EAAE;IAClG;IAEQ,0BAA0B,CAAC,KAA0B,EAAE,gBAAwB,EAAA;AACrF,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,EAAE;AAC7C,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,gBAAgB,CAAC;YACrF,IAAI,SAAS,EAAE;AACb,gBAAA,OAAO,SAAS;YAClB;QACF;AAEA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,cAAc,CAAC,WAAgB,EAAA;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;AACxC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,IAAI,WAAW,CAAC,gBAAgB,CAAC;QACrG,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IAC9D;+GArVW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,WAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,SAAA,EAFjB,CAAC,mBAAmB,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3EtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAIU,iBAAiB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,WAAA,EAAA,+BAAA,EAAA,6BAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAHlB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,uBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,oDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,KAAA,EAAA,UAAA,EAAA,UAAA,EAAA,KAAA,EAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGpF,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAhF7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAET,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyET,EAAA,CAAA;AACD,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,CAAC;oBAChG,SAAS,EAAE,CAAC,mBAAmB;AAChC,iBAAA;;sBAUE;;sBACA;;sBACA;;sBAAS,WAAW;uBAAC,4BAA4B;;sBACjD;;sBACA;;sBACA;;sBACA;;sBA4FA,WAAW;uBAAC,uBAAuB;;;MChHzB,6BAA6B,CAAA;AA/F1C,IAAA,WAAA,GAAA;AAgGqB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;AACxB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEtC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAW;QACrD,IAAA,CAAA,OAAO,GAAqB,EAAE;AAC9B,QAAA,IAAA,CAAA,WAAW,GAAsB,MAAM,CAAC,MAAM,CAAC,UAAU;aACtD,MAAM,CAAC,CAAC,IAAI,KAAqB,OAAO,IAAI,KAAK,QAAQ;AACzD,aAAA,GAAG,CAAC,CAAC,IAAI,MAAM;YACd,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;AACjC,YAAA,KAAK,EAAE;AACR,SAAA,CAAC;AACD,aAAA,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAG/D,IAAA,CAAA,UAAU,GAAW,WAAW;QAChC,IAAA,CAAA,MAAM,GAAG,KAAK;AAoDf,IAAA;AAlDC,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY;IAC5C;AAEA,IAAA,MAAM,QAAQ,GAAA;QACZ,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;IAC7C;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO;QAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACvC;AAEA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB;QACF;AAEA,QAAA,MAAM,IAAI,GAAyB;YACjC,QAAQ,EAAE,IAAI,CAAC,YAAY;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,UAAU;AACrB,YAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;SAC7C;AAED,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC9C,YAAA,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;YACjC,IAAI,CAAC,IAAI,EAAE;QACb;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,CAAC;QAC/D;gBAAU;AACR,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACrB;IACF;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACvC;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACvC;+GApEW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3F9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyFT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA1FS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,eAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,kLAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,MAAA,EAAA,IAAA,EAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FA4FpF,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBA/FzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,CAAC;AAChG,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyFT,EAAA;AACF,iBAAA;;sBAKE;;sBACA;;;MCFU,2BAA2B,CAAA;AAjGxC,IAAA,WAAA,GAAA;AAkGmB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAGtC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAW;QAErD,IAAA,CAAA,KAAK,GAAa,EAAE;QACpB,IAAA,CAAA,UAAU,GAAG,EAAE;AACf,QAAA,IAAA,CAAA,WAAW,GAAsB,MAAM,CAAC,MAAM,CAAC,UAAU;aACtD,MAAM,CAAC,CAAC,IAAI,KAAqB,OAAO,IAAI,KAAK,QAAQ;AACzD,aAAA,GAAG,CAAC,CAAC,IAAI,MAAM;YACd,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;AACjC,YAAA,KAAK,EAAE;AACR,SAAA,CAAC;AACD,aAAA,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/D,QAAA,IAAA,CAAA,IAAI,GAA0B;AAC5B,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,CAAC,EAAE,CAAC;AACf,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,gBAAgB,EAAE,CAAC;AACnB,YAAA,QAAQ,EAAE;SACX;QACD,IAAA,CAAA,MAAM,GAAG,KAAK;AA8Cf,IAAA;IA5CC,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO;QAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACvC;AAEA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf;QACF;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;AACpD,YAAA,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;YACjC,IAAI,CAAC,IAAI,EAAE;QACb;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;QAC9B;gBAAU;AACR,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACrB;IACF;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACvC;AAEA,IAAA,MAAM,UAAU,GAAA;QACd,IAAI,CAAC,IAAI,GAAG;AACV,YAAA,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,gBAAgB;AACpE,YAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,QAAQ;AACpD,YAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,QAAQ;AACpD,YAAA,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,KAAK;AAC9C,YAAA,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,IAAI;AAC5C,YAAA,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;SAC9C;QAED,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC;AAC7G,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,IAAI,EAAE;AAE1F,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACvC;+GAtEW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7F5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2FT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA9FS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,eAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,UAAA,EAAA,IAAA,EAAiB,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,aAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,UAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAhC,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAgGpF,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAjGvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,CAAC;AACnH,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2FT,EAAA;AACF,iBAAA;;sBAME;;sBACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MC9DU,aAAa,CAAA;AAzC1B,IAAA,WAAA,GAAA;;;QA4CmB,IAAA,CAAA,YAAY,GAAG,mBAAmB,CAAC,MAAEX,IAAE,MAAEC,IAAE,EAAE,CAAC;AAEtD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AA+BrD,IAAA;IA1BC,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;IACpC;AAEQ,IAAA,QAAQ,CAAC,CAAuB,EAAA;AACtC,QAAA,IAAI,CAAC,6BAA6B,CAAC,UAAU,EAAE;IACjD;AAEU,IAAA,aAAa,CAAC,MAAkB,EAAA;QACxC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE;YACnC;QACF;QAEA,MAAM,CAAC,cAAc,EAAE;QACvB,MAAM,CAAC,eAAe,EAAE;AAExB,QAAA,IAAI,CAAC,WAAW,CAAC,eAAe,GAAG,IAAI;AACvC,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG;AACvB,YAAA;gBACE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,mBAAmB,CAAC;gBACzD,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,OAAO,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK;AACxC;SACF;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B;+GArCW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EA9Bb,CAAC,OAAO,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,+BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAsCT,6BAA6B,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,6BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAC7B,2BAA2B,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAC3B,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArCZ,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBN,KAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EArCF,iBAAiB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,WAAA,EAAA,+BAAA,EAAA,6BAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,IAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,6BAA6B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAC7B,WAAW,+BACX,2BAA2B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAgClB,aAAa,EAAA,UAAA,EAAA,CAAA;kBAzCzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,OAAO,EAAE;wBACP,iBAAiB;wBACjB,YAAY;wBACZ,iBAAiB;wBACjB,YAAY;wBACZ,eAAe;wBACf,6BAA6B;wBAC7B,WAAW;wBACX;AACD,qBAAA;oBACD,SAAS,EAAE,CAAC,OAAO,CAAC;AACpB,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBN,KAAA;AACL,iBAAA;;sBASE,SAAS;uBAAC,6BAA6B;;sBACvC,SAAS;uBAAC,2BAA2B;;sBACrC,SAAS;uBAAC,WAAW;;;MC7DX,gBAAgB,CAAA;AAC3B,IAAA,WAAA,GAAA,EAAe;+GADJ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAJjB,CAAA,sBAAA,CAAwB,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAExB,aAAa,EAAA,QAAA,EAAA,UAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEZ,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,CAAA,sBAAA,CAAwB;AAClC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,aAAa;AACxB,iBAAA;;;;;;;;;;;;;;;;;ACCD;;;;;;;;AAQG;MAoBU,oBAAoB,CAAA;aACP,IAAA,CAAA,WAAW,GAAG,GAAH,CAAO;aAClB,IAAA,CAAA,YAAY,GAAG,GAAH,CAAO;AAW3C,IAAA,WAAA,GAAA;QATiB,IAAA,CAAA,YAAY,GAAG,mBAAmB,CAAC,MAAEL,IAAE,MAAEC,IAAE,EAAE,CAAC;AAC9C,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAI5D,IAAA,CAAA,OAAO,GAAG,CAAC;AAEA,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;QAGxC,MAAM,CAAC,MAAK;YACV,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE;YACnD,SAAS,CAAC,OAAO,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AACxE,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACvC,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;IAC9B;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACvB,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;YAC7C;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAK;AAChC,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3B,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,CAAC,EAAE,oBAAoB,CAAC,WAAW,CAAC;IACtC;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;YAC9C;QACF;AAEA,QAAA,MAAM,SAAS,GAAG,oBAAoB,CAAC,YAAY,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;AACjF,QAAA,IAAI,SAAS,IAAI,CAAC,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YACvB;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAK;AAChC,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,CAAC,EAAE,SAAS,CAAC;IACf;AAEQ,IAAA,UAAU,CAAC,KAAsB,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG,KAAK,KAAK,MAAM,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AACnE,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;YAClB;QACF;QAEA,YAAY,CAAC,MAAM,CAAC;AACpB,QAAA,IAAI,KAAK,KAAK,MAAM,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;QAC7B;aAAO;AACL,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;QAC7B;IACF;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IACzB;AAEA;;;AAGG;AACK,IAAA,gBAAgB,CAAC,OAAgB,EAAA;QACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC;QACzD,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;;YAElC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC;QACvD;aAAO;AACL,YAAA,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC;QAChD;IACF;+GA7FW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAfrB;;;;;;;;;;;;;GAaT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAdS,eAAe,iLAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAgB7B,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAnBhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,eAAe,EAAE,aAAa,CAAC;AACzC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;AAaT,EAAA;AACF,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBD;;;;;;;;;AASG;MAsEU,6BAA6B,CAAA;AArE1C,IAAA,WAAA,GAAA;QAsEmB,IAAA,CAAA,YAAY,GAAG,mBAAmB,CAAC,MAAED,IAAE,MAAEC,IAAE,EAAE,CAAC;AAC9C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAEzC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAE7B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAsC,IAAI,kDAAC;AAC1D,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,oDAAC;AA8B5C,IAAA;IA5BC,QAAQ,GAAA;;;;QAIN,IAAI,CAAC,eAAe,CAAC;aAClB,IAAI,CACH,MAAM,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,EAC5C,IAAI,CAAC,CAAC,CAAC,EACP,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAEpC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACjC;AAEU,IAAA,SAAS,CAAC,OAAqC,EAAA;AACvD,QAAA,OAAO,CAAA,0BAAA,EAA6B,OAAO,CAAC,IAAI,EAAE;IACpD;IAEU,OAAO,GAAA;AACf,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;IAEQ,IAAI,GAAA;AACV,QAAA,IAAI,CAAC;AACF,aAAA,uBAAuB;aACvB,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC;;AAE9D,aAAA,KAAK,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC;+GArCW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAhES,YAAY,2bAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAkE1B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBArEzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC;AACtC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+DT,EAAA;AACF,iBAAA;;;MC7CY,kBAAkB,CAAA;AAY7B,IAAA,WAAA,GAAA;AAXU,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAUpC,QAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AAChF,YAAA,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAClC,gBAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,KAAK,KAAI;AAClF,oBAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;wBAChC,IAAI,CAAC,QAAQ,EAAE;oBACjB;AACF,gBAAA,CAAC,CAAC;YACJ;YAEA,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,sBAAsB,EAAE;gBAC3D,IAAI,CAAC,eAAe,EAAE;YACxB;AACF,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAACW,QAAM,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YACxF,IAAI,CAAC,QAAQ,EAAE;AACjB,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,gBAAgB,CAAC,KAAiB,EAAA;QAChC,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC;QAC3D,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC;AAC9D,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,MAAc;AAExC,QAAA,OAAO,EACL,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC;AAClC,YAAA,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC;AAChC,YAAA,QAAQ,EAAE,UAAU,CAAC,WAAW,CAAC;AACjC,YAAA,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,CAChC;IACH;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM;AAC/C,YAAA,GAAG,IAAI;AACP,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,sBAAsB,EAAE,KAAK;AAC7B,YAAA,eAAe,EAAE;AAClB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;YACjC,IAAI,CAAC,wBAAwB,EAAE;AAC/B,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;QACtC;QACA,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE;YAC3B,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAC/C;aAAO;AACL,YAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,iBAAiB;QAC9C;IACF;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE;YAC3B,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC;QAClD;aAAO;AACL,YAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CACvD,IAAI,MAAM,CAAC,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,EAC/E,GAAG,CACJ;QACH;IACF;AAEA,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO;YACL,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,QAAQ,KAAK,SAAS;YAC1E,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,QAAQ,KAAK,QAAQ;YACxE,wBAAwB,EACtB,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,yBAAyB;gBAC1D,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,QAAQ,KAAK,QAAQ;YACzD,uBAAuB,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,iBAAiB;YAC3E,sBAAsB,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;SAC1D;IACH;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,2BAA2B,EAAE;AACpC,YAAA,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE;QAChD;AAEA,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;YACjC,IAAI,CAAC,wBAAwB,EAAE;QACjC;IACF;+GAlGW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,SAAA,EAFlB,CAAC,WAAW,EAAE,OAAO,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAUtB,gBAAgB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAEhB,SAAS,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA9BV;;;;;;;;;;;;;;;;;AAiBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAzBC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,SAAS,EAAA,QAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,6BAA6B,EAAA,QAAA,EAAA,wBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAsBpB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAhC9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,SAAS;wBACT,gBAAgB;wBAChB,YAAY;wBACZ,eAAe;wBACf,oBAAoB;wBACpB;AACD,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;AAiBT,EAAA,CAAA;AACD,oBAAA,SAAS,EAAE,CAAC,WAAW,EAAE,OAAO;AACjC,iBAAA;;sBASE,SAAS;uBAAC,gBAAgB;;sBAE1B,SAAS;uBAAC,SAAS;;;MCpBT,gCAAgC,CAAA;AA7B7C,IAAA,WAAA,GAAA;AA8BE,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAErC,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,SAAS,uDAAC;AAQ1E,IAAA;IANC,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;AACjD,YAAA,GAAG,KAAK;AACR,YAAA,SAAS,EAAE,CAAC,KAAK,CAAC;AACnB,SAAA,CAAC,CAAC;IACL;+GAVW,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1BjC;;;;;;;;;;;;;;;;;;;;;;;;AAwBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAzBS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,wBAAwB,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FA2BvD,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBA7B5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,gBAAgB,EAAE,wBAAwB,CAAC;AACnE,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;AAwBT,EAAA;AACF,iBAAA;;;;;;;;;;;;;;;;;;;;;;;MCGY,iBAAiB,CAAA;AA1B9B,IAAA,WAAA,GAAA;QA2BmB,IAAA,CAAA,YAAY,GAAG,mBAAmB,CAAC,MAAEN,IAAE,MAAEC,IAAE,EAAE,CAAC;AAChE,IAAA;+GAFY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxBlB,CAAA;;;;;;;;;;;;;;;;;;;;WAoBD,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACC,UAAU,oOAAE,aAAa,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gCAAgC,qEAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGnF,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA1B7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;AAoBD,UAAA,CAAA;oBACT,OAAO,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,gCAAgC,EAAE,eAAe,CAAC;AAC/F,oBAAA,UAAU,EAAE;AACb,iBAAA;;;;;;;;;;;;;;;;;;;;;MCiBY,qBAAqB,CAAA;AAvClC,IAAA,WAAA,GAAA;QAwCmB,IAAA,CAAA,YAAY,GAAG,mBAAmB,CAAC,MAAEL,IAAE,MAAEC,IAAE,EAAE,CAAC;AAE5C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAC3C,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAgBhD,IAAA;IAdC,QAAQ,GAAA;QACN,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,kBAAkB,CAAC,gCAAgC,CAAC;QAC7F,IAAI,CAAC,SAAS,EAAE;YACd;QACF;AAEA,QAAA,cAAc,CAAC,UAAU,CAAC,kBAAkB,CAAC,gCAAgC,CAAC;AAC9E,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC;IAC3C;IAEU,MAAM,GAAA;AACd,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG;AAC3E,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC;IAC3C;+GAnBW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtCtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,aAAa,8EACb,gCAAgC,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChC,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACnB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGJ,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAvCjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BT,EAAA,CAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,YAAY;wBACZ,aAAa;wBACb,gCAAgC;wBAChC,mBAAmB;wBACnB;AACD;AACF,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;MCNY,eAAe,CAAA;AApC5B,IAAA,WAAA,GAAA;QAqCmB,IAAA,CAAA,YAAY,GAAG,mBAAmB,CAAC,MAAEL,IAAE,MAAEC,IAAE,EAAE,CAAC;AAChE,IAAA;+GAFY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlChB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BH,QAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACG,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,2FAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGpD,eAAe,EAAA,UAAA,EAAA,CAAA;kBApC3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BH,QAAA,CAAA;oBACP,OAAO,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,CAAC;AAChE,oBAAA,UAAU,EAAE;AACb,iBAAA;;;;;;;;;;;;;;;;;;;;;MCCY,cAAc,CAAA;AApC3B,IAAA,WAAA,GAAA;QAqCmB,IAAA,CAAA,YAAY,GAAG,mBAAmB,CAAC,MAAEL,IAAE,MAAEC,IAAE,EAAE,CAAC;AAChE,IAAA;+GAFY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlCf,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BH,QAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEG,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,+NAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEpD,cAAc,EAAA,UAAA,EAAA,CAAA;kBApC1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BH,QAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa;AAChE,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MCQY,oBAAoB,CAAA;AArCjC,IAAA,WAAA,GAAA;QAsCmB,IAAA,CAAA,YAAY,GAAG,mBAAmB,CAAC,MAAEN,IAAE,MAAEC,IAAE,EAAE,CAAC;AAEtD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/B,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AA+CnE,IAAA;IA7CC,MAAM,WAAW,CAAC,KAAU,EAAA;QAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE;YACT;QACF;AAEA,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACxD,YAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE;AACnC,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC;QACjG;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;QAC9B;IACF;AAEA,IAAA,kBAAkB,CAAC,KAAY,EAAA;AAC7B,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;YAC/B,MAAM,EAAE,KAAK,CAAC,MAAqB;YACnC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,2CAA2C,CAAC;YAClF,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,4CAA4C,CAAC;AACpF,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,iBAAiB,EAAE;gBACjB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,2DAA2D,CAAC;AACjG,gBAAA,QAAQ,EAAE,WAAW;AACrB,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA,iBAAiB,EAAE;gBACjB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,2DAA2D,CAAC;AACjG,gBAAA,QAAQ,EAAE;AACX,aAAA;YACD,MAAM,EAAE,YAAW;AACjB,gBAAA,MAAM,IAAI,CAAC,WAAW,EAAE;YAC1B;AACD,SAAA,CAAC;IACJ;AAEQ,IAAA,MAAM,WAAW,GAAA;AACvB,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE;AAC3C,YAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE;AACnC,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;QACzF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC;QAClH;IACF;+GArDW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAjCpB,CAAC,mBAAmB,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAhCS,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,+BAAA,EAAA,8BAAA,EAAA,+BAAA,EAAA,8BAAA,EAAA,+BAAA,EAAA,gCAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,SAAA,EAAA,cAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,2NAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,oDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,KAAA,EAAA,UAAA,EAAA,UAAA,EAAA,KAAA,EAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAkCtF,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBArChC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC;oBAClG,SAAS,EAAE,CAAC,mBAAmB,CAAC;AAChC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BT,EAAA;AACF,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MCuFY,eAAe,CAAA;AAkB1B,IAAA,WAAA,GAAA;QAjBiB,IAAA,CAAA,YAAY,GAAG,mBAAmB,CAAC,MAAEJ,IAAE,MAAEC,IAAE,EAAE,CAAC;AAE9C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACnC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACjC,IAAA,CAAA,WAAW,GAAa,CAAC,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,CAAC;AAC/E,QAAA,IAAA,CAAA,WAAW,GAAa,CAAC,UAAU,EAAE,OAAO,CAAC;;AAE7C,QAAA,IAAA,CAAA,YAAY,GAAU,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;QAQzE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;QACrD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;QACzD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;QACzD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;IACvD;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,MAAM;AAClD,YAAA,GAAG,MAAM;YACT,QAAQ,EAAE,IAAI,CAAC;AAChB,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC;IACvD;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,MAAM,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC1G;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,MAAM,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC1G;IAEA,cAAc,GAAA;QACZ,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,MAAM,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACtG;AAEA,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;IACnC;+GA/CW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArHhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwGT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEC,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,OAAO,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACP,WAAW,mWACX,MAAM,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACN,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEX,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,MAAM,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,UAAU,+NAHV,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAMJ,eAAe,EAAA,UAAA,EAAA,CAAA;kBAvH3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwGT,EAAA,CAAA;AACD,oBAAA,OAAO,EAAE;wBACP,oBAAoB;wBACpB,OAAO;wBACP,WAAW;wBACX,MAAM;wBACN,WAAW;wBACX,aAAa;wBACb,kBAAkB;wBAClB,MAAM;wBACN;AACD;AACF,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbK,MAAO,oBACX,SAAQ,mBAAiD,CAAA;AAjG3D,IAAA,WAAA,GAAA;;QAoGmB,IAAA,CAAA,YAAY,GAAG,mBAAmB,CAAC,MAAEN,IAAE,MAAEC,IAAE,EAAE,CAAC;AA4BhE,IAAA;AAxBC,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,KAAK,CAAC,QAAQ,EAAE;AACtB,QAAA,MAAM,IAAI,CAAC,aAAa,EAAE;IAC5B;AAEA,IAAA,MAAM,aAAa,GAAA;QACjB,IAAI,CAAC,OAAO;AACT,aAAA,IAAI,CAAC,CAAC,QAAQ,KAAI;AACjB,YAAA,IAAI,CAAC,IAAI,GAAG,QAAQ;AACtB,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAClB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC;AAC1F,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,aAAa,EAAgB;IAC3C;IAEA,MAAM,cAAc,CAAC,OAAqB,EAAA;QACxC,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAA2B;AAC/D,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;IAC3C;+GA/BW,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAFpB,CAAC,mBAAmB,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/EtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8ET,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA3FC,WAAW,+5FACX,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,SAAS,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACT,eAAe,8BACf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,+BACX,aAAa,EAAA,QAAA,EAAA,oDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,KAAA,EAAA,UAAA,EAAA,UAAA,EAAA,KAAA,EAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,iBAAiB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,OAAO,qVACP,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAoFJ,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAhGhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,OAAO,EAAE;wBACP,WAAW;wBACX,YAAY;wBACZ,SAAS;wBACT,eAAe;wBACf,cAAc;wBACd,YAAY;wBACZ,WAAW;wBACX,aAAa;wBACb,iBAAiB;wBACjB,OAAO;wBACP;AACD,qBAAA;AACD,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8ET,EAAA,CAAA;oBACD,SAAS,EAAE,CAAC,mBAAmB;AAChC,iBAAA;;;;;;;;AC5HD;AACA;AACA;AAeM,MAAO,mBAEX,SAAQ,UAA4B,CAAA;AAHtC,IAAA,WAAA,GAAA;;QAIE,IAAA,CAAA,mBAAmB,GAAG,CAAC,MAAA,GAAwB,EAAE,KAC/C,IAAI,CAAC,OAAO,CAAoC;AAC9C,YAAA,IAAI,EAAE,CAAA,4CAAA,CAA8C;AACpD,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,uBAAuB,GAAG,CACxB,EAAE,YAAY,EAAE,GAAG,KAAK,EAAiC,EACzD,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAAkC;YAC5C,IAAI,EAAE,CAAA,mDAAA,EAAsD,YAAY,CAAA,CAAE;AAC1E,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,uBAAuB,GAAG,CACxB,IAAoC,EACpC,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAAkC;AAC5C,YAAA,IAAI,EAAE,CAAA,gDAAA,CAAkD;AACxD,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW,CAAC,IAAI;AACtB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,qBAAqB,GAAG,CACtB,EAAE,EAAE,EAAE,GAAG,KAAK,EAA+B,EAC7C,IAAkC,EAClC,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAAkC;YAC5C,IAAI,EAAE,CAAA,+CAAA,EAAkD,EAAE,CAAA,CAAE;AAC5D,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW,CAAC,IAAI;AACtB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,qBAAqB,GAAG,CACtB,EAAE,EAAE,EAAE,GAAG,KAAK,EAA+B,EAC7C,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAA6B;YACvC,IAAI,EAAE,CAAA,+CAAA,EAAkD,EAAE,CAAA,CAAE;AAC5D,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACL,IAAA;+GA3DY,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAnB,mBAAmB,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;;AChBD;AACA;AACA;AAYM,MAAO,SAEX,SAAQ,UAA4B,CAAA;AAHtC,IAAA,WAAA,GAAA;;QAIE,IAAA,CAAA,MAAM,GAAG,CAAC,MAAA,GAAwB,EAAE,KAClC,IAAI,CAAC,OAAO,CAAoC;AAC9C,YAAA,IAAI,EAAE,CAAA,mBAAA,CAAqB;AAC3B,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,MAAM,GAAG,CAAC,IAAe,EAAE,MAAA,GAAwB,EAAE,KACnD,IAAI,CAAC,OAAO,CAA6B;AACvC,YAAA,IAAI,EAAE,CAAA,kBAAA,CAAoB;AAC1B,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW,CAAC,IAAI;AACtB,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,MAAM,GAAG,CAAC,IAAyB,EAAE,MAAA,GAAwB,EAAE,KAC7D,IAAI,CAAC,OAAO,CAA6B;AACvC,YAAA,IAAI,EAAE,CAAA,kBAAA,CAAoB;AAC1B,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW,CAAC,IAAI;AACtB,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;QACJ,IAAA,CAAA,wBAAwB,GAAG,CAAC,MAAA,GAAwB,EAAE,KACpD,IAAI,CAAC,OAAO,CAAyC;AACnD,YAAA,IAAI,EAAE,CAAA,wCAAA,CAA0C;AAChD,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACL,IAAA;+GArCY,SAAS,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAT,SAAS,EAAA,CAAA,CAAA;;4FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBADrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACSD,WAAW,CAAC,oBAAoB,CAAC,MAAEJ,IAAE,MAAEC,IAAE,EAAE,CAAC;MA2F/B,mBAAmB,CAAA;AAY9B,IAAA,WAAA,GAAA;QAXU,IAAA,CAAA,OAAO,GAAqB,EAAE;AAC9B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;QACtC,IAAA,CAAA,yBAAyB,GAAG,EAAE;QAC9B,IAAA,CAAA,yBAAyB,GAAG,KAAK;AACnC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC;AACjC,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAI3D,QAAA,IAAI,CAAC,iBAAiB,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC;IACpG;AAEA,IAAA,MAAM,QAAQ,GAAA;QACZ,MAAM,IAAI,CAAC,iBAAiB;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;AACvD,QAAA,MAAM,IAAI,CAAC,aAAa,EAAE;IAC5B;AAEA,IAAA,MAAM,aAAa,GAAA;QACjB,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE;IACpE;AAEA,IAAA,IAAc,yBAAyB,GAAA;AACrC,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,yBAAyB;IACnF;AAEA,IAAA,MAAM,sBAAsB,GAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACnC;QACF;QAEA,MAAM,IAAI,CAAC,iBAAiB;AAC5B,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AAErC,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,uBAAuB,CAAC,uBAAuB,CAAC;AACzD,gBAAA,WAAW,EAAE,IAAI,CAAC,yBAAyB,CAAC,IAAI;AACjD,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,yBAAyB,GAAG,EAAE;AACnC,YAAA,MAAM,IAAI,CAAC,aAAa,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC;QACzE;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,KAAK,EACL,IAAI,CAAC,CAAC,CAAC,oCAAoC,CAAC,EAC5C,IAAI,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAC7C;QACH;gBAAU;AACR,YAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;QACxC;IACF;IAEA,MAAM,YAAY,CAAC,MAAsB,EAAA;QACvC,MAAM,IAAI,CAAC,iBAAiB;AAE5B,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;AAC/B,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC;AAC5C,YAAA,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,6BAA6B,CAAC;AAC9C,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,iBAAiB,EAAE;AACjB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC;AAC3C,gBAAA,QAAQ,EAAE,WAAW;AACrB,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA,iBAAiB,EAAE;AACjB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC;AAC3C,gBAAA,QAAQ,EAAE;AACX,aAAA;YACD,MAAM,EAAE,YAAW;AACjB,gBAAA,IAAI;AACF,oBAAA,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;wBAC9B,QAAQ,EAAE,MAAM,CAAC;AAClB,qBAAA,CAAC;AACF,oBAAA,MAAM,IAAI,CAAC,aAAa,EAAE;AAC1B,oBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC;gBACvE;gBAAE,OAAO,KAAK,EAAE;oBACd,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,KAAK,EACL,IAAI,CAAC,CAAC,CAAC,kCAAkC,CAAC,EAC1C,IAAI,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAC3C;gBACH;YACF;AACD,SAAA,CAAC;IACJ;AAEA,IAAA,CAAC,CAAC,GAAW,EAAA;QACX,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC;IACtC;+GA5FW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EA7EnB,CAAC,mBAAmB,EAAE,SAAS,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EArFC,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,UAAA,EAAA,IAAA,EACX,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,2BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,eAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,4BAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,GAAG,iHACH,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,OAAO,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,aAAa,EAAA,QAAA,EAAA,oDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,KAAA,EAAA,UAAA,EAAA,UAAA,EAAA,KAAA,EAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEb,eAAe,8KADf,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAgFJ,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAzF/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,OAAO,EAAE;wBACP,WAAW;wBACX,WAAW;wBACX,GAAG;wBACH,YAAY;wBACZ,aAAa;wBACb,OAAO;wBACP,aAAa;wBACb,aAAa;wBACb;AACD,qBAAA;AACD,oBAAA,SAAS,EAAE,CAAC,mBAAmB,EAAE,SAAS,EAAE,mBAAmB,CAAC;AAChE,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyET,EAAA;AACF,iBAAA;;;;;;;;AChHD,IAAY,WAGX;AAHD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC7B,CAAC,EAHW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACuBvB,WAAW,CAAC,oBAAoB,CAAC,MAAER,IAAE,MAAEC,IAAE,EAAE,CAAC;MA2Q/B,qBAAqB,CAAA;AAEhC,IAAA,IAAc,kBAAkB,GAAA;QAI9B,OAAO;AACL,YAAA;AACE,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,mCAAmC,CAAC;gBAClD,KAAK,EAAE,WAAW,CAAC;AACpB,aAAA;AACD,YAAA;AACE,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,uCAAuC,CAAC;gBACtD,KAAK,EAAE,WAAW,CAAC;AACpB;SACF;IACH;AAeA,IAAA,WAAA,GAAA;AA9BmB,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,CAAC;QAgB1G,IAAA,CAAA,YAAY,GAA2B,EAAE;QACzC,IAAA,CAAA,mBAAmB,GAA2B,EAAE;QAChD,IAAA,CAAA,YAAY,GAAG,EAAE;QACjB,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,eAAe,GAAG,KAAK;AAEhB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;AACtC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAE1D,IAAA,CAAA,gBAAgB,GAAgC,IAAI;AAG1D,QAAA,IAAI,CAAC,iBAAiB,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAC;IACrG;AAEA,IAAA,MAAM,QAAQ,GAAA;QACZ,MAAM,IAAI,CAAC,iBAAiB;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;AACxD,QAAA,MAAM,IAAI,CAAC,aAAa,EAAE;IAC5B;AAEU,IAAA,MAAM,aAAa,GAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,cAAc,EAAE;AAErB,QAAA,IAAI;YACF,IAAI,CAAC,YAAY,GAAG,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,2BAA2B,EAAE,EAAE,GAAG,CAChF,CAAC,WAAuC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,CAClE;YACD,IAAI,CAAC,uBAAuB,EAAE;QAChC;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE;YACtB,IAAI,CAAC,uBAAuB,EAAE;AAC9B,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;QAC9B;gBAAU;AACR,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACtB;IACF;IAEU,iBAAiB,GAAA;QACzB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC;IACvE;IAEU,YAAY,GAAA;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;QACtB,IAAI,CAAC,uBAAuB,EAAE;IAChC;IAEU,sBAAsB,GAAA;QAC9B,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,gBAAgB,GAAG;AACtB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,IAAI,EAAE,gBAAgB;AACtB,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE;AAC1B,YAAA,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,WAAW,CAAC,OAAO;AAChC,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,UAAU,EAAE,IAAI,CAAC,eAAe;SACjC;AACD,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;QACzE,IAAI,CAAC,uBAAuB,EAAE;IAChC;AAEU,IAAA,eAAe,CAAC,WAAiC,EAAA;AACzD,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;AAChC,QAAA,WAAW,CAAC,UAAU,GAAG,IAAI;QAC7B,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;QAC1D,IAAI,CAAC,uBAAuB,EAAE;IAChC;AAEU,IAAA,UAAU,CAAC,WAAiC,EAAA;AACpD,QAAA,IAAI,WAAW,CAAC,MAAM,EAAE;AACtB,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC9B;aAAO;AACL,YAAA,WAAW,CAAC,UAAU,GAAG,KAAK;AAC9B,YAAA,WAAW,CAAC,UAAU,GAAG,SAAS;QACpC;QAEA,IAAI,CAAC,uBAAuB,EAAE;IAChC;IAEU,MAAM,eAAe,CAAC,WAAiC,EAAA;AAC/D,QAAA,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU;QACxC,IAAI,CAAC,SAAS,EAAE;YACd;QACF;QAEA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;AAClD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AAC7D,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC;YACrE;QACF;AAEA,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAE3B,QAAA,IAAI;AACF,YAAA,IAAI,WAAW,CAAC,MAAM,EAAE;gBACtB,MAAM,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC,OAAO,CAAC;AACjE,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC;YACxE;iBAAO;AACL,gBAAA,MAAM,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAc,EAAE,EAAE,OAAO,CAAC;AACvG,gBAAA,WAAW,CAAC,UAAU,GAAG,KAAK;AAC9B,gBAAA,WAAW,CAAC,UAAU,GAAG,SAAS;AAClC,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC;YACxE;AAEA,YAAA,MAAM,IAAI,CAAC,aAAa,EAAE;QAC5B;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;QAC9B;gBAAU;AACR,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAC9B;IACF;IAEU,MAAM,iBAAiB,CAAC,WAAiC,EAAA;QACjE,MAAM,IAAI,CAAC,iBAAiB;AAE5B,QAAA,IAAI,WAAW,CAAC,MAAM,EAAE;AACtB,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAC5B;QACF;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;YACrB;QACF;AAEA,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;AAC/B,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,6BAA6B,CAAC;AAC7C,YAAA,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,8BAA8B,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;AAC7G,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,iBAAiB,EAAE;AACjB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,6BAA6B,CAAC;AAC5C,gBAAA,QAAQ,EAAE,WAAW;AACrB,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA,iBAAiB,EAAE;AACjB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,6BAA6B,CAAC;AAC5C,gBAAA,QAAQ,EAAE;AACX,aAAA;YACD,MAAM,EAAE,YAAW;AACjB,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAE3B,gBAAA,IAAI;AACF,oBAAA,MAAM,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAc,EAAE,CAAC;AAC9F,oBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC;AACtE,oBAAA,MAAM,IAAI,CAAC,aAAa,EAAE;gBAC5B;gBAAE,OAAO,KAAK,EAAE;AACd,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC9B;wBAAU;AACR,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;gBAC9B;YACF;AACD,SAAA,CAAC;IACJ;AAEQ,IAAA,eAAe,CAAC,WAAwC,EAAA;QAC9D,OAAO;AACL,YAAA,IAAI,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE;AAC7B,YAAA,WAAW,EAAE,WAAW,EAAE,WAAW,IAAI,EAAE;AAC3C,YAAA,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,EAAE;AACnC,YAAA,eAAe,EAAE,WAAW,EAAE,eAAe,IAAI,EAAE;AACnD,YAAA,IAAI,EAAE,WAAW,EAAE,IAAI,IAAI,gBAAgB;AAC3C,YAAA,KAAK,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;AAC9B,YAAA,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,IAAI;AACrC,YAAA,WAAW,EAAE,WAAW,EAAE,WAAW,IAAI,WAAW,CAAC;SACtD;IACH;AAEQ,IAAA,kBAAkB,CAAC,KAA2B,EAAA;QACpD,OAAO;AACL,YAAA,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;AACvB,YAAA,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE;AACrC,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;AAC7B,YAAA,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE;AAC7C,YAAA,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;YAC/B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,KAAK,CAAC;SACpB;IACH;AAEU,IAAA,gBAAgB,CAAC,WAAsD,EAAA;QAC/E,OAAO,IAAI,CAAC,CAAC,CACX,WAAW,KAAK,WAAW,CAAC;AAC1B,cAAE;cACA,mCAAmC,CACxC;IACH;AAEQ,IAAA,cAAc,CAAC,iBAAwC,EAAA;AAC7D,QAAA,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE;AAC9B,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC9B;AAEA,QAAA,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE;AAC3C,YAAA,IAAI,WAAW,KAAK,iBAAiB,EAAE;gBACrC;YACF;AAEA,YAAA,WAAW,CAAC,UAAU,GAAG,KAAK;AAC9B,YAAA,WAAW,CAAC,UAAU,GAAG,SAAS;QACpC;IACF;IAEQ,uBAAuB,GAAA;QAC7B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC;IACvE;AAEQ,IAAA,kBAAkB,CAAC,MAAc,EAAA;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QAC7G,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,iBAAiB,EAAE;QAE1D,IAAI,CAAC,gBAAgB,EAAE;AACrB,YAAA,OAAO,MAAM;QACf;AAEA,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,KAC/B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,KAAK,KACjC,MAAM,CAAC,WAAW,CAAC,KAAyC,CAAC,IAAI,EAAE;AAChE,aAAA,iBAAiB;AACjB,aAAA,QAAQ,CAAC,gBAAgB,CAAC,CAC9B,CACF;IACH;IAEQ,YAAY,GAAA;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3F;IAEQ,CAAC,CAAC,GAAW,EAAE,MAAgC,EAAA;QACrD,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAW;IACxD;+GAjQW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,+DA1OrB,CAAC,eAAe,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAEvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsOT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EApPC,WAAW,wxBACX,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,2BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,eAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,4BAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,GAAG,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACH,YAAY,+bACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,OAAO,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,aAAa,+mBAEb,SAAS,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACT,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,kBAAkB,wSAHlB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FA+OJ,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAxPjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,OAAO,EAAE;wBACP,WAAW;wBACX,WAAW;wBACX,GAAG;wBACH,YAAY;wBACZ,aAAa;wBACb,OAAO;wBACP,aAAa;wBACb,aAAa;wBACb,SAAS;wBACT,YAAY;wBACZ;AACD,qBAAA;AACD,oBAAA,SAAS,EAAE,CAAC,eAAe,EAAE,mBAAmB,CAAC;AACjD,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsOT,EAAA;AACF,iBAAA;;;;;;;;ACjSD;AACA;AACA;AA2BM,MAAO,aAEX,SAAQ,UAA4B,CAAA;AAHtC,IAAA,WAAA,GAAA;;AAIE,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,KAAwB,EAAE,MAAA,GAAwB,EAAE,KACjE,IAAI,CAAC,OAAO,CAAqC;AAC/C,YAAA,IAAI,EAAE,CAAA,6BAAA,CAA+B;AACrC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,OAAO,GAAG,CAAC,KAAoB,EAAE,MAAA,GAAwB,EAAE,KACzD,IAAI,CAAC,OAAO,CAAmC;AAC7C,YAAA,IAAI,EAAE,CAAA,yBAAA,CAA2B;AACjC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,MAAM,GAAG,CAAC,IAA0B,EAAE,MAAA,GAAwB,EAAE,KAC9D,IAAI,CAAC,OAAO,CAAmC;AAC7C,YAAA,IAAI,EAAE,CAAA,sBAAA,CAAwB;AAC9B,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW,CAAC,IAAI;AACtB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,MAAM,GAAG,CACP,EAAE,EAAE,EAAE,GAAG,KAAK,EAAgB,EAC9B,IAA0B,EAC1B,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAAmC;YAC7C,IAAI,EAAE,CAAA,uBAAA,EAA0B,EAAE,CAAA,CAAE;AACpC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW,CAAC,IAAI;AACtB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,EAAgB,EAAE,MAAA,GAAwB,EAAE,KAClE,IAAI,CAAC,OAAO,CAA6B;YACvC,IAAI,EAAE,CAAA,uBAAA,EAA0B,EAAE,CAAA,CAAE;AACpC,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,UAAU,GAAG,CACX,EAAE,EAAE,EAAE,GAAG,KAAK,EAAoB,EAClC,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAA4C;YACtD,IAAI,EAAE,CAAA,4BAAA,EAA+B,EAAE,CAAA,CAAE;AACzC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,gBAAgB,GAAG,CACjB,IAA6B,EAC7B,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAAsC;AAChD,YAAA,IAAI,EAAE,CAAA,iCAAA,CAAmC;AACzC,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW,CAAC,QAAQ;AAC1B,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,gBAAgB,GAAG,CACjB,EAAE,EAAE,EAAE,GAAG,KAAK,EAA0B,EACxC,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAA6B;YACvC,IAAI,EAAE,CAAA,kCAAA,EAAqC,EAAE,CAAA,CAAE;AAC/C,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,oBAAoB,GAAG,CACrB,EAAE,EAAE,EAAE,GAAG,KAAK,EAA8B,EAC5C,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAA6B;YACvC,IAAI,EAAE,CAAA,uCAAA,EAA0C,EAAE,CAAA,CAAE;AACpD,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,IAAwB,EAAE,MAAA,GAAwB,EAAE,KACjE,IAAI,CAAC,OAAO,CAA6C;AACvD,YAAA,IAAI,EAAE,CAAA,4BAAA,CAA8B;AACpC,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,WAAW,CAAC,IAAI;AACtB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,KAA2B,EAAE,MAAA,GAAwB,EAAE,KACvE,IAAI,CAAC,OAAO,CAA6C;AACvD,YAAA,IAAI,EAAE,CAAA,+BAAA,CAAiC;AACvC,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACJ,QAAA,IAAA,CAAA,kBAAkB,GAAG,CACnB,KAA+B,EAC/B,MAAA,GAAwB,EAAE,KAE1B,IAAI,CAAC,OAAO,CAAyC;AACnD,YAAA,IAAI,EAAE,CAAA,oCAAA,CAAsC;AAC5C,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACL,IAAA;+GA/HY,aAAa,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAb,aAAa,EAAA,CAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB;;;AC5BK,SAAU,qBAAqB,CAAC,KAAa,EAAA;AACjD,IAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AACvC,QAAA,OAAO,EAAE;IACX;IAEA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;AAEvC,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,QAAA,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;IACzC;AAEA,IAAA,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACrD,IAAA,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;IAEnE,OAAO,YAAY,GAAG,WAAW;AACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MC0ba,mBAAmB,CAAA;AAvYhC,IAAA,WAAA,GAAA;AAwYmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,IAAA,CAAA,YAAY,GAAG,mBAAmB,CAAC,MAAEV,IAAE,MAAEC,IAAE,EAAE,CAAC;AAE9C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;AAChC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC/C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAE7B,IAAA,CAAA,YAAY,GAAG,CAAC;QAChB,IAAA,CAAA,QAAQ,GAAG,CAAC;QAEvC,IAAA,CAAA,QAAQ,GAAwB,EAAE;QAClC,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,gBAAgB,GAAkB,IAAI;QACtC,IAAA,CAAA,YAAY,GAAW,EAAE;QACzB,IAAA,CAAA,kBAAkB,GAA4B,EAAE;QAChD,IAAA,CAAA,gBAAgB,GAAiC,EAAE;AACnD,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACrC,IAAA,CAAA,kBAAkB,GAAyC,IAAI;QA8bpD,IAAA,CAAA,qBAAqB,GAAG,qBAAqB;AACjE,IAAA;AA7bC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC1F,YAAA,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE;QAC5B;IACF;AAEA,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,IAAI,CAAC,YAAY,EAAE;IAC3B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACvC;IACF;AAEA,IAAA,MAAM,YAAY,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACxC;QACF;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAEvB,QAAA,IAAI;YACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;gBACjD,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,IAAI,EAAE;AACP,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAClE;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,KAAK,EACL,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,yCAAyC,CAAC,CACzE;QACH;gBAAU;AACR,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;AAEA,IAAA,MAAM,aAAa,GAAA;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;QACtC,IAAI,CAAC,OAAO,EAAE;YACZ;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAEvB,QAAA,IAAI;YACF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;gBAC9C,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB;AACD,aAAA,CAAC;YAEF,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAChC,gBAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;AACpC,oBAAA,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC;wBACxC,SAAS,EAAE,OAAO,CAAC,SAAmB;AACtC,wBAAA,IAAI,EAAE;AACP,qBAAA,CAAC;gBACJ;YACF;AAEA,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC5B,YAAA,MAAM,IAAI,CAAC,YAAY,EAAE;QAC3B;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,KAAK,EACL,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAC1E;QACH;gBAAU;AACR,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;AAEA,IAAA,SAAS,CAAC,OAA0B,EAAA;AAClC,QAAA,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,SAAS;AACzC,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO;IACpC;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;IACvB;IAEA,MAAM,QAAQ,CAAC,OAA0B,EAAA;AACvC,QAAA,IAAI;AACF,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;AAChH,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,KACrC,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,IAAI,CAC7E;YACD,IAAI,CAAC,UAAU,EAAE;QACnB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,KAAK,EACL,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAC1E;QACH;gBAAU;AACR,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;AAEA,IAAA,aAAa,CAAC,OAA0B,EAAA;AACtC,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;YAC/B,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,6BAA6B,CAAC;YACpE,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,0CAA0C,CAAC;AAClF,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,iBAAiB,EAAE;gBACjB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,4BAA4B,CAAC;AAClE,gBAAA,QAAQ,EAAE,WAAW;AACrB,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA,iBAAiB,EAAE;gBACjB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,4BAA4B,CAAC;AAClE,gBAAA,QAAQ,EAAE;AACX,aAAA;YACD,MAAM,EAAE,YAAW;AACjB,gBAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1C;AACD,SAAA,CAAC;IACJ;IAEA,MAAM,aAAa,CAAC,OAA0B,EAAA;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC;AACxD,QAAA,IAAI,OAAO,EAAE,MAAM,EAAE;AACnB,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;YACxE;QACF;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG;AACzC,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI;SAC1B;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAEvB,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;AAC5E,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG;AACzC,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;aAC3D;QACH;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,KAAK,EACL,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAC5E;AACD,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG;AACzC,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,KAAK,EAAE;aACR;QACH;gBAAU;AACR,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;AAEA,IAAA,eAAe,CAAC,KAAY,EAAA;AAC1B,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;QAC9C,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AAC5E,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE;IAClB;AAEA,IAAA,iBAAiB,CAAC,IAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC;IACvE;AAEA,IAAA,MAAM,qBAAqB,CAAC,OAA0B,EAAE,KAAY,EAAA;AAClE,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;AAC3C,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE;AAEhB,QAAA,IAAI;AACF,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,gBAAA,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC;oBACxC,SAAS,EAAE,OAAO,CAAC,SAAS;AAC5B,oBAAA,IAAI,EAAE;AACP,iBAAA,CAAC;YACJ;AACA,YAAA,MAAM,IAAI,CAAC,YAAY,EAAE;QAC3B;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,KAAK,EACL,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAC7E;AACD,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;IAEA,gBAAgB,CAAC,OAA0B,EAAE,UAAgC,EAAA;AAC3E,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;YAC/B,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,6BAA6B,CAAC;YACpE,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,uCAAuC,EAAE;gBAC9E,QAAQ,EAAE,UAAU,CAAC;aACtB,CAAC;AACF,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,iBAAiB,EAAE;gBACjB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,4BAA4B,CAAC;AAClE,gBAAA,QAAQ,EAAE,WAAW;AACrB,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA,iBAAiB,EAAE;gBACjB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,4BAA4B,CAAC;AAClE,gBAAA,QAAQ,EAAE;AACX,aAAA;YACD,MAAM,EAAE,YAAW;gBACjB,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,UAAU,CAAC;YACzD;AACD,SAAA,CAAC;IACJ;IAEQ,MAAM,oBAAoB,CAAC,OAA0B,EAAA;AAC3D,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;YAC1D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC;QACtF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,KAAK,EACL,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAC1E;QACH;gBAAU;AACR,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;AAEQ,IAAA,MAAM,uBAAuB,CAAC,OAA0B,EAAE,UAAgC,EAAA;AAChG,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC;YAC1E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,KACrC,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC;kBACvB,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,YAAY,KAAK,UAAU,CAAC,YAAY,CAAC;kBAC1G,IAAI,CACT;QACH;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,KAAK,EACL,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAC7E;QACH;gBAAU;AACR,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;IAEA,MAAM,kBAAkB,CAAC,UAAgC,EAAA;AACvD,QAAA,IAAI;YACF,MAAM,IAAI,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,oBAAoB,CACzD,EAAE,EAAE,EAAE,UAAU,CAAC,YAAY,EAAE,EAC/B,EAAE,MAAM,EAAE,MAAM,EAAE,CACnB,CAAoB;YACrB,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;YACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACxC,YAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AACf,YAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ;YACnC,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;QAC1B;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,KAAK,EACL,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAC/E;AACD,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;AAEA,IAAA,MAAM,cAAc,CAAC,OAA0B,EAAE,QAA4B,EAAA;AAC3E,QAAA,IAAI;AACF,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC;kBACvB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE;kBACvG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;YACzG,IAAI,CAAC,cAAc,CACjB,OAAO,CAAC,SAAS,EACjB,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CACtD;QACH;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,KAAK,EACL,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAC3E;QACH;gBAAU;AACR,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;AAEA,IAAA,MAAM,cAAc,CAAC,OAA0B,EAAE,SAAiB,EAAE,OAA8B,EAAA;AAChG,QAAA,IAAI;AACF,YAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC;YACnG,IAAI,CAAC,cAAc,CACjB,OAAO,CAAC,SAAS,EACjB,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CACtD;YACD,OAAO,EAAE,IAAI,EAAE;QACjB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,KAAK,EACL,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,wCAAwC,CAAC,CACxE;QACH;gBAAU;AACR,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACvC;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC;QACvD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC5B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AAEA,QAAA,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC,YAAW;AAC9C,YAAA,IAAI;AACF,gBAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC1E,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAChF;AAAE,YAAA,MAAM;AACN,gBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;YAC9B;oBAAU;AACR,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACzB;QACF,CAAC,EAAE,GAAG,CAAC;IACT;AAEA,IAAA,aAAa,CAAC,SAAgC,EAAA;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC;QACvD,IAAI,CAAC,KAAK,EAAE;YACV;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,CAAA,CAAA,EAAI,SAAS,CAAC,KAAK,CAAA,CAAA,CAAG,CAAC;AACjF,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;IAC9B;AAEA,IAAA,cAAc,CAAC,QAAgB,EAAA;QAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;QAE3F,MAAM,IAAI,GAAG;AACV,aAAA,OAAO,CAAC,cAAc,EAAE,aAAa;AACrC,aAAA,OAAO,CAAC,aAAa,EAAE,aAAa;AACpC,aAAA,OAAO,CAAC,YAAY,EAAE,aAAa;AACnC,aAAA,OAAO,CAAC,gBAAgB,EAAE,qBAAqB;AAC/C,aAAA,OAAO,CAAC,YAAY,EAAE,aAAa;AACnC,aAAA,OAAO,CAAC,UAAU,EAAE,iBAAiB;AACrC,aAAA,OAAO,CAAC,sCAAsC,EAAE,oDAAoD;AACpG,aAAA,OAAO,CAAC,8BAA8B,EAAE,0CAA0C;AAClF,aAAA,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;AAEzB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;IAClE;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,KAAK,GAAG,IAAI,EAAE;AAChB,YAAA,OAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAA,CAAE;QACvF;AACA,QAAA,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI,EAAE;YACvB,OAAO,CAAA,EAAG,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAA,CAAE;QAC/G;QACA,OAAO,CAAA,EAAG,CAAC,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAA,CAAE;IACxH;AAEA,IAAA,eAAe,CAAC,OAA0B,EAAA;AACxC,QAAA,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,oBAAoB,CAAC;IAC5E;AAEA,IAAA,YAAY,CAAC,OAA0B,EAAA;QACrC,OAAO,OAAO,CAAC,SAAS;IAC1B;IAEQ,cAAc,CAAC,SAAiB,EAAE,SAA+B,EAAA;AACvE,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,SAAS,KAAK,SAAS,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7G;AAEQ,IAAA,gBAAgB,CAAC,OAAmB,EAAA;QAC1C,OAAO;AACL,YAAA,GAAG,OAAO;AACV,YAAA,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,CAAC;AACjC,YAAA,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;AAC9B,YAAA,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,EAAE;AAClD,YAAA,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;AACtC,YAAA,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;AACnC,YAAA,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,CAAC;AACvC,YAAA,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;AACjC,YAAA,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;YACrC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YACtF,SAAS,EAAE,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;SAChF;IACH;AAEQ,IAAA,mBAAmB,CAAC,UAAyB,EAAA;QACnD,OAAO;AACL,YAAA,YAAY,EAAE,UAAU,CAAC,YAAY,IAAI,CAAC;AAC1C,YAAA,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,EAAE;AACnC,YAAA,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,EAAE;AACnC,YAAA,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,CAAC;YAClC,UAAU,EAAE,UAAU,CAAC,UAAU,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;AAChD,YAAA,aAAa,EAAE,UAAU,CAAC,aAAa,IAAI,EAAE;AAC7C,YAAA,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI;SACxC;IACH;AAEQ,IAAA,iBAAiB,CAAC,QAA4B,EAAA;QACpD,OAAO;AACL,YAAA,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,EAAE;AACnC,YAAA,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,CAAC;AAC1B,YAAA,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB,IAAI;SACxD;IACH;AAEQ,IAAA,oBAAoB,CAAC,IAAoB,EAAA;QAC/C,OAAO;AACL,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;AACxB,YAAA,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;AACnC,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI;SACtB;IACH;AAEQ,IAAA,oBAAoB,CAAC,IAAuB,EAAA;QAClD,OAAO;AACL,YAAA,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,IAAI,CAAC;AACpD,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;AACjC,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;AACjC,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,CAAC;AACxC,YAAA,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,IAAI,EAAE;YACnD,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,CAAC,CAAC;SACtC;IACH;AAEQ,IAAA,mBAAmB,CAAC,KAAa,EAAA;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC;AACnD,QAAA,OAAO,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI;IAC3B;+GArdW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,yHApYnB,CAAC,mBAAmB,EAAE,aAAa,CAAC,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAiBrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0TT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wmBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAzUC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,UAAA,EAAA,IAAA,EACX,YAAY,oUACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,aAAa,EAAA,QAAA,EAAA,oDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,KAAA,EAAA,UAAA,EAAA,UAAA,EAAA,KAAA,EAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,YAAA,EAAA,QAAA,EAAA,WAAA,EAAA,YAAA,EAAA,SAAA,EAAA,YAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,qBAAqB,sOACrB,SAAS,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,QAAQ,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAER,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAqXJ,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAvY/B,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,SAAA,EACL,CAAC,mBAAmB,EAAE,aAAa,CAAC,EAAA,OAAA,EACtC;wBACP,YAAY;wBACZ,WAAW;wBACX,YAAY;wBACZ,YAAY;wBACZ,UAAU;wBACV,aAAa;wBACb,aAAa;wBACb,WAAW;wBACX,aAAa;wBACb,qBAAqB;wBACrB,SAAS;wBACT,QAAQ;wBACR,QAAQ;wBACR;qBACD,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0TT,EAAA,eAAA,EAuDgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,wmBAAA,CAAA,EAAA;;sBAa9C,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/ZrB,MAAO,qBACX,SAAQ,mBAA+D,CAAA;AAWvE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QATQ,IAAA,CAAA,YAAY,GAAG,mBAAmB,CAAC,MAAEb,IAAE,MAAEC,IAAE,EAAE,CAAC;AAG9C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAE3C,IAAA,CAAA,SAAS,GAAkB,IAAI;IAIzC;IAEA,IACY,aAAa,CAAC,OAAkD,EAAA;AAC1E,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO;QACrB,IAAI,CAAC,eAAe,EAAE;IACxB;AAEQ,IAAA,YAAY,CAAC,GAA8B,EAAA;AACjD,QAAA,MAAM,SAAS,GAAG,GAAG,EAAE,IAAI,EAAE;QAE7B,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACrB,IAAI,CAAC,eAAe,EAAE;YACtB,MAAM,OAAO,GAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,4CAA4C,CAAC;AAC5F,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;YAC7B;QACF;QAEA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACrB,IAAI,CAAC,eAAe,EAAE;YACtB,MAAM,OAAO,GAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,+CAA+C,CAAC;AAC/F,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;YAC9B;QACF;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC1B,IAAI,CAAC,eAAe,EAAE;IACxB;AAEQ,IAAA,kBAAkB,CAAC,GAAW,EAAA;AACpC,QAAA,IAAI;AACF,YAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAEtD,OAAO,SAAS,CAAC,QAAQ,KAAK,OAAO,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ;QAC1E;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;QACd;IACF;AAEmB,IAAA,MAAM,sBAAsB,GAAA;QAC7C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;IACtC;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC;YAC/D;QACF;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;IAC9E;IAEA,aAAa,GAAA;QACX,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,+CAA+C,CAAC;AAC5F,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC;IACrC;+GA3EW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvCtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAtCS,iBAAiB,mFAAiB,SAAS,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EAAE,MAAM,iZAA7C,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAwC/B,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA1CjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,iBAAiB,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC;AAC3E,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCT,EAAA;AACF,iBAAA;;sBAiBE,SAAS;uBAAC,QAAQ;;;;;;;;ACpEd,MAAM,oBAAoB,GAAG;AAClC,IAAA,aAAa,EAAE,oBAAoB;AACnC,IAAA,WAAW,EAAE,kBAAkB;AAC/B,IAAA,cAAc,EAAE,qBAAqB;AACrC,IAAA,MAAM,EAAE,YAAY;AACpB,IAAA,QAAQ,EAAE,cAAc;AACxB,IAAA,KAAK,EAAE;;AAGH,SAAU,kBAAkB,CAAC,OAAoB,EAAE,KAAa,EAAA;IACpE,OAAO,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,oBAAoB,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5G;AAEM,SAAU,qBAAqB,CAAC,OAAoB,EAAE,QAAiB,EAAA;IAC3E,OAAO,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,oBAAoB,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAClH;AAEM,SAAU,aAAa,CAAC,OAAoB,EAAE,YAAqC,EAAA;IACvF,OAAO,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,oBAAoB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9G;AAEM,SAAU,eAAe,CAAC,OAAoB,EAAE,UAAqC,EAAA;IACzF,OAAO,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,oBAAoB,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9G;AAEM,SAAU,YAAY,CAAC,OAAoB,EAAE,KAAc,EAAA;IAC/D,OAAO,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACtG;AAEM,SAAU,oBAAoB,CAAC,OAAoB,EAAE,OAAgC,EAAA;AACzF,IAAA,OAAO,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,oBAAoB,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AACjG;;MC9Ba,sBAAsB,CAAA;AADnC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAAyB;AAyBlE,IAAA;AAvBC,IAAA,UAAU,CAAC,SAAiB,EAAA;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;QAClD,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,QAAQ;QACjB;QAEA,MAAM,WAAW,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;YACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,YAAA,MAAM,CAAC,IAAI,GAAG,QAAQ;AACtB,YAAA,MAAM,CAAC,GAAG,GAAG,SAAS;AACtB,YAAA,MAAM,CAAC,KAAK,GAAG,IAAI;YACnB,MAAM,CAAC,MAAM,GAAG,MAAM,OAAO,EAAE;AAC/B,YAAA,MAAM,CAAC,OAAO,GAAG,MAAK;AACpB,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC;gBACpC,MAAM,CAAC,IAAI,KAAK,CAAC,yCAAyC,SAAS,CAAA,CAAE,CAAC,CAAC;AACzE,YAAA,CAAC;AAED,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AACnC,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC;AAC9C,QAAA,OAAO,WAAW;IACpB;+GAzBW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;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,cADT,MAAM,EAAA,CAAA,CAAA;;4FACnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AC8C5B,MAAO,yCACX,SAAQ,mBAAqC,CAAA;IAG7C,IACY,kBAAkB,CAAC,OAA4C,EAAA;AACzE,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO;QACxB,IAAI,CAAC,oBAAoB,EAAE;IAC7B;AAiBA,IAAA,IAAc,WAAW,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;IACpC;AAEA,IAAA,IAAc,YAAY,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;IACrC;AAEA,IAAA,IAAc,YAAY,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;IACrC;AAEA,IAAA,IAAY,YAAY,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE;IAC/D;AAEA,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AAhCQ,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAChD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACjD,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAI1D,IAAA,CAAA,eAAe,GAAsB,EAAE;QACvC,IAAA,CAAA,YAAY,GAAG,KAAK;QACpB,IAAA,CAAA,mBAAmB,GAAG,KAAK;AAC3B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE;QAC1C,IAAA,CAAA,SAAS,GAAG,KAAK;QAEf,IAAA,CAAA,SAAS,GAAkB,IAAI;AAoBvC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,MAAK;YAC1C,IAAI,CAAC,kBAAkB,EAAE;QAC3B,CAAC,CAAC,CACH;IACH;AAEmB,IAAA,MAAM,sBAAsB,GAAA;AAC7C,QAAA,MAAM,IAAI,CAAC,qBAAqB,EAAE;AAClC,QAAA,MAAM,IAAI,CAAC,eAAe,EAAE;IAC9B;IAEmB,sBAAsB,GAAA;QACvC,IAAI,CAAC,sBAAsB,EAAE;IAC/B;IAES,WAAW,GAAA;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,uBAAuB,EAAE;QAC9B,KAAK,CAAC,WAAW,EAAE;IACrB;AAEA,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;QAClC,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACnE,QAAA,MAAM,IAAI,CAAC,eAAe,EAAE;IAC9B;AAEQ,IAAA,MAAM,qBAAqB,GAAA;AACjC,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,GAAG,2BAA2B;YAC5C;QACF;QAEA,IAAI,CAAC,iBAAiB,IAAI,MAAM,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC;YAC/E,YAAY,EAAE,IAAI,CAAC;AACpB,SAAA,CAAC,CAA0C;QAE5C,MAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,iBAAiB,CAAC;IAC9D;;IAGQ,eAAe,GAAA;QACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACxE;AAEQ,IAAA,MAAM,uBAAuB,GAAA;AACnC,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrF;QACF;AAEA,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACrB,IAAI,CAAC,uBAAuB,EAAE;YAC9B,MAAM,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACjE;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,gCAAgC;AAC1F,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;QAC9B;IACF;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB;QACF;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,cAAc,CAAC,MAAK;AAClB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,YAAA,KAAK,IAAI,CAAC,eAAe,EAAE;AAC7B,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,WAAW,CAAC,EAAU,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,EAAE;IAChC;IAEQ,kBAAkB,GAAA;AACxB,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,EAAE;QACpD,IAAI,IAAI,CAAC,WAAW,KAAK,eAAe,IAAI,IAAI,CAAC,mBAAmB,EAAE;YACpE;QACF;AAEA,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;QAC/B,cAAc,CAAC,MAAK;AAClB,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;AAChC,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB;YACF;AAEA,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE;AAC/C,YAAA,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;AAE1C,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,IAAI,CAAC,oBAAoB,EAAE;YAC7B;iBAAO;gBACL,IAAI,CAAC,uBAAuB,EAAE;YAChC;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,qBAAqB,GAAA;QAC3B,OAAO,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,EAAE,IAAI,SAAS;IAC7D;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,YAAY,EAAE;YACnE;QACF;AAEA,QAAA,MAAM,OAAO,GAA4B;YACvC,gBAAgB,EAAE,IAAI,CAAC,EAAE;AACzB,YAAA,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY;AACjD,YAAA,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA,eAAA,EAAkB,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAA,CAAE,CAAC;YACnF,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AACrC,YAAA,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AACxC,YAAA,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE;AAC3C,YAAA,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,SAAS;AACrD,YAAA,WAAW,EAAE;gBACX,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,IAAI,CAAC;AACjB;SACF;AAED,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AAC7D,QAAA,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACtD;AAEQ,IAAA,eAAe,CAAC,OAAoB,EAAA;AAC1C,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,oBAAoB,CAAC,WAAW,EAAE,CAAC,KAAK,KAAI;AACpE,YAAA,MAAM,KAAK,GAAI,KAA6B,CAAC,MAAM;YACnD,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC;YACtC;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,oBAAoB,CAAC,cAAc,EAAE,CAAC,KAAK,KAAI;AACvE,YAAA,IAAI,CAAC,QAAQ,GAAI,KAA8B,CAAC,MAAM;YACtD,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvC,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,oBAAoB,CAAC,MAAM,EAAE,CAAC,KAAK,KAAI;AAC/D,YAAA,MAAM,MAAM,GAAI,KAA8C,CAAC,MAAM;AACrE,YAAA,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,MAAM;YAC3C,MAAM,OAAO,GAAG,MAAM,EAAE,MAAM,IAAI,MAAM,EAAE,OAAO,IAAI,EAAE;YACvD,QAAQ,QAAQ;AACd,gBAAA,KAAK,SAAS;oBACZ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;oBACjD;AACF,gBAAA,KAAK,MAAM;oBACT,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;oBAC9C;AACF,gBAAA,KAAK,OAAO;oBACV,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;oBAC/C;AACF,gBAAA;oBACE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;;AAEpD,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,oBAAoB,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAI;AACjE,YAAA,MAAM,MAAM,GAAI,KAAgD,CAAC,MAAM;AACvE,YAAA,IAAI,MAAM,EAAE,QAAQ,EAAE;gBACpB,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAiB,CAAC;YACrD;AAAO,iBAAA,IAAI,MAAM,EAAE,GAAG,EAAE;gBACtB,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;YAC5C;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,oBAAoB,CAAC,KAAK,EAAE,CAAC,KAAK,KAAI;YAC9D,IAAI,CAAC,UAAU,CAAC,KAAK,CAAE,KAA8B,CAAC,MAAM,CAAC;AAC/D,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,QAAQ,CAAC,IAAY,EAAA;QAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA,CAAA,CAAG;QAC9F,OAAO,CAAA,EAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,CAAA,EAAG,OAAO,GAAG,CAAA,EAAG,IAAI,EAAE;IACpE;IAEQ,MAAM,yBAAyB,CAAC,QAAoC,EAAA;QAC1E,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY;AAC/D,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU;AACtC,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE;YAChC;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,IAAI;AACvF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC;AACtE,QAAA,IAAI;AACF,YAAA,MAAM,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACzF;QAAE,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,CAAA,oCAAA,EAAuC,YAAY,CAAA,CAAA,EAAI,IAAI,CAAA,KAAA,CAAO,EAAE,KAAK,CAAC;QAC1F;IACF;AAEQ,IAAA,qBAAqB,CAAC,UAAkB,EAAE,YAAoB,EAAE,IAAY,EAAA;QAClF,OAAO,CAAA,EAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA,aAAA,EAAgB,kBAAkB,CAAC,YAAY,CAAC,CAAA,CAAA,EAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO;IAC7H;AAEQ,IAAA,WAAW,CAAC,OAAoB,EAAE,SAAiB,EAAE,QAAuB,EAAA;AAClF,QAAA,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC;AAC7C,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnF;IAEQ,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;AAClD,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,QAAA,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE;AAC/B,QAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;IACnC;IAEQ,MAAM,4BAA4B,CAAC,QAAoC,EAAA;AAC7E,QAAA,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,QAAQ;QAC3C,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE;AACjD,YAAA,IAAI,CAAC,SAAS,GAAG,kDAAkD;YACnE;QACF;QAEA,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC;AAChD,QAAA,MAAM,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC;AACnD,QAAA,IAAI,CAAC,gBAAgB,GAAG,OAAO;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC;QACjD,IAAI,CAAC,sBAAsB,EAAE;IAC/B;+GAlRW,yCAAyC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yCAAyC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EA3BzC,CAAC,mBAAmB,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACtB;;;;;;;;;;;;;;;;;;;;;;;;AAwBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA1BS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAiB,MAAM,iZAArB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FA4B7C,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBA9BrD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,CAAC;oBACjE,SAAS,EAAE,CAAC,mBAAmB,CAAC;AAChC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;AAwBT,EAAA;AACF,iBAAA;;sBAKE,SAAS;uBAAC,oBAAoB;;;AChB3B,MAAO,4BAA6B,SAAQ,mBAAqC,CAAA;IACrF,IACY,sBAAsB,CAAC,aAA2C,EAAA;AAC5E,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;QAClC,IAAI,CAAC,oBAAoB,EAAE;IAC7B;AAcA,IAAA,IAAY,YAAY,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE;IAC/D;AAEA,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AAjBQ,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAK1D,IAAA,CAAA,YAAY,GAAG,KAAK;QACpB,IAAA,CAAA,SAAS,GAAG,KAAK;QAEf,IAAA,CAAA,SAAS,GAAkB,IAAI;AAQvC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,MAAK;YAC1C,IAAI,CAAC,sBAAsB,EAAE;QAC/B,CAAC,CAAC,CACH;IACH;AAEA,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;QAClC,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACnE,QAAA,MAAM,IAAI,CAAC,eAAe,EAAE;IAC9B;AAEmB,IAAA,MAAM,sBAAsB,GAAA;AAC7C,QAAA,MAAM,IAAI,CAAC,qBAAqB,EAAE;AAClC,QAAA,MAAM,IAAI,CAAC,eAAe,EAAE;IAC9B;IAEmB,sBAAsB,GAAA;QACvC,IAAI,CAAC,sBAAsB,EAAE;IAC/B;IAES,WAAW,GAAA;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,yBAAyB,EAAE;QAChC,KAAK,CAAC,WAAW,EAAE;IACrB;AAEQ,IAAA,MAAM,qBAAqB,GAAA;AACjC,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,GAAG,2BAA2B;YAC5C;QACF;QAEA,IAAI,CAAC,iBAAiB,IAAI,MAAM,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC;YAC/E,YAAY,EAAE,IAAI,CAAC;AACpB,SAAA,CAAC,CAA0C;QAE5C,MAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,iBAAiB,CAAC;IAC9D;;IAGQ,eAAe,GAAA;QACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACxE;AAEQ,IAAA,MAAM,uBAAuB,GAAA;QACnC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACzC;QACF;AAEA,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,MAAM,IAAI,CAAC,qBAAqB,EAAE;AAClC,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAC3B;YACF;YAEA,IAAI,CAAC,yBAAyB,EAAE;YAEhC,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,KAAK,kBAAkB,EAAE;gBAC1D,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAC7D;iBAAO;gBACL,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,yCAAyC,EAAE;oBACtG,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,mBAAmB,EAAE,IAAI,CAAC;AAC3B,iBAAA,CAAC;YACJ;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,gCAAgC;AAC1F,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QACtB;IACF;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB;QACF;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,cAAc,CAAC,MAAK;AAClB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,YAAA,KAAK,IAAI,CAAC,eAAe,EAAE;AAC7B,QAAA,CAAC,CAAC;IACJ;IAEQ,yBAAyB,GAAA;AAC/B,QAAA,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE;AAClC,QAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;AACnC,QAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;AACjC,QAAA,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE;IAC7B;IAEQ,MAAM,wBAAwB,CAAC,QAAoC,EAAA;QACzE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,QAAQ;QACjE,IAAI,CAAC,cAAc,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE;AACvD,YAAA,IAAI,CAAC,SAAS,GAAG,qDAAqD;YACtE;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAgC;AACzE,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,WAAW,EAAE,cAAc;YAC3B;AACD,SAAA,CAAC;AACF,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,CAAC;QAC7C,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,CAAA,kBAAA,EAAqB,aAAa,CAAA,uBAAA,EAA0B,aAAa,CAAA,EAAA,CAAI,CAAC;QAChG;QAEA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,SAAS,EAAE;YACvE,mBAAmB,EAAE,IAAI,CAAC;AAC3B,SAAA,CAAC;QACF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,aAAwC;QAClG,IAAI,CAAC,sBAAsB,EAAE;IAC/B;IAEQ,MAAM,yBAAyB,CAAC,QAAoC,EAAA;QAC1E,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY;AAC/D,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU;AACtC,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE;YAChC;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,IAAI;AACvF,QAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,iCAAiC,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE;AACtF,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC;AACnE,YAAA,IAAI;AACF,gBAAA,MAAM,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;gBACpF;YACF;YAAE,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,CAAA,oCAAA,EAAuC,SAAS,CAAA,CAAA,EAAI,IAAI,CAAA,KAAA,CAAO,EAAE,KAAK,CAAC;YACvF;QACF;IACF;AAEQ,IAAA,qBAAqB,CAAC,UAAkB,EAAE,YAAoB,EAAE,IAAY,EAAA;QAClF,OAAO,CAAA,EAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA,aAAA,EAAgB,kBAAkB,CAAC,YAAY,CAAC,CAAA,CAAA,EAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO;IAC7H;IAEQ,iCAAiC,CAAC,QAAoC,EAAE,YAAoB,EAAA;AAClG,QAAA,MAAM,UAAU,GAAG,CAAC,YAAY,CAAC;AACjC,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QACpG,IAAI,kBAAkB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;AAClE,YAAA,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACrC;AAEA,QAAA,OAAO,UAAU;IACnB;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAA;AAC/B,QAAA,OAAO;AACJ,aAAA,OAAO,CAAC,oBAAoB,EAAE,OAAO;AACrC,aAAA,OAAO,CAAC,SAAS,EAAE,GAAG;AACtB,aAAA,WAAW,EAAE;IAClB;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,YAAY,EAAE;YACnE;QACF;AAEA,QAAA,MAAM,OAAO,GAA4B;YACvC,gBAAgB,EAAE,IAAI,CAAC,EAAE;AACzB,YAAA,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY;AACjD,YAAA,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA,eAAA,EAAkB,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAA,CAAE,CAAC;YACnF,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AACrC,YAAA,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AACxC,YAAA,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE;AAC3C,YAAA,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,SAAS;AACrD,YAAA,WAAW,EAAE;gBACX,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,IAAI,CAAC;AACjB;SACF;AAED,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AAC7D,QAAA,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACtD;AAEQ,IAAA,QAAQ,CAAC,IAAY,EAAA;QAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA,CAAA,CAAG;QAC9F,OAAO,CAAA,EAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,CAAA,EAAG,OAAO,GAAG,CAAA,EAAG,IAAI,EAAE;IACpE;+GAtNW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,2DAZ5B,CAAC,mBAAmB,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAaS,gBAAgB,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZ/C;;;;;;;;;GAST,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAXS,YAAY,+BAAE,MAAM,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAanB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAfxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC;oBAC/B,SAAS,EAAE,CAAC,mBAAmB,CAAC;AAChC,oBAAA,QAAQ,EAAE;;;;;;;;;AAST,EAAA;AACF,iBAAA;;sBAEE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,oBAAoB,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;AC9B7D;;;;;AAKG;MAaU,kBAAkB,CAAA;AAZ/B,IAAA,WAAA,GAAA;QAamB,IAAA,CAAA,YAAY,GAAG,mBAAmB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAChE,IAAA;+GAFY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAVnB,CAAA;;;;;;AAMH,QAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACG,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGd,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAZ9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,CAAA;;;;;;AAMH,QAAA,CAAA;oBACP,OAAO,EAAE,CAAC,eAAe,CAAC;AAC1B,oBAAA,UAAU,EAAE;AACb,iBAAA;;;;;;;;ACnBD;;;;AAIG;MAEU,gBAAgB,CAAA;AAD7B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,eAAe,CAAC;AAuB/D,IAAA;AArBC;;;;;;;AAOG;IACH,WAAW,CAAC,SAAS,GAAG,GAAG,EAAA;AACzB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;AAC/B,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,CAAC,IAAI,CACpD,GAAG,CAAC,CAAC,aAAa,KAAI;YACpB,IAAI,aAAa,EAAE;AACjB,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,SAAS,CAAC;AAC7C,YAAA,OAAO,KAAK;QACd,CAAC,CAAC,CACH;IACH;+GAvBW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAhB,gBAAgB,EAAA,CAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;;ACND;;;;AAIG;MAEU,2BAA2B,CAAA;aACf,IAAA,CAAA,SAAS,GAAG,MAAH,CAAU;AAO1C,IAAA,WAAA,GAAA;AALiB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAA6B;QACrD,IAAA,CAAA,cAAc,GAAuB,SAAS;QAGpD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,KAAI;;YAEjD,MAAM,KAAK,GAAa,OAAO,EAAE,YAAY,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,QAAQ,GAAG,CAAA,EAAG,OAAO,EAAE,kBAAkB,IAAI,EAAE,CAAA,CAAA,EAAI,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE;AACtF,YAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,cAAc,EAAE;AACpC,gBAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;gBAC9B,IAAI,CAAC,UAAU,EAAE;YACnB;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACI,IAAA,SAAS,CAAC,gBAAwB,EAAA;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAC/C,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,MAAM;QACf;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC;AAClB,aAAA,uBAAuB,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE;aAChD,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,EAAE;AAC7B,aAAA,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC;AACnC,YAAA,MAAM,KAAK;AACb,QAAA,CAAC,CAAC;QAEJ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC;AACzC,QAAA,OAAO,OAAO;IAChB;AAEA;;AAEG;IACI,MAAM,OAAO,CAAC,gBAAwB,EAAA;QAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;QACrD,OAAO,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAC,SAAS,CAAC;IAC/D;AAEA;;AAEG;IACI,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IACpB;+GAtDW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAA3B,2BAA2B,EAAA,CAAA,CAAA;;4FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC;;;ACKD;;;;;;;;;AASG;MACU,iBAAiB,GAAuB,OAAO,KAAK,KAAI;AACnE,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7B,IAAA,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAC/C,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,2BAA2B,CAAC;IACzD,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;AAE/C,IAAA,IAAK,KAAK,CAAC,IAA8B,EAAE,YAAY,EAAE;;QAEvD,MAAM,cAAc,CAClB,eAAe,CAAC,OAAO,CAAC,IAAI,CAC1B,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,IAAI,CAAC,EACpC,IAAI,CAAC,CAAC,CAAC,CACR,CACF;AACD,QAAA,OAAO,eAAe,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,YAAY;IACxD;IAEA,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC,IAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACnB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;AACtC,QAAA,OAAO,YAAY;IACrB;AAEA,IAAA,IAAI;AACF,QAAA,OAAO,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,GAAG,YAAY;IAC9E;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC;AAC7D,QAAA,OAAO,YAAY;IACrB;AACF;;ACpDA;;AAEG;MAEU,kBAAkB,CAAA;AAD/B,IAAA,WAAA,GAAA;QAES,IAAA,CAAA,WAAW,GAAiC,EAAE;AAC7C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AACnD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AA6CxD,IAAA;AA3CC;;;AAGG;AACI,IAAA,kBAAkB,CAAC,OAAY,EAAA;AACpC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,WAAgB,KAAI;AAClE,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AAC9B,gBAAA,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YACrD;AACA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;IACpC;AAEA;;;;AAIG;AACI,IAAA,cAAc,CAAC,MAAyC,EAAA;AAC7D,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;AAEzB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,KAAK,aAAa,CAAC;QACvE;aAAO;YACL,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,SAAS,KAAK,aAAa;QAC7D;IACF;AAEA;;;;AAIG;IACI,uBAAuB,CAAC,KAAY,EAAE,OAA0C,EAAA;AACrF,QAAA,IAAI,KAAK,IAAI,OAAO,EAAE;YACpB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACrC,gBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;AAC7B,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AACvD,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;IAClC;+GA/CW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAlB,kBAAkB,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;;ACIK,SAAU,gBAAgB,CAAC,MAAwB,EAAE,OAAiC,EAAA;AAC1F,IAAA,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,mBAAmB;AACjD,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE;AAChD,QAAA,EAAE,OAAO,EAAE,4BAA4B,EAAE,QAAQ,EAAE,IAAI;AACxD,KAAA,CAAC;AACJ;AAEM,SAAU,iBAAiB,CAAC,MAAwB,EAAA;IACxD,OAAO,gBAAgB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;AAChE;AAEM,SAAU,eAAe,CAAC,MAAwB,EAAA;IACtD,OAAO,gBAAgB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;AAC9D;;ACrBO,MAAM,YAAY,GAAqB;AAC5C,IAAA;AACE,QAAA,EAAE,EAAE,KAAK;AACT,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE;AACzB,YAAA,UAAU,EAAE;AACV,gBAAA,OAAO,EAAE;AACP,oBAAA,WAAW,EAAE;AACX,wBAAA,KAAK,EAAE;AACL,4BAAA,IAAI,EAAE;AACJ,gCAAA,YAAY,EAAE;AACf;AACF,yBAAA;AACD,wBAAA,IAAI,EAAE;AACJ,4BAAA,IAAI,EAAE;AACJ,gCAAA,YAAY,EAAE;AACf;AACF;AACF;AACF;AACF;SACF,CAAC;AACF,QAAA,aAAa,EAAE;AACb,YAAA,IAAI,EAAE,SAAS,CAAC,KAAK;AACtB,SAAA;AACD,QAAA,aAAa,EAAE;AACb,YAAA,IAAI,EAAE;AACJ,gBAAA,CAAC,EAAE,SAAS;AACZ,gBAAA,EAAE,EAAE,SAAS;AACb,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,GAAG,EAAE;AACN;AACF;AACF;;;MCxCU,aAAa,GAAsB,CAAC,GAAG,EAAE,IAAI,KAAI;AAC5D,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAC3C,IAAA,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAC/C,IAAA,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,GAAG,aAAa,CAAC,QAAQ,EAAE,GAAG,IAAI;IACvE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC;AACpG,IAAA,MAAM,kBAAkB,GAAG,GAAG,CAAC,KAAK,CAAC;QACnC,OAAO;AACP,QAAA,eAAe,EAAE;AAClB,KAAA,CAAC;IAEF,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE;AAC1E,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC;AAEA,IAAA,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,mCAAmC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAAE;AAClH,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC;IAEA,OAAO,eAAe,CAAC,YAAY,EAAE,CAAC,IAAI,CACxC,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,CAAC,SAAS,KAClB,IAAI,CACF,SAAS,EAAE;AACT,UAAE,kBAAkB,CAAC,KAAK,CAAC;AACvB,YAAA,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,KAAK;SAC9E;AACH,UAAE,kBAAkB,CACvB,CACF,CACF;AACH;;ACnBA,MAAM,iBAAiB,GAA8C,CAAC,IAAgB,KACpF,IAAI,mBAAmB,CAAC,IAAI,CAAC;SAEf,UAAU,GAAA;AACxB,IAAA,OAAO,wBAAwB,CAAC;QAC9B,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;AACjE,QAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,oBAAoB,EAAE;AAC7D,QAAA,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,kBAAkB,EAAE;QAC1D,gBAAgB;QAChB,2BAA2B;QAC3B,cAAc;QACd,WAAW;QACX,mBAAmB;QACnB,cAAc;QACd,WAAW;QACX,eAAe;QACf,OAAO;AACP,QAAA,mBAAmB,CAAC;YAClB,eAAe,CAAC,OAAO,CAAC;AACtB,gBAAA,MAAM,EAAE;AACN,oBAAA,OAAO,EAAE,eAAe;AACxB,oBAAA,UAAU,EAAE,iBAAiB;oBAC7B,IAAI,EAAE,CAACH,YAAU;AAClB;aACF;SACF;AACF,KAAA,CAAC;AACJ;;AC5CA;AACA;AACA;AAOM,MAAO,eAEX,SAAQ,UAA4B,CAAA;AAHtC,IAAA,WAAA,GAAA;;QAIE,IAAA,CAAA,yBAAyB,GAAG,CAAC,MAAA,GAAwB,EAAE,KACrD,IAAI,CAAC,OAAO,CAA6C;AACvD,YAAA,IAAI,EAAE,CAAA,+CAAA,CAAiD;AACvD,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACL,IAAA;+GAXY,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAf,eAAe,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;ACRD;AACA;AACA;AAOM,MAAO,eAEX,SAAQ,UAA4B,CAAA;AAHtC,IAAA,WAAA,GAAA;;QAIE,IAAA,CAAA,yBAAyB,GAAG,CAAC,MAAA,GAAwB,EAAE,KACrD,IAAI,CAAC,OAAO,CAA6C;AACvD,YAAA,IAAI,EAAE,CAAA,+CAAA,CAAiD;AACvD,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC;AACL,IAAA;+GAXY,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAf,eAAe,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;ACED;;;;;AAKG;MACU,YAAY,GAAkB,CAAC,CAAC,EAAE,KAAK,KAAK,MAAM,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG;AAYvG;;;;;AAKG;MACU,qBAAqB,GAAkB,OAAO,KAAK,KAAI;AAClE,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7B,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACjD,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,oBAAoB,CAAC;IAClD,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,CAAmB;AACjD,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,aAAa,IAAI,YAAY,CAAA,CAAE,CAAC;AAE3E,IAAA,IAAI,IAAI,CAAC,UAAU,EAAE;QACnB,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;IACzC;AAEA,IAAA,IAAI;;AAEF,QAAA,OAAO,CAAC,MAAM,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,KAAK,SAAS;IACrF;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC;AAC1D,QAAA,OAAO,SAAS;IAClB;AACF;AAEA;;AAEG;AACG,SAAU,iBAAiB,CAAC,IAAI,GAAG,YAAY,EAAA;IACnD,OAAO;QACL,IAAI;AACJ,QAAA,aAAa,EAAE,MAAM,mEAAuD,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC;QAC9G,WAAW,EAAE,CAAC,YAAY;KAC3B;AACH;AAEA;;;;AAIG;AACG,SAAU,aAAa,CAAC,IAAI,GAAG,EAAE,EAAE,OAAuB,EAAE,EAAA;IAChE,OAAO;QACL,IAAI;AACJ,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,WAAW,EAAE,CAAC,YAAY,EAAE,qBAAqB,CAAC;AAClD,QAAA,QAAQ,EAAE,EAAE;QACZ;KACD;AACH;AAEA;;;AAGG;AACG,SAAU,cAAc,CAAC,IAAI,GAAG,QAAQ,EAAA;AAC5C,IAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE;AAC7C;AAEA;AACM,SAAU,aAAa,CAAC,IAAI,GAAG,OAAO,EAAA;IAC1C,OAAO;QACL,IAAI;AACJ,QAAA,aAAa,EAAE,MAAM,+DAAkD,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc;KACrG;AACH;AAEA;AACM,SAAU,eAAe,CAAC,IAAI,GAAG,SAAS,EAAA;IAC9C,OAAO;QACL,IAAI;AACJ,QAAA,aAAa,EAAE,MACb,qEAA2D,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC;QACjG,WAAW,EAAE,CAAC,YAAY;KAC3B;AACH;AAEA;AACM,SAAU,cAAc,CAAC,IAAI,GAAG,QAAQ,EAAA;IAC5C,OAAO;QACL,IAAI;AACJ,QAAA,aAAa,EAAE,MAAM,gEAA+C,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC;QACnG,WAAW,EAAE,CAAC,YAAY;KAC3B;AACH;AAEA;AACM,SAAU,oBAAoB,CAAC,IAAI,GAAG,cAAc,EAAA;IACxD,OAAO;QACL,IAAI;AACJ,QAAA,aAAa,EAAE,MACb,sEAA2D,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,qBAAqB,CAAC;QAClG,WAAW,EAAE,CAAC,YAAY,CAAC;AAC3B,QAAA,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI;KAC3B;AACH;AAEA;AACM,SAAU,eAAe,CAAC,IAAI,GAAG,SAAS,EAAA;IAC9C,OAAO;QACL,IAAI;AACJ,QAAA,aAAa,EAAE,MAAM,oEAAyD,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC;QACjH,WAAW,EAAE,CAAC,YAAY,CAAC;AAC3B,QAAA,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI;KAC3B;AACH;AAEA;AACM,SAAU,kBAAkB,CAAC,IAAI,GAAG,gBAAgB,EAAA;IACxD,OAAO;QACL,IAAI;AACJ,QAAA,aAAa,EAAE,MAAM,oEAAuD,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC;QAC/G,WAAW,EAAE,CAAC,YAAY;KAC3B;AACH;AAEA;AACM,SAAU,mBAAmB,CAAC,IAAI,GAAG,kBAAkB,EAAA;IAC3D,OAAO;QACL,IAAI;AACJ,QAAA,aAAa,EAAE,MACb,qEAA2D,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC;QACjG,WAAW,EAAE,CAAC,YAAY;KAC3B;AACH;AAEA;AACM,SAAU,oBAAoB,CAAC,IAAI,GAAG,mBAAmB,EAAA;IAC7D,OAAO;QACL,IAAI;AACJ,QAAA,aAAa,EAAE,MACb,sEAA6D,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,qBAAqB,CAAC;QACpG,WAAW,EAAE,CAAC,YAAY;KAC3B;AACH;AAEA;AACM,SAAU,kBAAkB,CAAC,IAAI,GAAG,8BAA8B,EAAA;IACtE,OAAO;QACL,IAAI;AACJ,QAAA,aAAa,EAAE,MACb,6EAA6E,CAAC,IAAI,CAChF,CAAC,CAAC,KAAK,CAAC,CAAC,4BAA4B,CACtC;QACH,WAAW,EAAE,CAAC,YAAY;KAC3B;AACH;AAuEA,SAAS,YAAY,CAAC,MAAkC,EAAE,OAAiC,EAAE,IAAY,EAAA;AACvG,IAAA,IAAI,MAAM,KAAK,KAAK,EAAE;QACpB;IACF;IACA,IAAI,CAAC,IAAI,CAAC,OAAO,MAAM,KAAK,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;AACrE;AAEA;;;;;;;;;;;;;;;;;;;AAmBG;AACG,SAAU,gBAAgB,CAAC,OAAA,GAA4B,EAAE,EAAA;AAC7D,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE;AACvC,IAAA,MAAM,QAAQ,GAAW,CAAC,IAAI,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAEtD,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,CAAC;IACvD,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC;IACrD,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,CAAC;IACzD,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,CAAC;IACvD,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,oBAAoB,EAAE,QAAQ,CAAC;IACnE,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,CAAC;IACzD,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,EAAE,QAAQ,CAAC;IAC/D,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,mBAAmB,EAAE,QAAQ,CAAC;IACjE,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,oBAAoB,EAAE,QAAQ,CAAC;IACnE,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,EAAE,QAAQ,CAAC;IAC/D,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,EAAE,QAAQ,CAAC;;IAG7D,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE;AAC5E,QAAA,MAAM,aAAa,GAAG,OAAO,QAAQ,CAAC,SAAS,KAAK,QAAQ,GAAG,QAAQ,CAAC,SAAS,GAAG,YAAY;AAChG,QAAA,MAAM,SAAS,GAAG,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,GAAG,QAAQ,CAAC,KAAK,GAAG,EAAE;AAC1E,QAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;IAC5F;AAEA,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,UAAU;AAEvD,IAAA,MAAM,MAAM,GAAW;AACrB,QAAA;AACE,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,SAAS,EAAE,OAAO,CAAC,MAAM,IAAI,kBAAkB;YAC/C,WAAW,EAAE,CAAC,YAAY,CAAC;YAC3B,gBAAgB,EAAE,CAAC,iBAAiB,CAAC;YACrC;AACD,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,OAAO,CAAC,gBAAgB,IAAI,cAAc;AAChD,YAAA,aAAa,EAAE,MACb,sEAAgE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,qBAAqB;AACvG,SAAA;AACD,QAAA,IAAI,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;AAC7B,QAAA,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB;KACnD;AAED,IAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE;AAC9B,QAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,EAAE,CAAC;IAC7D;AAEA,IAAA,OAAO,MAAM;AACf;;AChUA;;ACAA;;AAEG;;;;"}
|