cloud-ide-core 2.0.7 → 2.0.20
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-ide-core.mjs","sources":["../../../projects/cloud-ide-core/src/lib/cloud-ide-core.routes.ts","../../../projects/cloud-ide-core/src/lib/cloud-ide-core.service.ts","../../../projects/cloud-ide-core/src/lib/cloud-ide-core.component.ts","../../../projects/cloud-ide-core/src/lib/core/menu-management/services/menu-management.service.ts","../../../projects/cloud-ide-core/src/lib/core/general-master-management/services/general-master.service.ts","../../../projects/cloud-ide-core/src/lib/core/general-master-management/services/general-master-type.service.ts","../../../projects/cloud-ide-core/src/lib/core/menu-management/components/menu-list/menu-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/menu-management/components/menu-list/menu-list.component.html","../../../projects/cloud-ide-core/src/lib/core/menu-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/department-management/services/department-management.service.ts","../../../projects/cloud-ide-core/src/lib/core/department-management/components/department-list/department-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/department-management/components/department-list/department-list.component.html","../../../projects/cloud-ide-core/src/lib/core/department-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/designation-management/services/designation-management.service.ts","../../../projects/cloud-ide-core/src/lib/core/grade-level-management/services/grade-level-management.service.ts","../../../projects/cloud-ide-core/src/lib/core/designation-management/components/designation-list/designation-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/designation-management/components/designation-list/designation-list.component.html","../../../projects/cloud-ide-core/src/lib/core/designation-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/grade-level-management/components/grade-level-list/grade-level-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/grade-level-management/components/grade-level-list/grade-level-list.component.html","../../../projects/cloud-ide-core/src/lib/core/grade-level-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/services/page-management.service.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-list/page-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-list/page-list.component.html","../../../projects/cloud-ide-core/src/lib/core/page-management/services/page-theme.service.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-theme/page-theme.component.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-theme/page-theme.component.html","../../../projects/cloud-ide-core/src/lib/core/page-management/services/page-controls.service.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-controls/page-controls.component.ts","../../../projects/cloud-ide-core/src/lib/core/page-management/components/page-controls/page-controls.component.html","../../../projects/cloud-ide-core/src/lib/core/page-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/services/user-master.service.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/services/role-select.service.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/services/index.ts","../../../projects/cloud-ide-core/src/lib/core/user-role-management/services/user-role.service.ts","../../../projects/cloud-ide-core/src/lib/core/entity-management/services/entity-management.service.ts","../../../projects/cloud-ide-core/src/lib/core/general-master-management/components/general-master-type/general-master-type.component.ts","../../../projects/cloud-ide-core/src/lib/core/general-master-management/components/general-master-type/general-master-type.component.html","../../../projects/cloud-ide-core/src/lib/core/general-master-management/components/general-master/general-master.component.ts","../../../projects/cloud-ide-core/src/lib/core/general-master-management/components/general-master/general-master.component.html","../../../projects/cloud-ide-core/src/lib/core/general-master-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/shared/services/pin-code.service.ts","../../../projects/cloud-ide-core/src/lib/core/shared/services/currency.service.ts","../../../projects/cloud-ide-core/src/lib/core/shared/services/country.service.ts","../../../projects/cloud-ide-core/src/lib/core/entity-management/components/entity-create/entity-create.component.ts","../../../projects/cloud-ide-core/src/lib/core/entity-management/components/entity-create/entity-create.component.html","../../../projects/cloud-ide-core/src/lib/core/entity-management/components/entity-list/entity-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/entity-management/components/entity-list/entity-list.component.html","../../../projects/cloud-ide-core/src/lib/core/entity-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-create/user-create.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-create/user-create.component.html","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-list/user-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-list/user-list.component.html","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-forms/user-attributes.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-forms/user-contact-addresses.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-forms/user-documents.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-forms/user-entity-access.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/components/user-forms/user-family-details.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-management/index.ts","../../../projects/cloud-ide-core/src/lib/core/user-role-management/components/user-role-list/user-role-list.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-role-management/components/user-role-list/user-role-list.component.html","../../../projects/cloud-ide-core/src/lib/core/user-role-management/components/user-role-form/user-role-form.component.ts","../../../projects/cloud-ide-core/src/lib/core/user-role-management/components/user-role-form/user-role-form.component.html","../../../projects/cloud-ide-core/src/lib/core/user-role-management/interfaces/user-role.interface.ts","../../../projects/cloud-ide-core/src/lib/core/user-role-management/index.ts","../../../projects/cloud-ide-core/src/public-api.ts","../../../projects/cloud-ide-core/src/cloud-ide-core.ts"],"sourcesContent":["import { Route } from '@angular/router';\nimport { authGuard } from 'cloud-ide-auth';\n\nexport const coreRoutes: Route[] = [\n {\n path: 'menu-management',\n loadComponent: () => import('./core/menu-management/components/menu-list/menu-list.component').then(c => c.MenuListComponent),\n title: 'Menu Management',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_menu_list\"\n }\n }, \n {\n path: 'department',\n loadComponent: () => import('./core/department-management/components/department-list/department-list.component').then(c => c.CideCoreDepartmentListComponent),\n title: 'Department Management',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_department_list\"\n }\n },\n {\n path: 'designation',\n loadComponent: () => import('./core/designation-management/components/designation-list/designation-list.component').then(c => c.CideCoreDesignationListComponent),\n title: 'Designation Management',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_designation_list\"\n }\n },\n {\n path: 'grade-level',\n loadComponent: () => import('./core/grade-level-management/components/grade-level-list/grade-level-list.component').then(c => c.CideCoreGradeLevelListComponent),\n title: 'Grade Level Management',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_grade_level_list\"\n }\n },\n {\n path: 'page',\n loadComponent: () => import('./core/page-management/components/page-list/page-list.component').then(c => c.CideCorePageListComponent),\n title: 'Page Management',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_page_management\"\n }\n },\n {\n path: 'page-form',\n loadComponent: () => import('./core/page-management/components/page-form/page-form.component').then(c => c.CideCorePageFormComponent),\n title: 'Page Form',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_page_management\"\n }\n },\n {\n path: 'page-form/:query',\n loadComponent: () => import('./core/page-management/components/page-form/page-form.component').then(c => c.CideCorePageFormComponent),\n title: 'Page Form',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_page_management\"\n }\n },\n {\n path: 'page-theme',\n loadComponent: () => import('./core/page-management/components/page-theme/page-theme.component').then(c => c.CideCorePageThemeComponent),\n title: 'Page Theme Management',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_page_theme\"\n }\n },\n {\n path: 'page-theme/:query',\n loadComponent: () => import('./core/page-management/components/page-theme/page-theme.component').then(c => c.CideCorePageThemeComponent),\n title: 'Page Theme Management',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_page_theme\"\n }\n },\n {\n path: 'page-controls',\n loadComponent: () => import('./core/page-management/components/page-controls/page-controls.component').then(c => c.CideCorePageControlsComponent),\n title: 'Page Controls Management',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_page_controls\"\n }\n },\n {\n path: 'page-controls/:query',\n loadComponent: () => import('./core/page-management/components/page-controls/page-controls.component').then(c => c.CideCorePageControlsComponent),\n title: 'Page Controls Management',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_page_controls\"\n }\n },\n {\n path: 'general_master_entry',\n loadComponent: () => import('./core/general-master-management/components/general-master/general-master.component').then(c => c.CideCoreGeneralMasterComponent),\n title: 'General Master Entry',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_general_master\"\n }\n },\n {\n path: 'general_master_entry/:query',\n loadComponent: () => import('./core/general-master-management/components/general-master/general-master.component').then(c => c.CideCoreGeneralMasterComponent),\n title: 'General Master Entry',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_general_master\"\n }\n },\n {\n path: 'general_type_entry',\n loadComponent: () => import('./core/general-master-management/components/general-master-type/general-master-type.component').then(c => c.CideCoreGeneralMasterTypeComponent),\n title: 'General Type Entry',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_general_master_type\"\n }\n },\n {\n path: 'general_type_entry/:query',\n loadComponent: () => import('./core/general-master-management/components/general-master-type/general-master-type.component').then(c => c.CideCoreGeneralMasterTypeComponent),\n title: 'General Type Entry',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_general_master_type\"\n }\n },\n // User Management Routes\n {\n path: 'user-master',\n loadComponent: () => import('./core/user-management/components/user-list/user-list.component').then(c => c.CideCoreUserListComponent),\n title: 'User Management',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"auth_user_mst\"\n }\n },\n {\n path: 'user-master/create',\n loadComponent: () => import('./core/user-management/components/user-create/user-create.component').then(c => c.CideCoreUserCreateComponent),\n title: 'Create User',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_user_management_create\"\n }\n },\n {\n path: 'user-master/edit/:query',\n loadComponent: () => import('./core/user-management/components/user-create/user-create.component').then(c => c.CideCoreUserCreateComponent),\n title: 'Edit User',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_user_management_create\"\n }\n },\n {\n path: 'user-master/view/:query',\n loadComponent: () => import('./core/user-management/components/user-create/user-create.component').then(c => c.CideCoreUserCreateComponent),\n title: 'View User',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_user_management_create\"\n }\n },\n {\n path: \"entity-list\",\n loadComponent: () => import('./core/entity-management/components/entity-list/entity-list.component').then(c => c.CideCoreEntityListComponent),\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"admin_entity_list\"\n }\n },\n {\n path: \"entity-create\",\n loadComponent: () => import('./core/entity-management/components/entity-create/entity-create.component').then(c => c.CideCoreEntityCreateComponent),\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_entity_form\"\n }\n },\n {\n path: \"entity-create/:query\",\n loadComponent: () => import('./core/entity-management/components/entity-create/entity-create.component').then(c => c.CideCoreEntityCreateComponent),\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_entity_form\"\n }\n },\n // User Role Management Routes\n {\n path: 'user-role',\n loadComponent: () => import('./core/user-role-management/components/user-role-list/user-role-list.component').then(c => c.CideCoreUserRoleListComponent),\n title: 'User Role Management',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_user_role\"\n }\n },\n {\n path: 'user-role/create',\n loadComponent: () => import('./core/user-role-management/components/user-role-form/user-role-form.component').then(c => c.CideCoreUserRoleFormComponent),\n title: 'Create User Role',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_user_role\"\n }\n },\n {\n path: 'user-role/edit/:query',\n loadComponent: () => import('./core/user-role-management/components/user-role-form/user-role-form.component').then(c => c.CideCoreUserRoleFormComponent),\n title: 'Edit User Role',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_user_role\"\n }\n },\n {\n path: 'user-role/view/:query',\n loadComponent: () => import('./core/user-role-management/components/user-role-form/user-role-form.component').then(c => c.CideCoreUserRoleFormComponent),\n title: 'View User Role',\n canActivate: [authGuard],\n data: {\n reuseTab: true,\n sypg_page_code: \"core_user_role_view\"\n }\n }\n];\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CloudIdeCoreService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'cide-core',\r\n standalone: true,\r\n imports: [],\r\n template: `\r\n <p>\r\n cloud-ide-core works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class CloudIdeCoreComponent {\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError, BehaviorSubject, of } from 'rxjs';\r\nimport { catchError, tap, map } from 'rxjs/operators';\r\nimport { \r\n cidePath, \r\n coreRoutesUrl, \r\n generateStringFromObject, \r\n hostManagerRoutesUrl, \r\n ICoreSyme, \r\n MCoreSymeDeletePayload, \r\n MCoreSymeGetByIdPayload, \r\n menuByIdControllerResponse, \r\n menuChangeSequenceControllerResponse, \r\n menuDeleteControllerResponse, \r\n menuListControllerResponse, \r\n MMenuChangeSequencePayload, \r\n MMenuListPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MenuManagementService {\r\n private apiUrl = `${coreRoutesUrl?.getSidebarMenues}`;\r\n private menuListSubject = new BehaviorSubject<ICoreSyme[]>([]);\r\n public menuList$ = this.menuListSubject.asObservable();\r\n\r\n constructor(private http: HttpClient) {\r\n console.log('MenuManagementService initialized - using real API');\r\n }\r\n\r\n\r\n /**\r\n * Get menu list from API\r\n */\r\n getMenuList(body: MMenuListPayload): Observable<menuListControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<menuListControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]))\r\n .pipe(\r\n tap((response: menuListControllerResponse) => {\r\n if (response?.success) {\r\n this.menuListSubject.next(response?.data || []);\r\n }\r\n }),\r\n catchError(error => {\r\n console.error('CideCoreMenuManagementService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Get menu list from cache (if available)\r\n */\r\n getMenuListFromCache(): ICoreSyme[] {\r\n return this.menuListSubject.value;\r\n }\r\n\r\n /**\r\n * Create new menu item\r\n * POST ${coreRoutesUrl?.menu} - payload: MCoreSymeInsertUpdatePayload, response: menuInsertUpdateControllerResponse\r\n */\r\n createMenuItem(menuItem: ICoreSyme): Observable<menuListControllerResponse> {\r\n console.log('Creating menu item:', menuItem);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu]);\r\n return this.http.post<menuListControllerResponse>(url, menuItem)\r\n .pipe(\r\n tap((response: menuListControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMenuList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Update existing menu item\r\n * POST ${coreRoutesUrl?.menu} - payload: MCoreSymeInsertUpdatePayload, response: menuInsertUpdateControllerResponse\r\n */\r\n updateMenuItem(id: string, menuItem: ICoreSyme): Observable<menuListControllerResponse> {\r\n console.log('Updating menu item:', id, menuItem);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu]);\r\n return this.http.post<menuListControllerResponse>(url, menuItem)\r\n .pipe(\r\n tap((response: menuListControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMenuList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get menu item by ID\r\n * GET ${coreRoutesUrl?.menu}/byId/:query - payload: MCoreSymeGetByIdPayload, response: menuByIdControllerResponse\r\n * TODO: Update to use MCoreSymeGetByIdPayload and menuByIdControllerResponse when available\r\n */\r\n getMenuItemById(id: string): Observable<menuByIdControllerResponse> {\r\n console.log('Getting menu item by ID:', id);\r\n const payload: MCoreSymeGetByIdPayload = { syme_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, 'byId', query]);\r\n return this.http.get<menuByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete menu item\r\n * DELETE ${coreRoutesUrl?.menu}/:query - payload: MCoreSymeDeletePayload, response: menuDeleteControllerResponse\r\n * TODO: Update to use MCoreSymeDeletePayload and menuDeleteControllerResponse when available\r\n */\r\n deleteMenuItem(id: string): Observable<menuDeleteControllerResponse> {\r\n const payload: MCoreSymeDeletePayload = { syme_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]);\r\n return this.http.delete<menuDeleteControllerResponse>(url)\r\n .pipe(\r\n tap((response: menuDeleteControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMenuList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete multiple menu items\r\n * DELETE ${coreRoutesUrl?.menu}/:query - payload: MCoreSymeDeletePayload, response: menuDeleteControllerResponse\r\n * TODO: Update to use MCoreSymeDeletePayload and menuDeleteControllerResponse when available\r\n */\r\n deleteMultipleMenuItems(ids: string[]): Observable<{ success: boolean; message?: string; data?: unknown }> {\r\n console.log('Deleting multiple menu items:', ids);\r\n const payload = { ids };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]);\r\n return this.http.delete<{ success: boolean; message?: string; data?: unknown }>(url)\r\n .pipe(\r\n tap((response: { success: boolean; message?: string; data?: unknown }) => {\r\n if (response.success) {\r\n this.refreshMenuList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle menu item active status\r\n */\r\n toggleMenuItemStatus(id: string): Observable<menuListControllerResponse> {\r\n console.log('Toggling menu item status:', id);\r\n const payload = { id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, query]);\r\n return this.http.put<menuListControllerResponse>(url, {})\r\n .pipe(\r\n tap((response: menuListControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMenuList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Change menu sequence\r\n * PATCH ${coreRoutesUrl?.menu}/change-sequence - payload: menu sequence data, response: menuChangeSequenceControllerResponse\r\n */\r\n changeMenuSequence(payload: MMenuChangeSequencePayload): Observable<menuChangeSequenceControllerResponse> {\r\n console.log('Changing menu sequence:', payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.menu, 'change-sequence']);\r\n return this.http.patch<menuChangeSequenceControllerResponse>(url, payload)\r\n .pipe(\r\n tap((response: menuChangeSequenceControllerResponse) => {\r\n if (response.success) {\r\n this.refreshMenuList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get available menu types\r\n */\r\n getMenuTypes(): Observable<string[]> {\r\n return this.http.get<{ data: string[] }>('/api/menu/types')\r\n .pipe(\r\n map((response: { data: string[] }) => response.data),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get available icons\r\n */\r\n getAvailableIcons(): Observable<string[]> {\r\n return this.http.get<{ data: string[] }>('/api/menu/icons')\r\n .pipe(\r\n map((response: { data: string[] }) => response.data),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Find menu item by ID (including nested items)\r\n */\r\n findMenuItemById(id: string, items: ICoreSyme[] = this.menuListSubject.value): ICoreSyme | null {\r\n // Local search in current menu list\r\n for (const item of items) {\r\n if (item._id === id) {\r\n return item;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Get parent menu items for dropdown selection\r\n */\r\n getParentMenuItems(excludeId?: string): ICoreSyme[] {\r\n const allItems: ICoreSyme[] = [];\r\n\r\n const flattenItems = (items: ICoreSyme[], level: number = 0) => {\r\n items.forEach(item => {\r\n if (item._id !== excludeId) {\r\n allItems.push({\r\n ...item,\r\n syme_title: ' '.repeat(level) + item.syme_title\r\n });\r\n }\r\n });\r\n };\r\n\r\n flattenItems(this.menuListSubject.value);\r\n return allItems;\r\n }\r\n\r\n /**\r\n * Refresh menu list from server\r\n */\r\n private refreshMenuList(): void {\r\n // Create a default body for getting all menu items\r\n const defaultBody: MMenuListPayload = {\r\n pageIndex: 1,\r\n pageSize: 10\r\n };\r\n this.getMenuList(defaultBody).subscribe({\r\n next: () => {\r\n console.log('Menu list refreshed successfully');\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing menu list:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('Menu Management Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n} ","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, throwError, BehaviorSubject } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\nimport { \n cidePath,\n coreRoutesUrl,\n generateStringFromObject,\n hostManagerRoutesUrl,\n generalMasterListControllerResponse,\n generalMasterByIdControllerResponse,\n generalMasterInsertUpdateControllerResponse,\n generalMasterDeleteControllerResponse,\n generalMasterToggleStatusControllerResponse,\n ICoreSygms,\n IGeneralMasterListRequest,\n} from 'cloud-ide-lms-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CideCoreGeneralMasterService {\n private http = inject(HttpClient);\n private generalMasterListSubject = new BehaviorSubject<ICoreSygms[]>([]);\n public generalMasterList$ = this.generalMasterListSubject.asObservable();\n\n constructor() {\n console.log('CideCoreGeneralMasterService initialized - using real API');\n }\n\n /**\n * Get general master list from API\n */\n getMasterList(payload: IGeneralMasterListRequest): Observable<generalMasterListControllerResponse> {\n const query = generateStringFromObject(payload);\n return this.http?.get<generalMasterListControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]))\n .pipe(\n tap((response: generalMasterListControllerResponse) => {\n if (response?.success) {\n this.generalMasterListSubject.next(response?.data || []);\n }\n }),\n catchError(error => {\n console.error('CideCoreGeneralMasterService API error:', error);\n return this.handleError(error);\n })\n );\n }\n\n /**\n * Get general master list from cache (if available)\n */\n getMasterListFromCache(): ICoreSygms[] {\n return this.generalMasterListSubject.value;\n }\n\n /**\n * Save general master (create or update)\n * POST ${coreRoutesUrl?.generalMaster} - payload: ICoreSygms, response: generalMasterInsertUpdateControllerResponse\n */\n saveMaster(master: ICoreSygms): Observable<generalMasterInsertUpdateControllerResponse> {\n const isUpdate = !!master._id;\n console.log(`${isUpdate ? 'Updating' : 'Creating'} general master:`, master);\n \n // Create proper payload\n const payload: ICoreSygms = {\n ...(master._id && { _id: master._id }), // Only include _id if it exists\n sygms_code: master.sygms_code,\n sygms_id_sygmt: master.sygms_id_sygmt,\n sygms_title: master.sygms_title,\n sygms_desc: master.sygms_desc,\n sygms_isactive: master.sygms_isactive,\n sygms_id_sygms: master.sygms_id_sygms,\n sygms_configuration: master.sygms_configuration,\n sygms_entity_id_syen: master.sygms_entity_id_syen\n };\n \n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster]);\n return this.http.post<generalMasterInsertUpdateControllerResponse>(url, payload)\n .pipe(\n tap((response: generalMasterInsertUpdateControllerResponse) => {\n if (response.success) {\n this.refreshMasterList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Create new general master (backward compatibility)\n */\n createMaster(master: ICoreSygms): Observable<generalMasterInsertUpdateControllerResponse> {\n return this.saveMaster(master);\n }\n\n /**\n * Update existing general master (backward compatibility)\n */\n updateMaster(id: string, master: ICoreSygms): Observable<generalMasterInsertUpdateControllerResponse> {\n return this.saveMaster({ ...master, _id: id });\n }\n\n /**\n * Get general master by ID\n * GET ${coreRoutesUrl?.generalMaster}/byId/:query - payload: { sygms_id: string }, response: generalMasterByIdControllerResponse\n */\n getMasterById(id: string): Observable<generalMasterByIdControllerResponse> {\n console.log('Getting general master by ID:', id);\n const payload = { sygms_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, 'byId', query]);\n return this.http.get<generalMasterByIdControllerResponse>(url)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Delete general master\n * DELETE ${coreRoutesUrl?.generalMaster}/:query - payload: { sygms_id: string }, response: generalMasterDeleteControllerResponse\n */\n deleteMaster(id: string): Observable<generalMasterDeleteControllerResponse> {\n const payload = { sygms_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]);\n return this.http.delete<generalMasterDeleteControllerResponse>(url)\n .pipe(\n tap((response: generalMasterDeleteControllerResponse) => {\n if (response.success) {\n this.refreshMasterList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Toggle general master active status\n */\n toggleMasterStatus(id: string): Observable<generalMasterToggleStatusControllerResponse> {\n console.log('Toggling general master status:', id);\n const payload = { id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, query]);\n return this.http.put<generalMasterToggleStatusControllerResponse>(url, {})\n .pipe(\n tap((response: generalMasterToggleStatusControllerResponse) => {\n if (response.success) {\n this.refreshMasterList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Check if master code exists\n */\n checkMasterCodeExists(code: string, typeId: string, excludeId?: string): Observable<{ success: boolean; message: string; exists: boolean }> {\n const payload: Record<string, string> = { code, typeId };\n if (excludeId) {\n payload['excludeId'] = excludeId;\n }\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMaster, 'checkCodeExists', query]);\n return this.http.get<{ success: boolean; message: string; exists: boolean }>(url)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Refresh general master list from server\n */\n private refreshMasterList(): void {\n const defaultPayload: IGeneralMasterListRequest = {};\n this.getMasterList(defaultPayload).subscribe({\n next: () => {\n console.log('General master list refreshed successfully');\n },\n error: (error) => {\n console.error('Error refreshing general master list:', error);\n }\n });\n }\n\n /**\n * Handle errors\n */\n private handleError(error: unknown): Observable<never> {\n let errorMessage = 'An error occurred';\n\n if (error instanceof Error) {\n errorMessage = error.message;\n } else if (typeof error === 'string') {\n errorMessage = error;\n }\n\n console.error('General Master Service Error:', errorMessage);\n return throwError(() => new Error(errorMessage));\n }\n} ","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, throwError, BehaviorSubject } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\nimport { \n cidePath,\n coreRoutesUrl,\n generateStringFromObject,\n hostManagerRoutesUrl,\n generalMasterTypeListControllerResponse,\n generalMasterTypeByIdControllerResponse,\n generalMasterTypeInsertUpdateControllerResponse,\n generalMasterTypeDeleteControllerResponse,\n generalMasterTypeToggleStatusControllerResponse,\n MGeneralMasterType,\n MGeneralMasterTypeToggleStatusPayload,\n ICoreSygmt\n} from 'cloud-ide-lms-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CideCoreGeneralMasterTypeService {\n private http = inject(HttpClient);\n private generalMasterTypeListSubject = new BehaviorSubject<ICoreSygmt[]>([]);\n public generalMasterTypeList$ = this.generalMasterTypeListSubject.asObservable();\n\n constructor() {\n console.log('CideCoreGeneralMasterTypeService initialized - using real API');\n }\n\n /**\n * Get general master type list from API\n */\n getTypeList(body: MGeneralMasterType): Observable<generalMasterTypeListControllerResponse> {\n const query = generateStringFromObject(body);\n return this.http?.get<generalMasterTypeListControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]))\n .pipe(\n tap((response: generalMasterTypeListControllerResponse) => {\n if (response?.success) {\n this.generalMasterTypeListSubject.next(response?.data || []);\n }\n }),\n catchError(error => {\n console.error('CideCoreGeneralMasterTypeService API error:', error);\n return this.handleError(error);\n })\n );\n }\n\n /**\n * Get general master type list from cache (if available)\n */\n getTypeListFromCache(): ICoreSygmt[] {\n return this.generalMasterTypeListSubject.value;\n }\n\n /**\n * Create or update general master type\n * POST ${coreRoutesUrl?.generalMasterType} - payload: IGeneralMasterTypeCreateUpdatePayload, response: generalMasterTypeInsertUpdateControllerResponse\n * If type._id exists, it will update; otherwise, it will create a new type\n */\n saveType(type: ICoreSygmt): Observable<generalMasterTypeInsertUpdateControllerResponse> {\n const isUpdate = !!type._id;\n console.log(`${isUpdate ? 'Updating' : 'Creating'} general master type:`, type);\n \n // Create proper payload - backend will determine create vs update based on _id presence\n const payload: ICoreSygmt = {\n ...(type._id && { _id: type._id }), // Only include _id if it exists\n sygmt_code: type.sygmt_code,\n sygmt_title: type.sygmt_title,\n sygmt_desc: type.sygmt_desc,\n sygmt_isactive: type.sygmt_isactive,\n sygmt_configuration: type.sygmt_configuration,\n sygmt_id_sygmt: type.sygmt_id_sygmt\n };\n \n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType]);\n return this.http.post<generalMasterTypeInsertUpdateControllerResponse>(url, payload)\n .pipe(\n tap((response: generalMasterTypeInsertUpdateControllerResponse) => {\n if (response.success) {\n this.refreshTypeList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Get general master type by ID\n * GET ${coreRoutesUrl?.generalMasterType}/byId/:query - payload: { sygmt_id: string }, response: generalMasterTypeByIdControllerResponse\n */\n getTypeById(id: string): Observable<generalMasterTypeByIdControllerResponse> {\n console.log('Getting general master type by ID:', id);\n const payload = { sygmt_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, 'byId', query]);\n return this.http.get<generalMasterTypeByIdControllerResponse>(url)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Delete general master type\n * DELETE ${coreRoutesUrl?.generalMasterType}/:query - payload: { sygmt_id: string }, response: generalMasterTypeDeleteControllerResponse\n */\n deleteType(id: string): Observable<generalMasterTypeDeleteControllerResponse> {\n const payload = { sygmt_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]);\n return this.http.delete<generalMasterTypeDeleteControllerResponse>(url)\n .pipe(\n tap((response: generalMasterTypeDeleteControllerResponse) => {\n if (response.success) {\n this.refreshTypeList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Delete multiple general master types\n */\n deleteMultipleTypes(ids: string[]): Observable<{ success: boolean; message?: string; data?: unknown }> {\n console.log('Deleting multiple general master types:', ids);\n const payload = { ids };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]);\n return this.http.delete<{ success: boolean; message?: string; data?: unknown }>(url)\n .pipe(\n tap((response: { success: boolean; message?: string; data?: unknown }) => {\n if (response.success) {\n this.refreshTypeList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Toggle general master type active status\n */\n toggleTypeStatus(payload: MGeneralMasterTypeToggleStatusPayload): Observable<generalMasterTypeToggleStatusControllerResponse> {\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, query]);\n return this.http.put<generalMasterTypeToggleStatusControllerResponse>(url, {})\n .pipe(\n tap((response: generalMasterTypeToggleStatusControllerResponse) => {\n if (response.success) {\n this.refreshTypeList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Check if type code exists\n */\n checkTypeCodeExists(code: string, excludeId?: string): Observable<{ success: boolean; message: string; exists: boolean }> {\n const payload: Record<string, string> = { code };\n if (excludeId) {\n payload['excludeId'] = excludeId;\n }\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, 'checkCodeExists', query]);\n return this.http.get<{ success: boolean; message: string; exists: boolean }>(url)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Get hierarchical tree structure\n */\n getTypeTree(): Observable<generalMasterTypeListControllerResponse> {\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.generalMasterType, 'tree']);\n return this.http.get<generalMasterTypeListControllerResponse>(url)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Find general master type by ID\n */\n findTypeById(id: string, items: ICoreSygmt[] = this.generalMasterTypeListSubject.value): ICoreSygmt | null {\n for (const item of items) {\n if (item._id === id) {\n return item;\n }\n }\n return null;\n }\n\n /**\n * Get parent general master types for dropdown selection\n */\n getParentTypes(excludeId?: string): ICoreSygmt[] {\n const allItems: ICoreSygmt[] = [];\n\n const flattenItems = (items: ICoreSygmt[], level: number = 0) => {\n items.forEach(item => {\n if (item._id !== excludeId) {\n allItems.push({\n ...item,\n sygmt_title: ' '.repeat(level) + item.sygmt_title\n });\n }\n });\n };\n\n flattenItems(this.generalMasterTypeListSubject.value);\n return allItems;\n }\n\n /**\n * Refresh general master type list from server\n */\n private refreshTypeList(): void {\n const defaultBody: MGeneralMasterType = {};\n this.getTypeList(defaultBody).subscribe({\n next: () => {\n console.log('General master type list refreshed successfully');\n },\n error: (error) => {\n console.error('Error refreshing general master type list:', error);\n }\n });\n }\n\n /**\n * Handle errors\n */\n private handleError(error: unknown): Observable<never> {\n let errorMessage = 'An error occurred';\n\n if (error instanceof Error) {\n errorMessage = error.message;\n } else if (typeof error === 'string') {\n errorMessage = error;\n }\n\n console.error('General Master Type Service Error:', errorMessage);\n return throwError(() => new Error(errorMessage));\n }\n} ","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Validators, ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ICoreSyme, MMenuListPayload, ICoreSygms, IGeneralMasterListRequest } from 'cloud-ide-lms-model';\nimport { MenuManagementService } from '../../services/menu-management.service';\nimport { CideCoreGeneralMasterService } from '../../../general-master-management/services/general-master.service';\nimport { CideCoreGeneralMasterTypeService } from '../../../general-master-management/services/general-master-type.service';\nimport { CideEleButtonComponent, CideIconComponent, CideInputComponent, CideTextareaComponent, GridConfiguration, GridEvent, DropdownItem, CideEleDropdownComponent, NotificationService } from 'cloud-ide-element';\nimport { CideSelectComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { CideEleDataGridComponent } from 'cloud-ide-element';\n\n\n\n@Component({\n selector: 'cide-core-app-menu-list',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideInputComponent,\n CideSelectComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent\n ],\n templateUrl: './menu-list.component.html',\n styleUrls: []\n})\nexport class MenuListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private menuService = inject(MenuManagementService);\n private generalMasterService = inject(CideCoreGeneralMasterService);\n private generalMasterTypeService = inject(CideCoreGeneralMasterTypeService);\n private notificationService = inject(NotificationService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n menuDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<ICoreSyme>>>('menuDetailsRendererTemplate');\n menuTypeRendererTemplate = viewChild.required<TemplateRef<TemplateContext<ICoreSyme>>>('menuTypeRendererTemplate');\n permissionsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<ICoreSyme>>>('permissionsRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext<ICoreSyme>>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n menuItems = signal<ICoreSyme[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n permissions = signal<ICoreSygms[]>([]);\n userRightsTypeId = signal<string | null>(null);\n searchTerm = signal('');\n\n // Modern reactive forms with signals\n selectedParentItem = signal<ICoreSyme | null>(null);\n\n // Retrieved menu item data\n retrievedMenuItem = signal<ICoreSyme | null>(null);\n\n // Edit mode flag\n isEditMode = signal(false);\n\n // Drag order management\n originalOrder = signal<ICoreSyme[]>([]);\n hasOrderChanged = signal(false);\n \n\n\n // Server-side pagination state\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n\n\n // Modern reactive form with typed controls\n quickAddForm = this.fb.group({\n syme_title: this.fb.control('', [Validators.required, Validators.minLength(2), Validators.maxLength(100)]),\n syme_desc: this.fb.control('', [Validators.maxLength(255)]),\n syme_type: this.fb.control<'module' | 'section' | 'menu' | 'title'>('module', [Validators.required]),\n syme_id_syme: this.fb.control(''),\n syme_path: this.fb.control('', [Validators.maxLength(255)]),\n syme_icon: this.fb.control('', [Validators.maxLength(50)]),\n syme_link: this.fb.control('', [Validators.maxLength(255)]),\n syme_isactive: this.fb.control(true, [Validators.required]),\n syme_order_by: this.fb.control(1, [Validators.required, Validators.min(1)]),\n syme_permissions_id_sygms: this.fb.control<string[]>([])\n });\n\n\n\n // Menu type options for quick add - dynamic based on parent selection\n menuTypeOptions = computed(() => {\n if (this.selectedParentItem()) {\n // When parent is selected, allow creating child types only\n return [\n { value: 'section', label: 'Section' },\n { value: 'menu', label: 'Menu Item' },\n { value: 'title', label: 'Title' },\n { value: 'internal', label: 'Internal Menu' }\n ];\n } else {\n // When no parent is selected, only allow module creation\n return [\n { value: 'module', label: 'Module' }\n ];\n }\n });\n\n // Permission options for multi-select\n permissionOptions = computed(() => {\n return this.permissions().map(permission => ({\n value: permission._id || '',\n label: permission.sygms_title || permission.sygms_code || 'Unknown'\n }));\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSyme>>({\n id: 'menu-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'details',\n header: 'Menu Item',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'menuDetailsRenderer'\n },\n {\n key: 'syme_type',\n header: 'Type',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'menuTypeRenderer'\n },\n {\n key: 'syme_path',\n header: 'Path',\n type: 'text',\n width: '200px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'syme_isactive',\n header: 'Status',\n type: 'status',\n width: '100px',\n truncate: false,\n align: 'center',\n statusConfig: {\n activeValue: true,\n activeLabel: 'Active',\n inactiveLabel: 'Inactive',\n activeClass: 'tw-bg-green-100 tw-text-green-800',\n inactiveClass: 'tw-bg-red-100 tw-text-red-800'\n }\n },\n {\n key: 'syme_permissions_id_sygms',\n header: 'Permissions',\n type: 'custom',\n width: '200px',\n truncate: true,\n align: 'left',\n renderer: 'permissionsRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '60px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: false,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search menu items...',\n searchableColumns: ['syme_title', 'syme_desc', 'syme_path'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n dragDrop: {\n enabled: true,\n orderField: 'syme_order_by',\n dragClass: 'tw-opacity-50 tw-bg-blue-50',\n dropClass: 'tw-bg-green-50'\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none',\n onRefresh: 'onMenuItemRefresh',\n onRowReorder: 'onRowReorder',\n tree: {\n enabled: true,\n primaryKey: '_id',\n foreignKey: 'syme_id_syme',\n childrenKey: 'children',\n levelKey: 'level',\n expandedKey: 'isExpanded',\n hasChildrenKey: 'hasChildren'\n }\n });\n\n // Template renderers using Angular best practices\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext<ICoreSyme>>> => ({\n menuDetailsRenderer: this.menuDetailsRendererTemplate(),\n menuTypeRenderer: this.menuTypeRendererTemplate(),\n permissionsRenderer: this.permissionsRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n /**\n * Get template renderers for data grid\n * These templates are available for enhanced data grid components\n */\n getTemplateRenderers(): Record<string, TemplateRef<TemplateContext<ICoreSyme>>> {\n return this.templateRenderers();\n }\n\n // Mixed renderers (templates + string functions)\n customRenderers = computed(() => ({\n ...this.templateRenderers()\n }));\n\n /**\n * Get custom renderers adapted for current data grid compatibility\n * Uses template-based renderers converted to string functions\n */\n getCustomRenderers(): Record<string, (value: unknown, row: ICoreSyme) => string> {\n // This method is no longer needed since we're using templates directly\n return {};\n }\n\n // Action handlers for grid actions\n actionHandlers = {\n onEditMenuItem: (row: ICoreSyme) => this.editMenuItem(row._id || ''),\n onToggleMenuItem: (row: ICoreSyme) => this.toggleItemStatus(row._id || ''),\n onDeleteMenuItem: (row: ICoreSyme) => this.deleteMenuItem(row._id || ''),\n onMenuItemRowClick: (row: ICoreSyme) => this.onMenuItemRowClick(row),\n onMenuItemRefresh: () => this.onMenuItemRefresh(),\n onAddChild: (row: ICoreSyme) => this.onAddChild(row),\n resetOrder: () => this.resetDragOrder(),\n saveOrder: () => this.saveMenuOrder()\n };\n\n\n\n hasSelection = computed(() => this.selectedItems().length > 0);\n\n // Pagination computed properties\n totalPages = computed(() => Math.ceil(this.totalItems() / this.pageSize()));\n hasNextPage = computed(() => this.currentPage() < this.totalPages());\n hasPreviousPage = computed(() => this.currentPage() > 1);\n\n // Modern constructor with effects for initialization\n constructor() {\n // Initialize component once on construction\n this.initializeComponent();\n\n // Cleanup effect for event listeners\n this.destroyRef.onDestroy(() => {\n this.cleanupEventListeners();\n });\n }\n\n /**\n * Initialize component with modern patterns\n */\n private initializeComponent(): void {\n console.log('MenuListComponent initialized with modern Angular patterns');\n this.loadUserRightsTypeId();\n this.loadMenuItems();\n this.setupEventListeners();\n this.exposeGlobalFunctions();\n }\n\n /**\n * Setup event listeners for dropdown interactions\n */\n private setupEventListeners(): void {\n document.addEventListener('click', this.handleClickOutside.bind(this));\n document.addEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Cleanup event listeners\n */\n private cleanupEventListeners(): void {\n document.removeEventListener('click', this.handleClickOutside.bind(this));\n document.removeEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Expose global functions for dropdown interactions\n */\n private exposeGlobalFunctions(): void {\n if (typeof window !== 'undefined') {\n (window as unknown as { toggleDropdown: (id: string) => void }).toggleDropdown = this.toggleDropdown.bind(this);\n (window as unknown as { handleMenuAction: (action: string, id: string) => void }).handleMenuAction = this.handleMenuAction.bind(this);\n\n }\n }\n\n /**\n * Get default type based on parent selection (computed for reactivity)\n */\n private getDefaultType = computed(() => {\n return this.selectedParentItem() ? 'section' : 'module';\n });\n\n /**\n * Load menu items from service\n */\n loadMenuItems(): void {\n console.log('🚀 MenuListComponent.loadMenuItems() called');\n this.loading.set(true);\n this.error.set(null);\n\n console.log('📞 Calling menuService.getMenuList()...');\n const requestBody: MMenuListPayload = {\n total: this.totalItems(),\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n query: this.searchTerm(),\n sort: { order: 'asc', key: 'syme_order_by' }\n };\n console.log('📋 Request body:', requestBody);\n\n // Check if service exists\n if (!this.menuService) {\n console.error('❌ MenuService is not available');\n this.error.set('Menu service is not available');\n this.loading.set(false);\n return;\n }\n\n this.menuService.getMenuList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📥 MenuListComponent received response:', response);\n if (response?.success) {\n console.log('✅ Response successful, setting menu items:', response.data);\n console.log('📊 Total items:', response.total);\n const menuData = response?.data || [];\n this.menuItems.set(menuData);\n this.totalItems.set(response.total || 0);\n\n // Save original order for drag reset functionality\n if (this.originalOrder().length === 0) {\n this.originalOrder.set([...menuData]);\n console.log('💾 Original order saved for drag reset');\n }\n\n this.updateGridData(menuData);\n } else {\n console.error('❌ Response was not successful:', response);\n this.error.set('Failed to load menu items');\n }\n },\n error: (err) => {\n console.error('❌ MenuListComponent error:', err);\n this.error.set(err.message || 'An error occurred while loading menu items');\n },\n complete: () => {\n console.log('MenuListComponent loadMenuItems completed');\n this.loading.set(false);\n }\n });\n }\n\n\n\n\n\n\n\n /**\n * Handle click outside dropdown\n */\n private handleClickOutside(event: Event): void {\n const target = event.target as HTMLElement;\n\n // Check if click is outside any dropdown\n if (!target?.closest('[data-dropdown]') && !target?.closest('[data-action=\"more-actions\"]')) {\n // Close all dropdowns\n document.querySelectorAll('[data-dropdown]').forEach((el: Element) => {\n const dropdown = el as HTMLElement;\n dropdown.classList.add('tw-hidden');\n });\n\n // Reset all button states\n document.querySelectorAll('[data-action=\"more-actions\"]').forEach((el: Element) => {\n const button = el as HTMLElement;\n button.setAttribute('aria-expanded', 'false');\n });\n }\n }\n\n /**\n * Handle dropdown action clicks\n */\n private handleDropdownAction(event: Event): void {\n const target = event.target as HTMLElement;\n const actionButton = target.closest('[data-action]') as HTMLElement;\n\n if (actionButton) {\n const action = actionButton.getAttribute('data-action');\n const itemId = actionButton.getAttribute('data-item-id');\n\n if (action && itemId) {\n event.preventDefault();\n event.stopPropagation();\n\n // Close the dropdown\n const dropdown = actionButton.closest('[data-dropdown]') as HTMLElement;\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n // Handle the action\n switch (action) {\n case 'edit':\n this.editMenuItem(itemId);\n break;\n case 'toggle':\n this.toggleItemStatus(itemId);\n break;\n case 'delete':\n this.deleteMenuItem(itemId);\n break;\n }\n }\n }\n }\n\n\n\n \n\n /**\n * Update grid data\n */\n private updateGridData(menuItems: ICoreSyme[]): void {\n console.log('🔄 updateGridData called with:', menuItems);\n console.log('🔄 Number of items:', menuItems.length);\n \n this.gridConfig.update(config => {\n const newConfig = {\n ...config,\n data: menuItems\n };\n console.log('⚙️ Updated grid config with menu items');\n return newConfig;\n });\n \n console.log('✅ Grid config after update');\n }\n\n\n\n\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSyme>): void {\n console.log('onGridEvent', event);\n switch (event.type) {\n case 'search':\n this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadMenuItems();\n break;\n case 'pageChange': {\n // Handle pagination from data grid\n const pageData = event.data as { page: number; pageSize: number };\n if (pageData) {\n this.currentPage.set(pageData.page);\n this.pageSize.set(pageData.pageSize);\n this.loadMenuItems();\n } else {\n // Handle simple page number\n const page = event.data as number;\n if (page) {\n this.currentPage.set(page);\n this.loadMenuItems();\n }\n }\n break;\n }\n case 'refresh':\n this.onMenuItemRefresh();\n break;\n case 'rowClick':\n this.onMenuItemRowClick(event.data as ICoreSyme);\n break;\n case 'action':\n if (event.action?.key === 'edit') {\n this.editMenuItem(event.data as string);\n } else if (event.action?.key === 'toggle') {\n this.toggleItemStatus(event.data as string);\n } else if (event.action?.key === 'delete') {\n this.deleteMenuItem(event.data as string);\n }\n break;\n case 'rowReorder': {\n this.onRowReorder(event.data as { sourceIndex: number; targetIndex: number; newOrder: ICoreSyme[] });\n break;\n }\n }\n }\n\n /**\n * Handle menu item search\n */\n\n\n\n\n /**\n * Handle menu item refresh\n */\n onMenuItemRefresh(): void {\n this.loadMenuItems();\n }\n\n /**\n * Handle menu item row click\n */\n onMenuItemRowClick(menuItem: ICoreSyme): void {\n // Navigate to edit page or show details\n this.editMenuItem(menuItem._id || '');\n }\n\n /**\n * Handle row reorder event\n */\n onRowReorder(data: { sourceIndex: number; targetIndex: number; newOrder: ICoreSyme[]; allOrders?: ICoreSyme[] }) {\n console.log('🔄 Row reorder event:', data);\n console.log('🔄 Changed items (newOrder):', data.newOrder.length);\n console.log('🔄 All items (allOrders):', data.allOrders?.length || 0);\n\n // Save original order if not already saved\n if (this.originalOrder().length === 0) {\n this.originalOrder.set([...this.menuItems()]);\n }\n\n // Use allOrders if available (complete order), otherwise fallback to newOrder (changed items only)\n const reorderedData = data.allOrders && data.allOrders.length > 0 ? data.allOrders : data.newOrder;\n console.log('🔄 Using reordered data with', reorderedData.length, 'items');\n\n // Update the displayed data with new order\n this.menuItems.set(reorderedData);\n\n // Mark that order has changed\n this.hasOrderChanged.set(true);\n\n // Update grid data\n this.updateGridDataAfterReorder();\n console.log('Updated menuItems:', this.menuItems());\n }\n\n /**\n * Update grid data after reordering\n */\n private updateGridDataAfterReorder() {\n const currentConfig = this.gridConfig();\n this.gridConfig.set({\n ...currentConfig,\n data: this.menuItems()\n });\n }\n\n /**\n * Save menu order using the change sequence API\n * This method is called by the data grid when save-order action is triggered\n * Handles both single-level and multi-level (hierarchical) menu structures\n */\n saveMenuOrder() {\n console.log('💾 Saving menu order...');\n \n // Get all menu items including children (handle both hierarchical and flat structures)\n const allMenuItems = this.getAllMenuItemsIncludingChildren(this.menuItems());\n \n // Update sequence numbers for all items based on their current order\n const itemsWithUpdatedSequences = allMenuItems.map((item, index) => ({\n ...item,\n syme_order_by: index + 1\n }));\n \n // Prepare payload for change sequence API with all menu items (including children)\n const payload = {\n menu_sequences: itemsWithUpdatedSequences.map(item => ({\n syme_id: item._id || '',\n syme_order_by: item.syme_order_by || 1\n }))\n };\n\n console.log('📤 Sending change sequence payload for', itemsWithUpdatedSequences.length, 'items:', payload);\n\n // Call the change sequence API\n this.menuService.changeMenuSequence(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Menu sequence updated successfully for', itemsWithUpdatedSequences.length, 'items');\n this.notificationService.success(`Menu sequence updated successfully for ${itemsWithUpdatedSequences.length} items`);\n // Reset change flag first\n this.hasOrderChanged.set(false);\n // Update original order to current state\n this.originalOrder.set([...this.menuItems()]);\n // Refresh the menu list from server to get updated order\n this.loadMenuItems();\n } else {\n console.error('❌ Failed to update menu sequence:', response);\n this.error.set('Failed to update menu sequence');\n this.notificationService.error('Failed to update menu sequence');\n }\n },\n error: (error) => {\n console.error('❌ Error updating menu sequence:', error);\n this.error.set('Failed to update menu sequence');\n this.notificationService.error(`Error updating menu sequence: ${error.message || 'Unknown error occurred'}`);\n }\n });\n }\n\n /**\n * Get all menu items including children from the current data structure\n * This handles both hierarchical and flat menu structures\n */\n private getAllMenuItemsIncludingChildren(menuItems: ICoreSyme[]): ICoreSyme[] {\n const allItems: ICoreSyme[] = [];\n const processedIds = new Set<string>();\n \n const collectItems = (items: ICoreSyme[]) => {\n items.forEach(item => {\n // Avoid duplicates by checking if item is already processed\n if (item._id && !processedIds.has(item._id)) {\n allItems.push(item);\n processedIds.add(item._id);\n \n // Check if item has children property (for hierarchical data from data grid)\n if ((item as any).children && (item as any).children.length > 0) {\n collectItems((item as any).children);\n }\n }\n });\n };\n \n // For flat data structure (which is what data grid sends), just return all items\n // since they're already in the correct order\n if (this.isFlatDataStructure(menuItems)) {\n console.log('🔄 Detected flat data structure, returning all items as-is');\n return menuItems;\n }\n \n // For hierarchical data structure, collect all items recursively\n collectItems(menuItems);\n \n console.log('🔄 Collected', allItems.length, 'menu items including children');\n console.log('📊 Items structure:', allItems.map(item => ({ \n id: item._id, \n title: item.syme_title, \n parent: item.syme_id_syme,\n hasChildren: (item as any).children ? (item as any).children.length : 0\n })));\n \n return allItems;\n }\n\n /**\n * Check if the data structure is flat (no children property) or hierarchical\n */\n private isFlatDataStructure(menuItems: ICoreSyme[]): boolean {\n // If any item has a children property with items, it's hierarchical\n return !menuItems.some(item => (item as any).children && (item as any).children.length > 0);\n }\n\n /**\n * Reset drag order to original state\n */\n resetDragOrder() {\n console.log('🔄 Resetting drag order to original state');\n\n // Restore the original order\n const originalItems = this.originalOrder();\n if (originalItems.length > 0) {\n this.menuItems.set([...originalItems]);\n this.updateGridDataAfterReorder();\n }\n\n // Reset the change flag\n this.hasOrderChanged.set(false);\n\n console.log('✅ Drag order reset successfully');\n }\n\n /**\n * Check if order has changed\n */\n hasOrderChanges(): boolean {\n return this.hasOrderChanged();\n }\n\n /**\n * Toggle item selection\n */\n toggleItemSelection(itemId: string): void {\n const current = this.selectedItems();\n const index = current.indexOf(itemId);\n\n if (index > -1) {\n current.splice(index, 1);\n } else {\n current.push(itemId);\n }\n\n this.selectedItems.set([...current]);\n }\n\n /**\n * Select all items on current page\n */\n selectAllOnPage(): void {\n // This method is no longer needed with data grid\n // Data grid handles selection internally\n }\n\n /**\n * Clear all selections\n */\n clearSelection(): void {\n this.selectedItems.set([]);\n }\n\n /**\n * Navigate to edit menu form\n */\n editMenuItem(itemId: string): void {\n console.log('🔵 editMenuItem called with:', itemId);\n // Set edit mode and get the menu item by ID\n this.isEditMode.set(true);\n this.getMenuItemById(itemId);\n }\n\n /**\n * Get menu item by ID using the API\n * GET ${coreRoutesUrl?.menu}/byId/:query - payload: MCoreSymeGetByIdPayload, response: menuByIdControllerResponse\n */\n getMenuItemById(itemId: string): void {\n console.log('🔵 getMenuItemById called with:', itemId);\n this.loading.set(true);\n\n this.menuService.getMenuItemById(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Menu item retrieved successfully:', response.data);\n // Store the retrieved menu item data in the signal\n // Handle both single item and array responses\n let menuItem: ICoreSyme | null = null;\n menuItem = response.data || null;\n\n this.retrievedMenuItem.set(menuItem);\n\n // If in edit mode, populate the form with the retrieved data\n if (this.isEditMode() && menuItem) {\n this.populateFormForEdit(menuItem);\n }\n } else {\n this.error.set('Failed to retrieve menu item');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while retrieving the menu item');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with menu item data for editing\n */\n populateFormForEdit(menuItem: ICoreSyme): void {\n console.log('🔵 populateFormForEdit called with:', menuItem);\n\n // Populate the form with the menu item data\n this.quickAddForm.patchValue({\n syme_title: menuItem.syme_title || '',\n syme_desc: menuItem.syme_desc || '',\n syme_type: (menuItem.syme_type as 'module' | 'section' | 'menu' | 'title') || 'module',\n syme_id_syme: menuItem.syme_id_syme || '',\n syme_path: menuItem.syme_path || '',\n syme_icon: menuItem.syme_icon || '',\n syme_link: menuItem.syme_link || '',\n syme_permissions_id_sygms: menuItem.syme_permissions_id_sygms || [],\n syme_isactive: menuItem.syme_isactive ?? true,\n syme_order_by: menuItem.syme_order_by || 1\n });\n\n // Set the selected parent if this item has a parent\n if (menuItem.syme_id_syme) {\n // Find the parent item in the current menu items\n const parentItem = this.menuItems().find(item => item._id === menuItem.syme_id_syme);\n if (parentItem) {\n this.selectedParentItem.set(parentItem);\n }\n }\n\n console.log('✅ Form populated for editing:', this.quickAddForm.value);\n }\n\n /**\n * Delete menu item\n */\n deleteMenuItem(itemId: string): void {\n console.log('🔵 deleteMenuItem called with:', itemId);\n if (confirm('Are you sure you want to delete this menu item?')) {\n this.loading.set(true);\n\n this.menuService.deleteMenuItem(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadMenuItems(); // Reload the list\n } else {\n this.error.set('Failed to delete menu item');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while deleting the menu item');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Delete multiple selected items\n */\n deleteSelectedItems(): void {\n const selected = this.selectedItems();\n\n if (selected.length === 0) {\n return;\n }\n\n if (confirm(`Are you sure you want to delete ${selected.length} selected menu item(s)?`)) {\n this.loading.set(true);\n\n // Use bulk delete service method\n this.menuService.deleteMultipleMenuItems(selected)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Multiple menu items deleted successfully');\n this.loadMenuItems(); // Reload the list\n this.clearSelection();\n } else {\n this.error.set('Failed to delete some menu items');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while deleting menu items');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Toggle menu item status\n */\n toggleItemStatus(itemId: string): void {\n console.log('🔵 toggleItemStatus called with:', itemId);\n this.loading.set(true);\n\n this.menuService.toggleMenuItemStatus(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadMenuItems(); // Reload the list\n } else {\n this.error.set('Failed to toggle menu item status');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while toggling status');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update search term\n */\n onSearchChange(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.searchTerm.set(value);\n }\n\n /**\n * Navigate to specific page\n */\n goToPage(): void {\n // Data grid handles pagination internally\n }\n\n /**\n * Get menu type display name\n */\n getMenuTypeDisplay(type: string): string {\n const typeMap: Record<string, string> = {\n 'module': 'Module',\n 'section': 'Section',\n 'menu': 'Menu Item',\n 'title': 'Title'\n };\n return typeMap[type] || type;\n }\n\n /**\n * Get status display\n */\n getStatusDisplay(isActive: boolean): string {\n return isActive ? 'Active' : 'Inactive';\n }\n\n /**\n * Get status class for styling\n */\n getStatusClass(isActive: boolean): string {\n return isActive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800';\n }\n\n /**\n * Get menu type class for styling\n */\n getMenuTypeClass(type: string): string {\n switch (type) {\n case 'module': return 'tw-bg-purple-100 tw-text-purple-800';\n case 'section': return 'tw-bg-blue-100 tw-text-blue-800';\n case 'menu': return 'tw-bg-green-100 tw-text-green-800';\n case 'title': return 'tw-bg-gray-100 tw-text-gray-800';\n default: return 'tw-bg-gray-100 tw-text-gray-800';\n }\n }\n\n\n\n /**\n * Check if item is selected\n */\n isItemSelected(itemId: string): boolean {\n return this.selectedItems().includes(itemId);\n }\n\n /**\n * Check if all items on current page are selected\n */\n isAllSelectedOnPage(): boolean {\n // This method is no longer needed with data grid\n // Data grid handles selection internally\n return false;\n }\n\n /**\n * Get pagination range\n */\n getPaginationRange(): number[] {\n // This method is no longer needed with data grid\n // Data grid handles pagination internally\n return [];\n }\n\n\n\n /**\n * Track by function for ngFor\n */\n trackByItemId(index: number, item: ICoreSyme): string {\n return item._id || '';\n }\n\n\n\n /**\n * Quick add or update menu item using reactive form\n */\n quickAddMenuItem() {\n if (this.quickAddForm.invalid) return;\n\n const formValue = this.quickAddForm.value;\n\n // Prepare the menu item using ICoreSyme model structure\n const menuItem: Partial<ICoreSyme> = {\n _id: this.retrievedMenuItem()?._id || '',\n syme_title: formValue.syme_title,\n syme_desc: formValue.syme_desc || '',\n syme_type: formValue.syme_type,\n syme_id_syme: formValue.syme_id_syme || undefined,\n syme_path: formValue.syme_path || '',\n syme_icon: formValue.syme_icon || '',\n syme_link: formValue.syme_link || '',\n syme_order_by: formValue.syme_order_by,\n syme_isactive: formValue.syme_isactive,\n syme_permissions_id_sygms: formValue.syme_permissions_id_sygms || []\n } as any;\n\n // Check if we're in edit mode\n if (this.isEditMode() && this.retrievedMenuItem()) {\n // Update existing menu item\n const itemId = this.retrievedMenuItem()?._id;\n if (itemId) {\n console.log('🔵 Updating menu item:', itemId);\n this.menuService.updateMenuItem(itemId, menuItem).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Menu item updated successfully');\n // Reset form and exit edit mode\n this.resetQuickAddForm();\n this.isEditMode.set(false);\n this.retrievedMenuItem.set(null);\n // Reload menu items\n this.loadMenuItems();\n }\n },\n error: () => {\n this.error.set('Failed to update menu item');\n }\n });\n }\n } else {\n // Create new menu item\n console.log('🔵 Creating new menu item');\n this.menuService.createMenuItem(menuItem).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Menu item created successfully');\n // Reset reactive form with default values\n this.resetQuickAddForm();\n // Reload menu items\n this.loadMenuItems();\n }\n },\n error: () => {\n this.error.set('Failed to create menu item');\n }\n });\n }\n }\n\n /**\n * Reset the quick add form to default values\n */\n resetQuickAddForm(): void {\n // Clear selected parent to return to module creation mode\n this.selectedParentItem.set(null);\n\n // Clear edit mode and retrieved item\n this.isEditMode.set(false);\n this.retrievedMenuItem.set(null);\n\n this.quickAddForm.reset({\n syme_title: '',\n syme_desc: '',\n syme_type: 'module', // Always default to module on reset\n syme_id_syme: '',\n syme_path: '',\n syme_icon: '',\n syme_link: '',\n syme_isactive: true,\n syme_order_by: 1,\n syme_permissions_id_sygms: []\n });\n }\n\n /**\n * Handle add child button click from row action\n */\n onAddChild(parentItem: ICoreSyme): void {\n console.log('🔵 onAddChild called with:', parentItem);\n console.log('🔵 Parent title:', parentItem.syme_title);\n\n // Clear edit mode and retrieved item when adding a child\n this.isEditMode.set(false);\n this.retrievedMenuItem.set(null);\n\n // Set the selected parent item first using signal\n this.selectedParentItem.set(parentItem);\n console.log('🔵 selectedParentItem set to:', this.selectedParentItem());\n\n // Update form with parent context (don't call resetQuickAddForm as it clears the parent)\n this.quickAddForm.patchValue({\n syme_title: '',\n syme_desc: '',\n syme_type: 'section', // Default to section for child items\n syme_id_syme: parentItem._id,\n syme_path: '',\n syme_icon: '',\n syme_link: '',\n syme_isactive: true,\n syme_order_by: 1,\n syme_permissions_id_sygms: []\n });\n\n console.log('🔵 Form updated, parent should be visible:', this.selectedParentItem()?.syme_title);\n }\n\n /**\n * Handle row reorder event\n */\n\n\n /**\n * Toggle dropdown visibility\n */\n toggleDropdown(itemId: string) {\n // Close all other dropdowns first\n document.querySelectorAll('.dropdown-menu').forEach(menu => {\n if (menu.getAttribute('data-dropdown') !== itemId) {\n menu.classList.add('tw-hidden');\n }\n });\n\n // Toggle the clicked dropdown\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.toggle('tw-hidden');\n }\n }\n\n /**\n * Handle menu action clicks\n */\n handleMenuAction(action: string, itemId: string) {\n const item = this.menuItems().find(item => item._id === itemId);\n if (!item) return;\n\n // Close the dropdown\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n // Handle the action\n switch (action) {\n case 'addChild':\n this.addChildMenuItem(itemId, item);\n break;\n case 'edit':\n this.editMenuItem(itemId);\n break;\n case 'toggle':\n this.toggleItemStatus(itemId);\n break;\n case 'delete':\n this.deleteMenuItem(itemId);\n break;\n }\n }\n\n /**\n * Add child menu item - sets parent and scrolls to form\n */\n addChildMenuItem(parentId: string, parentItem: ICoreSyme) {\n // Clear edit mode and retrieved item when adding a child\n this.isEditMode.set(false);\n this.retrievedMenuItem.set(null);\n\n // Set the parent ID in the form\n this.quickAddForm.patchValue({\n syme_id_syme: parentId\n });\n\n // Update UI to show which parent is selected\n this.selectedParentItem.set(parentItem);\n\n // Scroll to the form\n const formElement = document.querySelector('.tw-px-6.tw-py-4.tw-border-b');\n if (formElement) {\n formElement.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n\n // Focus on the title input\n setTimeout(() => {\n const titleInput = document.getElementById('syme_title');\n if (titleInput) {\n titleInput.focus();\n }\n }, 300);\n }\n\n /**\n * Clear selected parent\n */\n clearSelectedParent() {\n this.selectedParentItem.set(null);\n this.quickAddForm.patchValue({\n syme_id_syme: '',\n syme_type: 'module' // Reset to module when no parent\n });\n }\n\n /**\n * Helper methods for templates\n */\n getMenuTypeLabel(type: string): string {\n const typeMap: { [key: string]: string } = {\n 'module': 'Module',\n 'section': 'Section',\n 'menu': 'Menu Item',\n 'title': 'Title'\n };\n return typeMap[type] || 'Unknown';\n }\n\n\n\n\n\n\n\n /**\n * Test method to load sample data for debugging\n */\n loadTestData(): void {\n console.log('🧪 Loading test data manually...');\n const testData: ICoreSyme[] = [\n {\n _id: 'test-1',\n syme_title: 'Dashboard',\n syme_desc: 'Main dashboard module',\n syme_type: 'module' as 'module' | 'section' | 'menu' | 'title',\n syme_path: '/dashboard',\n syme_icon: 'dashboard',\n syme_link: '',\n syme_isactive: true,\n syme_order_by: 1,\n syme_id_syme: ''\n },\n {\n _id: 'test-2',\n syme_title: 'User Management',\n syme_desc: 'Manage users and permissions',\n syme_type: 'section' as 'module' | 'section' | 'menu' | 'title',\n syme_path: '/users',\n syme_icon: 'people',\n syme_link: '',\n syme_isactive: true,\n syme_order_by: 1,\n syme_id_syme: 'test-1'\n },\n {\n _id: 'test-3',\n syme_title: 'Settings',\n syme_desc: 'Application settings',\n syme_type: 'menu' as 'module' | 'section' | 'menu' | 'title',\n syme_path: '/settings',\n syme_icon: 'settings',\n syme_link: '/settings',\n syme_isactive: true,\n syme_order_by: 2,\n syme_id_syme: 'test-1'\n }\n ];\n\n this.loading.set(false);\n this.error.set(null);\n this.menuItems.set(testData);\n this.totalItems.set(testData.length);\n\n\n\n this.updateGridData(testData);\n console.log('✅ Test data loaded successfully');\n }\n\n /**\n * Load user rights type ID from general master types\n */\n private loadUserRightsTypeId(): void {\n this.generalMasterTypeService.getTypeList({\n sygmt_code: \"user_rights\"\n })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n const userRightsType = response.data.find(type =>\n type.sygmt_code === 'user_rights' || type.sygmt_title?.toLowerCase().includes('user_rights')\n );\n if (userRightsType) {\n this.userRightsTypeId.set(userRightsType._id || null);\n this.loadPermissions();\n } else {\n this.error.set('User rights type not found in general master types');\n }\n }\n },\n error: (err) => {\n this.error.set('Failed to load user rights type');\n }\n });\n }\n\n /**\n * Load permissions from general master\n */\n private loadPermissions(): void {\n const typeId = this.userRightsTypeId();\n if (!typeId) {\n this.error.set('User rights type not found. Please ensure the \"user_rights\" type exists in general master types.');\n return;\n }\n\n const payload: IGeneralMasterListRequest = { sygms_id_sygmt: typeId };\n this.generalMasterService.getMasterList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n this.permissions.set(response.data);\n if (this.error()?.includes('permissions')) {\n this.error.set(null);\n }\n } else {\n this.permissions.set([]);\n this.error.set('No permissions found. Please ensure permissions are configured in general master.');\n }\n },\n error: (err) => {\n this.permissions.set([]);\n this.error.set('Failed to load permissions from general master. Please check your configuration.');\n }\n });\n }\n\n /**\n * Get permission names from permission IDs\n */\n getPermissionNames(permissionIds: string[]): string {\n if (!permissionIds || permissionIds.length === 0) {\n return 'No permissions';\n }\n \n const permissionNames = permissionIds\n .map(id => {\n const permission = this.permissions().find(p => p._id === id);\n return permission ? (permission.sygms_title || permission.sygms_code || 'Unknown') : 'Unknown';\n })\n .filter(name => name !== 'Unknown');\n \n return permissionNames.length > 0 ? permissionNames.join(', ') : 'No valid permissions';\n }\n\n /**\n * Get permission by ID\n */\n getPermissionById(permissionId: string): ICoreSygms | undefined {\n return this.permissions().find(p => p._id === permissionId);\n }\n\n /**\n * Get all permission names for tooltip\n */\n getAllPermissionNames(permissionIds: string[]): string {\n if (!permissionIds || permissionIds.length === 0) {\n return 'No permissions';\n }\n \n const permissionNames = permissionIds\n .map(id => {\n const permission = this.permissions().find(p => p._id === id);\n return permission ? (permission.sygms_title || permission.sygms_code || 'Unknown') : 'Unknown';\n })\n .filter(name => name !== 'Unknown');\n \n return permissionNames.length > 0 ? permissionNames.join(', ') : 'No valid permissions';\n }\n\n /**\n * Handle menu type change - clear permissions for non-menu types\n */\n onMenuTypeChange(): void {\n const currentType = this.quickAddForm.get('syme_type')?.value;\n if (currentType !== 'menu') {\n this.quickAddForm.patchValue({\n syme_permissions_id_sygms: []\n });\n }\n }\n\n /**\n * Get dropdown items for menu actions\n */\n getDropdownItems(menuItem: ICoreSyme): DropdownItem[] {\n return [\n {\n id: 'addChild',\n label: 'Add Child',\n icon: 'add',\n disabled: false\n },\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n disabled: false\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n disabled: false\n },\n {\n id: 'toggle',\n label: menuItem.syme_isactive ? 'Deactivate' : 'Activate',\n icon: menuItem.syme_isactive ? 'block' : 'check_circle',\n disabled: false\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, menuItem: ICoreSyme): void {\n switch (item.id) {\n case 'addChild':\n this.addChildMenuItem(menuItem._id || '', menuItem);\n break;\n case 'edit':\n this.editMenuItem(menuItem._id || '');\n break;\n case 'delete':\n this.deleteMenuItem(menuItem._id || '');\n break;\n case 'toggle':\n this.toggleItemStatus(menuItem._id || '');\n break;\n }\n }\n\n} ","<!-- Menu List Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Menu Item' : 'Quick Add Menu Item' }}</h6>\n </div>\n @if (selectedParentItem()) {\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentItem()?.syme_title }}</span>\n </div>\n <button \n cideEleButton \n variant=\"ghost\" \n size=\"xs\" \n type=\"button\" \n (click)=\"clearSelectedParent()\" \n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\n <svg class=\"tw-w-4 tw-h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"/>\n </svg>\n </button>\n </div>\n }\n </div>\n \n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddMenuItem()\">\n <!-- First Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\n <!-- Menu Title -->\n <div>\n <cide-ele-input \n id=\"syme_title\" \n label=\"Title\" \n formControlName=\"syme_title\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Menu Type -->\n <div>\n <cide-ele-select \n label=\"Type*\" \n [options]=\"menuTypeOptions()\" \n formControlName=\"syme_type\"\n placeholder=\"Select type\"\n size=\"sm\"\n (ngModelChange)=\"onMenuTypeChange()\">\n </cide-ele-select>\n </div>\n \n <!-- Path -->\n <div>\n <cide-ele-input \n id=\"quickPath\" \n type=\"text\"\n label=\"Path\" \n formControlName=\"syme_path\"\n placeholder=\"/path/to/route\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Icon -->\n <div>\n <cide-ele-input \n id=\"quickIcon\" \n type=\"text\"\n label=\"Icon\" \n formControlName=\"syme_icon\"\n placeholder=\"Icon name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Empty div for spacing -->\n <div></div>\n </div>\n \n <!-- Second Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\n <!-- Description -->\n <div>\n <cide-ele-textarea \n id=\"syme_desc\" \n label=\"Description\" \n formControlName=\"syme_desc\"\n placeholder=\"Menu description\"\n rows=\"2\"\n size=\"sm\">\n </cide-ele-textarea>\n </div>\n \n <!-- Permissions (only show for menu and title types) -->\n @if (quickAddForm.get('syme_type')?.value === 'menu') {\n <div>\n <cide-ele-select \n label=\"Permissions\" \n [options]=\"permissionOptions()\" \n formControlName=\"syme_permissions_id_sygms\"\n placeholder=\"Select permissions for this menu\"\n [multiple]=\"true\"\n size=\"sm\">\n </cide-ele-select>\n </div>\n }\n \n <!-- Link -->\n <div>\n <cide-ele-input \n id=\"quickLink\" \n type=\"text\"\n label=\"Link\" \n formControlName=\"syme_link\"\n placeholder=\"External link\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Active Status and Action Buttons -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <!-- Active Checkbox -->\n <cide-ele-input \n id=\"quickIsActive\"\n type=\"checkbox\"\n label=\"Active\"\n formControlName=\"syme_isactive\"\n size=\"sm\">\n </cide-ele-input>\n \n <!-- Action Buttons -->\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n [disabled]=\"quickAddForm.invalid\"\n class=\"tw-px-2 tw-py-1 tw-w-20\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Add' }}\n </button>\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\"\n (click)=\"resetQuickAddForm()\"\n class=\"tw-px-2 tw-py-1 tw-w-16\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n Reset\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative tw-p-0\">\n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-w-full tw-overflow-auto\">\n \n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [dragDropEnabled]=\"true\" \n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n\n </div>\n </div>\n\n</div>\n\n<!-- \n Angular Template References for Grid Renderers (Best Practice)\n \n These ng-template elements represent the Angular best practice for custom rendering.\n They provide:\n - Type safety with template context\n - Component lifecycle integration\n - Change detection optimization\n - Proper event handling\n - Accessibility features\n \n Note: Current data grid uses string renderers for compatibility.\n Templates are maintained for future component enhancement.\n-->\n\n\n\n<!-- Menu Details Renderer Template -->\n<ng-template #menuDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Menu Icon -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon \n class=\"tw-text-gray-400\" \n size=\"xs\">\n {{ row.syme_icon || 'folder_open' }}\n </cide-ele-icon>\n </div>\n \n <!-- Menu Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-text-xs tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.syme_title\">\n {{ row.syme_title || 'Untitled' }}\n </div>\n @if (row.syme_desc) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.syme_desc\">\n {{ row.syme_desc }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Menu Type Renderer Template -->\n<ng-template #menuTypeRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"getMenuTypeClass(row.syme_type)\">\n {{ getMenuTypeLabel(row.syme_type) }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown \n [items]=\"getDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template>\n\n<!-- Permissions Renderer Template -->\n<ng-template #permissionsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-flex-wrap tw-gap-1 tw-max-w-full tw-items-center\">\n @if (row.syme_type === 'menu') {\n @if (row.syme_permissions_id_sygms && row.syme_permissions_id_sygms.length > 0) {\n @for (permissionId of row.syme_permissions_id_sygms.slice(0, 3); track permissionId) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800 tw-whitespace-nowrap tw-h-5\">\n {{ getPermissionById(permissionId)?.sygms_title || getPermissionById(permissionId)?.sygms_code || 'Unknown' }}\n </span>\n }\n @if (row.syme_permissions_id_sygms.length > 3) {\n <span \n class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-gray-100 tw-text-gray-600 tw-whitespace-nowrap tw-cursor-help tw-h-5\"\n [title]=\"getAllPermissionNames(row.syme_permissions_id_sygms)\">\n +{{ row.syme_permissions_id_sygms.length - 3 }} more\n </span>\n }\n } @else {\n <span class=\"tw-text-xs tw-text-gray-500 tw-h-5 tw-flex tw-items-center\">No permissions</span>\n }\n } @else {\n <!-- Show N/A for module, section, and title types -->\n <span class=\"tw-text-xs tw-text-gray-400 tw-h-5 tw-flex tw-items-center\">N/A</span>\n }\n </div>\n</ng-template>\n\n","/*\r\n * Menu Management Module Exports\r\n */\r\n\r\n// Components\r\nexport * from './components/menu-list/menu-list.component';\r\n\r\n// Services\r\nexport * from './services/menu-management.service';","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError, BehaviorSubject } from 'rxjs';\r\nimport { catchError, tap } from 'rxjs/operators';\r\nimport { \r\n cidePath, \r\n coreRoutesUrl, \r\n generateStringFromObject, \r\n hostManagerRoutesUrl, \r\n ICoreSydept, \r\n MDepartmentDeletePayload, \r\n MDepartmentGetByIdPayload, \r\n departmentByIdControllerResponse, \r\n departmentDeleteControllerResponse, \r\n departmentControllerResponse,\r\n MDepartment,\r\n MDepartmentToggleStatusPayload,\r\n departmentToggleStatusControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideCoreDepartmentManagementService {\r\n private departmentListSubject = new BehaviorSubject<ICoreSydept[]>([]);\r\n public departmentList$ = this.departmentListSubject.asObservable();\r\n\r\n constructor(private http: HttpClient) {\r\n console.log('CideCoreDepartmentManagementService initialized - using real API');\r\n }\r\n\r\n /**\r\n * Get department list from API\r\n */\r\n getDepartmentList(body: MDepartment): Observable<departmentControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<departmentControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, query]))\r\n .pipe(\r\n tap((response: departmentControllerResponse) => {\r\n if (response?.success) {\r\n this.departmentListSubject.next(response?.data || []);\r\n }\r\n }),\r\n catchError(error => {\r\n console.error('CideCoreDepartmentManagementService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Get department list from cache (if available)\r\n */\r\n getDepartmentListFromCache(): ICoreSydept[] {\r\n return this.departmentListSubject.value;\r\n }\r\n\r\n /**\r\n * Create new department\r\n * POST ${coreRoutesUrl?.department} - payload: MDepartmentInsertUpdatePayload, response: departmentInsertUpdateControllerResponse\r\n */\r\n createDepartment(department: ICoreSydept): Observable<departmentControllerResponse> {\r\n console.log('Creating department:', department);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department]);\r\n return this.http.post<departmentControllerResponse>(url, department)\r\n .pipe(\r\n tap((response: departmentControllerResponse) => {\r\n if (response.success) {\r\n this.refreshDepartmentList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Update existing department\r\n * POST ${coreRoutesUrl?.department} - payload: MDepartmentInsertUpdatePayload, response: departmentInsertUpdateControllerResponse\r\n */\r\n updateDepartment(id: string, department: ICoreSydept): Observable<departmentControllerResponse> {\r\n console.log('Updating department:', id, department);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department]);\r\n return this.http.post<departmentControllerResponse>(url, department)\r\n .pipe(\r\n tap((response: departmentControllerResponse) => {\r\n if (response.success) {\r\n this.refreshDepartmentList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get department by ID\r\n * GET ${coreRoutesUrl?.department}/byId/:query - payload: MDepartmentGetByIdPayload, response: departmentByIdControllerResponse\r\n */\r\n getDepartmentById(id: string): Observable<departmentByIdControllerResponse> {\r\n console.log('Getting department by ID:', id);\r\n const payload: MDepartmentGetByIdPayload = { sydept_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, 'byId', query]);\r\n return this.http.get<departmentByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete department\r\n * DELETE ${coreRoutesUrl?.department}/:query - payload: MDepartmentDeletePayload, response: departmentDeleteControllerResponse\r\n */\r\n deleteDepartment(id: string): Observable<departmentDeleteControllerResponse> {\r\n const payload: MDepartmentDeletePayload = { sydept_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, query]);\r\n return this.http.delete<departmentDeleteControllerResponse>(url)\r\n .pipe(\r\n tap((response: departmentDeleteControllerResponse) => {\r\n if (response.success) {\r\n this.refreshDepartmentList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete multiple departments\r\n */\r\n deleteMultipleDepartments(ids: string[]): Observable<{ success: boolean; message?: string; data?: unknown }> {\r\n console.log('Deleting multiple departments:', ids);\r\n const payload = { ids };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, query]);\r\n return this.http.delete<{ success: boolean; message?: string; data?: unknown }>(url)\r\n .pipe(\r\n tap((response: { success: boolean; message?: string; data?: unknown }) => {\r\n if (response.success) {\r\n this.refreshDepartmentList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle department active status\r\n */\r\n toggleDepartmentStatus(payload: MDepartmentToggleStatusPayload): Observable<departmentToggleStatusControllerResponse> {\r\n const query = generateStringFromObject(payload); \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.department, 'toggleStatus', query]);\r\n return this.http.put<departmentToggleStatusControllerResponse>(url, {})\r\n .pipe(\r\n tap((response: departmentToggleStatusControllerResponse) => {\r\n if (response.success) {\r\n this.refreshDepartmentList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Find department by ID\r\n */\r\n findDepartmentById(id: string, items: ICoreSydept[] = this.departmentListSubject.value): ICoreSydept | null {\r\n for (const item of items) {\r\n if (item._id === id) {\r\n return item;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Get parent departments for dropdown selection\r\n */\r\n getParentDepartments(excludeId?: string): ICoreSydept[] {\r\n const allItems: ICoreSydept[] = [];\r\n\r\n const flattenItems = (items: ICoreSydept[], level: number = 0) => {\r\n items.forEach(item => {\r\n if (item._id !== excludeId) {\r\n allItems.push({\r\n ...item,\r\n sydept_name: ' '.repeat(level) + item.sydept_name\r\n });\r\n }\r\n });\r\n };\r\n\r\n flattenItems(this.departmentListSubject.value);\r\n return allItems;\r\n }\r\n\r\n /**\r\n * Refresh department list from server\r\n */\r\n private refreshDepartmentList(): void {\r\n const defaultBody = {\r\n pageIndex: 1,\r\n pageSize: 10\r\n };\r\n this.getDepartmentList(defaultBody).subscribe({\r\n next: () => {\r\n console.log('Department list refreshed successfully');\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing department list:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('Department Management Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n} ","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ICoreSydept } from 'cloud-ide-lms-model';\nimport { CideCoreDepartmentManagementService } from '../../services/department-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, ConfirmationService, NotificationService, CideEleGlobalNotificationsComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\n\n@Component({\n selector: 'cide-core-department-list',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideInputComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent,\n CideEleGlobalNotificationsComponent\n ],\n templateUrl: './department-list.component.html',\n styleUrls: []\n})\nexport class CideCoreDepartmentListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private departmentService = inject(CideCoreDepartmentManagementService);\n private appState = inject(AppStateHelperService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n private confirmationService = inject(ConfirmationService);\n private notificationService = inject(NotificationService);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n departmentDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('departmentDetailsRendererTemplate');\n departmentStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('departmentStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n departments = signal<ICoreSydept[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Modern reactive forms with signals\n selectedParentDepartment = signal<ICoreSydept | null>(null);\n\n // Retrieved department data\n retrievedDepartment = signal<ICoreSydept | null>(null);\n\n // Edit mode flag\n isEditMode = signal(false);\n\n // Server-side pagination state\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n // Modern reactive form with typed controls\n quickAddForm = this.fb.group({\n sydept_code: this.fb.control('', []),\n sydept_name: this.fb.control('', []),\n sydept_description: this.fb.control('', []),\n sydept_isactive: this.fb.control(true, []),\n sydept_department_id_sydept: this.fb.control(''),\n sydept_entity_id_syen: this.fb.control(this.appState.getActiveEntityId() || '', [])\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSydept>>({\n id: 'department-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'details',\n header: 'Department',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'departmentDetailsRenderer'\n },\n {\n key: 'sydept_code',\n header: 'Code',\n type: 'text',\n width: '120px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'sydept_isactive',\n header: 'Status',\n type: 'custom',\n width: '100px',\n truncate: false,\n align: 'center',\n renderer: 'departmentStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '60px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n tree: {\n enabled: true,\n primaryKey: '_id',\n foreignKey: 'sydept_department_id_sydept',\n childrenKey: 'children',\n levelKey: 'level',\n expandedKey: 'expanded',\n hasChildrenKey: 'hasChildren'\n },\n trackBy: '_id',\n pagination: {\n enabled: false,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search departments...',\n searchableColumns: ['sydept_name', 'sydept_code', 'sydept_description'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none',\n onRefresh: 'onDepartmentRefresh'\n });\n\n // Template renderers using Angular best practices\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n departmentDetailsRenderer: this.departmentDetailsRendererTemplate(),\n departmentStatusRenderer: this.departmentStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n /**\n * Get template renderers for data grid\n */\n getTemplateRenderers(): Record<string, TemplateRef<TemplateContext>> {\n return this.templateRenderers();\n }\n\n // Mixed renderers (templates + string functions)\n customRenderers = computed(() => ({\n ...this.templateRenderers()\n }));\n\n /**\n * Get custom renderers adapted for current data grid compatibility\n */\n getCustomRenderers(): Record<string, (value: unknown, row: ICoreSydept) => string> {\n return {};\n }\n\n // Action handlers for grid actions\n actionHandlers = {\n onEditDepartment: (row: ICoreSydept) => this.editDepartment(row._id || ''),\n onToggleDepartment: (row: ICoreSydept) => this.toggleDepartmentStatus(row._id || ''),\n onDeleteDepartment: (row: ICoreSydept) => this.deleteDepartment(row._id || ''),\n onDepartmentRowClick: (row: ICoreSydept) => this.onDepartmentRowClick(row),\n onDepartmentRefresh: () => this.onDepartmentRefresh(),\n onAddChild: (row: ICoreSydept) => this.onAddChild(row)\n };\n\n // Computed properties\n filteredItems = computed(() => {\n const items = this.departments();\n const search = this.searchTerm()?.toLowerCase();\n\n if (!search) return items;\n\n return items.filter(item => {\n return item.sydept_name?.toLowerCase().includes(search) ||\n item.sydept_code?.toLowerCase().includes(search) ||\n item.sydept_description?.toLowerCase().includes(search);\n });\n });\n\n hasSelection = computed(() => this.selectedItems().length > 0);\n\n // Pagination computed properties\n totalPages = computed(() => Math.ceil(this.totalItems() / this.pageSize()));\n hasNextPage = computed(() => this.currentPage() < this.totalPages());\n hasPreviousPage = computed(() => this.currentPage() > 1);\n\n // Modern constructor with effects for initialization\n constructor() {\n this.initializeComponent();\n this.destroyRef.onDestroy(() => {\n this.cleanupEventListeners();\n });\n }\n\n /**\n * Initialize component with modern patterns\n */\n private initializeComponent(): void {\n console.log('CideCoreDepartmentListComponent initialized with modern Angular patterns');\n this.loadDepartments();\n this.setupEventListeners();\n this.exposeGlobalFunctions();\n }\n\n /**\n * Setup event listeners for dropdown interactions\n */\n private setupEventListeners(): void {\n document.addEventListener('click', this.handleClickOutside.bind(this));\n document.addEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Cleanup event listeners\n */\n private cleanupEventListeners(): void {\n document.removeEventListener('click', this.handleClickOutside.bind(this));\n document.removeEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Expose global functions for dropdown interactions\n */\n private exposeGlobalFunctions(): void {\n if (typeof window !== 'undefined') {\n (window as unknown as { toggleDropdown: (id: string) => void }).toggleDropdown = this.toggleDropdown.bind(this);\n (window as unknown as { handleDepartmentAction: (action: string, id: string) => void }).handleDepartmentAction = this.handleDepartmentAction.bind(this);\n }\n }\n\n /**\n * Load departments from service\n */\n loadDepartments(): void {\n console.log('🚀 CideCoreDepartmentListComponent.loadDepartments() called');\n this.loading.set(true);\n this.error.set(null);\n\n const requestBody = {\n total: this.totalItems(),\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n query: this.searchTerm()\n };\n console.log('📋 Request body:', requestBody);\n\n if (!this.departmentService) {\n console.error('❌ DepartmentService is not available');\n this.error.set('Department service is not available');\n this.loading.set(false);\n return;\n }\n\n this.departmentService.getDepartmentList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📥 CideCoreDepartmentListComponent received response:', response);\n if (response?.success) {\n console.log('✅ Response successful, setting departments:', response.data);\n const departmentData = response?.data || [];\n this.departments.set(departmentData);\n this.totalItems.set(response.total || 0);\n this.updateGridData(departmentData);\n } else {\n console.error('❌ Response was not successful:', response);\n this.error.set('Failed to load departments');\n }\n },\n error: (err) => {\n console.error('❌ CideCoreDepartmentListComponent error:', err);\n this.error.set(err.message || 'An error occurred while loading departments');\n },\n complete: () => {\n console.log('CideCoreDepartmentListComponent loadDepartments completed');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(departments: ICoreSydept[]): void {\n console.log('🔄 updateGridData called with:', departments);\n \n this.gridConfig.update(config => {\n const newConfig = {\n ...config,\n data: departments\n };\n console.log('⚙️ Updated grid config with departments');\n return newConfig;\n });\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSydept>): void {\n console.log('onGridEvent', event);\n switch (event.type) {\n case 'search':\n this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadDepartments();\n break;\n case 'pageChange': {\n const pageData = event.data as { page: number; pageSize: number };\n if (pageData) {\n this.currentPage.set(pageData.page);\n this.pageSize.set(pageData.pageSize);\n this.loadDepartments();\n } else {\n const page = event.data as number;\n if (page) {\n this.currentPage.set(page);\n this.loadDepartments();\n }\n }\n break;\n }\n case 'refresh':\n this.onDepartmentRefresh();\n break;\n case 'rowClick':\n this.onDepartmentRowClick(event.data as ICoreSydept);\n break;\n case 'action':\n if (event.action?.key === 'edit') {\n this.editDepartment(event.data as string);\n } else if (event.action?.key === 'toggle') {\n this.toggleDepartmentStatus(event.data as string);\n } else if (event.action?.key === 'delete') {\n this.deleteDepartment(event.data as string);\n }\n break;\n }\n }\n\n /**\n * Handle department refresh\n */\n onDepartmentRefresh(): void {\n this.loadDepartments();\n }\n\n /**\n * Handle department row click\n */\n onDepartmentRowClick(department: ICoreSydept): void {\n this.editDepartment(department._id || '');\n }\n\n /**\n * Navigate to edit department form\n */\n editDepartment(itemId: string): void {\n console.log('🔵 editDepartment called with:', itemId);\n this.isEditMode.set(true);\n this.getDepartmentById(itemId);\n }\n\n /**\n * Get department by ID using the API\n */\n getDepartmentById(itemId: string): void {\n console.log('🔵 getDepartmentById called with:', itemId);\n this.loading.set(true);\n\n this.departmentService.getDepartmentById(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Department retrieved successfully:', response.data);\n let department: ICoreSydept | null = null;\n department = response.data || null;\n\n this.retrievedDepartment.set(department);\n\n if (this.isEditMode() && department) {\n this.populateFormForEdit(department);\n }\n } else {\n this.error.set('Failed to retrieve department');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while retrieving the department');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with department data for editing\n */\n populateFormForEdit(department: ICoreSydept): void {\n console.log('🔵 populateFormForEdit called with:', department);\n\n this.quickAddForm.patchValue({\n sydept_code: department.sydept_code || '',\n sydept_name: department.sydept_name || '',\n sydept_description: department.sydept_description || '',\n sydept_isactive: department.sydept_isactive ?? true,\n sydept_department_id_sydept: department.sydept_department_id_sydept || '',\n sydept_entity_id_syen: department.sydept_entity_id_syen || ''\n });\n\n if (department.sydept_department_id_sydept) {\n const parentDepartment = this.departments().find(item => item._id === department.sydept_department_id_sydept);\n if (parentDepartment) {\n this.selectedParentDepartment.set(parentDepartment);\n }\n }\n\n console.log('✅ Form populated for editing:', this.quickAddForm.value);\n }\n\n /**\n * Delete department\n */\n async deleteDepartment(itemId: string): Promise<void> {\n console.log('🔵 deleteDepartment called with:', itemId);\n \n // Find the department name for better confirmation message\n const department = this.departments().find(d => d._id === itemId);\n const departmentName = department?.sydept_name || 'this department';\n \n try {\n const confirmed = await this.confirmationService.confirmDelete(departmentName);\n \n if (confirmed) {\n this.loading.set(true);\n\n this.departmentService.deleteDepartment(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.notificationService.success(`Department \"${departmentName}\" deleted successfully`);\n this.loadDepartments();\n } else {\n this.notificationService.error('Failed to delete department');\n }\n },\n error: (err) => {\n this.notificationService.error(err.message || 'An error occurred while deleting the department');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n } catch (error) {\n console.log('User cancelled deletion');\n }\n }\n\n /**\n * Toggle department status\n */\n toggleDepartmentStatus(itemId: string): void {\n console.log('🔵 toggleDepartmentStatus called with:', itemId);\n \n // Find the department for better notification message\n const department = this.departments().find(d => d._id === itemId);\n const departmentName = department?.sydept_name || 'department';\n const newStatus = department?.sydept_isactive ? 'inactive' : 'active';\n \n this.loading.set(true);\n\n this.departmentService.toggleDepartmentStatus({ sydept_id: itemId })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.notificationService.success(`Department \"${departmentName}\" ${newStatus} successfully`);\n this.loadDepartments();\n } else {\n this.notificationService.error('Failed to toggle department status');\n }\n },\n error: (err) => {\n this.notificationService.error(err.message || 'An error occurred while toggling status');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Quick add or update department using reactive form\n */\n quickAddDepartment() {\n if (this.quickAddForm.invalid) return;\n\n const formValue = this.quickAddForm.value;\n\n const department: Partial<ICoreSydept> = {\n _id: this.retrievedDepartment()?._id || '',\n sydept_code: formValue.sydept_code,\n sydept_name: formValue.sydept_name,\n sydept_description: formValue.sydept_description || '',\n sydept_isactive: formValue.sydept_isactive,\n sydept_department_id_sydept: formValue.sydept_department_id_sydept || undefined,\n sydept_entity_id_syen: formValue.sydept_entity_id_syen\n };\n\n if (this.isEditMode() && this.retrievedDepartment()) {\n const itemId = this.retrievedDepartment()?._id;\n if (itemId) {\n console.log('🔵 Updating department:', itemId);\n this.departmentService.updateDepartment(itemId, department).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Department updated successfully');\n this.notificationService.success(`Department \"${department.sydept_name}\" updated successfully`);\n this.resetQuickAddForm();\n this.isEditMode.set(false);\n this.retrievedDepartment.set(null);\n this.loadDepartments();\n } else {\n this.notificationService.error('Failed to update department');\n }\n },\n error: (err) => {\n this.notificationService.error(err.message || 'Failed to update department');\n }\n });\n }\n } else {\n console.log('🔵 Creating new department');\n this.departmentService.createDepartment(department).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Department created successfully');\n this.notificationService.success(`Department \"${department.sydept_name}\" created successfully`);\n this.resetQuickAddForm();\n this.loadDepartments();\n } else {\n this.notificationService.error('Failed to create department');\n }\n },\n error: (err) => {\n this.notificationService.error(err.message || 'Failed to create department');\n }\n });\n }\n }\n\n /**\n * Reset the quick add form to default values\n */\n resetQuickAddForm(): void {\n this.selectedParentDepartment.set(null);\n this.isEditMode.set(false);\n this.retrievedDepartment.set(null);\n\n this.quickAddForm.reset({\n sydept_code: '',\n sydept_name: '',\n sydept_description: '',\n sydept_isactive: true,\n sydept_department_id_sydept: '',\n sydept_entity_id_syen: this.appState.getActiveEntityId() || ''\n });\n }\n\n /**\n * Handle adding a child department\n */\n onAddChild(parentItem: ICoreSydept): void {\n console.log('🔵 onAddChild called with:', parentItem);\n console.log('🔵 Parent name:', parentItem.sydept_name);\n\n // Clear edit mode and retrieved item when adding a child\n this.isEditMode.set(false);\n this.retrievedDepartment.set(null);\n\n // Set the selected parent item first using signal\n this.selectedParentDepartment.set(parentItem);\n console.log('🔵 selectedParentDepartment set to:', this.selectedParentDepartment());\n\n // Update form with parent context (don't call resetQuickAddForm as it clears the parent)\n this.quickAddForm.patchValue({\n sydept_code: '',\n sydept_name: '',\n sydept_description: '',\n sydept_isactive: true,\n sydept_department_id_sydept: parentItem._id,\n sydept_entity_id_syen: this.appState.getActiveEntityId() || ''\n });\n\n console.log('🔵 Form updated, parent should be visible:', this.selectedParentDepartment()?.sydept_name);\n }\n\n /**\n * Clear selected parent department\n */\n clearSelectedParent() {\n this.selectedParentDepartment.set(null);\n this.quickAddForm.patchValue({\n sydept_department_id_sydept: ''\n });\n }\n\n /**\n * Handle click outside dropdown\n */\n private handleClickOutside(event: Event): void {\n const target = event.target as HTMLElement;\n\n if (!target?.closest('[data-dropdown]') && !target?.closest('[data-action=\"more-actions\"]')) {\n document.querySelectorAll('[data-dropdown]').forEach((el: Element) => {\n const dropdown = el as HTMLElement;\n dropdown.classList.add('tw-hidden');\n });\n\n document.querySelectorAll('[data-action=\"more-actions\"]').forEach((el: Element) => {\n const button = el as HTMLElement;\n button.setAttribute('aria-expanded', 'false');\n });\n }\n }\n\n /**\n * Handle dropdown action clicks\n */\n private handleDropdownAction(event: Event): void {\n const target = event.target as HTMLElement;\n const actionButton = target.closest('[data-action]') as HTMLElement;\n\n if (actionButton) {\n const action = actionButton.getAttribute('data-action');\n const itemId = actionButton.getAttribute('data-item-id');\n\n if (action && itemId) {\n event.preventDefault();\n event.stopPropagation();\n\n const dropdown = actionButton.closest('[data-dropdown]') as HTMLElement;\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n switch (action) {\n case 'edit':\n this.editDepartment(itemId);\n break;\n case 'toggle':\n this.toggleDepartmentStatus(itemId);\n break;\n case 'delete':\n this.deleteDepartment(itemId);\n break;\n }\n }\n }\n }\n\n /**\n * Toggle dropdown visibility\n */\n toggleDropdown(itemId: string) {\n document.querySelectorAll('.dropdown-menu').forEach(menu => {\n if (menu.getAttribute('data-dropdown') !== itemId) {\n menu.classList.add('tw-hidden');\n }\n });\n\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.toggle('tw-hidden');\n }\n }\n\n /**\n * Handle department action clicks\n */\n handleDepartmentAction(action: string, itemId: string) {\n const item = this.departments().find(item => item._id === itemId);\n if (!item) return;\n\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n switch (action) {\n case 'edit':\n this.editDepartment(itemId);\n break;\n case 'toggle':\n this.toggleDepartmentStatus(itemId);\n break;\n case 'delete':\n this.deleteDepartment(itemId);\n break;\n }\n }\n\n /**\n * Get status display\n */\n getStatusDisplay(isActive: boolean): string {\n return isActive ? 'Active' : 'Inactive';\n }\n\n /**\n * Get status class for styling\n */\n getStatusClass(isActive: boolean): string {\n return isActive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800';\n }\n\n /**\n * Generate dropdown items for department actions\n */\n getDropdownItems(row: ICoreSydept): DropdownItem[] {\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'addChild',\n label: 'Add Child',\n icon: 'add',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-600',\n hoverBgColor: 'hover:tw-bg-blue-50'\n },\n {\n id: 'toggle',\n label: row.sydept_isactive ? 'Deactivate' : 'Activate',\n icon: 'power_settings_new',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-600',\n hoverBgColor: 'hover:tw-bg-red-50'\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, row: ICoreSydept): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n this.editDepartment(row._id || '');\n break;\n case 'addChild':\n this.onAddChild(row);\n break;\n case 'toggle':\n this.toggleDepartmentStatus(row._id || '');\n break;\n case 'delete':\n this.deleteDepartment(row._id || '');\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n this.closeAllDropdowns();\n }\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n\n /**\n * Track by function for ngFor\n */\n trackByItemId(index: number, item: ICoreSydept): string {\n return item._id || '';\n }\n} ","<!-- Department List Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n<!-- Global Notifications -->\n<cide-ele-global-notifications></cide-ele-global-notifications>\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Department' : 'Quick Add Department' }}</h6>\n </div>\n @if (selectedParentDepartment()) {\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentDepartment()?.sydept_name }}</span>\n </div>\n <button \n cideEleButton \n variant=\"ghost\" \n size=\"xs\" \n type=\"button\" \n (click)=\"clearSelectedParent()\" \n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\n <svg class=\"tw-w-4 tw-h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"/>\n </svg>\n </button>\n </div>\n }\n </div>\n \n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddDepartment()\">\n <!-- First Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\n <!-- Department Code -->\n <div>\n <cide-ele-input \n id=\"sydept_code\" \n label=\"Code*\" \n formControlName=\"sydept_code\"\n placeholder=\"DEPT001\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Department Name -->\n <div>\n <cide-ele-input \n id=\"sydept_name\" \n label=\"Name*\" \n formControlName=\"sydept_name\"\n placeholder=\"Department name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n\n \n <!-- Active Status -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <cide-ele-input \n id=\"sydept_isactive\"\n type=\"checkbox\"\n label=\"Active\"\n formControlName=\"sydept_isactive\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n \n <!-- Second Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\n <!-- Description -->\n <div>\n <cide-ele-textarea \n id=\"sydept_description\" \n label=\"Description\" \n formControlName=\"sydept_description\"\n placeholder=\"Department description\"\n rows=\"2\"\n size=\"sm\">\n </cide-ele-textarea>\n </div>\n \n\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <div class=\"tw-flex tw-space-x-2\">\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n [disabled]=\"quickAddForm.invalid\"\n class=\"tw-px-2 tw-py-1 tw-w-20\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Add' }}\n </button>\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\"\n (click)=\"resetQuickAddForm()\"\n class=\"tw-px-2 tw-py-1 tw-w-16\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n Reset\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Actions -->\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Search functionality is handled by the data grid -->\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n \n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [serverSidePagination]=\"true\" \n [totalServerItems]=\"totalItems()\" \n [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\" \n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Department Details Renderer Template -->\n<ng-template #departmentDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Department Icon -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon \n class=\"tw-text-gray-400\" \n size=\"xs\">\n business\n </cide-ele-icon>\n </div>\n \n <!-- Department Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.sydept_name\">\n {{ row.sydept_name || 'Untitled' }}\n </div>\n @if (row.sydept_description) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.sydept_description\">\n {{ row.sydept_description }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Department Status Renderer Template -->\n<ng-template #departmentStatusRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"getStatusClass(row.sydept_isactive)\">\n {{ getStatusDisplay(row.sydept_isactive) }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown \n [items]=\"getDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template> ","// Department Management Components\r\nexport * from './components/department-list/department-list.component';\r\n\r\n// Department Management Services\r\nexport * from './services/department-management.service'; ","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, throwError, BehaviorSubject } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\nimport {\n cidePath,\n coreRoutesUrl,\n generateStringFromObject,\n hostManagerRoutesUrl,\n ICoreSydsg,\n MDesignationDeletePayload,\n MDesignationGetByIdPayload,\n MDesignationInsertUpdatePayload,\n designationByIdControllerResponse,\n designationDeleteControllerResponse,\n designationControllerResponse,\n designationInsertUpdateControllerResponse,\n MDesignation,\n MDesignationToggleStatusPayload,\n designationToggleStatusControllerResponse,\n} from 'cloud-ide-lms-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CideCoreDesignationManagementService {\n private apiUrl = `${coreRoutesUrl?.designation}`;\n private designationListSubject = new BehaviorSubject<ICoreSydsg[]>([]);\n public designationList$ = this.designationListSubject.asObservable();\n\n constructor(private http: HttpClient) {\n console.log('CideCoreDesignationManagementService initialized - using real API');\n }\n\n /**\n * Get designation list from API\n */\n getDesignationList(body: MDesignation): Observable<designationControllerResponse> {\n const query = generateStringFromObject(body);\n return this.http?.get<designationControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, query]))\n .pipe(\n tap((response: designationControllerResponse) => {\n if (response?.success) {\n this.designationListSubject.next(response?.data || []);\n }\n }),\n catchError(error => {\n console.error('CideCoreDesignationManagementService API error:', error);\n return this.handleError(error);\n })\n );\n }\n\n /**\n * Get designation list from cache (if available)\n */\n getDesignationListFromCache(): ICoreSydsg[] {\n return this.designationListSubject.value;\n }\n\n /**\n * Create new designation\n * POST ${coreRoutesUrl?.designation} - payload: MDesignationInsertUpdatePayload, response: designationInsertUpdateControllerResponse\n */\n createDesignation(designation: ICoreSydsg): Observable<designationInsertUpdateControllerResponse> {\n console.log('Creating designation:', designation);\n\n // Create proper payload using MDesignationInsertUpdatePayload\n const payload = new MDesignationInsertUpdatePayload(designation);\n\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation]);\n return this.http.post<designationInsertUpdateControllerResponse>(url, payload)\n .pipe(\n tap((response: designationInsertUpdateControllerResponse) => {\n if (response.success) {\n this.refreshDesignationList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Update existing designation\n * POST ${coreRoutesUrl?.designation} - payload: MDesignationInsertUpdatePayload, response: designationInsertUpdateControllerResponse\n */\n updateDesignation(id: string, designation: ICoreSydsg): Observable<designationInsertUpdateControllerResponse> {\n console.log('Updating designation:', id, designation);\n\n // Create proper payload using MDesignationInsertUpdatePayload\n const payload = new MDesignationInsertUpdatePayload(designation);\n\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation]);\n return this.http.post<designationInsertUpdateControllerResponse>(url, payload)\n .pipe(\n tap((response: designationInsertUpdateControllerResponse) => {\n if (response.success) {\n this.refreshDesignationList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Get designation by ID\n * GET ${coreRoutesUrl?.designation}/byId/:query - payload: MDesignationGetByIdPayload, response: designationByIdControllerResponse\n */\n getDesignationById(id: string): Observable<designationByIdControllerResponse> {\n console.log('Getting designation by ID:', id);\n const payload: MDesignationGetByIdPayload = { sydsg_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, 'byId', query]);\n return this.http.get<designationByIdControllerResponse>(url)\n .pipe(\n catchError(this.handleError)\n );\n }\n\n /**\n * Delete designation\n * DELETE ${coreRoutesUrl?.designation}/:query - payload: MDesignationDeletePayload, response: designationDeleteControllerResponse\n */\n deleteDesignation(id: string): Observable<designationDeleteControllerResponse> {\n const payload: MDesignationDeletePayload = { sydsg_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, query]);\n return this.http.delete<designationDeleteControllerResponse>(url)\n .pipe(\n tap((response: designationDeleteControllerResponse) => {\n if (response.success) {\n this.refreshDesignationList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Delete multiple designations\n */\n deleteMultipleDesignations(ids: string[]): Observable<{ success: boolean; message?: string; data?: unknown }> {\n console.log('Deleting multiple designations:', ids);\n const payload = { ids };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, query]);\n return this.http.delete<{ success: boolean; message?: string; data?: unknown }>(url)\n .pipe(\n tap((response: { success: boolean; message?: string; data?: unknown }) => {\n if (response.success) {\n this.refreshDesignationList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Toggle designation active status\n */\n toggleDesignationStatus(id: string): Observable<designationToggleStatusControllerResponse> {\n console.log('Toggling designation status:', id);\n const payload: MDesignationToggleStatusPayload = { sydsg_id: id };\n const query = generateStringFromObject(payload);\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.designation, \"toggleStatus\", query]);\n return this.http.put<designationToggleStatusControllerResponse>(url, {})\n .pipe(\n tap((response: designationToggleStatusControllerResponse) => {\n if (response.success) {\n this.refreshDesignationList();\n }\n }),\n catchError(this.handleError)\n );\n }\n\n /**\n * Find designation by ID\n */\n findDesignationById(id: string, items: ICoreSydsg[] = this.designationListSubject.value): ICoreSydsg | null {\n for (const item of items) {\n if (item._id === id) {\n return item;\n }\n }\n return null;\n }\n\n /**\n * Get parent designations for dropdown selection\n */\n getParentDesignations(excludeId?: string): ICoreSydsg[] {\n const allItems: ICoreSydsg[] = [];\n\n const flattenItems = (items: ICoreSydsg[], level: number = 0) => {\n items.forEach(item => {\n if (item._id !== excludeId) {\n allItems.push({\n ...item,\n sydsg_name: ' '.repeat(level) + item.sydsg_name\n });\n }\n });\n };\n\n flattenItems(this.designationListSubject.value);\n return allItems;\n }\n\n /**\n * Refresh designation list from server\n */\n private refreshDesignationList(): void {\n const defaultBody = {\n pageIndex: 1,\n pageSize: 10\n };\n this.getDesignationList(defaultBody).subscribe({\n next: () => {\n console.log('Designation list refreshed successfully');\n },\n error: (error) => {\n console.error('Error refreshing designation list:', error);\n }\n });\n }\n\n /**\n * Handle errors\n */\n private handleError(error: unknown): Observable<never> {\n let errorMessage = 'An error occurred';\n\n if (error instanceof Error) {\n errorMessage = error.message;\n } else if (typeof error === 'string') {\n errorMessage = error;\n }\n\n console.error('Designation Management Service Error:', errorMessage);\n return throwError(() => new Error(errorMessage));\n }\n} ","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError, BehaviorSubject } from 'rxjs';\r\nimport { catchError, tap } from 'rxjs/operators';\r\nimport { \r\n cidePath, \r\n coreRoutesUrl, \r\n generateStringFromObject, \r\n hostManagerRoutesUrl, \r\n ICoreSydsgl, \r\n gradeLevelControllerResponse, \r\n gradeLevelByIdControllerResponse,\r\n gradeLevelToggleStatusControllerResponse,\r\n MGradeLevel,\r\n MGradeLevelGetByIdPayload,\r\n MGradeLevelToggleStatusPayload,\r\n MGradeLevelDeletePayload,\r\n gradeLevelDeleteControllerResponse,\r\n MGradeLevelChangeSequencePayload,\r\n gradeLevelChangeSequenceControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideCoreGradeLevelManagementService {\r\n private apiUrl = `${coreRoutesUrl?.gradeLevel}`;\r\n private gradeLevelListSubject = new BehaviorSubject<ICoreSydsgl[]>([]);\r\n public gradeLevelList$ = this.gradeLevelListSubject.asObservable();\r\n\r\n constructor(private http: HttpClient) {\r\n console.log('CideCoreGradeLevelManagementService initialized - using real API');\r\n }\r\n\r\n /**\r\n * Get grade level list from API\r\n */\r\n getGradeLevelList(body: MGradeLevel): Observable<gradeLevelControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<gradeLevelControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, query]))\r\n .pipe(\r\n tap((response: gradeLevelControllerResponse) => {\r\n if (response?.success) {\r\n this.gradeLevelListSubject.next(response?.data || []);\r\n }\r\n }),\r\n catchError(error => {\r\n console.error('CideCoreGradeLevelManagementService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Get grade level list from cache (if available)\r\n */\r\n getGradeLevelListFromCache(): ICoreSydsgl[] {\r\n return this.gradeLevelListSubject.value;\r\n }\r\n\r\n /**\r\n * Create new grade level\r\n * POST ${coreRoutesUrl?.gradeLevel} - payload: MGradeLevel, response: gradeLevelInsertUpdateControllerResponse\r\n */\r\n createGradeLevel(gradeLevel: ICoreSydsgl): Observable<gradeLevelControllerResponse> {\r\n console.log('Creating grade level:', gradeLevel);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel]);\r\n return this.http.post<gradeLevelControllerResponse>(url, gradeLevel)\r\n .pipe(\r\n tap((response: gradeLevelControllerResponse) => {\r\n if (response.success) {\r\n this.refreshGradeLevelList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Update existing grade level\r\n * POST ${coreRoutesUrl?.gradeLevel} - payload: MGradeLevel, response: gradeLevelInsertUpdateControllerResponse\r\n */\r\n updateGradeLevel(id: string, gradeLevel: ICoreSydsgl): Observable<gradeLevelControllerResponse> {\r\n console.log('Updating grade level:', id, gradeLevel);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel]);\r\n return this.http.post<gradeLevelControllerResponse>(url, gradeLevel)\r\n .pipe(\r\n tap((response: gradeLevelControllerResponse) => {\r\n if (response.success) {\r\n this.refreshGradeLevelList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get grade level by ID\r\n * GET ${coreRoutesUrl?.gradeLevel}/byId/:query - payload: { id }, response: gradeLevelByIdControllerResponse\r\n */\r\n getGradeLevelById(payload: MGradeLevelGetByIdPayload): Observable<gradeLevelByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, 'byId', query]);\r\n return this.http.get<gradeLevelByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete grade level\r\n * DELETE ${coreRoutesUrl?.gradeLevel}/:query - payload: { id }, response: { success: boolean }\r\n */\r\n deleteGradeLevel(id: string): Observable<gradeLevelDeleteControllerResponse> {\r\n const payload: MGradeLevelDeletePayload = { sydsgl_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, query]);\r\n return this.http.delete<gradeLevelDeleteControllerResponse>(url)\r\n .pipe(\r\n tap((response: gradeLevelDeleteControllerResponse) => {\r\n if (response.success) {\r\n this.refreshGradeLevelList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete multiple grade levels\r\n */\r\n deleteMultipleGradeLevels(ids: string[]): Observable<{ success: boolean; message?: string; data?: unknown }> {\r\n console.log('Deleting multiple grade levels:', ids);\r\n const payload = { ids };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, query]);\r\n return this.http.delete<{ success: boolean; message?: string; data?: unknown }>(url)\r\n .pipe(\r\n tap((response: { success: boolean; message?: string; data?: unknown }) => {\r\n if (response.success) {\r\n this.refreshGradeLevelList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle grade level active status\r\n * PATCH ${coreRoutesUrl?.gradeLevel}/toggle-status - payload: { id }, response: gradeLevelToggleStatusControllerResponse\r\n */\r\n toggleGradeLevelStatus(id: string): Observable<gradeLevelToggleStatusControllerResponse> {\r\n console.log('Toggling grade level status:', id);\r\n const payload: MGradeLevelToggleStatusPayload = { sydsgl_id: id };\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, 'toggle-status']);\r\n return this.http.patch<gradeLevelToggleStatusControllerResponse>(url, payload)\r\n .pipe(\r\n tap((response: gradeLevelToggleStatusControllerResponse) => {\r\n if (response.success) {\r\n this.refreshGradeLevelList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Change grade level sequence\r\n * PATCH ${coreRoutesUrl?.gradeLevel}/change-sequence - payload: MGradeLevelChangeSequencePayload, response: gradeLevelChangeSequenceControllerResponse\r\n */\r\n changeGradeLevelSequence(payload: MGradeLevelChangeSequencePayload): Observable<gradeLevelChangeSequenceControllerResponse> {\r\n console.log('Changing grade level sequence:', payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.gradeLevel, 'change-sequence']);\r\n return this.http.patch<gradeLevelChangeSequenceControllerResponse>(url, payload)\r\n .pipe(\r\n tap((response: gradeLevelChangeSequenceControllerResponse) => {\r\n if (response.success) {\r\n this.refreshGradeLevelList();\r\n }\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Find grade level by ID\r\n */\r\n findGradeLevelById(id: string, items: ICoreSydsgl[] = this.gradeLevelListSubject.value): ICoreSydsgl | null {\r\n for (const item of items) {\r\n if (item._id === id) {\r\n return item;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Refresh grade level list from server\r\n */\r\n private refreshGradeLevelList(): void {\r\n const defaultBody = {\r\n pageIndex: 1,\r\n pageSize: 10\r\n };\r\n this.getGradeLevelList(defaultBody).subscribe({\r\n next: () => {\r\n console.log('Grade level list refreshed successfully');\r\n },\r\n error: (error) => {\r\n console.error('Error refreshing grade level list:', error);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('Grade Level Management Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n} ","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Validators, ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ICoreSydsg, ICoreSydsgl, ICoreSydept } from 'cloud-ide-lms-model';\nimport { CideCoreDesignationManagementService } from '../../services/designation-management.service';\nimport { CideCoreGradeLevelManagementService } from '../../../grade-level-management/services/grade-level-management.service';\nimport { CideCoreDepartmentManagementService } from '../../../department-management/services/department-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, NotificationService, ConfirmationService } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\n\ninterface HierarchicalNode {\n _id: string;\n name: string;\n code: string;\n description: string;\n type: 'department' | 'designation';\n level: number;\n expanded: boolean;\n hasChildren: boolean;\n children: HierarchicalNode[];\n status: boolean;\n grade_level: string;\n parentId: string | null;\n}\n\n@Component({\n selector: 'cide-core-designation-list',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideInputComponent,\n CideSelectComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent\n ],\n templateUrl: './designation-list.component.html',\n styleUrls: []\n})\nexport class CideCoreDesignationListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private designationService = inject(CideCoreDesignationManagementService);\n private gradeLevelService = inject(CideCoreGradeLevelManagementService);\n private departmentService = inject(CideCoreDepartmentManagementService);\n private appState = inject(AppStateHelperService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n designationDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('designationDetailsRendererTemplate');\n designationStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('designationStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n designations = signal<ICoreSydsg[]>([]);\n departments = signal<ICoreSydept[]>([]);\n gradeLevels = signal<ICoreSydsgl[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Modern reactive forms with signals\n selectedParentDesignation = signal<ICoreSydsg | null>(null);\n selectedParentDepartment = signal<ICoreSydept | null>(null);\n\n // Retrieved designation data\n retrievedDesignation = signal<ICoreSydsg | null>(null);\n\n // Edit mode flag\n isEditMode = signal(false);\n\n // Server-side pagination state\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n // Modern reactive form with typed controls\n quickAddForm = this.fb.group({\n sydsg_name: this.fb.control('', [Validators.required, Validators.minLength(1), Validators.maxLength(100)]),\n sydsg_code: this.fb.control('', [Validators.required, Validators.minLength(1), Validators.maxLength(20)]),\n sydsg_description: this.fb.control('', [Validators.maxLength(400)]),\n sydsg_prent_id_desg: this.fb.control(''),\n sydsg_department_id_sydpt: this.fb.control('', [Validators.required]),\n sydsg_grade_level_id_sydsgl: this.fb.control('', [Validators.required]),\n sydsg_isactive: this.fb.control(true, [Validators.required]),\n desg_entity_id_syen: this.fb.control(this.appState.getActiveEntityId() || '', [Validators.required])\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSydsg>>({\n id: 'designation-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'details',\n header: 'Department/Designation',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'designationDetailsRenderer'\n },\n {\n key: 'code',\n header: 'Code',\n type: 'text',\n width: '120px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'grade_level',\n header: 'Grade Level',\n type: 'text',\n width: '120px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'status',\n header: 'Status',\n type: 'custom',\n width: '100px',\n truncate: false,\n align: 'center',\n renderer: 'designationStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '60px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n tree: {\n enabled: true,\n primaryKey: '_id',\n foreignKey: 'parentId',\n childrenKey: 'children',\n levelKey: 'level',\n expandedKey: 'expanded',\n hasChildrenKey: 'hasChildren'\n },\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search departments and designations...',\n searchableColumns: ['name', 'code', 'description'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none',\n onRefresh: 'onDesignationRefresh'\n });\n\n // Template renderers using Angular best practices\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n designationDetailsRenderer: this.designationDetailsRendererTemplate(),\n designationStatusRenderer: this.designationStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n /**\n * Get template renderers for data grid\n */\n getTemplateRenderers(): Record<string, TemplateRef<TemplateContext>> {\n return this.templateRenderers();\n }\n\n // Mixed renderers (templates + string functions)\n customRenderers = computed(() => ({\n ...this.templateRenderers()\n }));\n\n /**\n * Get custom renderers adapted for current data grid compatibility\n */\n getCustomRenderers(): Record<string, (value: unknown, row: ICoreSydsg) => string> {\n return {};\n }\n\n // Action handlers for grid actions\n actionHandlers = {\n onEditDesignation: (row: ICoreSydsg) => this.editDesignation(row._id || ''),\n onToggleDesignation: (row: ICoreSydsg) => this.toggleDesignationStatus(row._id || ''),\n onDeleteDesignation: (row: ICoreSydsg) => this.deleteDesignation(row._id || ''),\n onDesignationRowClick: (row: ICoreSydsg) => this.onDesignationRowClick(row),\n onDesignationRefresh: () => this.onDesignationRefresh(),\n onAddChild: (row: ICoreSydsg) => this.onAddChild(row)\n };\n\n // Computed properties\n filteredItems = computed(() => {\n const items = this.designations();\n const search = this.searchTerm()?.toLowerCase();\n\n if (!search) return items;\n\n return items.filter(item => {\n return item.sydsg_name?.toLowerCase().includes(search) ||\n item.sydsg_code?.toLowerCase().includes(search) ||\n item.sydsg_description?.toLowerCase().includes(search);\n });\n });\n\n hasSelection = computed(() => this.selectedItems().length > 0);\n\n // Pagination computed properties\n totalPages = computed(() => Math.ceil(this.totalItems() / this.pageSize()));\n hasNextPage = computed(() => this.currentPage() < this.totalPages());\n hasPreviousPage = computed(() => this.currentPage() > 1);\n\n // Grade level options for dropdown\n gradeLevelOptions = computed(() => {\n return this.gradeLevels().map(gradeLevel => ({\n value: gradeLevel._id || '',\n label: gradeLevel.sydsgl_name || 'Unknown'\n }));\n });\n\n // Department options for dropdown\n departmentOptions = computed(() => {\n return this.departments().map(department => ({\n value: department._id || '',\n label: department.sydept_name || 'Unknown'\n }));\n });\n\n // Modern constructor with effects for initialization\n constructor() {\n this.initializeComponent();\n this.destroyRef.onDestroy(() => {\n this.cleanupEventListeners();\n });\n }\n\n /**\n * Initialize component with modern patterns\n */\n private initializeComponent(): void {\n console.log('CideCoreDesignationListComponent initialized with modern Angular patterns');\n // Load designations first since department and grade level data is populated in the response\n this.loadDesignations();\n this.setupEventListeners();\n this.exposeGlobalFunctions();\n }\n\n /**\n * Setup event listeners for dropdown interactions\n */\n private setupEventListeners(): void {\n document.addEventListener('click', this.handleClickOutside.bind(this));\n document.addEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Cleanup event listeners\n */\n private cleanupEventListeners(): void {\n document.removeEventListener('click', this.handleClickOutside.bind(this));\n document.removeEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Expose global functions for dropdown interactions\n */\n private exposeGlobalFunctions(): void {\n if (typeof window !== 'undefined') {\n (window as unknown as { toggleDropdown: (id: string) => void }).toggleDropdown = this.toggleDropdown.bind(this);\n (window as unknown as { handleDesignationAction: (action: string, id: string) => void }).handleDesignationAction = this.handleDesignationAction.bind(this);\n }\n }\n\n /**\n * Load designations from service\n */\n loadDesignations(): void {\n console.log('🚀 CideCoreDesignationListComponent.loadDesignations() called');\n this.loading.set(true);\n this.error.set(null);\n\n const requestBody = {\n total: this.totalItems(),\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n query: this.searchTerm()\n };\n console.log('📋 Request body:', requestBody);\n\n if (!this.designationService) {\n console.error('❌ DesignationService is not available');\n this.error.set('Designation service is not available');\n this.loading.set(false);\n return;\n }\n\n this.designationService.getDesignationList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📥 CideCoreDesignationListComponent received response:', response);\n if (response?.success) {\n console.log('✅ Response successful, setting designations:', response.data);\n const designationData = response?.data || [];\n this.designations.set(designationData);\n this.totalItems.set(response.total || 0);\n \n // Extract and set departments and grade levels from populated data\n this.extractAndSetDepartmentsAndGradeLevels(designationData);\n \n // Update grid data with hierarchical structure\n this.updateGridData(designationData);\n } else {\n console.error('❌ Response was not successful:', response);\n this.error.set('Failed to load designations');\n }\n },\n error: (err) => {\n console.error('❌ CideCoreDesignationListComponent error:', err);\n this.error.set(err.message || 'An error occurred while loading designations');\n },\n complete: () => {\n console.log('CideCoreDesignationListComponent loadDesignations completed');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Load departments from service\n */\n loadDepartments(): void {\n console.log('🚀 CideCoreDesignationListComponent.loadDepartments() called');\n\n if (!this.departmentService) {\n console.error('❌ DepartmentService is not available');\n return;\n }\n\n const requestBody = {\n total: 0,\n pageIndex: 1,\n pageSize: 1000, // Load all departments\n query: ''\n };\n\n this.departmentService.getDepartmentList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📥 CideCoreDesignationListComponent received departments response:', response);\n if (response?.success) {\n console.log('✅ Departments loaded successfully:', response.data);\n const departmentData = response?.data || [];\n this.departments.set(departmentData);\n // Update grid data after loading departments\n this.updateGridData(this.designations());\n } else {\n console.error('❌ Failed to load departments:', response);\n }\n },\n error: (err) => {\n console.error('❌ Error loading departments:', err);\n }\n });\n }\n\n /**\n * Load grade levels from service\n */\n loadGradeLevels(): void {\n console.log('🚀 CideCoreDesignationListComponent.loadGradeLevels() called');\n\n if (!this.gradeLevelService) {\n console.error('❌ GradeLevelService is not available');\n return;\n }\n\n const requestBody = {\n pageIndex: 1,\n pageSize: 100 // Load all grade levels for dropdown\n };\n\n this.gradeLevelService.getGradeLevelList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📥 Grade levels response:', response);\n if (response?.success) {\n console.log('✅ Grade levels loaded successfully:', response.data);\n const gradeLevelData = response?.data || [];\n this.gradeLevels.set(gradeLevelData);\n // Update grid data if designations are already loaded\n if (this.designations().length > 0) {\n this.updateGridData(this.designations());\n }\n } else {\n console.error('❌ Failed to load grade levels:', response);\n }\n },\n error: (err) => {\n console.error('❌ Error loading grade levels:', err);\n }\n });\n }\n\n /**\n * Build hierarchical tree structure from departments and designations\n * Based on FK relationships: _id (PK) -> sydsg_prent_id_desg (FK) OR sydsg_department_id_sydpt (FK)\n */\n private buildHierarchicalData(): HierarchicalNode[] {\n const departments = this.departments();\n const designations = this.designations();\n\n console.log('🔍 Building hierarchical data with:', {\n departments: departments.length,\n designations: designations.length\n });\n\n // Extract unique departments from designation data (since department data is populated)\n const uniqueDepartments = this.extractDepartmentsFromDesignations(designations);\n console.log('🏢 Extracted departments from designations:', uniqueDepartments);\n\n // First, build department hierarchy\n const departmentNodes = this.buildDepartmentHierarchy(uniqueDepartments);\n\n // Build complete designation hierarchy and add to departments\n this.buildAndAddDesignationHierarchy(departmentNodes, designations);\n\n console.log('✅ Final hierarchical data:', departmentNodes);\n return departmentNodes;\n }\n\n /**\n * Extract and set departments and grade levels from populated designation data\n */\n private extractAndSetDepartmentsAndGradeLevels(designations: ICoreSydsg[]): void {\n const departmentMap = new Map<string, ICoreSydept>();\n const gradeLevelMap = new Map<string, ICoreSydsgl>();\n \n designations.forEach(designation => {\n // Extract departments (using type assertion since API response includes populated data)\n const designationWithPopulated = designation as any;\n if (designationWithPopulated.department && designationWithPopulated.department._id) {\n departmentMap.set(designationWithPopulated.department._id, designationWithPopulated.department);\n console.log(`🏢 Found department in designation: ${designationWithPopulated.department.sydept_name}`);\n }\n \n // Extract grade levels\n if (designationWithPopulated.gradeLevel && designationWithPopulated.gradeLevel._id) {\n gradeLevelMap.set(designationWithPopulated.gradeLevel._id, designationWithPopulated.gradeLevel);\n console.log(`📚 Found grade level in designation: ${designationWithPopulated.gradeLevel.sydsgl_name}`);\n }\n });\n \n // Set the extracted data to signals\n this.departments.set(Array.from(departmentMap.values()));\n this.gradeLevels.set(Array.from(gradeLevelMap.values()));\n \n console.log(`🏢 Set ${departmentMap.size} departments and ${gradeLevelMap.size} grade levels from designation data`);\n }\n\n /**\n * Extract unique departments from designation data (since department data is populated in API response)\n */\n private extractDepartmentsFromDesignations(designations: ICoreSydsg[]): ICoreSydept[] {\n const departmentMap = new Map<string, ICoreSydept>();\n \n designations.forEach(designation => {\n const designationWithPopulated = designation as any;\n if (designationWithPopulated.department && designationWithPopulated.department._id) {\n // Use the populated department data from the designation\n departmentMap.set(designationWithPopulated.department._id, designationWithPopulated.department);\n console.log(`🏢 Found department in designation: ${designationWithPopulated.department.sydept_name}`);\n }\n });\n \n const uniqueDepartments = Array.from(departmentMap.values());\n console.log(`🏢 Extracted ${uniqueDepartments.length} unique departments from designations`);\n return uniqueDepartments;\n }\n\n /**\n * Build and add designation hierarchy to department hierarchy\n * This method handles the complete designation hierarchy and adds it to the appropriate departments\n */\n private buildAndAddDesignationHierarchy(departmentNodes: HierarchicalNode[], designations: ICoreSydsg[]): void {\n console.log('🔍 Building and adding designation hierarchy...');\n\n // Create designation nodes map\n const designationMap = new Map<string, HierarchicalNode>();\n \n // First pass: create all designation nodes\n designations.forEach(designation => {\n console.log(`👔 Creating designation node: ${designation.sydsg_name} (${designation._id})`);\n\n const designationNode: HierarchicalNode = {\n _id: designation._id || '',\n name: designation.sydsg_name || '',\n code: designation.sydsg_code || '',\n description: designation.sydsg_description || '',\n type: 'designation',\n level: 0, // Will be updated based on hierarchy\n expanded: false,\n hasChildren: false,\n children: [],\n status: designation.sydsg_isactive ?? true,\n grade_level: this.getGradeLevelName(designation.sydsg_grade_level_id_sydsgl || '', designation),\n parentId: null // Will be set based on FK relationships\n };\n\n designationMap.set(designation._id || '', designationNode);\n });\n\n // Second pass: build parent-child relationships\n designations.forEach(designation => {\n const designationNode = designationMap.get(designation._id || '');\n if (!designationNode) return;\n\n if (designation.sydsg_prent_id_desg) {\n // Has parent designation - use designation hierarchy\n const parentNode = designationMap.get(designation.sydsg_prent_id_desg);\n if (parentNode) {\n parentNode.children.push(designationNode);\n parentNode.hasChildren = true;\n designationNode.level = parentNode.level + 1;\n designationNode.parentId = parentNode._id;\n console.log(`📁 Added ${designation.sydsg_name} as child of ${parentNode.name} (level ${designationNode.level})`);\n } else {\n console.log(`⚠️ Parent designation not found for ${designation.sydsg_name}: ${designation.sydsg_prent_id_desg}`);\n }\n }\n });\n\n // Third pass: add root designations to departments\n const rootDesignations = Array.from(designationMap.values()).filter(node => !node.parentId);\n console.log(`🔍 Found ${rootDesignations.length} root designations`);\n\n rootDesignations.forEach(rootDesignation => {\n const designation = designations.find(d => d._id === rootDesignation._id);\n if (designation && designation.sydsg_department_id_sydpt) {\n // Find the department node\n const departmentNode = departmentNodes.find(dept => \n dept._id === `dept_${designation.sydsg_department_id_sydpt}`\n );\n \n if (departmentNode) {\n console.log(`🏢 Adding root designation ${rootDesignation.name} to department ${departmentNode.name}`);\n rootDesignation.level = departmentNode.level + 1;\n rootDesignation.parentId = departmentNode._id;\n departmentNode.children.push(rootDesignation);\n departmentNode.hasChildren = true;\n } else {\n console.log(`⚠️ Department not found for designation ${rootDesignation.name}: ${designation.sydsg_department_id_sydpt}`);\n }\n } else {\n console.log(`⚠️ Root designation ${rootDesignation.name} has no department`);\n }\n });\n\n console.log('✅ Designation hierarchy built and added to departments');\n }\n\n /**\n * Build designation hierarchy based on FK relationships\n * PK: _id, FK: sydsg_prent_id_desg (if set) OR sydsg_department_id_sydpt (if no parent designation)\n */\n private buildDesignationHierarchy(designations: ICoreSydsg[]): HierarchicalNode[] {\n const designationMap = new Map<string, HierarchicalNode>();\n const rootDesignations: HierarchicalNode[] = [];\n\n console.log('🔍 Building designation hierarchy...');\n\n // First pass: create all designation nodes\n designations.forEach(designation => {\n console.log(`👔 Creating designation node: ${designation.sydsg_name} (${designation._id})`);\n\n const designationNode: HierarchicalNode = {\n _id: designation._id || '',\n name: designation.sydsg_name || '',\n code: designation.sydsg_code || '',\n description: designation.sydsg_description || '',\n type: 'designation',\n level: 0, // Will be updated based on hierarchy\n expanded: false,\n hasChildren: false,\n children: [],\n status: designation.sydsg_isactive ?? true,\n grade_level: this.getGradeLevelName(designation.sydsg_grade_level_id_sydsgl || '', designation),\n parentId: null // Will be set based on FK relationships\n };\n\n designationMap.set(designation._id || '', designationNode);\n });\n\n // Second pass: build parent-child relationships based on FK\n designations.forEach(designation => {\n const designationNode = designationMap.get(designation._id || '');\n if (!designationNode) return;\n\n // Determine parent based on FK relationships\n let parentId: string | null = null;\n\n if (designation.sydsg_prent_id_desg) {\n // Has parent designation - use designation hierarchy\n parentId = designation.sydsg_prent_id_desg;\n console.log(`📁 ${designation.sydsg_name} has parent designation: ${parentId}`);\n } else if (designation.sydsg_department_id_sydpt) {\n // No parent designation but has department - use department as parent\n parentId = `dept_${designation.sydsg_department_id_sydpt}`;\n console.log(`🏢 ${designation.sydsg_name} belongs to department: ${parentId}`);\n } else {\n console.log(`🔍 ${designation.sydsg_name} has no parent designation and no department`);\n }\n\n designationNode.parentId = parentId;\n\n if (parentId) {\n // Check if parent is a designation or department\n if (parentId.startsWith('dept_')) {\n // Parent is a department - will be handled in addDesignationHierarchyToDepartments\n console.log(`🏢 ${designation.sydsg_name} will be added to department hierarchy`);\n } else {\n // Parent is a designation\n const parentNode = designationMap.get(parentId);\n if (parentNode) {\n parentNode.children.push(designationNode);\n parentNode.hasChildren = true;\n designationNode.level = parentNode.level + 1;\n console.log(`📁 Added ${designation.sydsg_name} as child of ${parentNode.name} (level ${designationNode.level})`);\n } else {\n // Parent designation not found, treat as root\n rootDesignations.push(designationNode);\n console.log(`👔 Added ${designation.sydsg_name} as root (parent designation not found: ${parentId})`);\n }\n }\n } else {\n // No parent - this is a root designation\n rootDesignations.push(designationNode);\n console.log(`👔 Added ${designation.sydsg_name} as root designation`);\n }\n });\n\n console.log(`✅ Built designation hierarchy with ${rootDesignations.length} root designations`);\n console.log(`🔍 Root designations:`, rootDesignations.map(d => ({ id: d._id, name: d.name, parentId: d.parentId })));\n console.log(`🔍 All designation nodes:`, designationMap.size);\n return rootDesignations;\n }\n\n /**\n * Build department hierarchy with parent-child relationships\n */\n private buildDepartmentHierarchy(departments: ICoreSydept[]): HierarchicalNode[] {\n const departmentMap = new Map<string, HierarchicalNode>();\n const rootDepartments: HierarchicalNode[] = [];\n\n // First pass: create all department nodes\n departments.forEach(department => {\n console.log(`🏢 Creating department node: ${department.sydept_name} (${department._id})`);\n\n const departmentNode: HierarchicalNode = {\n _id: `dept_${department._id || ''}`,\n name: department.sydept_name || '',\n code: department.sydept_code || '',\n description: department.sydept_description || '',\n type: 'department',\n level: 0, // Will be updated based on hierarchy\n expanded: true,\n hasChildren: false,\n children: [],\n status: department.sydept_isactive ?? true,\n grade_level: 'N/A',\n parentId: department.sydept_department_id_sydept ? `dept_${department.sydept_department_id_sydept}` : null\n };\n\n departmentMap.set(departmentNode._id, departmentNode);\n });\n\n // Second pass: build parent-child relationships\n departments.forEach(department => {\n const departmentNode = departmentMap.get(`dept_${department._id || ''}`);\n if (!departmentNode) return;\n\n if (department.sydept_department_id_sydept) {\n // This department has a parent\n const parentNode = departmentMap.get(`dept_${department.sydept_department_id_sydept}`);\n if (parentNode) {\n parentNode.children.push(departmentNode);\n parentNode.hasChildren = true;\n departmentNode.level = parentNode.level + 1;\n console.log(`📁 Added ${department.sydept_name} as child of ${parentNode.name} (level ${departmentNode.level})`);\n } else {\n // Parent not found, treat as root\n rootDepartments.push(departmentNode);\n console.log(`🏢 Added ${department.sydept_name} as root (parent not found)`);\n }\n } else {\n // This is a root department\n rootDepartments.push(departmentNode);\n console.log(`🏢 Added ${department.sydept_name} as root department`);\n }\n });\n\n console.log(`✅ Built department hierarchy with ${rootDepartments.length} root departments`);\n return rootDepartments;\n }\n\n /**\n * Add designation hierarchy to department hierarchy\n * Designations with department as parent (sydsg_department_id_sydpt) will be added to departments\n */\n private addDesignationHierarchyToDepartments(departmentNodes: HierarchicalNode[], designationNodes: HierarchicalNode[]): void {\n const addDesignationsToNode = (node: HierarchicalNode) => {\n // Find designations that belong to this department\n const departmentId = node._id.replace('dept_', '');\n const departmentDesignations = designationNodes.filter(designationNode => {\n const designation = this.designations().find(d => d._id === designationNode._id);\n return designation && \n designation.sydsg_department_id_sydpt === departmentId && \n !designation.sydsg_prent_id_desg; // Only root designations (no parent designation)\n });\n\n console.log(`📋 Found ${departmentDesignations.length} root designations for department ${node.name}`);\n console.log(`🔍 Department ID: ${departmentId}`);\n console.log(`🔍 Available designation nodes:`, designationNodes.map(d => ({ id: d._id, name: d.name, parentId: d.parentId })));\n console.log(`🔍 Designations data:`, this.designations().map(d => ({ \n id: d._id, \n name: d.sydsg_name, \n deptId: d.sydsg_department_id_sydpt, \n parentId: d.sydsg_prent_id_desg \n })));\n\n if (departmentDesignations.length > 0) {\n node.hasChildren = true;\n\n // Add designations as children and recursively add their children\n departmentDesignations.forEach(designationNode => {\n console.log(`👔 Adding designation: ${designationNode.name} under ${node.name}`);\n \n // Update the designation node to be under this department\n designationNode.level = node.level + 1;\n designationNode.parentId = node._id;\n \n // Recursively add children of this designation\n this.addDesignationChildren(designationNode, designationNodes);\n\n node.children.push(designationNode);\n });\n }\n\n // Recursively process child departments\n node.children.forEach(child => {\n if (child.type === 'department') {\n addDesignationsToNode(child);\n }\n });\n };\n\n // Process all root departments\n departmentNodes.forEach(node => {\n if (node.type === 'department') {\n addDesignationsToNode(node);\n }\n });\n }\n\n /**\n * Recursively add children designations to a parent designation\n */\n private addDesignationChildren(parentNode: HierarchicalNode, allDesignationNodes: HierarchicalNode[]): void {\n const children = allDesignationNodes.filter(designationNode => \n designationNode.parentId === parentNode._id\n );\n\n console.log(`📁 Found ${children.length} children for designation ${parentNode.name}`);\n\n if (children.length > 0) {\n parentNode.hasChildren = true;\n\n children.forEach(child => {\n console.log(`👔 Adding child designation: ${child.name} under ${parentNode.name}`);\n \n // Update child level and parent\n child.level = parentNode.level + 1;\n child.parentId = parentNode._id;\n \n // Recursively add children of this child\n this.addDesignationChildren(child, allDesignationNodes);\n \n parentNode.children.push(child);\n });\n }\n }\n\n /**\n * Get grade level name by ID or from designation data\n */\n private getGradeLevelName(gradeLevelId: string, designation?: ICoreSydsg): string {\n console.log('🔍 getGradeLevelName called with ID:', gradeLevelId);\n \n // First try to get from populated gradeLevel data in designation\n if (designation) {\n const designationWithPopulated = designation as any;\n if (designationWithPopulated.gradeLevel && designationWithPopulated.gradeLevel._id === gradeLevelId) {\n console.log('🎯 Found grade level from designation data:', designationWithPopulated.gradeLevel.sydsgl_name);\n return designationWithPopulated.gradeLevel.sydsgl_name || 'N/A';\n }\n }\n \n // Fallback to grade levels signal\n console.log('📚 Available grade levels:', this.gradeLevels());\n const gradeLevel = this.gradeLevels().find(gl => gl._id === gradeLevelId);\n console.log('🎯 Found grade level:', gradeLevel);\n\n const result = gradeLevel ? (gradeLevel.sydsgl_name || 'N/A') : 'N/A';\n console.log('✅ Returning grade level name:', result);\n return result;\n }\n\n /**\n * Update grid data with hierarchical structure based on FK relationships\n */\n private updateGridData(designations: ICoreSydsg[]): void {\n console.log('🔄 updateGridData called with:', designations);\n console.log('📚 Current grade levels:', this.gradeLevels());\n console.log('🏢 Current departments:', this.departments());\n\n const hierarchicalData = this.buildHierarchicalData();\n\n // Flatten the hierarchical data for the grid component\n const flattenedData = this.flattenHierarchicalData(hierarchicalData);\n\n console.log('📊 Flattened data for grid:', flattenedData);\n\n this.gridConfig.update(config => {\n const newConfig = {\n ...config,\n data: flattenedData\n };\n console.log('⚙️ Updated grid config with flattened data:', flattenedData);\n return newConfig;\n });\n }\n\n /**\n * Flatten hierarchical data for grid display\n */\n private flattenHierarchicalData(nodes: HierarchicalNode[]): HierarchicalNode[] {\n const flattened: HierarchicalNode[] = [];\n\n const flattenNode = (node: HierarchicalNode) => {\n flattened.push(node);\n if (node.children && node.children.length > 0) {\n node.children.forEach(child => flattenNode(child));\n }\n };\n\n nodes.forEach(node => flattenNode(node));\n return flattened;\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSydsg>): void {\n console.log('onGridEvent', event);\n switch (event.type) {\n case 'search':\n this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadDesignations();\n break;\n case 'pageChange': {\n const pageData = event.data as { page: number; pageSize: number };\n if (pageData) {\n this.currentPage.set(pageData.page);\n this.pageSize.set(pageData.pageSize);\n this.loadDesignations();\n } else {\n const page = event.data as number;\n if (page) {\n this.currentPage.set(page);\n this.loadDesignations();\n }\n }\n break;\n }\n case 'refresh':\n this.onDesignationRefresh();\n break;\n case 'rowClick':\n this.onDesignationRowClick(event.data as ICoreSydsg);\n break;\n case 'action':\n if (event.action?.key === 'edit') {\n this.editDesignation(event.data as string);\n } else if (event.action?.key === 'toggle') {\n this.toggleDesignationStatus(event.data as string);\n } else if (event.action?.key === 'delete') {\n this.deleteDesignation(event.data as string);\n }\n break;\n }\n }\n\n /**\n * Handle designation refresh\n */\n onDesignationRefresh(): void {\n this.loadDesignations();\n }\n\n /**\n * Handle designation row click\n */\n onDesignationRowClick(designation: ICoreSydsg): void {\n this.editDesignation(designation._id || '');\n }\n\n /**\n * Navigate to edit designation form\n */\n editDesignation(itemId: string): void {\n console.log('🔵 editDesignation called with:', itemId);\n this.isEditMode.set(true);\n this.getDesignationById(itemId);\n }\n\n /**\n * Get designation by ID using the API\n */\n getDesignationById(itemId: string): void {\n console.log('🔵 getDesignationById called with:', itemId);\n this.loading.set(true);\n\n this.designationService.getDesignationById(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Designation retrieved successfully:', response.data);\n let designation: ICoreSydsg | null = null;\n designation = response.data || null;\n\n this.retrievedDesignation.set(designation);\n\n if (this.isEditMode() && designation) {\n this.populateFormForEdit(designation);\n }\n } else {\n this.error.set('Failed to retrieve designation');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while retrieving the designation');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with designation data for editing\n */\n populateFormForEdit(designation: ICoreSydsg): void {\n console.log('🔵 populateFormForEdit called with:', designation);\n\n this.quickAddForm.patchValue({\n sydsg_name: designation.sydsg_name || '',\n sydsg_code: designation.sydsg_code || '',\n sydsg_description: designation.sydsg_description || '',\n sydsg_prent_id_desg: designation.sydsg_prent_id_desg || '',\n sydsg_department_id_sydpt: designation.sydsg_department_id_sydpt || '',\n sydsg_grade_level_id_sydsgl: designation.sydsg_grade_level_id_sydsgl || '',\n sydsg_isactive: designation.sydsg_isactive ?? true,\n desg_entity_id_syen: designation.desg_entity_id_syen || ''\n });\n\n if (designation.sydsg_prent_id_desg) {\n const parentDesignation = this.designations().find(item => item._id === designation.sydsg_prent_id_desg);\n if (parentDesignation) {\n this.selectedParentDesignation.set(parentDesignation);\n }\n }\n\n if (designation.sydsg_department_id_sydpt) {\n const parentDepartment = this.departments().find(item => item._id === designation.sydsg_department_id_sydpt);\n if (parentDepartment) {\n this.selectedParentDepartment.set(parentDepartment);\n }\n }\n\n console.log('✅ Form populated for editing:', this.quickAddForm.value);\n }\n\n /**\n * Delete designation with confirmation modal\n */\n async deleteDesignation(itemId: string): Promise<void> {\n console.log('🔵 deleteDesignation called with:', itemId);\n \n // Find the designation name for better confirmation message\n const designation = this.designations().find(d => d._id === itemId);\n const designationName = designation?.sydsg_name || 'this designation';\n \n try {\n const confirmed = await this.confirmationService.confirmDelete(designationName);\n \n if (confirmed) {\n this.loading.set(true);\n\n this.designationService.deleteDesignation(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.notificationService.success(`Designation \"${designationName}\" deleted successfully`);\n this.loadDesignations();\n } else {\n this.notificationService.error('Failed to delete designation');\n }\n },\n error: (err) => {\n this.notificationService.error(err.message || 'An error occurred while deleting the designation');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n } catch (error) {\n console.error('Error in delete confirmation:', error);\n }\n }\n\n /**\n * Toggle designation status\n */\n toggleDesignationStatus(itemId: string): void {\n console.log('🔵 toggleDesignationStatus called with:', itemId);\n this.loading.set(true);\n\n this.designationService.toggleDesignationStatus(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadDesignations();\n } else {\n this.error.set('Failed to toggle designation status');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while toggling status');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Rename designation\n */\n renameDesignation(itemId: string, currentName: string): void {\n console.log('🔵 renameDesignation called with:', itemId, currentName);\n \n const newName = prompt('Enter new name for designation:', currentName);\n \n if (newName && newName.trim() && newName.trim() !== currentName) {\n this.loading.set(true);\n\n // Get the current designation data\n this.designationService.getDesignationById(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success && response.data) {\n const designation = response.data;\n \n // Update only the name\n const updatedDesignation: Partial<ICoreSydsg> = {\n ...designation,\n sydsg_name: newName.trim()\n };\n\n // Call update service\n this.designationService.updateDesignation(itemId, updatedDesignation)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (updateResponse) => {\n if (updateResponse.success) {\n console.log('✅ Designation renamed successfully');\n this.loadDesignations();\n } else {\n this.error.set(updateResponse.message || 'Failed to rename designation');\n }\n },\n error: (err) => {\n console.error('❌ Error renaming designation:', err);\n this.error.set(err.message || 'Failed to rename designation');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n } else {\n this.error.set('Failed to retrieve designation for renaming');\n this.loading.set(false);\n }\n },\n error: (err) => {\n console.error('❌ Error retrieving designation for rename:', err);\n this.error.set(err.message || 'Failed to retrieve designation');\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Quick add or update designation using reactive form\n */\n quickAddDesignation() {\n if (this.quickAddForm.invalid) {\n console.log('❌ Form is invalid:', this.quickAddForm.errors);\n return;\n }\n\n const formValue = this.quickAddForm.value;\n\n // Create payload according to MDesignationInsertUpdatePayload model\n const designation: Partial<ICoreSydsg> = {\n _id: this.retrievedDesignation()?._id || '',\n sydsg_name: formValue.sydsg_name,\n sydsg_code: formValue.sydsg_code,\n sydsg_description: formValue.sydsg_description || '',\n sydsg_prent_id_desg: formValue.sydsg_prent_id_desg || undefined,\n sydsg_department_id_sydpt: formValue.sydsg_department_id_sydpt,\n sydsg_grade_level_id_sydsgl: formValue.sydsg_grade_level_id_sydsgl,\n sydsg_isactive: formValue.sydsg_isactive,\n desg_entity_id_syen: formValue.desg_entity_id_syen\n };\n\n // Validate required fields according to model\n if (!designation.sydsg_name || !designation.sydsg_code || !designation.sydsg_department_id_sydpt ||\n !designation.sydsg_grade_level_id_sydsgl || !designation.desg_entity_id_syen) {\n this.error.set('Please fill in all required fields');\n return;\n }\n\n if (this.isEditMode() && this.retrievedDesignation()) {\n const itemId = this.retrievedDesignation()?._id;\n if (itemId) {\n console.log('🔵 Updating designation:', itemId, designation);\n this.designationService.updateDesignation(itemId, designation).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Designation updated successfully');\n this.resetQuickAddForm();\n this.isEditMode.set(false);\n this.retrievedDesignation.set(null);\n this.loadDesignations();\n } else {\n this.error.set(response.message || 'Failed to update designation');\n }\n },\n error: (err) => {\n console.error('❌ Error updating designation:', err);\n this.error.set(err.message || 'Failed to update designation');\n }\n });\n }\n } else {\n console.log('🔵 Creating new designation:', designation);\n this.designationService.createDesignation(designation).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Designation created successfully');\n this.resetQuickAddForm();\n this.loadDesignations();\n } else {\n this.error.set(response.message || 'Failed to create designation');\n }\n },\n error: (err) => {\n console.error('❌ Error creating designation:', err);\n this.error.set(err.message || 'Failed to create designation');\n }\n });\n }\n }\n\n /**\n * Reset the quick add form to default values\n */\n resetQuickAddForm(): void {\n this.selectedParentDesignation.set(null);\n this.selectedParentDepartment.set(null);\n this.isEditMode.set(false);\n this.retrievedDesignation.set(null);\n\n this.quickAddForm.reset({\n sydsg_name: '',\n sydsg_code: '',\n sydsg_description: '',\n sydsg_prent_id_desg: '',\n sydsg_department_id_sydpt: '',\n sydsg_grade_level_id_sydsgl: '',\n sydsg_isactive: true,\n desg_entity_id_syen: this.appState.getActiveEntityId() || ''\n });\n\n // Clear any previous errors\n this.error.set(null);\n }\n\n /**\n * Handle adding a child designation\n */\n onAddChild(parentItem: ICoreSydsg): void {\n console.log('🔵 onAddChild called with:', parentItem);\n console.log('🔵 Parent name:', parentItem.sydsg_name);\n\n // Clear edit mode and retrieved item when adding a child\n this.isEditMode.set(false);\n this.retrievedDesignation.set(null);\n\n // Set the selected parent item first using signal\n this.selectedParentDesignation.set(parentItem);\n console.log('🔵 selectedParentDesignation set to:', this.selectedParentDesignation());\n\n // Update form with parent context (don't call resetQuickAddForm as it clears the parent)\n this.quickAddForm.patchValue({\n sydsg_name: '',\n sydsg_code: '',\n sydsg_description: '',\n sydsg_prent_id_desg: parentItem._id,\n sydsg_department_id_sydpt: parentItem.sydsg_department_id_sydpt || '', // Inherit department from parent\n sydsg_grade_level_id_sydsgl: '',\n sydsg_isactive: true,\n desg_entity_id_syen: this.appState.getActiveEntityId() || ''\n });\n\n // If parent has a department, set it as selected\n if (parentItem.sydsg_department_id_sydpt) {\n const parentDepartment = this.departments().find(d => d._id === parentItem.sydsg_department_id_sydpt);\n if (parentDepartment) {\n this.selectedParentDepartment.set(parentDepartment);\n }\n }\n\n console.log('🔵 Form updated, parent should be visible:', this.selectedParentDesignation()?.sydsg_name);\n }\n\n /**\n * Clear selected parent designation\n */\n clearSelectedParent() {\n this.selectedParentDesignation.set(null);\n this.quickAddForm.patchValue({\n sydsg_prent_id_desg: ''\n });\n }\n\n /**\n * Clear selected parent department\n */\n clearSelectedParentDepartment() {\n this.selectedParentDepartment.set(null);\n this.quickAddForm.patchValue({\n sydsg_department_id_sydpt: ''\n });\n }\n\n /**\n * Handle department selection\n */\n onDepartmentSelect(department: ICoreSydept): void {\n console.log('🔵 onDepartmentSelect called with:', department);\n this.selectedParentDepartment.set(department);\n this.quickAddForm.patchValue({\n sydsg_department_id_sydpt: department._id\n });\n }\n\n /**\n * Handle click outside dropdown\n */\n private handleClickOutside(event: Event): void {\n const target = event.target as HTMLElement;\n\n if (!target?.closest('[data-dropdown]') && !target?.closest('[data-action=\"more-actions\"]')) {\n document.querySelectorAll('[data-dropdown]').forEach((el: Element) => {\n const dropdown = el as HTMLElement;\n dropdown.classList.add('tw-hidden');\n });\n\n document.querySelectorAll('[data-action=\"more-actions\"]').forEach((el: Element) => {\n const button = el as HTMLElement;\n button.setAttribute('aria-expanded', 'false');\n });\n }\n }\n\n /**\n * Handle dropdown action clicks\n */\n private handleDropdownAction(event: Event): void {\n const target = event.target as HTMLElement;\n const actionButton = target.closest('[data-action]') as HTMLElement;\n\n if (actionButton) {\n const action = actionButton.getAttribute('data-action');\n const itemId = actionButton.getAttribute('data-item-id');\n\n if (action && itemId) {\n event.preventDefault();\n event.stopPropagation();\n\n const dropdown = actionButton.closest('[data-dropdown]') as HTMLElement;\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n switch (action) {\n case 'edit':\n this.editDesignation(itemId);\n break;\n case 'toggle':\n this.toggleDesignationStatus(itemId);\n break;\n case 'delete':\n this.deleteDesignation(itemId);\n break;\n }\n }\n }\n }\n\n /**\n * Toggle dropdown visibility\n */\n toggleDropdown(itemId: string) {\n document.querySelectorAll('.dropdown-menu').forEach(menu => {\n if (menu.getAttribute('data-dropdown') !== itemId) {\n menu.classList.add('tw-hidden');\n }\n });\n\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.toggle('tw-hidden');\n }\n }\n\n /**\n * Handle designation action clicks\n */\n handleDesignationAction(action: string, itemId: string) {\n const item = this.designations().find(item => item._id === itemId);\n if (!item) return;\n\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n switch (action) {\n case 'edit':\n this.editDesignation(itemId);\n break;\n case 'toggle':\n this.toggleDesignationStatus(itemId);\n break;\n case 'delete':\n this.deleteDesignation(itemId);\n break;\n }\n }\n\n /**\n * Get status display\n */\n getStatusDisplay(isActive: boolean): string {\n return isActive ? 'Active' : 'Inactive';\n }\n\n /**\n * Get status class for styling\n */\n getStatusClass(isActive: boolean): string {\n return isActive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800';\n }\n\n /**\n * Generate dropdown items for designation actions\n */\n getDropdownItems(row: HierarchicalNode): DropdownItem[] {\n // Handle hierarchical data structure\n if (row.type === 'department') {\n return [\n {\n id: 'addDesignation',\n label: 'Add Designation',\n icon: 'add',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-600',\n hoverBgColor: 'hover:tw-bg-blue-50'\n }\n ];\n } else {\n // For designations\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'addChild',\n label: 'Add Child',\n icon: 'add',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-600',\n hoverBgColor: 'hover:tw-bg-blue-50'\n },\n {\n id: 'toggle',\n label: row.status ? 'Deactivate' : 'Activate',\n icon: 'power_settings_new',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-600',\n hoverBgColor: 'hover:tw-bg-red-50'\n }\n ];\n }\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, row: HierarchicalNode): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n if (row.type === 'designation') {\n this.editDesignation(row._id);\n }\n break;\n case 'addChild':\n if (row.type === 'designation') {\n // Find the original designation object\n const designation = this.designations().find(d => d._id === row._id);\n if (designation) {\n this.onAddChild(designation);\n }\n }\n break;\n case 'addDesignation':\n if (row.type === 'department') {\n // Extract department ID from the prefixed ID\n const departmentId = row._id.replace('dept_', '');\n const department = this.departments().find(d => d._id === departmentId);\n if (department) {\n console.log('🔵 Adding designation to department:', department.sydept_name);\n this.onDepartmentSelect(department);\n // Reset form to add mode\n this.isEditMode.set(false);\n this.retrievedDesignation.set(null);\n this.selectedParentDesignation.set(null);\n this.resetQuickAddForm();\n }\n }\n break;\n case 'toggle':\n if (row.type === 'designation') {\n this.toggleDesignationStatus(row._id);\n }\n break;\n case 'delete':\n if (row.type === 'designation') {\n this.deleteDesignation(row._id);\n }\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n this.closeAllDropdowns();\n }\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n\n /**\n * Track by function for ngFor\n */\n trackByItemId(index: number, item: ICoreSydsg): string {\n return item._id || '';\n }\n} ","<!-- Designation List Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Designation' : 'Quick Add Designation' }}</h6>\n </div>\n @if (selectedParentDesignation()) {\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child under:' }}</span>\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ selectedParentDesignation()?.sydsg_name }}</span>\n </div>\n <button \n cideEleButton \n variant=\"ghost\" \n size=\"xs\" \n type=\"button\" \n (click)=\"clearSelectedParent()\" \n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\n <svg class=\"tw-w-4 tw-h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"/>\n </svg>\n </button>\n </div>\n }\n @if (selectedParentDepartment()) {\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-green-50 tw-border tw-border-green-200 tw-px-4 tw-py-1 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-green-600 tw-w-4 tw-h-4\">business</cide-ele-icon>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-text-sm tw-text-green-600 tw-font-medium\">{{ isEditMode() ? 'Department:' : 'Department:' }}</span>\n <span class=\"tw-text-sm tw-text-green-800 tw-font-semibold\">{{ selectedParentDepartment()?.sydept_name }}</span>\n </div>\n <button \n cideEleButton \n variant=\"ghost\" \n size=\"xs\" \n type=\"button\" \n (click)=\"clearSelectedParentDepartment()\" \n class=\"tw-text-green-400 hover:tw-text-green-600\">\n <svg class=\"tw-w-4 tw-h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"/>\n </svg>\n </button>\n </div>\n }\n </div>\n \n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddDesignation()\">\n <!-- First Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-5 tw-gap-3 tw-mb-3\">\n <!-- Designation Name -->\n <div>\n <cide-ele-input \n id=\"sydsg_name\" \n label=\"Name*\" \n formControlName=\"sydsg_name\"\n placeholder=\"Designation name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Designation Code -->\n <div>\n <cide-ele-input \n id=\"sydsg_code\" \n label=\"Code*\" \n formControlName=\"sydsg_code\"\n placeholder=\"DESG001\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Grade Level -->\n <div>\n <cide-ele-select \n id=\"sydsg_grade_level_id_sydsgl\"\n label=\"Grade Level*\" \n [options]=\"gradeLevelOptions()\" \n formControlName=\"sydsg_grade_level_id_sydsgl\"\n placeholder=\"Select grade level\"\n size=\"sm\">\n </cide-ele-select>\n </div>\n \n <!-- Department -->\n <div>\n <cide-ele-select \n id=\"sydsg_department_id_sydpt\"\n label=\"Department*\" \n [options]=\"departmentOptions()\" \n formControlName=\"sydsg_department_id_sydpt\"\n placeholder=\"Select department\"\n size=\"sm\">\n </cide-ele-select>\n </div>\n \n <!-- Active Status -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <cide-ele-input \n id=\"sydsg_isactive\"\n type=\"checkbox\"\n label=\"Active\"\n formControlName=\"sydsg_isactive\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n \n <!-- Second Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\n <!-- Description -->\n <div>\n <cide-ele-textarea \n id=\"sydsg_description\" \n label=\"Description\" \n formControlName=\"sydsg_description\"\n placeholder=\"Designation description\"\n rows=\"2\"\n size=\"sm\">\n </cide-ele-textarea>\n </div>\n \n <!-- Entity ID (Hidden) -->\n <div class=\"tw-hidden\">\n <cide-ele-input \n id=\"desg_entity_id_syen\" \n label=\"Entity ID*\" \n formControlName=\"desg_entity_id_syen\"\n placeholder=\"Entity ID\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <div class=\"tw-flex tw-space-x-2\">\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n [disabled]=\"quickAddForm.invalid\"\n class=\"tw-px-2 tw-py-1 tw-w-20\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Add' }}\n </button>\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\"\n (click)=\"resetQuickAddForm()\"\n class=\"tw-px-2 tw-py-1 tw-w-16\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n Reset\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Actions -->\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Search functionality is handled by the data grid -->\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n \n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [serverSidePagination]=\"true\" \n [totalServerItems]=\"totalItems()\" \n [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\" \n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Designation Details Renderer Template -->\n<ng-template #designationDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Dynamic Icon based on type -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon \n [class]=\"row.type === 'department' ? 'tw-text-green-500' : 'tw-text-blue-500'\" \n size=\"xs\">\n {{ row.type === 'department' ? 'business' : 'work' }}\n </cide-ele-icon>\n </div>\n \n <!-- Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.name\">\n {{ row.name || 'Untitled' }}\n </div>\n @if (row.type === 'department') {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n Department\n </span>\n }\n </div>\n @if (row.description) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.description\">\n {{ row.description }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Designation Status Renderer Template -->\n<ng-template #designationStatusRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"getStatusClass(row.status)\">\n {{ getStatusDisplay(row.status) }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown \n [items]=\"getDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template> ","// Designation Management Components\r\nexport * from './components/designation-list/designation-list.component';\r\n\r\n// Designation Management Services\r\nexport * from './services/designation-management.service'; ","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Validators, ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { gradeLevelChangeSequenceControllerResponse, ICoreSydsgl, MGradeLevelChangeSequencePayload, MGradeLevelGetByIdPayload } from 'cloud-ide-lms-model';\nimport { CideCoreGradeLevelManagementService } from '../../services/grade-level-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideIconComponent, CideInputComponent, CideEleDataGridComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, NotificationService, ConfirmationService, CideEleConfirmationModalComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\n\n@Component({\n selector: 'cide-core-grade-level-list',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideInputComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent,\n CideEleConfirmationModalComponent\n ],\n templateUrl: './grade-level-list.component.html',\n styleUrls: []\n})\nexport class CideCoreGradeLevelListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private gradeLevelService = inject(CideCoreGradeLevelManagementService);\n private appState = inject(AppStateHelperService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n private notificationService = inject(NotificationService);\n private confirmationService = inject(ConfirmationService);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n dragHandleRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('dragHandleRendererTemplate');\n gradeLevelDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('gradeLevelDetailsRendererTemplate');\n gradeLevelStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('gradeLevelStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('actionsDropdownRendererTemplate');\n \n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n gradeLevels = signal<ICoreSydsgl[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Retrieved grade level data\n retrievedGradeLevel = signal<ICoreSydsgl | null>(null);\n\n // Edit mode flag\n isEditMode = signal(false);\n\n // Drag order management\n hasOrderChanged = signal(false);\n\n // Server-side pagination state\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n // Modern reactive form with typed controls\n quickAddForm = this.fb.group({\n sydsgl_name: this.fb.control('', [Validators.required, Validators.minLength(1), Validators.maxLength(20)]),\n sydsgl_description: this.fb.control('', [Validators.maxLength(400)]),\n sydsgl_order: this.fb.control(1, [Validators.required, Validators.min(1), Validators.max(100)]),\n sydsgl_isactive: this.fb.control(true, [Validators.required]),\n sydsgl_entity_id_syen: this.fb.control(this.appState.getActiveEntityId() || '', [Validators.required])\n });\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSydsgl>>({\n id: 'grade-level-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'dragHandle',\n header: '',\n type: 'custom',\n width: '40px',\n truncate: false,\n align: 'center',\n renderer: 'dragHandleRenderer'\n },\n {\n key: 'details',\n header: 'Grade Level',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'gradeLevelDetailsRenderer'\n },\n {\n key: 'sydsgl_isactive',\n header: 'Status',\n type: 'custom',\n width: '100px',\n truncate: false,\n align: 'center',\n renderer: 'gradeLevelStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '60px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n dragDrop: {\n enabled: true,\n orderField: 'sydsgl_order',\n dragClass: 'tw-opacity-50 tw-bg-blue-50',\n dropClass: 'tw-bg-green-50'\n },\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search grade levels...',\n searchableColumns: ['sydsgl_name', 'sydsgl_description'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none',\n onRefresh: 'onGradeLevelRefresh'\n });\n\n // Template renderers using Angular best practices\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n dragHandleRenderer: this.dragHandleRendererTemplate(),\n gradeLevelDetailsRenderer: this.gradeLevelDetailsRendererTemplate(),\n gradeLevelStatusRenderer: this.gradeLevelStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n /**\n * Get template renderers for data grid\n */\n getTemplateRenderers(): Record<string, TemplateRef<TemplateContext>> {\n return this.templateRenderers();\n }\n\n // Mixed renderers (templates + string functions)\n customRenderers = computed(() => ({\n ...this.templateRenderers()\n }));\n\n /**\n * Get custom renderers adapted for current data grid compatibility\n */\n getCustomRenderers(): Record<string, (value: unknown, row: ICoreSydsgl) => string> {\n return {};\n }\n\n // Action handlers for grid actions\n actionHandlers = {\n onEditGradeLevel: (row: ICoreSydsgl) => this.editGradeLevel(row._id || ''),\n onToggleGradeLevel: (row: ICoreSydsgl) => this.toggleGradeLevelStatus(row._id || ''),\n onDeleteGradeLevel: (row: ICoreSydsgl) => this.deleteGradeLevel(row._id || ''),\n onGradeLevelRowClick: (row: ICoreSydsgl) => this.onGradeLevelRowClick(row),\n onGradeLevelRefresh: () => this.onGradeLevelRefresh(),\n resetOrder: () => this.resetDragOrder(),\n saveOrder: () => this.saveGradeLevelOrder()\n };\n\n // Computed properties\n filteredItems = computed(() => {\n const items = this.gradeLevels();\n const search = this.searchTerm()?.toLowerCase();\n\n if (!search) return items;\n\n return items.filter(item => {\n return item.sydsgl_name?.toLowerCase().includes(search) ||\n item.sydsgl_description?.toLowerCase().includes(search);\n });\n });\n\n hasSelection = computed(() => this.selectedItems().length > 0);\n\n // Pagination computed properties\n totalPages = computed(() => Math.ceil(this.totalItems() / this.pageSize()));\n hasNextPage = computed(() => this.currentPage() < this.totalPages());\n hasPreviousPage = computed(() => this.currentPage() > 1);\n\n // Computed property for next order\n nextOrder = computed(() => this.calculateNextOrder());\n\n // Modern constructor with effects for initialization\n constructor() {\n this.initializeComponent();\n this.destroyRef.onDestroy(() => {\n this.cleanupEventListeners();\n });\n }\n\n /**\n * Initialize component with modern patterns\n */\n private initializeComponent(): void {\n console.log('CideCoreGradeLevelListComponent initialized with modern Angular patterns');\n this.loadGradeLevels();\n this.setupEventListeners();\n this.exposeGlobalFunctions();\n }\n\n /**\n * Setup event listeners for dropdown interactions\n */\n private setupEventListeners(): void {\n document.addEventListener('click', this.handleClickOutside.bind(this));\n document.addEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Cleanup event listeners\n */\n private cleanupEventListeners(): void {\n document.removeEventListener('click', this.handleClickOutside.bind(this));\n document.removeEventListener('click', this.handleDropdownAction.bind(this));\n }\n\n /**\n * Expose global functions for dropdown interactions\n */\n private exposeGlobalFunctions(): void {\n if (typeof window !== 'undefined') {\n (window as unknown as { toggleDropdown: (id: string) => void }).toggleDropdown = this.toggleDropdown.bind(this);\n (window as unknown as { handleGradeLevelAction: (action: string, id: string) => void }).handleGradeLevelAction = this.handleGradeLevelAction.bind(this);\n }\n }\n\n /**\n * Load grade levels from service\n */\n loadGradeLevels(): void {\n console.log('🚀 CideCoreGradeLevelListComponent.loadGradeLevels() called');\n this.loading.set(true);\n this.error.set(null);\n\n const requestBody = {\n total: this.totalItems(),\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n query: this.searchTerm()\n };\n console.log('📋 Request body:', requestBody);\n\n if (!this.gradeLevelService) {\n console.error('❌ GradeLevelService is not available');\n this.error.set('Grade level service is not available');\n this.loading.set(false);\n return;\n }\n\n this.gradeLevelService.getGradeLevelList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('📥 CideCoreGradeLevelListComponent received response:', response);\n if (response?.success) {\n console.log('✅ Response successful, setting grade levels:', response.data);\n const gradeLevelData = response?.data || [];\n this.gradeLevels.set(gradeLevelData);\n this.totalItems.set(response.total || 0);\n this.updateGridData(gradeLevelData);\n\n\n // Update the order field in the form if not in edit mode\n if (!this.isEditMode()) {\n const nextOrder = this.calculateNextOrder();\n this.quickAddForm.patchValue({ sydsgl_order: nextOrder });\n }\n } else {\n console.error('❌ Response was not successful:', response);\n this.error.set('Failed to load grade levels');\n }\n },\n error: (err) => {\n console.error('❌ CideCoreGradeLevelListComponent error:', err);\n this.error.set(err.message || 'An error occurred while loading grade levels');\n },\n complete: () => {\n console.log('CideCoreGradeLevelListComponent loadGradeLevels completed');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(gradeLevels: ICoreSydsgl[]): void {\n console.log('🔄 updateGridData called with:', gradeLevels);\n\n // Create a completely new config object to ensure change detection triggers\n const newConfig: GridConfiguration<ICoreSydsgl> = {\n ...this.gridConfig(),\n data: [...gradeLevels] // Create a new array to ensure reference change\n };\n\n this.gridConfig.set(newConfig);\n console.log('⚙️ Updated grid config with grade levels - new reference created');\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSydsgl>): void {\n console.log('onGridEvent', event);\n switch (event.type) {\n case 'search':\n this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadGradeLevels();\n break;\n case 'pageChange': {\n const pageData = event.data as { page: number; pageSize: number };\n if (pageData) {\n this.currentPage.set(pageData.page);\n this.pageSize.set(pageData.pageSize);\n this.loadGradeLevels();\n } else {\n const page = event.data as number;\n if (page) {\n this.currentPage.set(page);\n this.loadGradeLevels();\n }\n }\n break;\n }\n case 'refresh':\n this.onGradeLevelRefresh();\n break;\n case 'rowClick':\n this.onGradeLevelRowClick(event.data as ICoreSydsgl);\n break;\n case 'rowReorder':\n this.onGradeLevelReorder(event.data as { sourceIndex: number; targetIndex: number; newOrder: ICoreSydsgl[] });\n break;\n case 'action':\n if (event.action?.key === 'edit') {\n this.editGradeLevel(event.data as string);\n } else if (event.action?.key === 'toggle') {\n this.toggleGradeLevelStatus(event.data as string);\n } else if (event.action?.key === 'delete') {\n this.deleteGradeLevel(event.data as string);\n }\n break;\n }\n }\n\n /**\n * Handle grade level refresh\n */\n onGradeLevelRefresh(): void {\n this.loadGradeLevels();\n }\n\n /**\n * Handle grade level reorder via drag and drop\n */\n onGradeLevelReorder(data: { sourceIndex: number; targetIndex: number; newOrder: ICoreSydsgl[]; allOrders?: ICoreSydsgl[] }): void {\n console.log('🔄 Grade level reorder event:', data);\n\n\n // Mark that order has changed\n this.hasOrderChanged.set(true);\n console.log('🔄 Order change detected');\n }\n\n /**\n * Update grid data after reordering\n */\n private updateGridDataAfterReorder() {\n // Create a completely new config object to ensure change detection triggers\n const newConfig: GridConfiguration<ICoreSydsgl> = {\n ...this.gridConfig(),\n data: [...this.gradeLevels()] // Create a new array to ensure reference change\n };\n\n this.gridConfig.set(newConfig);\n console.log('⚙️ Updated grid config after reorder - new reference created');\n }\n\n /**\n * Save grade level order using the change sequence API\n * This method is called by the data grid when save-order action is triggered\n */\n saveGradeLevelOrder() {\n console.log('💾 Saving grade level order...');\n // The data grid will handle the order comparison and only call this if there are actual changes\n // We just need to prepare the payload and make the API call\n\n // Prepare payload for change sequence API with all current grade levels\n const payload: MGradeLevelChangeSequencePayload = {\n grade_level_sequences: this.gradeLevels().map(item => ({\n sydsgl_id: item._id || '',\n sydsgl_order: item.sydsgl_order || 1\n }))\n };\n\n console.log('📤 Sending change sequence payload:', payload);\n\n // Call the change sequence API\n this.gradeLevelService.changeGradeLevelSequence(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: gradeLevelChangeSequenceControllerResponse) => {\n if (response.success) {\n console.log('✅ Grade level sequence updated successfully');\n this.notificationService.success('Grade level sequence updated successfully');\n // Reset change flag first\n this.hasOrderChanged.set(false);\n // Refresh the grade level list from server to get updated order\n this.loadGradeLevels();\n } else {\n console.error('❌ Failed to update grade level sequence:', response);\n this.error.set('Failed to update grade level sequence');\n this.notificationService.error('Failed to update grade level sequence');\n }\n },\n error: (error) => {\n console.error('❌ Error updating grade level sequence:', error);\n this.error.set('Failed to update grade level sequence');\n this.notificationService.error(`Error updating grade level sequence: ${error.message || 'Unknown error occurred'}`);\n }\n });\n }\n\n /**\n * Reset drag order to original state\n */\n resetDragOrder() {\n console.log('🔄 Resetting drag order to original state');\n\n // Reset the change flag\n this.hasOrderChanged.set(false);\n console.log('✅ Drag order reset successfully');\n }\n\n /**\n * Check if order has changed\n */\n hasOrderChanges(): boolean {\n return this.hasOrderChanged();\n }\n\n\n\n\n /**\n * Handle grade level row click\n */\n onGradeLevelRowClick(gradeLevel: ICoreSydsgl): void {\n this.editGradeLevel(gradeLevel._id || '');\n }\n\n /**\n * Navigate to edit grade level form\n */\n editGradeLevel(itemId: string): void {\n console.log('🔵 editGradeLevel called with:', itemId);\n this.isEditMode.set(true);\n this.getGradeLevelById(itemId);\n }\n\n /**\n * Get grade level by ID using the API\n */\n getGradeLevelById(itemId: string): void {\n console.log('🔵 getGradeLevelById called with:', itemId);\n this.loading.set(true);\n const payload: MGradeLevelGetByIdPayload = { sydsgl_id: itemId };\n this.gradeLevelService.getGradeLevelById(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Grade level retrieved successfully:', response.data);\n let gradeLevel: ICoreSydsgl | null = null;\n gradeLevel = response.data || null;\n\n this.retrievedGradeLevel.set(gradeLevel);\n\n if (this.isEditMode() && gradeLevel) {\n this.populateFormForEdit(gradeLevel);\n }\n } else {\n this.error.set('Failed to retrieve grade level');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while retrieving the grade level');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with grade level data for editing\n */\n populateFormForEdit(gradeLevel: ICoreSydsgl): void {\n console.log('🔵 populateFormForEdit called with:', gradeLevel);\n\n this.quickAddForm.patchValue({\n sydsgl_name: gradeLevel.sydsgl_name || '',\n sydsgl_description: gradeLevel.sydsgl_description || '',\n sydsgl_order: gradeLevel.sydsgl_order || 1,\n sydsgl_isactive: gradeLevel.sydsgl_isactive ?? true,\n sydsgl_entity_id_syen: gradeLevel.sydsgl_entity_id_syen || ''\n });\n\n console.log('✅ Form populated for editing:', this.quickAddForm.value);\n }\n\n /**\n * Delete grade level with confirmation dialog\n */\n async deleteGradeLevel(itemId: string): Promise<void> {\n console.log('🔵 deleteGradeLevel called with:', itemId);\n \n // Find the grade level to get its name for the confirmation\n const gradeLevel = this.gradeLevels().find(item => item._id === itemId);\n const gradeLevelName = gradeLevel?.sydsgl_name || 'this grade level';\n \n try {\n // Show confirmation dialog with grade level name\n const confirmed = await this.confirmationService.confirmDelete(gradeLevelName);\n \n if (confirmed) {\n this.loading.set(true);\n\n this.gradeLevelService.deleteGradeLevel(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.notificationService.success(`Grade level \"${gradeLevelName}\" has been deleted successfully.`);\n this.loadGradeLevels();\n } else {\n this.error.set('Failed to delete grade level');\n this.notificationService.error('Failed to delete grade level. Please try again.');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while deleting the grade level');\n this.notificationService.error(`Error deleting grade level: ${err.message || 'Unknown error occurred'}`);\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n } catch (error) {\n console.log('🔵 Delete operation cancelled by user');\n }\n }\n\n /**\n * Delete multiple grade levels with confirmation dialog\n */\n async deleteMultipleGradeLevels(): Promise<void> {\n const selectedIds = this.selectedItems();\n if (selectedIds.length === 0) {\n this.notificationService.warning('Please select grade levels to delete.');\n return;\n }\n\n // Get names of selected grade levels for confirmation\n const selectedGradeLevels = this.gradeLevels().filter(item => selectedIds.includes(item._id || ''));\n const gradeLevelNames = selectedGradeLevels.map(item => item.sydsgl_name).join(', ');\n \n const count = selectedIds.length;\n \n try {\n const confirmed = await this.confirmationService.ask({\n title: 'Confirm Bulk Delete',\n message: `Are you sure you want to delete ${count} grade level${count > 1 ? 's' : ''}?\\n\\nSelected: ${gradeLevelNames}\\n\\nThis action cannot be undone.`,\n type: 'danger',\n icon: 'delete_forever',\n confirmText: `Delete ${count} Item${count > 1 ? 's' : ''}`,\n cancelText: 'Cancel'\n });\n\n if (confirmed) {\n this.loading.set(true);\n\n this.gradeLevelService.deleteMultipleGradeLevels(selectedIds)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.notificationService.success(`${count} grade level${count > 1 ? 's' : ''} deleted successfully.`);\n this.selectedItems.set([]);\n this.loadGradeLevels();\n } else {\n this.error.set('Failed to delete grade levels');\n this.notificationService.error('Failed to delete grade levels. Please try again.');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while deleting grade levels');\n this.notificationService.error(`Error deleting grade levels: ${err.message || 'Unknown error occurred'}`);\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n } catch (error) {\n console.log('🔵 Bulk delete operation cancelled by user');\n }\n }\n\n /**\n * Toggle grade level status\n */\n toggleGradeLevelStatus(itemId: string): void {\n console.log('🔵 toggleGradeLevelStatus called with:', itemId);\n this.loading.set(true);\n\n this.gradeLevelService.toggleGradeLevelStatus(itemId)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadGradeLevels();\n } else {\n this.error.set('Failed to toggle grade level status');\n }\n },\n error: (err) => {\n this.error.set(err.message || 'An error occurred while toggling status');\n },\n complete: () => {\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Quick add or update grade level using reactive form\n */\n quickAddGradeLevel() {\n if (this.quickAddForm.invalid) return;\n\n const formValue = this.quickAddForm.value;\n\n // For new grade levels, ensure the order is set to the calculated next order\n let order = formValue.sydsgl_order;\n if (!this.isEditMode()) {\n order = this.calculateNextOrder();\n }\n\n const gradeLevel: Partial<ICoreSydsgl> = {\n _id: this.retrievedGradeLevel()?._id || '',\n sydsgl_name: formValue.sydsgl_name,\n sydsgl_description: formValue.sydsgl_description || '',\n sydsgl_order: order,\n sydsgl_isactive: formValue.sydsgl_isactive,\n sydsgl_entity_id_syen: formValue.sydsgl_entity_id_syen\n };\n\n if (this.isEditMode() && this.retrievedGradeLevel()) {\n const itemId = this.retrievedGradeLevel()?._id;\n if (itemId) {\n console.log('🔵 Updating grade level:', itemId);\n this.gradeLevelService.updateGradeLevel(itemId, gradeLevel).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Grade level updated successfully');\n this.resetQuickAddForm();\n this.isEditMode.set(false);\n this.retrievedGradeLevel.set(null);\n this.loadGradeLevels();\n }\n },\n error: () => {\n this.error.set('Failed to update grade level');\n }\n });\n }\n } else {\n console.log('🔵 Creating new grade level');\n this.gradeLevelService.createGradeLevel(gradeLevel).subscribe({\n next: (response) => {\n if (response.success) {\n console.log('✅ Grade level created successfully');\n this.resetQuickAddForm();\n this.loadGradeLevels();\n }\n },\n error: () => {\n this.error.set('Failed to create grade level');\n }\n });\n }\n }\n\n /**\n * Calculate the highest order from existing grade levels\n */\n private calculateNextOrder(): number {\n const currentGradeLevels = this.gradeLevels();\n if (currentGradeLevels.length === 0) {\n return 1;\n }\n\n const maxOrder = Math.max(...currentGradeLevels.map(level => level.sydsgl_order || 0));\n return maxOrder + 1;\n }\n\n /**\n * Reset the quick add form to default values\n */\n resetQuickAddForm(): void {\n this.isEditMode.set(false);\n this.retrievedGradeLevel.set(null);\n\n // Calculate the next order automatically\n const nextOrder = this.calculateNextOrder();\n\n this.quickAddForm.reset({\n sydsgl_name: '',\n sydsgl_description: '',\n sydsgl_order: nextOrder,\n sydsgl_isactive: true,\n sydsgl_entity_id_syen: this.appState.getActiveEntityId() || ''\n });\n }\n\n /**\n * Handle click outside dropdown\n */\n private handleClickOutside(event: Event): void {\n const target = event.target as HTMLElement;\n\n if (!target?.closest('[data-dropdown]') && !target?.closest('[data-action=\"more-actions\"]')) {\n document.querySelectorAll('[data-dropdown]').forEach((el: Element) => {\n const dropdown = el as HTMLElement;\n dropdown.classList.add('tw-hidden');\n });\n\n document.querySelectorAll('[data-action=\"more-actions\"]').forEach((el: Element) => {\n const button = el as HTMLElement;\n button.setAttribute('aria-expanded', 'false');\n });\n }\n }\n\n /**\n * Handle dropdown action clicks\n */\n private handleDropdownAction(event: Event): void {\n const target = event.target as HTMLElement;\n const actionButton = target.closest('[data-action]') as HTMLElement;\n\n if (actionButton) {\n const action = actionButton.getAttribute('data-action');\n const itemId = actionButton.getAttribute('data-item-id');\n\n if (action && itemId) {\n event.preventDefault();\n event.stopPropagation();\n\n const dropdown = actionButton.closest('[data-dropdown]') as HTMLElement;\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n switch (action) {\n case 'edit':\n this.editGradeLevel(itemId);\n break;\n case 'toggle':\n this.toggleGradeLevelStatus(itemId);\n break;\n case 'delete':\n this.deleteGradeLevel(itemId);\n break;\n }\n }\n }\n }\n\n /**\n * Toggle dropdown visibility\n */\n toggleDropdown(itemId: string) {\n document.querySelectorAll('.dropdown-menu').forEach(menu => {\n if (menu.getAttribute('data-dropdown') !== itemId) {\n menu.classList.add('tw-hidden');\n }\n });\n\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.toggle('tw-hidden');\n }\n }\n\n /**\n * Handle grade level action clicks\n */\n handleGradeLevelAction(action: string, itemId: string) {\n const item = this.gradeLevels().find(item => item._id === itemId);\n if (!item) return;\n\n const dropdown = document.querySelector(`[data-dropdown=\"${itemId}\"]`);\n if (dropdown) {\n dropdown.classList.add('tw-hidden');\n }\n\n switch (action) {\n case 'edit':\n this.editGradeLevel(itemId);\n break;\n case 'toggle':\n this.toggleGradeLevelStatus(itemId);\n break;\n case 'delete':\n this.deleteGradeLevel(itemId);\n break;\n }\n }\n\n /**\n * Get status display\n */\n getStatusDisplay(isActive: boolean): string {\n return isActive ? 'Active' : 'Inactive';\n }\n\n /**\n * Get status class for styling\n */\n getStatusClass(isActive: boolean): string {\n return isActive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800';\n }\n\n /**\n * Generate dropdown items for grade level actions\n */\n getDropdownItems(row: ICoreSydsgl): DropdownItem[] {\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'toggle',\n label: row.sydsgl_isactive ? 'Deactivate' : 'Activate',\n icon: 'power_settings_new',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-600',\n hoverBgColor: 'hover:tw-bg-red-50'\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, row: ICoreSydsgl): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n this.editGradeLevel(row._id || '');\n break;\n case 'toggle':\n this.toggleGradeLevelStatus(row._id || '');\n break;\n case 'delete':\n this.deleteGradeLevel(row._id || '');\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n this.closeAllDropdowns();\n }\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n\n /**\n * Track by function for ngFor\n */\n trackByItemId(index: number, item: ICoreSydsgl): string {\n return item._id || '';\n }\n} ","<!-- Grade Level List Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Grade Level' : 'Quick Add Grade Level' }}</h6>\n </div>\n </div>\n \n <form [formGroup]=\"quickAddForm\" (ngSubmit)=\"quickAddGradeLevel()\">\n <!-- First Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\n <!-- Grade Level Name -->\n <div>\n <cide-ele-input \n id=\"sydsgl_name\" \n label=\"Name*\" \n formControlName=\"sydsgl_name\"\n placeholder=\"Grade level name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Active Status -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <cide-ele-input \n id=\"sydsgl_isactive\"\n type=\"checkbox\"\n label=\"Active\"\n formControlName=\"sydsgl_isactive\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n \n <!-- Second Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-3 tw-items-end\">\n <!-- Description -->\n <div>\n <cide-ele-textarea \n id=\"sydsgl_description\" \n label=\"Description\" \n formControlName=\"sydsgl_description\"\n placeholder=\"Grade level description\"\n rows=\"2\"\n size=\"sm\">\n </cide-ele-textarea>\n </div>\n \n <!-- Entity ID (Hidden) -->\n <div class=\"tw-hidden\">\n <cide-ele-input \n id=\"sydsgl_entity_id_syen\" \n label=\"Entity ID*\" \n formControlName=\"sydsgl_entity_id_syen\"\n placeholder=\"Entity ID\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-flex-col tw-justify-end\">\n <div class=\"tw-flex tw-space-x-2\">\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n [disabled]=\"quickAddForm.invalid\"\n class=\"tw-px-2 tw-py-1 tw-w-20\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Add' }}\n </button>\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\"\n (click)=\"resetQuickAddForm()\"\n class=\"tw-px-2 tw-py-1 tw-w-16\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">refresh</cide-ele-icon>\n Reset\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n \n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [serverSidePagination]=\"true\" \n [totalServerItems]=\"totalItems()\" \n [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\" \n [dragDropEnabled]=\"true\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Drag Handle Renderer Template -->\n<ng-template #dragHandleRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-justify-center tw-w-full tw-h-full tw-cursor-move drag-handle\">\n <cide-ele-icon \n class=\"tw-text-gray-400 hover:tw-text-gray-600 tw-transition-colors\" \n size=\"xs\">\n drag_indicator\n </cide-ele-icon>\n </div>\n</ng-template>\n\n<!-- Grade Level Details Renderer Template -->\n<ng-template #gradeLevelDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Grade Level Icon -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon \n class=\"tw-text-gray-400\" \n size=\"xs\">\n school\n </cide-ele-icon>\n </div>\n \n <!-- Grade Level Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.sydsgl_name\">\n {{ row.sydsgl_name || 'Untitled' }}\n </div>\n @if (row.sydsgl_description) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.sydsgl_description\">\n {{ row.sydsgl_description }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Grade Level Status Renderer Template -->\n<ng-template #gradeLevelStatusRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"getStatusClass(row.sydsgl_isactive)\">\n {{ getStatusDisplay(row.sydsgl_isactive) }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown \n [items]=\"getDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template>\n\n<!-- Confirmation Modal -->\n<cide-ele-confirmation-modal></cide-ele-confirmation-modal> ","// Grade Level Management Components\r\nexport * from './components/grade-level-list/grade-level-list.component';\r\n\r\n// Grade Level Management Services\r\nexport * from './services/grade-level-management.service'; ","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\nimport {\r\n cidePath,\r\n coreRoutesUrl,\r\n generateStringFromObject,\r\n hostManagerRoutesUrl,\r\n MSystemPages,\r\n MSystemPagesCheckCodeExistsPayload,\r\n MSystemPagesDeletePayload,\r\n MSystemPagesGetByIdPayload,\r\n MSystemPagesInsertUpdatePayload,\r\n MSystemPagesToggleStatusPayload,\r\n systemPagesByIdControllerResponse,\r\n systemPagesCheckCodeExistsControllerResponse,\r\n systemPagesControllerResponse,\r\n systemPagesDeleteControllerResponse,\r\n systemPagesInsertUpdateControllerResponse,\r\n systemPagesToggleStatusControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideCorePageManagementService {\r\n constructor(private http: HttpClient) { }\r\n\r\n /**\r\n * Get page list from API\r\n */\r\n getPageList(body: MSystemPages): Observable<systemPagesControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<systemPagesControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.page, query]))\r\n .pipe(\r\n catchError(error => {\r\n console.error('CideCorePageManagementService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Create or update page using single API endpoint\r\n */\r\n createOrUpdatePage(payload: MSystemPagesInsertUpdatePayload): Observable<systemPagesInsertUpdateControllerResponse> {\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.page]);\r\n return this.http.post<systemPagesInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n\r\n /**\r\n * Get page by ID\r\n */\r\n getPageById(id: string): Observable<systemPagesByIdControllerResponse> {\r\n console.log('Getting page by ID:', id);\r\n const payload: MSystemPagesGetByIdPayload = { sypg_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.page, 'byId', query]);\r\n return this.http.get<systemPagesByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete page\r\n */\r\n deletePage(id: string): Observable<systemPagesDeleteControllerResponse> {\r\n const payload: MSystemPagesDeletePayload = { sypg_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.page, query]);\r\n return this.http.delete<systemPagesDeleteControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n\r\n\r\n /**\r\n * Toggle page active status\r\n */\r\n togglePageStatus(payload: MSystemPagesToggleStatusPayload): Observable<systemPagesToggleStatusControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.page, query]);\r\n return this.http.put<systemPagesToggleStatusControllerResponse>(url, {})\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Find page by ID using API\r\n */\r\n findPageById(payload: MSystemPagesCheckCodeExistsPayload): Observable<systemPagesCheckCodeExistsControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.page, 'checkCodeExists', query]);\r\n return this.http.get<systemPagesCheckCodeExistsControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Check if page code already exists\r\n */\r\n checkPageCodeExists(payload: MSystemPagesCheckCodeExistsPayload): Observable<boolean> {\r\n return this.findPageById(payload).pipe(\r\n map((response: systemPagesCheckCodeExistsControllerResponse) => response.success || false)\r\n );\r\n }\r\n\r\n\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('Page Management Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n} ","import { Component, signal, viewChild, TemplateRef, DestroyRef, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { CideCorePageManagementService } from '../../services/page-management.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideIconComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem } from 'cloud-ide-element';\nimport { CideEleDataGridComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { ICoreSypg, systemPagesControllerResponse, generateStringFromObject, MSystemPages } from 'cloud-ide-lms-model';\n\n@Component({\n selector: 'cide-core-page-list',\n standalone: true,\n imports: [\n CommonModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideIconComponent,\n CideEleDropdownComponent\n ],\n templateUrl: './page-list.component.html'\n})\nexport class CideCorePageListComponent {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private pageService = inject(CideCorePageManagementService);\n private appState = inject(AppStateHelperService);\n private router = inject(Router);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n pageDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('pageDetailsRendererTemplate');\n pageStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('pageStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n pages = signal<ICoreSypg[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Pagination signals\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSypg>>({\n id: 'page-list-grid',\n columns: [\n {\n key: 'details',\n header: 'Page Details',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'pageDetailsRenderer'\n },\n {\n key: 'sypg_page_code',\n header: 'Page Code',\n type: 'text',\n width: '150px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'sypg_isactive',\n header: 'Status',\n type: 'custom',\n width: '100px',\n truncate: false,\n align: 'center',\n renderer: 'pageStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search pages...',\n searchableColumns: ['sypg_title', 'sypg_desc', 'sypg_page_code'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false\n });\n\n // Action handlers for grid\n actionHandlers = {\n onEdit: (item: ICoreSypg) => this.editPage(item),\n onDelete: (item: ICoreSypg) => this.deletePage(item),\n onToggleStatus: (item: ICoreSypg) => this.togglePageStatus(item),\n onManageThemes: (item: ICoreSypg) => this.manageThemes(item),\n onManageControls: (item: ICoreSypg) => this.manageControls(item)\n };\n\n constructor() {\n this.initializeComponent();\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n this.loadPages();\n }\n\n /**\n * Load pages from API\n */\n private loadPages(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const request: MSystemPages = {\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n pagination: true,\n query: this.searchTerm() || undefined\n };\n\n this.pageService.getPageList(request)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: systemPagesControllerResponse) => {\n if (response.success) {\n this.pages.set(response.data || []);\n this.totalItems.set(response.total || 0);\n this.updateGridData();\n } else {\n this.error.set(response.message || 'Failed to load pages');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error loading pages:', error);\n this.error.set('Failed to load pages. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n this.gridConfig.update(config => ({\n ...config,\n data: this.pages()\n }));\n }\n\n /**\n * Get template renderers for grid\n */\n getTemplateRenderers(): Record<string, TemplateRef<TemplateContext>> {\n return {\n pageDetailsRenderer: this.pageDetailsRendererTemplate(),\n pageStatusRenderer: this.pageStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n };\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSypg>): void {\n switch (event.type) {\n case 'pageChange':\n console.log('🔵 Page change event:', event);\n if (event.data && typeof event.data === 'object' && 'page' in event.data && 'pageSize' in event.data) {\n this.currentPage.set(event.data['page'] as number);\n this.pageSize.set(event.data['pageSize'] as number);\n this.loadPages();\n }\n break;\n case 'search':\n this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadPages();\n break;\n case 'refresh':\n this.loadPages();\n break;\n case 'action':\n // Handle action events if needed\n console.log('Action event:', event);\n break;\n case 'rowClick':\n // Handle row click events if needed\n console.log('Row click event:', event);\n break;\n case 'sort':\n // Handle sort events if needed\n console.log('Sort event:', event);\n break;\n case 'export':\n // Handle export events if needed\n console.log('Export event:', event);\n break;\n case 'rowReorder':\n // Handle row reorder events if needed\n console.log('Row reorder event:', event);\n break;\n }\n }\n\n /**\n * Navigate to create page\n */\n createPage(): void {\n this.router.navigate(['/control-panel/page-form']);\n }\n\n /**\n * Edit page - navigate to edit page\n */\n editPage(page: ICoreSypg): void {\n const query: string = generateStringFromObject({\n sypg_id: page._id,\n sypg_title: page.sypg_title\n });\n this.router.navigate(['/control-panel/page-form', query]);\n }\n\n /**\n * Delete page\n */\n deletePage(page: ICoreSypg): void {\n if (confirm(`Are you sure you want to delete the page \"${page.sypg_title}\"?`)) {\n this.loading.set(true);\n this.pageService.deletePage(page._id || '')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadPages();\n console.log('✅ Page deleted successfully');\n } else {\n console.error('❌ Failed to delete page:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error deleting page:', error);\n console.error('❌ Failed to delete page. Please try again.');\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Toggle page status\n */\n togglePageStatus(page: ICoreSypg): void {\n this.loading.set(true);\n this.pageService.togglePageStatus({ sypg_id: page._id || '', sypg_isactive: !page.sypg_isactive })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadPages();\n console.log(`✅ Page ${page.sypg_isactive ? 'deactivated' : 'activated'} successfully`);\n } else {\n console.error('❌ Failed to toggle page status:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error toggling page status:', error);\n console.error('❌ Failed to toggle page status. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Manage themes for a page\n */\n manageThemes(page: ICoreSypg): void {\n const query: string = generateStringFromObject({ sypg_id: page._id, sypg_title: page.sypg_title })\n this.router.navigate(['control-panel', 'page-theme', query]);\n }\n\n /**\n * Manage controls for a page\n */\n manageControls(page: ICoreSypg): void {\n const query: string = generateStringFromObject({ sypg_id: page._id, sypg_title: page.sypg_title })\n this.router.navigate(['control-panel', 'page-controls', query]);\n }\n\n /**\n * Get dropdown items for actions\n */\n getActionDropdownItems(page: ICoreSypg): DropdownItem[] {\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n disabled: false\n },\n {\n id: 'themes',\n label: 'Manage Themes',\n icon: 'palette',\n disabled: false\n },\n {\n id: 'controls',\n label: 'Manage Controls',\n icon: 'settings',\n disabled: false\n },\n {\n id: 'toggle',\n label: page.sypg_isactive ? 'Deactivate' : 'Activate',\n icon: page.sypg_isactive ? 'block' : 'check_circle',\n disabled: false\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n disabled: false\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n * This method handles clicks on dropdown menu items in the actions column\n */\n onDropdownItemClick(item: DropdownItem, row: ICoreSypg): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n console.log('🔵 Calling editPage with:', row);\n this.editPage(row);\n break;\n case 'themes':\n console.log('🔵 Calling manageThemes with:', row);\n this.manageThemes(row);\n break;\n case 'controls':\n console.log('🔵 Calling manageControls with:', row);\n this.manageControls(row);\n break;\n case 'toggle':\n console.log('🔵 Calling togglePageStatus with:', row);\n this.togglePageStatus(row);\n break;\n case 'delete':\n console.log('🔵 Calling deletePage with:', row);\n this.deletePage(row);\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n // Close all dropdowns after action\n this.closeAllDropdowns();\n }\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n // Close all dropdowns by clicking outside\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n} ","<!-- Page List Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">web</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Page Management</h5>\n </div>\n\n <!-- Actions -->\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Add Page Button -->\n <button\n cideEleButton\n variant=\"primary\"\n size=\"sm\"\n (click)=\"createPage()\"\n leftIcon=\"add\"\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\n Create New Page\n </button>\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\">error</cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n [templateRenderers]=\"getTemplateRenderers()\"\n [actionHandlers]=\"actionHandlers\"\n [serverSidePagination]=\"true\"\n [totalServerItems]=\"totalItems()\"\n [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Page Details Renderer Template -->\n<ng-template #pageDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Page Icon -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon class=\"tw-text-gray-400 tw-w-4 tw-h-4\">web</cide-ele-icon>\n </div>\n \n <!-- Page Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.sypg_title\">\n {{ row.sypg_title || 'Untitled' }}\n </div>\n @if (row.sypg_desc) {\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \n [title]=\"row.sypg_desc\">\n {{ row.sypg_desc }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Page Status Renderer Template -->\n<ng-template #pageStatusRendererTemplate let-row=\"row\" let-value=\"value\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\n [ngClass]=\"row.sypg_isactive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800'\">\n {{ row.sypg_isactive ? 'Active' : 'Inactive' }}\n </span>\n</ng-template>\n\n<!-- Actions Dropdown Renderer Template -->\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template> ","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { \r\n cidePath, \r\n coreRoutesUrl, \r\n generateStringFromObject, \r\n hostManagerRoutesUrl,\r\n MSystemPagesTheme,\r\n MSystemPagesThemeGetByIdPayload,\r\n MSystemPagesThemeDeletePayload,\r\n MSystemPagesThemeInsertUpdatePayload,\r\n MSystemPagesThemeToggleStatusPayload,\r\n MSystemPagesThemeByPageIdPayload,\r\n systemPagesThemeControllerResponse,\r\n systemPagesThemeByIdControllerResponse,\r\n systemPagesThemeInsertUpdateControllerResponse,\r\n systemPagesThemeDeleteControllerResponse,\r\n systemPagesThemeToggleStatusControllerResponse,\r\n systemPagesThemeByPageIdControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideCorePageThemeService {\r\n private apiUrl = `${coreRoutesUrl?.pageTheme}`;\r\n\r\n constructor(private http: HttpClient) {\r\n console.log('CideCorePageThemeService initialized - using real API');\r\n }\r\n\r\n /**\r\n * Get theme list from API\r\n */\r\n getThemeList(body: MSystemPagesTheme): Observable<systemPagesThemeControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<systemPagesThemeControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme, query]))\r\n .pipe(\r\n catchError(error => {\r\n console.error('CideCorePageThemeService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Create new theme\r\n */\r\n createTheme(payload: MSystemPagesThemeInsertUpdatePayload): Observable<systemPagesThemeInsertUpdateControllerResponse> {\r\n console.log('Creating theme:', payload);\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme]);\r\n return this.http.post<systemPagesThemeInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Update existing theme\r\n */\r\n updateTheme(payload: MSystemPagesThemeInsertUpdatePayload): Observable<systemPagesThemeInsertUpdateControllerResponse> {\r\n console.log('Updating theme:', payload);\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme]);\r\n return this.http.post<systemPagesThemeInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get theme by ID\r\n */\r\n getThemeById(id: string): Observable<systemPagesThemeByIdControllerResponse> {\r\n console.log('Getting theme by ID:', id);\r\n const payload: MSystemPagesThemeGetByIdPayload = { sytm_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme, 'byId', query]);\r\n return this.http.get<systemPagesThemeByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get themes by page ID\r\n */\r\n getThemesByPageId(pageId: string): Observable<systemPagesThemeByPageIdControllerResponse> {\r\n console.log('Getting themes by page ID:', pageId);\r\n const payload: MSystemPagesThemeByPageIdPayload = { sytm_page_id_sypg: pageId };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme, 'byPage', query]);\r\n return this.http.get<systemPagesThemeByPageIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete theme\r\n */\r\n deleteTheme(id: string): Observable<systemPagesThemeDeleteControllerResponse> {\r\n const payload: MSystemPagesThemeDeletePayload = { sytm_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme, query]);\r\n return this.http.delete<systemPagesThemeDeleteControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle theme active status\r\n */\r\n toggleThemeStatus(payload: MSystemPagesThemeToggleStatusPayload): Observable<systemPagesThemeToggleStatusControllerResponse> {\r\n console.log('Toggling theme status:', payload);\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageTheme, query]);\r\n return this.http.put<systemPagesThemeToggleStatusControllerResponse>(url, {})\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('Page Theme Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n} ","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Validators, ReactiveFormsModule, NonNullableFormBuilder, FormsModule, FormArray, FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { CideCorePageThemeService } from '../../services/page-theme.service';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideEleButtonComponent, CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, CideEleJsonEditorComponent, CideSelectOptionComponent, CideEleFileInputComponent, FileUploadData, CideEleFileImageDirective } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { ICoreSytm, MSystemPagesThemeInsertUpdatePayload, ICoreSythDrawer, MSystemPagesTheme, generateObjectFromString } from 'cloud-ide-lms-model';\n\n@Component({\n selector: 'cide-core-page-theme',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleButtonComponent,\n CideInputComponent,\n CideSelectComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent,\n CideEleJsonEditorComponent,\n CideEleFileInputComponent,\n CideEleFileImageDirective,\n],\n templateUrl: './page-theme.component.html',\n styleUrls: []\n})\nexport class CideCorePageThemeComponent implements OnInit {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private themeService = inject(CideCorePageThemeService);\n private appState = inject(AppStateHelperService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n themeDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('themeDetailsRendererTemplate');\n themeStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('themeStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext<Record<string, unknown>>>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n themes = signal<ICoreSytm[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n // Derived list filtered by searchTerm\n filteredThemes = computed(() => {\n const q = (this.searchTerm() || '').toLowerCase().trim();\n const items = this.themes() || [];\n if (!q) return items;\n return items.filter(t => {\n const title = (t.sytm_title || '').toLowerCase();\n const code = (t.sytm_theme_code || '').toLowerCase();\n const desc = (t.sytm_desc || '').toLowerCase();\n return title.includes(q) || code.includes(q) || desc.includes(q);\n });\n });\n\n\n // Input handler to avoid $any casts in template\n onGallerySearchInput(event: Event): void {\n const target = event.target as HTMLInputElement | null;\n this.searchTerm.set(target?.value ?? '');\n }\n\n // Page information\n pageId = signal<string>('');\n pageTitle = signal<string>('');\n\n // Form state\n isEditMode = signal(false);\n editingThemeId = signal<string | null>(null);\n retrievedTheme = signal<ICoreSytm | null>(null);\n\n // Pagination signals\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n // Modern reactive forms with signals\n themeForm = this.fb.group({\n sytm_title: ['', [Validators.required]],\n sytm_desc: [''],\n sytm_theme_code: ['', [Validators.required]],\n sytm_preview_id_fm: [''],\n sytm_sub_title: [''],\n sytm_configuration: ['{}'],\n sytm_entity_id_syen: [''],\n sytm_isselected: [false],\n sytm_layout: this.fb.group({\n sytm_layout_sidebar: this.fb.group({ status: [true] }),\n sytm_layout_header: this.fb.group({ status: [true] }),\n sytm_layout_footer: this.fb.group({ status: [false] }),\n sytm_layout_breadcrumb: this.fb.group({ status: [true] }),\n sytm_layout_console: this.fb.group({ status: [false] }),\n sytm_layout_request: this.fb.group({ status: [false] }),\n sytm_layout_drawer: this.fb.array([] as ICoreSythDrawer[])\n }),\n sytm_isactive: [true]\n });\n\n // Computed values\n isFormDirty = computed(() => this.themeForm.dirty);\n\n // Multi-select options for layout sections\n layoutOptions = [\n { value: 'sidebar', label: 'Sidebar' },\n { value: 'header', label: 'Header' },\n { value: 'footer', label: 'Footer' },\n { value: 'breadcrumb', label: 'Breadcrumb' },\n { value: 'console', label: 'Console' },\n { value: 'request', label: 'Request' }\n ] as const;\n\n // Read enabled selections from form values\n enabledLayoutSelections(): string[] {\n const layout = this.themeForm.get('sytm_layout');\n if (!layout) return [];\n const selections: string[] = [];\n\n const getBool = (path: string) => Boolean(this.themeForm.get(path)?.value);\n\n if (getBool('sytm_layout.sytm_layout_sidebar.status')) selections.push('sidebar');\n if (getBool('sytm_layout.sytm_layout_header.status')) selections.push('header');\n if (getBool('sytm_layout.sytm_layout_footer.status')) selections.push('footer');\n if (getBool('sytm_layout.sytm_layout_breadcrumb.status')) selections.push('breadcrumb');\n if (getBool('sytm_layout.sytm_layout_console.status')) selections.push('console');\n if (getBool('sytm_layout.sytm_layout_request.status')) selections.push('request');\n\n return selections;\n }\n\n // Update form booleans from multi-select change\n onEnabledLayoutChange(values: string[]): void {\n const setBool = (path: string, val: boolean) => this.themeForm.get(path)?.setValue(val);\n\n const selected = new Set(values);\n setBool('sytm_layout.sytm_layout_sidebar.status', selected.has('sidebar'));\n setBool('sytm_layout.sytm_layout_header.status', selected.has('header'));\n setBool('sytm_layout.sytm_layout_footer.status', selected.has('footer'));\n setBool('sytm_layout.sytm_layout_breadcrumb.status', selected.has('breadcrumb'));\n setBool('sytm_layout.sytm_layout_console.status', selected.has('console'));\n setBool('sytm_layout.sytm_layout_request.status', selected.has('request'));\n }\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSytm>>({\n id: 'theme-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'details',\n header: 'Theme Details',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'themeDetailsRenderer'\n },\n {\n key: 'sytm_theme_code',\n header: 'Theme Code',\n type: 'text',\n width: '150px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'sytm_isactive',\n header: 'Status',\n type: 'custom',\n width: '100px',\n truncate: false,\n align: 'center',\n renderer: 'themeStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search themes...',\n searchableColumns: ['sytm_title', 'sytm_desc', 'sytm_theme_code'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none'\n });\n\n // Action handlers for grid\n actionHandlers = {\n onEdit: (item: ICoreSytm) => this.editTheme(item),\n onDelete: (item: ICoreSytm) => this.deleteTheme(item),\n onToggleStatus: (item: ICoreSytm) => this.toggleThemeStatus(item)\n };\n\n ngOnInit(): void {\n this.initializeComponent();\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n // Get page information from route\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n console.log('🔍 Query params:', params);\n const queryParams = params['query'];\n const queryData = generateObjectFromString(queryParams);\n\n this.pageId.set(queryData?.sypg_id || '');\n this.pageTitle.set(queryData?.sypg_title || '');\n\n if (this.pageId()) {\n this.loadThemes();\n this.setupFormSubscriptions();\n } else {\n this.error.set('No page ID provided');\n }\n });\n }\n\n /**\n * Load themes from API\n */\n private loadThemes(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const request: MSystemPagesTheme = {\n sytm_page_id_sypg: this.pageId()\n };\n\n this.themeService.getThemeList(request)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.themes.set(response.data || []);\n this.totalItems.set(response.total || 0);\n this.updateGridData();\n } else {\n this.error.set(response.message || 'Failed to load themes');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error loading themes:', error);\n this.error.set('Failed to load themes. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Setup form subscriptions\n */\n private setupFormSubscriptions(): void {\n // Watch for form changes to enable/disable save button\n this.themeForm.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n // Form validation is handled by computed signals\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n this.gridConfig.update(config => ({\n ...config,\n data: this.themes()\n }));\n }\n\n /**\n * Get custom renderers for grid\n */\n\n\n /**\n * Get template renderers for grid\n */\n getTemplateRenderers(): Record<string, TemplateRef<TemplateContext>> {\n return {\n themeDetailsRenderer: this.themeDetailsRendererTemplate(),\n themeStatusRenderer: this.themeStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n };\n }\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSytm>): void {\n switch (event.type) {\n case 'pageChange':\n if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data && 'pageSize' in event.data) {\n this.currentPage.set(event.data['pageIndex'] as number);\n this.pageSize.set(event.data['pageSize'] as number);\n this.loadThemes();\n }\n break;\n case 'search':\n this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadThemes();\n break;\n case 'refresh':\n this.loadThemes();\n break;\n case 'action':\n // Handle action events if needed\n console.log('Action event:', event);\n break;\n case 'rowClick':\n // Handle row click events if needed\n console.log('Row click event:', event);\n break;\n case 'sort':\n // Handle sort events if needed\n console.log('Sort event:', event);\n break;\n case 'export':\n // Handle export events if needed\n console.log('Export event:', event);\n break;\n case 'rowReorder':\n // Handle row reorder events if needed\n console.log('Row reorder event:', event);\n break;\n }\n }\n\n /**\n * Create new theme\n */\n createTheme(): void {\n if (!this.themeForm.valid) {\n this.markFormAsTouched();\n return;\n }\n\n const formValue = this.themeForm.getRawValue();\n const newTheme: MSystemPagesThemeInsertUpdatePayload = {\n sytm_title: formValue.sytm_title,\n sytm_desc: formValue.sytm_desc,\n sytm_theme_code: formValue.sytm_theme_code,\n sytm_preview_id_fm: formValue.sytm_preview_id_fm,\n sytm_page_id_sypg: this.pageId(),\n sytm_configuration: JSON.parse(formValue.sytm_configuration),\n sytm_sub_title: formValue.sytm_sub_title,\n sytm_entity_id_syen: formValue.sytm_entity_id_syen || this.appState.getActiveEntityId(),\n sytm_isselected: Boolean(formValue.sytm_isselected),\n sytm_layout: {\n sytm_layout_sidebar: { status: Boolean(formValue.sytm_layout.sytm_layout_sidebar.status) },\n sytm_layout_header: { status: Boolean(formValue.sytm_layout.sytm_layout_header.status) },\n sytm_layout_footer: { status: Boolean(formValue.sytm_layout.sytm_layout_footer.status) },\n sytm_layout_breadcrumb: { status: Boolean(formValue.sytm_layout.sytm_layout_breadcrumb.status) },\n sytm_layout_console: { status: Boolean(formValue.sytm_layout.sytm_layout_console.status) },\n sytm_layout_request: { status: Boolean(formValue.sytm_layout.sytm_layout_request.status) },\n sytm_layout_drawer: formValue.sytm_layout.sytm_layout_drawer as ICoreSythDrawer[]\n },\n sytm_isactive: formValue.sytm_isactive\n };\n\n this.loading.set(true);\n this.themeService.createTheme(newTheme)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.resetForm();\n this.loadThemes();\n console.log('✅ Theme created successfully');\n } else {\n console.error('❌ Failed to create theme:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error creating theme:', error);\n console.error('❌ Failed to create theme. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update existing theme\n */\n updateTheme(): void {\n if (!this.themeForm.valid || !this.editingThemeId()) {\n this.markFormAsTouched();\n return;\n }\n\n const formValue = this.themeForm.getRawValue();\n const updatedTheme: MSystemPagesThemeInsertUpdatePayload = {\n _id: this.editingThemeId() || '',\n sytm_title: formValue.sytm_title,\n sytm_desc: formValue.sytm_desc,\n sytm_theme_code: formValue.sytm_theme_code,\n sytm_preview_id_fm: formValue.sytm_preview_id_fm,\n sytm_page_id_sypg: this.pageId(),\n sytm_configuration: JSON.parse(formValue.sytm_configuration),\n sytm_sub_title: formValue.sytm_sub_title,\n sytm_entity_id_syen: formValue.sytm_entity_id_syen || this.appState.getActiveEntityId(),\n sytm_isselected: Boolean(formValue.sytm_isselected),\n sytm_layout: {\n sytm_layout_sidebar: { status: Boolean(formValue.sytm_layout.sytm_layout_sidebar.status) },\n sytm_layout_header: { status: Boolean(formValue.sytm_layout.sytm_layout_header.status) },\n sytm_layout_footer: { status: Boolean(formValue.sytm_layout.sytm_layout_footer.status) },\n sytm_layout_breadcrumb: { status: Boolean(formValue.sytm_layout.sytm_layout_breadcrumb.status) },\n sytm_layout_console: { status: Boolean(formValue.sytm_layout.sytm_layout_console.status) },\n sytm_layout_request: { status: Boolean(formValue.sytm_layout.sytm_layout_request.status) },\n sytm_layout_drawer: formValue.sytm_layout.sytm_layout_drawer as ICoreSythDrawer[]\n },\n sytm_isactive: formValue.sytm_isactive\n };\n\n this.loading.set(true);\n this.themeService.updateTheme(updatedTheme)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.resetForm();\n this.loadThemes();\n console.log('✅ Theme updated successfully');\n } else {\n console.error('❌ Failed to update theme:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error updating theme:', error);\n console.error('❌ Failed to update theme. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Edit theme\n */\n editTheme(theme: ICoreSytm): void {\n this.isEditMode.set(true);\n this.editingThemeId.set(theme._id || null);\n this.retrievedTheme.set(theme);\n\n this.themeForm.patchValue({\n sytm_title: theme.sytm_title || '',\n sytm_desc: theme.sytm_desc || '',\n sytm_theme_code: theme.sytm_theme_code || '',\n sytm_preview_id_fm: theme.sytm_preview_id_fm || '',\n sytm_sub_title: theme.sytm_sub_title || '',\n sytm_configuration: JSON.stringify(theme.sytm_configuration || {}, null, 2),\n sytm_entity_id_syen: theme.sytm_entity_id_syen || this.appState.getActiveEntityId(),\n sytm_isselected: theme.sytm_isselected ?? false,\n sytm_layout: {\n sytm_layout_sidebar: { status: theme.sytm_layout?.sytm_layout_sidebar?.status ?? true },\n sytm_layout_header: { status: theme.sytm_layout?.sytm_layout_header?.status ?? true },\n sytm_layout_footer: { status: theme.sytm_layout?.sytm_layout_footer?.status ?? false },\n sytm_layout_breadcrumb: { status: theme.sytm_layout?.sytm_layout_breadcrumb?.status ?? true },\n sytm_layout_console: { status: theme.sytm_layout?.sytm_layout_console?.status ?? false },\n sytm_layout_request: { status: theme.sytm_layout?.sytm_layout_request?.status ?? false },\n sytm_layout_drawer: theme.sytm_layout?.sytm_layout_drawer || []\n },\n sytm_isactive: theme.sytm_isactive ?? true\n });\n\n // Rebuild drawer array controls from data\n while (this.drawerArray.length) {\n this.drawerArray.removeAt(0);\n }\n (theme.sytm_layout?.sytm_layout_drawer || []).forEach(d => {\n this.drawerArray.push(this.createDrawerGroup({\n syth_status: d?.syth_status ?? true,\n syth_config_syco_for: d?.syth_config_syco_for ?? 'drawer_notes'\n }));\n });\n\n this.themeForm.markAsPristine();\n }\n\n /**\n * Delete theme\n */\n deleteTheme(theme: ICoreSytm): void {\n if (confirm(`Are you sure you want to delete the theme \"${theme.sytm_title}\"?`)) {\n this.loading.set(true);\n this.themeService.deleteTheme(theme._id || '')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadThemes();\n console.log('✅ Theme deleted successfully');\n } else {\n console.error('❌ Failed to delete theme:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error deleting theme:', error);\n console.error('❌ Failed to delete theme. Please try again.');\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Toggle theme status\n */\n toggleThemeStatus(theme: ICoreSytm): void {\n this.loading.set(true);\n this.themeService.toggleThemeStatus({ sytm_id: theme._id || '', sytm_isactive: !theme.sytm_isactive })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadThemes();\n console.log(`✅ Theme ${theme.sytm_isactive ? 'deactivated' : 'activated'} successfully`);\n } else {\n console.error('❌ Failed to toggle theme status:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error toggling theme status:', error);\n console.error('❌ Failed to toggle theme status. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Save theme (create or update)\n */\n saveTheme(): void {\n if (this.isEditMode()) {\n this.updateTheme();\n } else {\n this.createTheme();\n }\n }\n\n /**\n * Cancel form\n */\n cancelForm(): void {\n this.resetForm();\n this.goBack();\n }\n\n /**\n * Go back to page list\n */\n goBack(): void {\n console.log('🔍 [PageThemeComponent] goBack() called');\n console.log('🔍 [PageThemeComponent] Current route:', this.router.url);\n \n // Try to navigate back to the page management route\n this.router.navigate(['/core/page']).then(success => {\n console.log('🔍 [PageThemeComponent] Navigation result:', success);\n if (!success) {\n console.log('🔍 [PageThemeComponent] Navigation failed, using browser back');\n window.history.back();\n }\n }).catch(error => {\n console.error('🔍 [PageThemeComponent] Navigation error:', error);\n // Fallback: try to go back in browser history\n window.history.back();\n });\n }\n\n /**\n * Reset form\n */\n private resetForm(): void {\n this.themeForm.reset({\n sytm_title: '',\n sytm_desc: '',\n sytm_theme_code: '',\n sytm_preview_id_fm: '',\n sytm_sub_title: '',\n sytm_configuration: '{}',\n sytm_entity_id_syen: '',\n sytm_isselected: false,\n sytm_layout: {\n sytm_layout_sidebar: { status: true },\n sytm_layout_header: { status: true },\n sytm_layout_footer: { status: false },\n sytm_layout_breadcrumb: { status: true },\n sytm_layout_console: { status: false },\n sytm_layout_request: { status: false },\n sytm_layout_drawer: [] as ICoreSythDrawer[]\n },\n sytm_isactive: true\n });\n\n // Explicitly clear the FormArray for drawers\n while (this.drawerArray.length) {\n this.drawerArray.removeAt(0);\n }\n\n this.isEditMode.set(false);\n this.editingThemeId.set(null);\n this.retrievedTheme.set(null);\n this.themeForm.markAsPristine();\n this.themeForm.markAsUntouched();\n }\n\n /**\n * Mark form as touched to trigger validation display\n */\n private markFormAsTouched(): void {\n Object.keys(this.themeForm.controls).forEach(key => {\n const control = this.themeForm.get(key);\n control?.markAsTouched();\n });\n }\n\n /**\n * Get dropdown items for actions\n */\n getActionDropdownItems(theme: ICoreSytm): DropdownItem[] {\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n disabled: false\n },\n {\n id: 'toggle',\n label: theme.sytm_isactive ? 'Deactivate' : 'Activate',\n icon: theme.sytm_isactive ? 'block' : 'check_circle',\n disabled: false\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n disabled: false\n }\n ];\n }\n\n /**\n * Handle dropdown item click\n * This method handles clicks on dropdown menu items in the actions column\n */\n onDropdownItemClick(item: DropdownItem, row: ICoreSytm): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n console.log('🔵 Calling editTheme with:', row);\n this.editTheme(row);\n break;\n case 'toggle':\n console.log('🔵 Calling toggleThemeStatus with:', row);\n this.toggleThemeStatus(row);\n break;\n case 'delete':\n console.log('🔵 Calling deleteTheme with:', row);\n this.deleteTheme(row);\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n // Close all dropdowns after action\n this.closeAllDropdowns();\n }\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n // Close all dropdowns by clicking outside\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n\n // ===== Drawer (sytm_layout_drawer) helpers =====\n drawerConfigOptions = [\n { value: 'drawer_notes', label: 'Drawer Notes' },\n { value: 'drawer_theme', label: 'Drawer Theme' }\n ];\n\n get drawerArray(): FormArray<FormGroup> {\n return this.themeForm.get('sytm_layout.sytm_layout_drawer') as unknown as FormArray<FormGroup>;\n }\n\n private createDrawerGroup(drawer?: Partial<ICoreSythDrawer>): FormGroup {\n return this.fb.group({\n syth_status: [drawer?.syth_status ?? true],\n syth_config_syco_for: [drawer?.syth_config_syco_for ?? 'drawer_notes']\n }) as unknown as FormGroup;\n }\n\n addDrawer(): void {\n this.drawerArray.push(this.createDrawerGroup());\n this.themeForm.markAsDirty();\n }\n\n removeDrawer(index: number): void {\n if (index >= 0 && index < this.drawerArray.length) {\n this.drawerArray.removeAt(index);\n this.themeForm.markAsDirty();\n }\n }\n\n /**\n * Set selected theme (only one can be selected per page)\n */\n setSelectedTheme(theme: ICoreSytm): void {\n if (!theme || theme.sytm_isselected) return; // already selected\n\n const previouslySelected = this.themes().find(t => t.sytm_isselected && t._id !== theme._id);\n\n // Disable previous selection (best-effort)\n if (previouslySelected) {\n const disablePayload: MSystemPagesThemeInsertUpdatePayload = {\n _id: previouslySelected._id || '',\n sytm_title: previouslySelected.sytm_title || '',\n sytm_desc: previouslySelected.sytm_desc || '',\n sytm_theme_code: previouslySelected.sytm_theme_code || '',\n sytm_preview_id_fm: previouslySelected.sytm_preview_id_fm || '',\n sytm_page_id_sypg: this.pageId(),\n sytm_configuration: previouslySelected.sytm_configuration || {},\n sytm_sub_title: previouslySelected.sytm_sub_title || '',\n sytm_entity_id_syen: previouslySelected.sytm_entity_id_syen || this.appState.getActiveEntityId(),\n sytm_isselected: false,\n sytm_layout: previouslySelected.sytm_layout,\n sytm_isactive: previouslySelected.sytm_isactive ?? true\n };\n this.themeService.updateTheme(disablePayload).pipe(takeUntilDestroyed(this.destroyRef)).subscribe({ next: () => {}, error: () => {} });\n }\n\n // Enable current selection\n const enablePayload: MSystemPagesThemeInsertUpdatePayload = {\n _id: theme._id || '',\n sytm_title: theme.sytm_title || '',\n sytm_desc: theme.sytm_desc || '',\n sytm_theme_code: theme.sytm_theme_code || '',\n sytm_preview_id_fm: theme.sytm_preview_id_fm || '',\n sytm_page_id_sypg: this.pageId(),\n sytm_configuration: theme.sytm_configuration || {},\n sytm_sub_title: theme.sytm_sub_title || '',\n sytm_entity_id_syen: theme.sytm_entity_id_syen || this.appState.getActiveEntityId(),\n sytm_isselected: true,\n sytm_layout: theme.sytm_layout,\n sytm_isactive: theme.sytm_isactive ?? true\n };\n\n this.loading.set(true);\n this.themeService.updateTheme(enablePayload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: () => { this.loadThemes(); this.loading.set(false); },\n error: () => { this.loading.set(false); }\n });\n }\n\n // File upload methods for preview image\n getPreviewImageUploadData(): FileUploadData {\n return {\n altText: 'Theme Preview Image',\n cyfm_name: 'theme-preview-image',\n cyfm_alt_text: 'Theme Preview Image',\n cyfm_type: 'image',\n cyfm_permissions: ['read'],\n cyfm_tags: ['theme', 'preview', 'image']\n };\n }\n\n onPreviewImageUploadSuccess(fileId: string): void {\n console.log('Preview image uploaded successfully:', fileId);\n // Update the form control with the uploaded file ID\n this.themeForm.patchValue({\n sytm_preview_id_fm: fileId\n });\n }\n\n onPreviewImageUploadError(error: string): void {\n console.error('Preview image upload error:', error);\n this.error.set('Failed to upload preview image: ' + error);\n }\n\n onPreviewImageUploadProgress(progress: number): void {\n console.log('Preview image upload progress:', progress + '%');\n }\n}","<!-- Page Theme Container -->\r\n<div class=\"tw-flex tw-h-full tw-w-full\">\r\n \r\n <!-- Left: Form and header (60%) -->\r\n <div class=\"tw-w-full lg:tw-w-3/5 tw-flex tw-flex-col tw-border-r tw-border-gray-200\">\r\n\r\n <!-- Header Section -->\r\n <div class=\"tw-px-6 tw-py-2 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0\">\r\n\r\n <!-- Title and Back Button -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-4\">\r\n <button cideEleButton variant=\"ghost\" size=\"sm\" (click)=\"goBack();\" class=\"tw-text-gray-600 hover:tw-text-gray-900\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">arrow_back</cide-ele-icon>\r\n </button>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">palette</cide-ele-icon>\r\n <div>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Theme Management</h5>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-m-0\">Page: {{ pageTitle() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex tw-items-start\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Quick Add/Edit Form Section -->\r\n <div class=\"tw-px-6 tw-py-3 tw-bg-white tw-overflow-auto\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-2\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\r\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Theme' : 'Quick Add Theme' }}</h6>\r\n </div>\r\n </div>\r\n\r\n <!-- Form (kept as-is) -->\r\n <form [formGroup]=\"themeForm\" (ngSubmit)=\"saveTheme()\" class=\"tw-space-y-4\">\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4\">\r\n <!-- Left Side: All Input Fields -->\r\n <div class=\"tw-space-y-4\">\r\n <!-- Row 1: Theme Title and Theme Code -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_title\" formControlName=\"sytm_title\" placeholder=\"Enter theme title\" label=\"Theme Title*\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_theme_code\" formControlName=\"sytm_theme_code\" placeholder=\"Enter theme code\" label=\"Theme Code*\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Row 2: Sub Title and Active Status -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-input id=\"sytm_sub_title\" formControlName=\"sytm_sub_title\" placeholder=\"Enter sub title\" label=\"Sub Title\" size=\"sm\"></cide-ele-input>\r\n </div>\r\n <div class=\"tw-space-y-2 tw-flex tw-items-center\">\r\n <cide-ele-input\r\n id=\"sytm_isactive_cb\"\r\n type=\"checkbox\"\r\n label=\"Active\"\r\n size=\"sm\"\r\n formControlName=\"sytm_isactive\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Row 3: Description -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-textarea id=\"sytm_desc\" formControlName=\"sytm_desc\" placeholder=\"Enter theme description\" rows=\"2\" label=\"Description\" size=\"sm\"></cide-ele-textarea>\r\n </div>\r\n </div>\r\n \r\n <!-- Right Side: File Upload -->\r\n <div class=\"tw-flex tw-flex-col tw-justify-start tw-items-center tw-p-0\">\r\n <cide-ele-file-input \r\n id=\"sytm_preview_id_fm\" \r\n formControlName=\"sytm_preview_id_fm\"\r\n accept=\"image/*\"\r\n [showPreview]=\"true\"\r\n [previewBoxMode]=\"true\"\r\n [showFileName]=\"false\"\r\n previewWidth=\"180px\"\r\n previewHeight=\"120px\"\r\n placeholderText=\"Upload Preview Image\"\r\n placeholderIcon=\"image\"\r\n [autoUpload]=\"true\"\r\n [uploadData]=\"getPreviewImageUploadData()\"\r\n (uploadSuccess)=\"onPreviewImageUploadSuccess($event)\"\r\n (uploadError)=\"onPreviewImageUploadError($event)\"\r\n (uploadProgressChange)=\"onPreviewImageUploadProgress($event)\">\r\n </cide-ele-file-input>\r\n </div>\r\n </div>\r\n \r\n <!-- Configuration JSON -->\r\n <div class=\"tw-space-y-2\">\r\n <cide-ele-json-editor label=\"Configuration JSON\" formControlName=\"sytm_configuration\" [required]=\"true\" [config]=\"{\r\n showLineNumbers: true,\r\n autoFormat: true,\r\n validateOnChange: true,\r\n minHeight: 150,\r\n maxHeight: 300,\r\n placeholder: 'Enter theme configuration JSON...'\r\n }\" helperText=\"Enter valid JSON configuration for the theme\"></cide-ele-json-editor>\r\n </div>\r\n <!-- Layout Configuration + Selection -->\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n <div class=\"tw-space-y-2\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Layout & Selection</div>\r\n <!-- Selected toggle -->\r\n <div class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-md tw-px-3 tw-py-2\">\r\n <cide-ele-input\r\n id=\"sytm_isselected\"\r\n type=\"checkbox\"\r\n label=\"Selected (Default)\"\r\n size=\"sm\"\r\n formControlName=\"sytm_isselected\">\r\n </cide-ele-input>\r\n </div>\r\n <div formGroupName=\"sytm_layout\" class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-md tw-divide-y tw-overflow-hidden\">\r\n <!-- Sidebar -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_sidebar\">\r\n <cide-ele-input id=\"layout_sidebar_status\" type=\"checkbox\" label=\"Sidebar\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Header -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_header\">\r\n <cide-ele-input id=\"layout_header_status\" type=\"checkbox\" label=\"Header\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Footer -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_footer\">\r\n <cide-ele-input id=\"layout_footer_status\" type=\"checkbox\" label=\"Footer\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Breadcrumb -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_breadcrumb\">\r\n <cide-ele-input id=\"layout_breadcrumb_status\" type=\"checkbox\" label=\"Breadcrumb\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Console -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_console\">\r\n <cide-ele-input id=\"layout_console_status\" type=\"checkbox\" label=\"Console\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n <!-- Request -->\r\n <div class=\"tw-px-3 tw-py-2\" formGroupName=\"sytm_layout_request\">\r\n <cide-ele-input id=\"layout_request_status\" type=\"checkbox\" label=\"Request\" size=\"sm\" formControlName=\"status\"></cide-ele-input>\r\n </div>\r\n </div>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-pt-1\">Toggle active sections. Only one theme can be selected as default. More options can be added here later.</p>\r\n </div>\r\n \r\n <!-- Drawer Configuration -->\r\n <div class=\"tw-space-y-2\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Drawers</div>\r\n <button cideEleButton type=\"button\" size=\"xs\" variant=\"outline\" (click)=\"addDrawer()\">\r\n Add Drawer\r\n </button>\r\n </div>\r\n\r\n <div formGroupName=\"sytm_layout\">\r\n <div class=\"tw-space-y-2\" formArrayName=\"sytm_layout_drawer\">\r\n <div *ngFor=\"let drawerGrp of drawerArray.controls; let i = index\" [formGroupName]=\"i\" class=\"tw-border tw-border-gray-200 tw-rounded-md tw-p-3 tw-flex tw-items-center tw-gap-3\">\r\n <cide-ele-input id=\"drawer_active_{{i}}\" type=\"checkbox\" label=\"Active\" size=\"sm\" formControlName=\"syth_status\"></cide-ele-input>\r\n <div class=\"tw-flex-1\">\r\n <cide-ele-select\r\n id=\"drawer_config_{{i}}\"\r\n label=\"Drawer For\"\r\n size=\"sm\"\r\n [options]=\"drawerConfigOptions\"\r\n formControlName=\"syth_config_syco_for\">\r\n </cide-ele-select>\r\n </div>\r\n <button cideEleButton type=\"button\" size=\"xs\" variant=\"ghost\" (click)=\"removeDrawer(i)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n <p class=\"tw-text-xs tw-text-gray-500\">Configure multiple drawers as needed.</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-flex tw-flex-col tw-gap-2 tw-pt-4 tw-border-t tw-border-gray-200\">\r\n <div class=\"tw-flex tw-items-center tw-justify-end tw-space-x-3\">\r\n <button cideEleButton type=\"button\" variant=\"outline\" (click)=\"cancelForm()\" [disabled]=\"loading()\">Cancel</button>\r\n <button cideEleButton type=\"submit\" variant=\"primary\" leftIcon=\"add\" [disabled]=\"!themeForm.valid || loading()\" [loading]=\"loading()\">\r\n {{ isEditMode() ? 'Update Theme' : 'Create Theme' }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Right: Theme gallery (40%) -->\r\n <div class=\"tw-hidden lg:tw-flex tw-w-2/5 tw-flex-col\">\r\n <!-- (Header consolidated above) -->\r\n\r\n <!-- Gallery list -->\r\n <div class=\"tw-flex-1 tw-overflow-auto tw-bg-gray-50\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3 tw-p-4\">\r\n @for (theme of filteredThemes(); track theme._id) {\r\n <div class=\"tw-rounded-md tw-transition tw-cursor-pointer tw-relative\"\r\n [ngClass]=\"theme.sytm_isselected\r\n ? 'tw-border tw-border-blue-500 tw-ring-2 tw-ring-blue-200 tw-bg-blue-50/50'\r\n : 'tw-bg-white tw-border tw-border-gray-200 hover:tw-shadow-sm'\"\r\n (click)=\"editTheme(theme)\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-selected]=\"theme.sytm_isselected ? 'true' : 'false'\"\r\n [attr.aria-label]=\"'Edit theme ' + (theme.sytm_title || theme.sytm_theme_code)\"\r\n (keydown.enter)=\"editTheme(theme)\"\r\n (keydown.space)=\"$event.preventDefault(); editTheme(theme)\">\r\n\r\n <!-- Selected badge -->\r\n <div *ngIf=\"theme.sytm_isselected\"\r\n class=\"tw-absolute tw-top-2 tw-right-2 tw-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-rounded-full tw-bg-blue-600 tw-text-white\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">check</cide-ele-icon>\r\n </div>\r\n \r\n <div class=\"tw-aspect-[16/9] tw-bg-gray-100 tw-rounded-t-md tw-overflow-hidden tw-flex tw-items-center tw-justify-center\">\r\n @if (theme.sytm_preview_id_fm) {\r\n <img \r\n cideEleFileImage \r\n [fileId]=\"theme.sytm_preview_id_fm\" \r\n [altText]=\"'Theme Preview'\"\r\n class=\"tw-w-full tw-h-full tw-object-cover\" />\r\n } @else {\r\n <div class=\"tw-text-gray-400 tw-text-xs\">No preview</div>\r\n }\r\n </div>\r\n <div class=\"tw-p-3 tw-space-y-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"theme.sytm_title\">{{ theme.sytm_title || 'Untitled Theme' }}</div>\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" [title]=\"theme.sytm_theme_code\">{{ theme.sytm_theme_code }}</div>\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-pt-1\">\r\n <span class=\"tw-inline-flex tw-items-center tw-gap-1 tw-text-xs\" [ngClass]=\"theme.sytm_isactive ? 'tw-text-green-700' : 'tw-text-red-700'\">\r\n <span class=\"tw-w-1.5 tw-h-1.5 tw-rounded-full\" [ngClass]=\"theme.sytm_isactive ? 'tw-bg-green-500' : 'tw-bg-red-500'\"></span>\r\n {{ theme.sytm_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n <!-- Set Selected Button - Clear and Simple -->\r\n @if (theme.sytm_isselected) {\r\n <span class=\"tw-inline-flex tw-items-center tw-gap-1 tw-px-2 tw-py-1 tw-bg-green-100 tw-text-green-800 tw-rounded-md tw-text-xs tw-font-medium\">\r\n <cide-ele-icon class=\"tw-w-3 tw-h-3\">check</cide-ele-icon>\r\n Selected\r\n </span>\r\n } @else {\r\n <button cideEleButton \r\n variant=\"outline\" \r\n size=\"xs\"\r\n (click)=\"$event.stopPropagation(); setSelectedTheme(theme)\"\r\n [attr.aria-label]=\"'Select ' + (theme.sytm_title || theme.sytm_theme_code) + ' theme'\"\r\n class=\"tw-text-xs\">\r\n Select\r\n </button>\r\n }\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" (click)=\"$event.stopPropagation(); editTheme(theme)\"\r\n [attr.aria-label]=\"'Edit theme ' + (theme.sytm_title || theme.sytm_theme_code)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">edit</cide-ele-icon>\r\n </button>\r\n <button cideEleButton variant=\"ghost\" size=\"xs\" (click)=\"$event.stopPropagation(); deleteTheme(theme)\"\r\n [attr.aria-label]=\"'Delete theme ' + (theme.sytm_title || theme.sytm_theme_code)\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">delete</cide-ele-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (!loading() && filteredThemes().length === 0) {\r\n <div class=\"tw-col-span-full tw-text-center tw-text-xs tw-text-gray-500 tw-py-8\">No themes found</div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- \r\n Angular Template References for Grid Renderers (Best Practice)\r\n \r\n These ng-template elements represent the Angular best practice for custom rendering.\r\n They provide:\r\n - Type safety with template context\r\n - Component lifecycle integration\r\n - Change detection optimization\r\n - Proper event handling\r\n - Accessibility features\r\n \r\n Note: Current data grid uses string renderers for compatibility.\r\n Templates are maintained for future component enhancement.\r\n-->\r\n\r\n<!-- Theme Details Renderer Template -->\r\n<ng-template #themeDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\r\n <!-- Theme Icon -->\r\n <div class=\"tw-flex-shrink-0\">\r\n <cide-ele-icon \r\n class=\"tw-text-purple-600\" \r\n size=\"xs\">\r\n palette\r\n </cide-ele-icon>\r\n </div>\r\n \r\n <!-- Theme Details -->\r\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" \r\n [title]=\"row.sytm_title\">\r\n {{ row.sytm_title || 'Untitled' }}\r\n </div>\r\n @if (row.sytm_desc) {\r\n <div class=\"tw-text-xs tw-text-gray-500 tw-truncate\" \r\n [title]=\"row.sytm_desc\">\r\n {{ row.sytm_desc }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Theme Status Renderer Template -->\r\n<ng-template #themeStatusRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-whitespace-nowrap\"\r\n [ngClass]=\"row.sytm_isactive ? 'tw-bg-green-100 tw-text-green-800' : 'tw-bg-red-100 tw-text-red-800'\">\r\n {{ row.sytm_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getActionDropdownItems(row)\"\r\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template> ","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { \r\n cidePath, \r\n coreRoutesUrl, \r\n generateStringFromObject, \r\n hostManagerRoutesUrl,\r\n MPageElements,\r\n MPageElementsGetByIdPayload,\r\n MPageElementsDeletePayload,\r\n MPageElementsInsertUpdatePayload,\r\n MPageElementsToggleStatusPayload,\r\n MPageElementsByPageIdPayload,\r\n MPageElementsMappingDeletePayload,\r\n MPageElementsMappingInsertUpdatePayload,\r\n MPageElementsMappingByPageIdPayload,\r\n pageElementsControllerResponse,\r\n pageElementsByIdControllerResponse,\r\n pageElementsInsertUpdateControllerResponse,\r\n pageElementsDeleteControllerResponse,\r\n pageElementsToggleStatusControllerResponse,\r\n pageElementsByPageIdControllerResponse,\r\n pageElementsMappingInsertUpdateControllerResponse,\r\n pageElementsMappingDeleteControllerResponse,\r\n pageElementsMappingByPageIdControllerResponse\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideCorePageControlsService {\r\n constructor(private http: HttpClient) {\r\n console.log('CideCorePageControlsService initialized - using real API');\r\n }\r\n\r\n /**\r\n * Get control list from API\r\n */\r\n getControlList(body: MPageElements): Observable<pageElementsControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n return this.http?.get<pageElementsControllerResponse>(cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl, query]))\r\n .pipe(\r\n catchError(error => {\r\n console.error('CideCorePageControlsService API error:', error);\r\n return this.handleError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Create new control\r\n */\r\n createControl(payload: MPageElementsInsertUpdatePayload): Observable<pageElementsInsertUpdateControllerResponse> {\r\n console.log('Creating control:', payload);\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl]);\r\n return this.http.post<pageElementsInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Update existing control\r\n */\r\n updateControl(payload: MPageElementsInsertUpdatePayload): Observable<pageElementsInsertUpdateControllerResponse> {\r\n console.log('Updating control:', payload);\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl]);\r\n return this.http.post<pageElementsInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get control by ID\r\n */\r\n getControlById(id: string): Observable<pageElementsByIdControllerResponse> {\r\n console.log('Getting control by ID:', id);\r\n const payload: MPageElementsGetByIdPayload = { sype_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl, 'byId', query]);\r\n return this.http.get<pageElementsByIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get controls by page ID\r\n */\r\n getControlsByPageId(pageId: string): Observable<pageElementsByPageIdControllerResponse> {\r\n console.log('Getting controls by page ID:', pageId);\r\n const payload: MPageElementsByPageIdPayload = { sype_page_id_sypg: pageId };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl, 'byPage', query]);\r\n return this.http.get<pageElementsByPageIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Get control mappings by page ID\r\n */\r\n getControlMappingsByPageId(pageId: string): Observable<pageElementsMappingByPageIdControllerResponse> {\r\n console.log('Getting control mappings by page ID:', pageId);\r\n const payload: MPageElementsMappingByPageIdPayload = { sypem_id_sypg: pageId };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControlMapping, query]);\r\n return this.http.get<pageElementsMappingByPageIdControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Create control mapping\r\n */\r\n createControlMapping(payload: MPageElementsMappingInsertUpdatePayload): Observable<pageElementsMappingInsertUpdateControllerResponse> {\r\n console.log('Creating control mapping:', payload);\r\n \r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControlMapping]);\r\n return this.http.post<pageElementsMappingInsertUpdateControllerResponse>(url, payload)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete control mapping\r\n */\r\n deleteControlMapping(id: string): Observable<pageElementsMappingDeleteControllerResponse> {\r\n const payload: MPageElementsMappingDeletePayload = { sypem_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControlMapping, query]);\r\n return this.http.delete<pageElementsMappingDeleteControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Delete control\r\n */\r\n deleteControl(id: string): Observable<pageElementsDeleteControllerResponse> {\r\n const payload: MPageElementsDeletePayload = { sype_id: id };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl, query]);\r\n return this.http.delete<pageElementsDeleteControllerResponse>(url)\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n /**\r\n * Toggle control active status\r\n */\r\n toggleControlStatus(payload: MPageElementsToggleStatusPayload): Observable<pageElementsToggleStatusControllerResponse> {\r\n console.log('Toggling control status:', payload);\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath?.join([hostManagerRoutesUrl?.cideSuiteHost, coreRoutesUrl?.module, coreRoutesUrl?.pageControl, query]);\r\n return this.http.put<pageElementsToggleStatusControllerResponse>(url, {})\r\n .pipe(\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n\r\n\r\n /**\r\n * Handle errors\r\n */\r\n private handleError(error: unknown): Observable<never> {\r\n let errorMessage = 'An error occurred';\r\n\r\n if (error instanceof Error) {\r\n errorMessage = error.message;\r\n } else if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n\r\n console.error('Page Controls Service Error:', errorMessage);\r\n return throwError(() => new Error(errorMessage));\r\n }\r\n} ","import { Component, signal, computed, DestroyRef, inject, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\nimport { CideCorePageControlsService } from '../../services/page-controls.service';\r\nimport { AppStateHelperService } from 'cloud-ide-layout';\r\nimport { CideEleButtonComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideEleDropdownComponent, DropdownItem } from 'cloud-ide-element';\r\nimport { controlType, generateObjectFromString, ICoreSype, MPageElements, MPageElementsInsertUpdatePayload, themeSize } from 'cloud-ide-lms-model';\r\n\r\n@Component({\r\n selector: 'cide-core-page-controls',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n CideEleButtonComponent,\r\n CideInputComponent,\r\n CideSelectComponent,\r\n CideIconComponent\r\n ],\r\n templateUrl: './page-controls.component.html',\r\n styleUrls: ['./page-controls.component.scss']\r\n})\r\nexport class CideCorePageControlsComponent implements OnInit {\r\n // Dependency injection\r\n private destroyRef = inject(DestroyRef);\r\n private controlsService = inject(CideCorePageControlsService);\r\n private appState = inject(AppStateHelperService);\r\n private fb = inject(NonNullableFormBuilder);\r\n private router = inject(Router);\r\n private route = inject(ActivatedRoute);\r\n\r\n\r\n\r\n // Make Math available in template\r\n Math = Math;\r\n\r\n // Signals for reactive state management\r\n controls = signal<ICoreSype[]>([]);\r\n loading = signal(false);\r\n error = signal<string | null>(null);\r\n selectedItems = signal<string[]>([]);\r\n searchTerm = signal('');\r\n\r\n // Page information\r\n pageId = signal<string>('');\r\n pageTitle = signal<string>('');\r\n\r\n // Form state\r\n isEditMode = signal(false);\r\n editingControlId = signal<string | null>(null);\r\n retrievedControl = signal<ICoreSype | null>(null);\r\n\r\n // Control selection for new layout\r\n selectedControlId = signal<string | null>(null);\r\n\r\n // Pagination signals\r\n currentPage = signal(1);\r\n pageSize = signal(10);\r\n totalItems = signal(0);\r\n\r\n // Modern reactive forms with signals - No validators for simplicity\r\n controlForm = this.fb.group({\r\n sype_key: [''],\r\n sype_label: [''],\r\n sype_label_hide: [false],\r\n sype_auto_complete: [false], // Changed to boolean for checkbox\r\n sype_hide_helper_and_error_text: [false],\r\n sype_type: [''], // controlType\r\n sype_option_key: [''],\r\n sype_placeholder: [''],\r\n sype_min_length: [0],\r\n sype_max_length: [20],\r\n sype_regex: [''],\r\n sype_required: [false],\r\n sype_disabled: [false],\r\n sype_width: [''], // Changed to string for px values like \"20px\"\r\n sype_height: [''], // Changed to string for px values like \"20px\"\r\n sype_label_placement: ['left' as 'floating' | 'fixed'],\r\n sype_helper_text_collapse: [false],\r\n sype_default: ['' as string | number | boolean],\r\n sype_tooltip: [''],\r\n sype_size: ['sm' as themeSize], // Changed default to small\r\n sype_leading_icon: [''],\r\n sype_isactive: [true],\r\n sype_entity_id_syen: ['']\r\n });\r\n\r\n // Computed values\r\n isFormDirty = computed(() => this.controlForm.dirty);\r\n\r\n\r\n\r\n ngOnInit(): void {\r\n this.initializeComponent();\r\n }\r\n\r\n /**\r\n * Initialize component\r\n */\r\n private initializeComponent(): void {\r\n // Get page information from route\r\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\r\n const queryParams = params['query'];\r\n const queryData = generateObjectFromString(queryParams);\r\n this.pageId.set(queryData?.sypg_id || '');\r\n this.pageTitle.set(queryData?.sypg_title || '');\r\n\r\n if (this.pageId()) {\r\n this.loadControls();\r\n this.setupFormSubscriptions();\r\n this.setEntityIdFromAppState();\r\n } else {\r\n this.error.set('No page ID provided');\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Set entity ID from app state - auto-assigned internally\r\n */\r\n private setEntityIdFromAppState(): void {\r\n const entityId = this.appState.getActiveEntityId();\r\n if (entityId) {\r\n this.controlForm.patchValue({\r\n sype_entity_id_syen: entityId\r\n });\r\n // Disable the entity field since it's auto-assigned\r\n this.controlForm.get('sype_entity_id_syen')?.disable();\r\n }\r\n }\r\n\r\n /**\r\n * Load controls from API\r\n */\r\n private loadControls(): void {\r\n this.loading.set(true);\r\n this.error.set(null);\r\n\r\n const request: MPageElements = {\r\n sype_page_id_sypg: this.pageId()\r\n };\r\n\r\n this.controlsService.getControlList(request)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.controls.set(response.data || []);\r\n this.totalItems.set(response.total || 0);\r\n } else {\r\n this.error.set(response.message || 'Failed to load controls');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('Error loading controls:', error);\r\n this.error.set('Failed to load controls. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Setup form subscriptions\r\n */\r\n private setupFormSubscriptions(): void {\r\n // Watch for form changes to enable/disable save button\r\n this.controlForm.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => {\r\n // Form validation is handled by computed signals\r\n });\r\n }\r\n\r\n\r\n\r\n /**\r\n * Create new control\r\n */\r\n createControl(): void {\r\n\r\n const formValue = this.controlForm.getRawValue();\r\n const entityId = this.appState.getActiveEntityId();\r\n\r\n const newControl: MPageElementsInsertUpdatePayload = {\r\n _id: '',\r\n sype_key: formValue.sype_key,\r\n sype_page_id_sypg: this.pageId(),\r\n sype_label: formValue.sype_label,\r\n sype_label_hide: formValue.sype_label_hide,\r\n sype_auto_complete: formValue.sype_auto_complete,\r\n sype_hide_helper_and_error_text: formValue.sype_hide_helper_and_error_text,\r\n sype_type: formValue.sype_type as controlType,\r\n sype_option_key: formValue.sype_option_key,\r\n sype_placeholder: formValue.sype_placeholder,\r\n sype_min_length: formValue.sype_min_length,\r\n sype_max_length: formValue.sype_max_length,\r\n sype_regex: formValue.sype_regex,\r\n sype_required: formValue.sype_required,\r\n sype_disabled: formValue.sype_disabled,\r\n sype_width: formValue.sype_width,\r\n sype_height: formValue.sype_height,\r\n sype_label_placement: formValue.sype_label_placement,\r\n sype_helper_text_collapse: formValue.sype_helper_text_collapse,\r\n sype_default: formValue.sype_default,\r\n sype_tooltip: formValue.sype_tooltip,\r\n sype_size: formValue.sype_size,\r\n sype_leading_icon: formValue.sype_leading_icon,\r\n sype_isactive: formValue.sype_isactive,\r\n sype_entity_id_syen: entityId || formValue.sype_entity_id_syen\r\n };\r\n\r\n this.loading.set(true);\r\n this.controlsService.createControl(newControl)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.resetForm();\r\n this.loadControls();\r\n console.log('Control created successfully');\r\n } else {\r\n console.error(response.message || 'Failed to create control');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('Error creating control:', error);\r\n console.error('Failed to create control. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update existing control\r\n */\r\n updateControl(): void {\r\n if (!this.editingControlId()) {\r\n return;\r\n }\r\n\r\n const formValue = this.controlForm.getRawValue();\r\n const entityId = this.appState.getActiveEntityId();\r\n\r\n const updatedControl: MPageElementsInsertUpdatePayload = {\r\n _id: this.editingControlId()!,\r\n sype_key: formValue.sype_key,\r\n sype_page_id_sypg: this.pageId(),\r\n sype_label: formValue.sype_label,\r\n sype_label_hide: formValue.sype_label_hide,\r\n sype_auto_complete: Boolean(formValue.sype_auto_complete),\r\n sype_hide_helper_and_error_text: formValue.sype_hide_helper_and_error_text,\r\n sype_type: formValue.sype_type as controlType,\r\n sype_option_key: formValue.sype_option_key,\r\n sype_placeholder: formValue.sype_placeholder,\r\n sype_min_length: formValue.sype_min_length,\r\n sype_max_length: formValue.sype_max_length,\r\n sype_regex: formValue.sype_regex,\r\n sype_required: formValue.sype_required,\r\n sype_disabled: formValue.sype_disabled,\r\n sype_width: formValue.sype_width,\r\n sype_height: formValue.sype_height,\r\n sype_label_placement: formValue.sype_label_placement,\r\n sype_helper_text_collapse: formValue.sype_helper_text_collapse,\r\n sype_default: formValue.sype_default,\r\n sype_tooltip: formValue.sype_tooltip,\r\n sype_size: formValue.sype_size,\r\n sype_leading_icon: formValue.sype_leading_icon,\r\n sype_isactive: formValue.sype_isactive,\r\n sype_entity_id_syen: entityId || formValue.sype_entity_id_syen\r\n };\r\n\r\n this.loading.set(true);\r\n this.controlsService.updateControl(updatedControl)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.resetForm();\r\n this.loadControls();\r\n console.log('Control updated successfully');\r\n } else {\r\n console.error(response.message || 'Failed to update control');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('Error updating control:', error);\r\n console.error('Failed to update control. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Edit control\r\n */\r\n editControl(control: ICoreSype): void {\r\n this.isEditMode.set(true);\r\n this.editingControlId.set(control._id || null);\r\n this.retrievedControl.set(control);\r\n\r\n this.controlForm.patchValue({\r\n sype_key: control.sype_key,\r\n sype_label: control.sype_label,\r\n sype_label_hide: control.sype_label_hide,\r\n sype_auto_complete: control.sype_auto_complete ? true : false,\r\n sype_hide_helper_and_error_text: control.sype_hide_helper_and_error_text,\r\n sype_type: control.sype_type,\r\n sype_option_key: control.sype_option_key,\r\n sype_placeholder: control.sype_placeholder,\r\n sype_min_length: control.sype_min_length,\r\n sype_max_length: control.sype_max_length,\r\n sype_regex: control.sype_regex,\r\n sype_required: control.sype_required,\r\n sype_disabled: control.sype_disabled,\r\n sype_width: control.sype_width?.toString() || '',\r\n sype_height: control.sype_height?.toString() || '',\r\n sype_label_placement: control.sype_label_placement,\r\n sype_helper_text_collapse: control.sype_helper_text_collapse,\r\n sype_default: control.sype_default as string | number | boolean,\r\n sype_tooltip: control.sype_tooltip,\r\n sype_size: control.sype_size as themeSize,\r\n sype_leading_icon: control.sype_leading_icon,\r\n sype_isactive: control.sype_isactive,\r\n sype_entity_id_syen: String(control.sype_entity_id_syen || '')\r\n });\r\n\r\n this.controlForm.markAsPristine();\r\n }\r\n\r\n /**\r\n * Delete control\r\n */\r\n deleteControl(control: ICoreSype): void {\r\n if (confirm(`Are you sure you want to delete the control \"${control.sype_label}\"?`)) {\r\n this.loading.set(true);\r\n this.controlsService.deleteControl(control._id || '')\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.loadControls();\r\n console.log('Control deleted successfully');\r\n } else {\r\n console.error(response.message || 'Failed to delete control');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('Error deleting control:', error);\r\n console.error('Failed to delete control. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Toggle control status\r\n */\r\n toggleControlStatus(control: ICoreSype): void {\r\n this.loading.set(true);\r\n this.controlsService.toggleControlStatus({ sype_id: control._id || '', sype_isactive: !control.sype_isactive })\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.loadControls();\r\n console.log(`Control ${control.sype_isactive ? 'deactivated' : 'activated'} successfully`);\r\n } else {\r\n console.error(response.message || 'Failed to toggle control status');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('Error toggling control status:', error);\r\n console.error('Failed to toggle control status. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Save control (create or update)\r\n */\r\n saveControl(): void {\r\n if (this.isEditMode()) {\r\n this.updateControl();\r\n } else {\r\n this.createControl();\r\n }\r\n }\r\n\r\n /**\r\n * Cancel form\r\n */\r\n cancelForm(): void {\r\n this.resetForm();\r\n }\r\n\r\n /**\r\n * Go back to page list\r\n */\r\n goBack(): void {\r\n this.router.navigate(['/core/page']);\r\n }\r\n\r\n /**\r\n * Reset form\r\n */\r\n private resetForm(): void {\r\n const entityId = this.appState.getActiveEntityId();\r\n\r\n this.controlForm.reset({\r\n sype_key: '',\r\n sype_label: '',\r\n sype_label_hide: false,\r\n sype_auto_complete: false,\r\n sype_hide_helper_and_error_text: false,\r\n sype_type: '',\r\n sype_option_key: '',\r\n sype_placeholder: '',\r\n sype_min_length: 0,\r\n sype_max_length: 20,\r\n sype_regex: '',\r\n sype_required: false,\r\n sype_disabled: false,\r\n sype_width: '',\r\n sype_height: '',\r\n sype_label_placement: 'floating',\r\n sype_helper_text_collapse: false,\r\n sype_default: '' as string | number | boolean,\r\n sype_tooltip: '',\r\n sype_size: 'md',\r\n sype_leading_icon: '',\r\n sype_isactive: true,\r\n sype_entity_id_syen: entityId || ''\r\n });\r\n this.isEditMode.set(false);\r\n this.editingControlId.set(null);\r\n this.retrievedControl.set(null);\r\n this.controlForm.markAsPristine();\r\n this.controlForm.markAsUntouched();\r\n }\r\n\r\n /**\r\n * Mark form as touched to trigger validation display\r\n */\r\n private markFormAsTouched(): void {\r\n Object.keys(this.controlForm.controls).forEach(key => {\r\n const control = this.controlForm.get(key);\r\n control?.markAsTouched();\r\n });\r\n }\r\n\r\n /**\r\n * Get dropdown items for actions\r\n */\r\n getActionDropdownItems(control: ICoreSype): DropdownItem[] {\r\n return [\r\n {\r\n id: 'edit',\r\n label: 'Edit',\r\n icon: 'edit'\r\n },\r\n {\r\n id: 'toggle',\r\n label: control.sype_isactive ? 'Deactivate' : 'Activate',\r\n icon: control.sype_isactive ? 'block' : 'check_circle'\r\n },\r\n {\r\n id: 'delete',\r\n label: 'Delete',\r\n icon: 'delete'\r\n }\r\n ];\r\n }\r\n\r\n /**\r\n * Handle dropdown item click\r\n */\r\n onDropdownItemClick(item: DropdownItem, control: ICoreSype): void {\r\n switch (item.id) {\r\n case 'edit':\r\n this.editControl(control);\r\n break;\r\n case 'toggle':\r\n this.toggleControlStatus(control);\r\n break;\r\n case 'delete':\r\n this.deleteControl(control);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Close all dropdowns\r\n */\r\n closeAllDropdowns(): void {\r\n // This method can be used to close dropdowns if needed\r\n }\r\n\r\n // New methods for the vertical layout\r\n selectControl(control: ICoreSype): void {\r\n this.selectedControlId.set(control._id || null);\r\n console.log('Selected control:', control);\r\n }\r\n\r\n trackByControlId(index: number, control: ICoreSype): string {\r\n return control._id || '';\r\n }\r\n} ","<!-- Page Controls Container -->\n<div class=\"tw-flex tw-flex-col tw-h-full tw-bg-gray-50\">\n <!-- Header Section -->\n <div class=\"tw-bg-white tw-border-b tw-border-gray-200 tw-px-6 tw-py-4\">\n <div class=\"tw-flex tw-items-center tw-justify-between\">\n <div class=\"tw-flex tw-items-center tw-space-x-4\">\n <button \n cideEleButton\n variant=\"ghost\"\n size=\"sm\"\n (click)=\"goBack()\"\n class=\"tw-flex tw-items-center tw-justify-center tw-w-8 tw-h-8 tw-text-gray-600 hover:tw-text-gray-900 hover:tw-bg-gray-100 tw-rounded-md tw-transition-colors\">\n <cide-ele-icon>arrow_back</cide-ele-icon>\n </button>\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-text-xl\">settings</cide-ele-icon>\n <div>\n <h1 class=\"tw-text-xl tw-font-semibold tw-text-gray-900 tw-mb-0\">Control Management</h1>\n <p class=\"tw-text-sm tw-text-gray-500 tw-mb-0\">Page: {{ pageTitle() }}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Error Message -->\n <div class=\"tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md tw-p-4 tw-mx-6 tw-mt-4 tw-flex tw-items-start tw-space-x-3\" *ngIf=\"error()\">\n <cide-ele-icon class=\"tw-text-red-500 tw-flex-shrink-0 tw-mt-0.5\">error</cide-ele-icon>\n <div>\n <h3 class=\"tw-text-red-800 tw-font-medium tw-mb-1\">Error</h3>\n <p class=\"tw-text-red-700 tw-text-sm tw-mb-0\">{{ error() }}</p>\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-flex tw-flex-1 tw-gap-6 tw-p-6 tw-overflow-hidden lg:tw-flex-row tw-flex-col\">\n <!-- Form Section -->\n <div class=\"tw-w-full lg:tw-w-3/5 tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-flex tw-flex-col\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-p-6 tw-border-b tw-border-gray-200\">\n <cide-ele-icon class=\"tw-text-blue-600\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-0\">{{ isEditMode() ? 'Edit Control' : 'Quick Add Control' }}</h3>\n </div>\n\n <!-- Form -->\n <form [formGroup]=\"controlForm\" (ngSubmit)=\"saveControl()\" class=\"tw-flex tw-flex-col tw-flex-1 tw-p-6 tw-overflow-y-auto\">\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-4 tw-mb-6\">\n \n <!-- Basic Information Section -->\n <!-- Control Key -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_key\"\n formControlName=\"sype_key\"\n placeholder=\"Enter control key\"\n label=\"Control Key\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Control Label -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_label\"\n formControlName=\"sype_label\"\n placeholder=\"Enter control label\"\n label=\"Control Label\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Control Type -->\n <div class=\"tw-space-y-1\">\n <cide-ele-select\n id=\"sype_type\"\n formControlName=\"sype_type\"\n [options]=\"[\n { value: 'text', label: 'Text Input' },\n { value: 'textarea', label: 'Text Area' },\n { value: 'select', label: 'Select' },\n { value: 'checkbox', label: 'Checkbox' },\n { value: 'radio', label: 'Radio' },\n { value: 'date', label: 'Date' },\n { value: 'number', label: 'Number' },\n { value: 'email', label: 'Email' },\n { value: 'password', label: 'Password' },\n { value: 'file', label: 'File Upload' }\n ]\"\n label=\"Control Type\"\n size=\"sm\">\n </cide-ele-select>\n </div>\n\n <!-- Status - Checkbox aligned properly -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_isactive\"\n type=\"checkbox\"\n formControlName=\"sype_isactive\"\n label=\"Active Status\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Placeholder -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_placeholder\"\n formControlName=\"sype_placeholder\"\n placeholder=\"Enter placeholder text\"\n label=\"Placeholder\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Auto Complete - Checkbox aligned properly -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_auto_complete\"\n type=\"checkbox\"\n formControlName=\"sype_auto_complete\"\n label=\"Auto Complete\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Tooltip -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_tooltip\"\n formControlName=\"sype_tooltip\"\n placeholder=\"Enter tooltip text\"\n label=\"Tooltip\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Validation & Sizing Section -->\n <!-- Min/Max Length - Side by side -->\n <div class=\"tw-col-span-2 tw-flex tw-gap-4\">\n <div class=\"tw-flex-1 tw-space-y-1\">\n <cide-ele-input\n id=\"sype_min_length\"\n type=\"number\"\n formControlName=\"sype_min_length\"\n placeholder=\"0\"\n label=\"Min Length\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n <div class=\"tw-flex-1 tw-space-y-1\">\n <cide-ele-input\n id=\"sype_max_length\"\n type=\"number\"\n formControlName=\"sype_max_length\"\n placeholder=\"20\"\n label=\"Max Length\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Size & Label Placement - Side by side -->\n <div class=\"tw-col-span-2 tw-flex tw-gap-4\">\n <div class=\"tw-flex-1 tw-space-y-1\">\n <cide-ele-select\n id=\"sype_size\"\n formControlName=\"sype_size\"\n label=\"Size\"\n size=\"xs\"\n [options]=\"[\n { value: 'xs', label: 'XS' },\n { value: 'sm', label: 'SM' },\n { value: 'md', label: 'MD' },\n { value: 'lg', label: 'LG' },\n { value: 'xl', label: 'XL' },\n { value: 'xxl', label: 'XXL' }\n ]\">\n </cide-ele-select>\n </div>\n <div class=\"tw-flex-1 tw-space-y-1\">\n <cide-ele-select\n id=\"sype_label_placement\"\n formControlName=\"sype_label_placement\"\n label=\"Label Placement\"\n size=\"xs\"\n [options]=\"[\n { value: 'left', label: 'Left' },\n { value: 'floating', label: 'Floating' },\n { value: 'fixed', label: 'Fixed' }\n ]\">\n </cide-ele-select>\n </div>\n </div>\n\n <!-- Width & Height - Side by side -->\n <div class=\"tw-col-span-2 tw-flex tw-gap-4\">\n <div class=\"tw-flex-1 tw-space-y-1\">\n <cide-ele-input\n id=\"sype_width\"\n type=\"text\"\n formControlName=\"sype_width\"\n placeholder=\"20px\"\n label=\"Width\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n <div class=\"tw-flex-1 tw-space-y-1\">\n <cide-ele-input\n id=\"sype_height\"\n type=\"text\"\n formControlName=\"sype_height\"\n placeholder=\"20px\"\n label=\"Height\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Leading Icon -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_leading_icon\"\n formControlName=\"sype_leading_icon\"\n placeholder=\"Enter icon name\"\n label=\"Leading Icon\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Default Value -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_default\"\n formControlName=\"sype_default\"\n placeholder=\"Enter default value\"\n label=\"Default Value\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Regex Pattern -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_regex\"\n formControlName=\"sype_regex\"\n placeholder=\"Enter regex pattern\"\n label=\"Regex Pattern\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Option Key -->\n <div class=\"tw-space-y-1\">\n <cide-ele-input\n id=\"sype_option_key\"\n formControlName=\"sype_option_key\"\n placeholder=\"Enter option key\"\n label=\"Option Key\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Entity ID (Auto-assigned from AppState) - Hidden -->\n <div class=\"tw-space-y-1\" style=\"display: none;\">\n <cide-ele-input\n id=\"sype_entity_id_syen\"\n formControlName=\"sype_entity_id_syen\"\n placeholder=\"Auto-assigned from system\"\n label=\"Entity ID (Auto-assigned)\"\n size=\"sm\"\n readonly>\n </cide-ele-input>\n </div>\n\n <!-- Control Options -->\n <div class=\"tw-col-span-2 tw-space-y-1\">\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mb-3\">Control Options</h6>\n <div class=\"tw-grid tw-grid-cols-1 sm:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-3\">\n \n <!-- Required -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-input\n id=\"sype_required\"\n type=\"checkbox\"\n formControlName=\"sype_required\"\n label=\"Required\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n <!-- Disabled -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-input\n id=\"sype_disabled\"\n type=\"checkbox\"\n formControlName=\"sype_disabled\"\n label=\"Disabled\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n <!-- Hide Label -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-input\n id=\"sype_label_hide\"\n type=\"checkbox\"\n formControlName=\"sype_label_hide\"\n label=\"Hide Label\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n <!-- Hide Helper Text -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-input\n id=\"sype_hide_helper_and_error_text\"\n type=\"checkbox\"\n formControlName=\"sype_hide_helper_and_error_text\"\n label=\"Hide Helper Text\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n <!-- Helper Text Collapse -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-input\n id=\"sype_helper_text_collapse\"\n type=\"checkbox\"\n formControlName=\"sype_helper_text_collapse\"\n label=\"Collapse Helper\"\n size=\"xs\">\n </cide-ele-input>\n </div>\n\n </div>\n </div>\n\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-flex tw-justify-end tw-pt-4 tw-border-t tw-border-gray-200 tw-mt-auto sm:tw-flex-row tw-flex-col sm:tw-space-x-3 tw-space-x-0 tw-space-y-2 sm:tw-space-y-0\">\n <button \n cideEleButton\n type=\"button\"\n variant=\"outline\"\n (click)=\"cancelForm()\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n <button \n cideEleButton\n type=\"submit\"\n variant=\"primary\"\n [disabled]=\"loading()\">\n {{ isEditMode() ? 'Update Control' : 'Create Control' }}\n </button>\n </div>\n </form>\n </div>\n\n <!-- Controls List Section -->\n <div class=\"tw-w-full lg:tw-w-2/5 tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-flex tw-flex-col lg:tw-max-h-none tw-max-h-96\">\n <div class=\"tw-p-6 tw-border-b tw-border-gray-200\">\n <h3 class=\"tw-text-lg tw-font-medium tw-text-gray-900 tw-mb-1\">Page Controls</h3>\n <p class=\"tw-text-sm tw-text-gray-500 tw-mb-0\">Controls connected to this page</p>\n </div>\n \n <div class=\"tw-flex-1 tw-overflow-y-auto tw-p-4\" *ngIf=\"!loading() && controls().length > 0\">\n <div \n class=\"tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg tw-p-4 tw-mb-3 tw-cursor-pointer tw-transition-all tw-duration-200 hover:tw-shadow-md hover:tw-border-gray-300 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 focus:tw-ring-offset-2\" \n *ngFor=\"let control of controls(); trackBy: trackByControlId\"\n [class.tw-bg-blue-50]=\"selectedControlId() === control._id\"\n [class.tw-border-blue-300]=\"selectedControlId() === control._id\"\n [class.tw-shadow-md]=\"selectedControlId() === control._id\"\n (click)=\"selectControl(control)\"\n (keyup.enter)=\"selectControl(control)\"\n (keyup.space)=\"selectControl(control)\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"'Select control ' + (control.sype_label || control.sype_key)\">\n <div class=\"tw-flex tw-items-start tw-space-x-3\">\n <div class=\"tw-flex-shrink-0 tw-w-10 tw-h-10 tw-bg-blue-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-blue-600\">settings_input_component</cide-ele-icon>\n </div>\n <div class=\"tw-flex-1 tw-min-w-0\">\n <h4 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mb-1 tw-truncate\">{{ control.sype_label || control.sype_key }}</h4>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mb-2 tw-truncate\">{{ control.sype_tooltip || 'No tooltip' }}</p>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-gray-100 tw-text-gray-800\">{{ control.sype_type }}</span>\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium\" \n [class.tw-bg-red-100]=\"!control.sype_isactive\"\n [class.tw-text-red-800]=\"!control.sype_isactive\"\n [class.tw-bg-green-100]=\"control.sype_isactive\"\n [class.tw-text-green-800]=\"control.sype_isactive\">\n {{ control.sype_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n </div>\n <div class=\"tw-flex tw-items-center tw-space-x-1 tw-opacity-0 tw-transition-opacity tw-duration-200 group-hover:tw-opacity-100\" \n [class.tw-opacity-100]=\"selectedControlId() === control._id\">\n <button \n cideEleButton\n variant=\"ghost\"\n size=\"sm\"\n (click)=\"editControl(control); $event.stopPropagation()\">\n <cide-ele-icon>edit</cide-ele-icon>\n </button>\n <button \n cideEleButton\n variant=\"ghost\"\n size=\"sm\"\n (click)=\"deleteControl(control); $event.stopPropagation()\">\n <cide-ele-icon>delete</cide-ele-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-py-12 tw-text-center\" *ngIf=\"!loading() && controls().length === 0\">\n <cide-ele-icon class=\"tw-text-4xl tw-text-gray-300 tw-mb-4\">settings_input_component</cide-ele-icon>\n <p class=\"tw-text-gray-500 tw-font-medium tw-mb-1\">No controls available</p>\n <small class=\"tw-text-gray-400\">Create controls using the form on the left</small>\n </div>\n\n <div class=\"tw-flex tw-flex-col tw-items-center tw-justify-center tw-py-12 tw-text-center\" *ngIf=\"loading()\">\n <cide-ele-icon class=\"tw-text-2xl tw-text-blue-500 tw-mb-4 tw-animate-spin\">refresh</cide-ele-icon>\n <p class=\"tw-text-gray-500\">Loading controls...</p>\n </div>\n </div>\n </div>\n</div>\n\n ","// Page Management Components\r\nexport * from './components/page-list/page-list.component';\r\nexport * from './components/page-theme/page-theme.component';\r\nexport * from './components/page-controls/page-controls.component';\r\n\r\n// Page Management Services\r\nexport * from './services/page-management.service';\r\nexport * from './services/page-theme.service';\r\nexport * from './services/page-controls.service';\r\n\r\n// Page Management Interfaces - Now using model interfaces from cloud-ide-lms-model ","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n cidePath,\r\n coreRoutesUrl,\r\n hostManagerRoutesUrl,\r\n generateStringFromObject,\r\n userRoutesUrl,\r\n authUserMstListControllerResponse,\r\n AuthUserMstListPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n// Import payload types - temporarily using any until package is properly linked\r\ntype AuthUserMstCreatePayload = any;\r\ntype AuthUserMstGetByIdPayload = any;\r\ntype authUserMstCreateControllerResponse = any;\r\ntype authUserMstGetByIdControllerResponse = any;\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideCoreUserMasterService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Save or update user master data using proper API endpoint\r\n * @param data - User master data to save (either form data or AuthUserMstCreatePayload)\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateUserMaster(data: AuthUserMstCreatePayload): Observable<authUserMstCreateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n userRoutesUrl?.module,\r\n userRoutesUrl?.user\r\n ]);\r\n\r\n // Convert flat form data to nested payload structure expected by API\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Get user master by ID\r\n * @returns Observable of user master data\r\n */\r\n getUserMasterById(payload: AuthUserMstGetByIdPayload): Observable<authUserMstGetByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n userRoutesUrl.module,\r\n userRoutesUrl?.user,\r\n 'byId',\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Delete user master\r\n * @param userId - User ID to delete\r\n * @returns Observable of the delete response\r\n */\r\n deleteUserMaster(userId: string): Observable<any> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n coreRoutesUrl.module,\r\n userRoutesUrl?.user,\r\n userId\r\n ]);\r\n\r\n console.log('👤 USER MASTER SERVICE: Deleting user master with ID:', userId);\r\n\r\n // For now, return simulated response\r\n return new Observable(observer => {\r\n setTimeout(() => {\r\n observer.next({\r\n success: true,\r\n data: null,\r\n message: 'User master deleted successfully'\r\n });\r\n observer.complete();\r\n }, 500);\r\n });\r\n\r\n // Uncomment when actual API endpoint is available:\r\n // return this.http.delete(url);\r\n }\r\n\r\n /**\r\n * Get list of users using the proper API endpoint\r\n * @param payload - AuthUserMstListPayload for filtering/pagination\r\n * @returns Observable of response\r\n */\r\n getUserList(payload: AuthUserMstListPayload): Observable<authUserMstListControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n userRoutesUrl.module,\r\n userRoutesUrl?.user,\r\n query\r\n ]);\r\n\r\n console.log('🔍 USER MASTER SERVICE: Making API call to:', url);\r\n console.log('🔍 USER MASTER SERVICE: Payload:', payload);\r\n\r\n return this.http.get<authUserMstListControllerResponse>(url);\r\n }\r\n\r\n /**\r\n * Toggle user status\r\n * @param userId - User ID to toggle status\r\n * @returns Observable of response\r\n */\r\n toggleUserStatus(userId: string): Observable<any> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n userRoutesUrl.module,\r\n userRoutesUrl?.user,\r\n 'toggle-status',\r\n userId\r\n ]);\r\n\r\n console.log('🔄 USER MASTER SERVICE: Toggling status for user:', userId);\r\n\r\n return this.http.patch(url, {});\r\n }\r\n\r\n /**\r\n * Delete user\r\n * @param userId - User ID to delete\r\n * @returns Observable of response\r\n */\r\n deleteUser(userId: string): Observable<any> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n userRoutesUrl.module,\r\n userRoutesUrl?.user,\r\n userId\r\n ]);\r\n\r\n console.log('🗑️ USER MASTER SERVICE: Deleting user:', userId);\r\n\r\n return this.http.delete(url);\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { cidePath, coreRoutesUrl, hostManagerRoutesUrl } from 'cloud-ide-lms-model';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideCoreRoleSelectService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get role options for user master form\r\n * @returns Observable of role options\r\n */\r\n getRoleOptions(): Observable<any> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost, \r\n coreRoutesUrl.module, \r\n 'role-select'\r\n ]);\r\n \r\n console.log('👥 ROLE SELECT SERVICE: Making API call to:', url);\r\n \r\n // For now, return simulated data\r\n return new Observable(observer => {\r\n setTimeout(() => {\r\n observer.next({\r\n success: true,\r\n data: [\r\n { value: 'role-admin', label: 'Administrator' },\r\n { value: 'role-teacher', label: 'Teacher' },\r\n { value: 'role-student', label: 'Student' },\r\n { value: 'role-staff', label: 'Staff' },\r\n { value: 'role-parent', label: 'Parent' }\r\n ]\r\n });\r\n observer.complete();\r\n }, 300);\r\n });\r\n \r\n // Uncomment when actual API endpoint is available:\r\n // return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get role list with default parameters\r\n * @returns Observable of role list\r\n */\r\n getAllRoles(): Observable<any> {\r\n return this.getRoleOptions();\r\n }\r\n}\r\n","// User Management Services Export Index\nexport { CideCoreUserMasterService } from './user-master.service';\nexport { CideCoreRoleSelectService } from './role-select.service';\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { type Observable } from 'rxjs';\nimport {\n cidePath,\n coreRoutesUrl,\n hostManagerRoutesUrl,\n generateStringFromObject,\n type userRoleControllerResponse,\n type MUserRole,\n type userRoleByIdControllerResponse,\n type MUserRoleGetByIdPayload,\n type userRoleInsertUpdateControllerResponse,\n type MUserRoleWithRightsPayload,\n type userRoleDeleteControllerResponse,\n type MUserRoleDeletePayload,\n type userRoleToggleStatusControllerResponse,\n type MUserRoleToggleStatusPayload,\n} from 'cloud-ide-lms-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CideCoreUserRoleService {\n private readonly http = inject(HttpClient);\n\n /**\n * Get list of user roles\n * @param payload - Query parameters for filtering/pagination\n * @returns Observable of user role list response\n */\n getUserRoleList(payload: MUserRole): Observable<userRoleControllerResponse> {\n const query = generateStringFromObject(payload);\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.userRole,\n query\n ]);\n\n return this.http.get(url);\n }\n\n /**\n * Get user role by ID\n * @param payload - User role ID payload\n * @returns Observable of user role data\n */\n getUserRoleById(payload: MUserRoleGetByIdPayload): Observable<userRoleByIdControllerResponse> {\n const query = generateStringFromObject(payload);\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.userRole,\n 'byId',\n query\n ]);\n\n return this.http.get(url);\n }\n\n\n /**\n * Create or update user role\n * @param data - User role data to save\n * @returns Observable of the save response\n */\n saveUpdateUserRole(data: MUserRoleWithRightsPayload): Observable<userRoleInsertUpdateControllerResponse> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.userRole\n ]);\n\n return this.http.post(url, data);\n }\n\n\n /**\n * Delete user role\n * @param payload - User role ID payload\n * @returns Observable of the delete response\n */\n deleteUserRole(payload: MUserRoleDeletePayload): Observable<userRoleDeleteControllerResponse> {\n const query = generateStringFromObject(payload);\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.userRole,\n 'delete',\n query\n ]);\n\n return this.http.delete(url);\n }\n\n /**\n * Toggle user role status\n * @param payload - User role ID payload\n * @returns Observable of the toggle response\n */\n toggleUserRoleStatus(payload: MUserRoleToggleStatusPayload): Observable<userRoleToggleStatusControllerResponse> {\n console.log('🔄 Toggle user role status service called with payload:', payload);\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.userRole,\n 'toggle-status'\n ]);\n\n return this.http.patch(url, payload);\n }\n}\n\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, of } from 'rxjs';\r\nimport { cidePath, coreRoutesUrl, entityControllerResponse, generateStringFromObject, hostManagerRoutesUrl, CoreSystemEntity, MEntity } from 'cloud-ide-lms-model';\r\n\r\n/**\r\n * Entity Management Service for Core Project\r\n * \r\n * This service handles all entity management operations directly without dependencies on admin services.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideCoreEntityManagementService {\r\n private http = inject(HttpClient);\r\n\r\n \r\n /**\r\n * Save or update entity data using coreRoutesUrl?.entity endpoint\r\n * @param data - Entity data to save/update\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateEntity(data: CoreSystemEntity): Observable<entityControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost, \r\n coreRoutesUrl.module, \r\n coreRoutesUrl?.entity\r\n ]);\r\n \r\n console.log('🏢 ENTITY SERVICE: Making POST request to:', url);\r\n console.log('🏢 ENTITY SERVICE: Data payload:', data);\r\n\r\n return this.http.post<entityControllerResponse>(url, data);\r\n }\r\n\r\n /**\r\n * Get entity by ID\r\n * @param entityId - ID of the entity to retrieve\r\n * @returns Observable of the entity data\r\n */\r\n getEntityById(entityId: string): Observable<entityControllerResponse> {\r\n const payload: Partial<MEntity> = {\r\n syen_id: entityId\r\n };\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost, \r\n coreRoutesUrl.module, \r\n coreRoutesUrl?.entity,\r\n query\r\n ]);\r\n \r\n return this.http.get<entityControllerResponse>(url);\r\n }\r\n\r\n /**\r\n * Get list of entities using the proper API endpoint\r\n * @param body - MEntity payload for filtering/pagination\r\n * @returns Observable of entityControllerResponse\r\n */\r\n getEntityList(body: MEntity): Observable<entityControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n coreRoutesUrl.module,\r\n coreRoutesUrl.entity,\r\n query\r\n ]);\r\n\r\n console.log('🔍 ENTITY SERVICE: Making API call to:', url);\r\n console.log('🔍 ENTITY SERVICE: Payload:', body);\r\n\r\n return this.http.get(url) as Observable<entityControllerResponse>;\r\n }\r\n\r\n /**\r\n * Delete entity by ID\r\n * @param entityId - ID of the entity to delete\r\n * @returns Observable of the delete response\r\n */\r\n deleteEntity(entityId: string): Observable<entityControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost, \r\n coreRoutesUrl.module, \r\n coreRoutesUrl?.entity,\r\n entityId\r\n ]);\r\n \r\n console.log('🏢 ENTITY SERVICE: Making DELETE request to:', url);\r\n \r\n return this.http.delete<entityControllerResponse>(url);\r\n }\r\n}","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideCoreGeneralMasterTypeService } from '../../services/general-master-type.service';\nimport { CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, CideEleJsonEditorComponent, CideEleButtonComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { generateStringFromObject, ICoreSygmt } from 'cloud-ide-lms-model';\n\n@Component({\n selector: 'cide-core-general-master-type',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideInputComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent,\n CideEleJsonEditorComponent\n ],\n templateUrl: './general-master-type.component.html',\n styleUrls: []\n})\nexport class CideCoreGeneralMasterTypeComponent implements OnInit {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private typeService = inject(CideCoreGeneralMasterTypeService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n typeDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('typeDetailsRendererTemplate');\n typeStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('typeStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n types = signal<ICoreSygmt[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n\n\n // Form state\n isEditMode = signal(false);\n editingTypeId = signal<string | null>(null);\n retrievedType = signal<ICoreSygmt | null>(null);\n\n // Pagination signals\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n // Modern reactive forms with signals\n typeForm = this.fb.group({\n sygmt_code: [''],\n sygmt_title: [''],\n sygmt_desc: [''],\n sygmt_configuration: ['{}'],\n sygmt_isactive: [true],\n sygmt_id_sygmt: [''] // Parent type ID for child types\n });\n\n // Computed values\n\n isFormDirty = computed(() => this.typeForm.dirty);\n\n\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSygmt>>({\n id: 'type-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'details',\n header: 'Type Details',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'typeDetailsRenderer'\n },\n {\n key: 'sygmt_code',\n header: 'Type Code',\n type: 'text',\n width: '150px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'sygmt_isactive',\n header: 'Status',\n type: 'custom',\n width: '100px',\n truncate: false,\n align: 'center',\n renderer: 'typeStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '150px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n tree: {\n enabled: true,\n foreignKey: 'sygmt_id_sygmt',\n primaryKey: '_id'\n },\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search types...',\n searchableColumns: ['sygmt_title', 'sygmt_desc', 'sygmt_code'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 40\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: true,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none'\n });\n\n // Action handlers for grid\n actionHandlers = {\n onEdit: (item: ICoreSygmt) => this.editType(item),\n onDelete: (item: ICoreSygmt) => this.deleteType(item),\n onToggleStatus: (item: ICoreSygmt) => this.toggleTypeStatus(item)\n };\n\n ngOnInit(): void {\n this.initializeComponent();\n\n // Add form submission debugging\n this.typeForm.valueChanges.subscribe(value => {\n console.log('🔵 Form value changed:', value);\n });\n\n this.typeForm.statusChanges.subscribe(status => {\n console.log('🔵 Form status changed:', status);\n });\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n this.loadTypes();\n this.setupFormSubscriptions();\n }\n\n /**\n * Load types from API\n */\n loadTypes(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const request = {};\n\n this.typeService.getTypeList(request)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.types.set(response.data || []);\n this.totalItems.set(response.total || 0);\n this.updateGridData();\n } else {\n this.error.set(response.message || 'Failed to load types');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error loading types:', error);\n this.error.set('Failed to load types. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n\n\n /**\n * Setup form subscriptions\n */\n private setupFormSubscriptions(): void {\n // Watch for form changes to enable/disable save button\n this.typeForm.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n // Form validation is handled by computed signals\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n this.gridConfig.update(config => ({\n ...config,\n data: this.types()\n }));\n }\n\n // Computed template renderers for grid\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n typeDetailsRenderer: this.typeDetailsRendererTemplate(),\n typeStatusRenderer: this.typeStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSygmt>): void {\n switch (event.type) {\n case 'pageChange':\n if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data && 'pageSize' in event.data) {\n this.currentPage.set(event.data['pageIndex'] as number);\n this.pageSize.set(event.data['pageSize'] as number);\n this.loadTypes();\n }\n break;\n case 'search':\n this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadTypes();\n break;\n case 'refresh':\n this.loadTypes();\n break;\n case 'action':\n // Handle action events if needed\n console.log('Action event:', event);\n break;\n case 'rowClick':\n // Handle row click events if needed\n console.log('Row click event:', event);\n break;\n case 'sort':\n // Handle sort events if needed\n console.log('Sort event:', event);\n break;\n case 'export':\n // Handle export events if needed\n console.log('Export event:', event);\n break;\n case 'rowReorder':\n // Handle row reorder events if needed\n console.log('Row reorder event:', event);\n break;\n }\n }\n\n /**\n * Create new type\n */\n createType(): void {\n if (!this.typeForm.valid) {\n this.markFormAsTouched();\n return;\n }\n\n const formValue = this.typeForm.getRawValue();\n const newType: ICoreSygmt = {\n _id: '', // Empty _id for create operation\n sygmt_code: formValue.sygmt_code,\n sygmt_title: formValue.sygmt_title,\n sygmt_desc: formValue.sygmt_desc,\n sygmt_configuration: JSON.parse(formValue.sygmt_configuration),\n sygmt_isactive: formValue.sygmt_isactive\n };\n\n this.loading.set(true);\n this.typeService.saveType(newType)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.cancelForm();\n this.loadTypes();\n console.log('✅ Type created successfully');\n } else {\n console.error('❌ Failed to create type:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error creating type:', error);\n console.error('❌ Failed to create type. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update existing type\n */\n updateType(): void {\n console.log('🔵 updateType called');\n console.log('🔵 form valid:', this.typeForm.valid);\n console.log('🔵 editingTypeId:', this.editingTypeId());\n\n if (!this.typeForm.valid || !this.editingTypeId()) {\n console.log('🔵 Form validation failed or no editing ID');\n this.markFormAsTouched();\n return;\n }\n\n const formValue = this.typeForm.getRawValue();\n const updatedType: ICoreSygmt = {\n _id: this.editingTypeId()!, // Include _id for update operation\n sygmt_code: formValue.sygmt_code,\n sygmt_title: formValue.sygmt_title,\n sygmt_desc: formValue.sygmt_desc,\n sygmt_configuration: JSON.parse(formValue.sygmt_configuration || '{}'),\n sygmt_isactive: formValue.sygmt_isactive\n };\n\n console.log('🔵 Making API call to update type:', updatedType);\n this.loading.set(true);\n this.typeService.saveType(updatedType)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('🔵 API response received:', response);\n if (response.success) {\n this.cancelForm();\n this.loadTypes();\n console.log('✅ Type updated successfully');\n } else {\n console.error('❌ Failed to update type:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('🔵 API error:', error);\n console.error('❌ Failed to update type. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Edit type\n */\n editType(type: ICoreSygmt): void {\n this.isEditMode.set(true);\n this.editingTypeId.set(type._id || \"\");\n this.retrievedType.set(type);\n\n this.typeForm.patchValue({\n sygmt_code: type.sygmt_code,\n sygmt_title: type.sygmt_title,\n sygmt_desc: type.sygmt_desc,\n sygmt_configuration: JSON.stringify(type.sygmt_configuration, null, 2),\n sygmt_isactive: type.sygmt_isactive\n });\n\n this.typeForm.markAsPristine();\n }\n\n /**\n * Delete type\n */\n deleteType(type: ICoreSygmt): void {\n if (confirm(`Are you sure you want to delete the type \"${type.sygmt_title}\"?`)) {\n this.loading.set(true);\n this.typeService.deleteType(type._id || \"\")\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadTypes();\n console.log('✅ Type deleted successfully');\n } else {\n console.error('❌ Failed to delete type:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error deleting type:', error);\n console.error('❌ Failed to delete type. Please try again.');\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Toggle type status\n */\n toggleTypeStatus(type: ICoreSygmt): void {\n this.loading.set(true);\n this.typeService.toggleTypeStatus({ sygmt_id: type._id || \"\" })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadTypes();\n console.log(`✅ Type ${type.sygmt_isactive ? 'deactivated' : 'activated'} successfully`);\n } else {\n console.error('❌ Failed to toggle type status:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error toggling type status:', error);\n console.error('❌ Failed to toggle type status. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Navigate to general master management for this type\n */\n navigateToGeneralMaster(type: ICoreSygmt): void {\n const payload = generateStringFromObject({\n sygmt_id: type._id,\n sygmt_title: type.sygmt_title\n });\n this.router.navigate(['control-panel', 'general_master_entry', payload]);\n }\n\n /**\n * Handle form submission event\n */\n onSubmit(event: Event): void {\n event.preventDefault();\n console.log('🔵 Form onSubmit event triggered');\n this.saveType();\n }\n\n /**\n * Save type (create or update)\n */\n saveType(): void {\n console.log('🔵 saveType called');\n console.log('🔵 isEditMode:', this.isEditMode());\n console.log('🔵 editingTypeId:', this.editingTypeId());\n console.log('🔵 form valid:', this.typeForm.valid);\n console.log('🔵 form values:', this.typeForm.getRawValue());\n console.log('🔵 form dirty:', this.typeForm.dirty);\n console.log('🔵 form pristine:', this.typeForm.pristine);\n console.log('🔵 form touched:', this.typeForm.touched);\n\n if (this.isEditMode()) {\n console.log('🔵 Calling updateType');\n this.updateType();\n } else {\n console.log('🔵 Calling createType');\n this.createType();\n }\n }\n\n /**\n * Cancel form (reset to defaults and exit edit mode)\n */\n cancelForm(): void {\n this.typeForm.reset({\n sygmt_code: '',\n sygmt_title: '',\n sygmt_desc: '',\n sygmt_configuration: '{}',\n sygmt_isactive: true,\n sygmt_id_sygmt: '' // Clear parent type ID\n });\n this.isEditMode.set(false);\n this.editingTypeId.set(null);\n this.retrievedType.set(null);\n this.typeForm.markAsPristine();\n this.typeForm.markAsUntouched();\n }\n\n /**\n * Mark form as touched to trigger validation display\n */\n private markFormAsTouched(): void {\n Object.keys(this.typeForm.controls).forEach(key => {\n const control = this.typeForm.get(key);\n control?.markAsTouched();\n });\n }\n\n /**\n * Clear parent type relationship\n */\n clearParentType(): void {\n this.typeForm.patchValue({\n sygmt_id_sygmt: ''\n });\n console.log('🔵 Parent type relationship cleared');\n }\n\n /**\n * Get dropdown configuration with portal support\n */\n getDropdownConfig() {\n return { triggerIcon: 'more_vert', triggerSize: 'sm' as const };\n }\n\n /**\n * Get dropdown items for actions\n */\n getActionDropdownItems(type: ICoreSygmt): DropdownItem[] {\n const items = [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n disabled: false\n },\n {\n id: 'addChild',\n label: 'Add Child',\n icon: 'add',\n disabled: false\n },\n {\n id: 'general-master',\n label: 'General Master',\n icon: 'list',\n disabled: false\n },\n {\n id: 'toggle',\n label: type.sygmt_isactive ? 'Deactivate' : 'Activate',\n icon: type.sygmt_isactive ? 'block' : 'check_circle',\n disabled: false\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n disabled: false\n }\n ];\n\n return items;\n }\n\n /**\n * Get parent type display name\n */\n getParentTypeDisplay(): string {\n const parentId = this.typeForm.get('sygmt_id_sygmt')?.value;\n if (!parentId) return '';\n\n const parentType = this.types().find(t => t._id === parentId);\n return parentType ? (parentType.sygmt_title || 'Unknown Parent') : 'Unknown Parent';\n }\n\n /**\n * Handle adding a child type\n */\n onAddChild(parentType: ICoreSygmt): void {\n console.log('🔵 onAddChild called with:', parentType);\n console.log('🔵 Parent title:', parentType.sygmt_title);\n\n // Clear edit mode and retrieved item when adding a child\n this.isEditMode.set(false);\n this.editingTypeId.set(null);\n this.retrievedType.set(null);\n\n // Reset form and pre-fill with parent context\n this.typeForm.patchValue({\n sygmt_code: '',\n sygmt_title: '',\n sygmt_desc: '',\n sygmt_configuration: '{}',\n sygmt_isactive: true,\n sygmt_id_sygmt: parentType._id // Set parent type ID\n });\n\n // Store the parent type for reference (you can display this in the UI)\n console.log('🔵 Ready to add child type for parent:', parentType.sygmt_title);\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, row: ICoreSygmt): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n console.log('🔵 Calling editType with:', row);\n this.editType(row);\n break;\n case 'addChild':\n console.log('🔵 Calling onAddChild with:', row);\n this.onAddChild(row);\n break;\n case 'general-master':\n console.log('🔵 Calling navigateToGeneralMaster with:', row);\n this.navigateToGeneralMaster(row);\n break;\n case 'toggle':\n console.log('🔵 Calling toggleTypeStatus with:', row);\n this.toggleTypeStatus(row);\n break;\n case 'delete':\n console.log('🔵 Calling deleteType with:', row);\n this.deleteType(row);\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n // Close all dropdowns after action\n this.closeAllDropdowns();\n }\n\n\n\n\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n // Close all dropdowns by clicking outside\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n} ","<!-- General Master Type Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Type' : 'General Master\n Type Management' }}</h6>\n </div>\n\n <!-- Parent Type Info (shown when adding child) -->\n @if (typeForm.get('sygmt_id_sygmt')?.value) {\n <div\n class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <span class=\"tw-text-sm tw-text-blue-600 tw-font-medium\">{{ isEditMode() ? 'Parent:' : 'Creating child\n under:' }}</span>\n <span class=\"tw-text-sm tw-text-blue-800 tw-font-semibold\">{{ getParentTypeDisplay() }}</span>\n </div>\n <button cideEleButton variant=\"ghost\" size=\"xs\" type=\"button\" (click)=\"clearParentType()\"\n class=\"tw-text-blue-400 hover:tw-text-blue-600\">\n <svg class=\"tw-w-4 tw-h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n }\n </div>\n\n <form [formGroup]=\"typeForm\" (ngSubmit)=\"onSubmit($event)\" class=\"tw-space-y-2 tw-relative\">\n <!-- Hidden field for parent type ID -->\n <input type=\"hidden\" formControlName=\"sygmt_id_sygmt\">\n\n <!-- First Row - Basic fields -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-6 tw-gap-2\">\n <!-- Type Code -->\n <div class=\"lg:tw-col-span-1\">\n <cide-ele-input formControlName=\"sygmt_code\" label=\"Type Code*\" placeholder=\"Enter type code\" size=\"sm\"\n [maxlength]=\"40\">\n </cide-ele-input>\n </div>\n\n <!-- Type Title -->\n <div class=\"lg:tw-col-span-2\">\n <cide-ele-input formControlName=\"sygmt_title\" label=\"Type Title*\" placeholder=\"Enter type title\" size=\"sm\"\n [maxlength]=\"100\">\n </cide-ele-input>\n </div>\n\n <!-- Active Status -->\n <div class=\"lg:tw-col-span-1 tw-flex tw-items-center tw-pt-0\">\n <cide-ele-input formControlName=\"sygmt_isactive\" type=\"checkbox\" label=\"Active\" size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n <!-- Second Row - JSON Configuration and Description/Save side by side -->\n <div class=\"tw-flex tw-gap-4\">\n <!-- JSON Configuration (60% width) -->\n <div class=\"tw-w-3/5\">\n <cide-ele-json-editor formControlName=\"sygmt_configuration\" label=\"Configuration*\" size=\"sm\">\n </cide-ele-json-editor>\n </div>\n\n <!-- Description and Save Button (40% width) -->\n <div class=\"tw-w-2/5 tw-flex tw-flex-col tw-space-y-4\">\n <!-- Description -->\n <div class=\"tw-flex-1\">\n <cide-ele-textarea formControlName=\"sygmt_desc\" label=\"Description\" placeholder=\"Enter description\"\n size=\"sm\" [maxlength]=\"255\" [rows]=\"4\">\n </cide-ele-textarea>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-space-x-2\">\n <button cideEleButton variant=\"outline\" size=\"sm\" type=\"button\" (click)=\"cancelForm()\"\n [disabled]=\"loading()\" class=\"tw-px-4 tw-py-2\">\n Cancel\n </button>\n <button cideEleButton variant=\"primary\" size=\"sm\" type=\"submit\" [disabled]=\"loading()\"\n class=\"tw-px-4 tw-py-2\" [leftIcon]=\"isEditMode() ? 'edit' : 'add'\">\n {{ isEditMode() ? 'Update' : 'Save' }}\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-3 tw-p-3 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-4 tw-h-4 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-2\">\n <h3 class=\"tw-text-xs tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-xs tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n\n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Template Renderers -->\n<ng-template #typeDetailsRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col\">\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.sygmt_title || 'N/A' }}</div>\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate tw-max-w-xs\" title=\"{{ row.sygmt_desc || 'No description' }}\">{{\n row.sygmt_desc || 'No description' }}</div>\n </div>\n</ng-template>\n\n<ng-template #typeStatusRendererTemplate let-row=\"row\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium\"\n [class.tw-bg-green-100]=\"row.sygmt_isactive\" [class.tw-text-green-800]=\"row.sygmt_isactive\"\n [class.tw-bg-red-100]=\"!row.sygmt_isactive\" [class.tw-text-red-800]=\"!row.sygmt_isactive\">\n {{ row.sygmt_isactive ? 'Active' : 'Inactive' }}\n </span>\n</ng-template>\n\n\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\n <cide-ele-dropdown [items]=\"getActionDropdownItems(row)\" [config]=\"getDropdownConfig()\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template>","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Validators, ReactiveFormsModule, NonNullableFormBuilder, FormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideCoreGeneralMasterService } from '../../services/general-master.service';\nimport { CideCoreGeneralMasterTypeService } from '../../services/general-master-type.service';\nimport { CideEleDataGridComponent, CideIconComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, CideEleJsonEditorComponent, CideEleButtonComponent } from 'cloud-ide-element';\nimport { TemplateContext } from 'cloud-ide-element';\nimport { generateObjectFromString, ICoreSygms, IGeneralMasterListRequest } from 'cloud-ide-lms-model';\nimport { AppStateHelperService } from 'cloud-ide-layout';\n\n/**\n * General Master Component\n * \n * Note: This component now uses the new IGeneralMasterListRequest interface\n * which only supports:\n * - sygms_id_sygmt: Filter by master type\n * - sygms_entity_id_syen: Filter by entity (with hierarchical lookup)\n * \n * Features like search, pagination, and parent filtering are not supported\n * in the current interface and would need backend implementation.\n */\n@Component({\n selector: 'cide-core-general-master',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleButtonComponent,\n CideEleDataGridComponent,\n CideInputComponent,\n CideTextareaComponent,\n CideIconComponent,\n CideEleDropdownComponent,\n CideEleJsonEditorComponent\n ],\n templateUrl: './general-master.component.html',\n styleUrls: []\n})\nexport class CideCoreGeneralMasterComponent implements OnInit {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private masterService = inject(CideCoreGeneralMasterService);\n private typeService = inject(CideCoreGeneralMasterTypeService);\n private fb = inject(NonNullableFormBuilder);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private appState = inject(AppStateHelperService);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n masterDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('masterDetailsRendererTemplate');\n masterStatusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('masterStatusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n // Make Math available in template\n Math = Math;\n\n // Signals for reactive state management\n masters = signal<ICoreSygms[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n selectedParentMaster = signal<string>('');\n\n // Type information\n typeId = signal<string>('');\n typeTitle = signal<string>('');\n currentType = signal<ICoreSygms | null>(null);\n\n // Form state\n isEditMode = signal(false);\n editingMasterId = signal<string | null>(null);\n retrievedMaster = signal<ICoreSygms | null>(null);\n\n // Pagination signals\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n\n // Modern reactive forms with signals\n masterForm = this.fb.group({\n sygms_code: ['', [Validators.required, Validators.maxLength(40)]],\n sygms_title: ['', [Validators.required, Validators.maxLength(150)]],\n sygms_desc: ['', [Validators.maxLength(500)]],\n sygms_configuration: ['{}', [Validators.required]],\n sygms_id_sygms: [''],\n sygms_entity_id_syen: [this.appState.getActiveEntityId()],\n sygms_isactive: [true]\n });\n\n // Computed values\n\n isFormDirty = computed(() => this.masterForm.dirty);\n\n // Parent master options for dropdown\n parentMasterOptions = signal<{ value: string; label: string }[]>([]);\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<ICoreSygms>>({\n id: 'master-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'details',\n header: 'Master Details',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'masterDetailsRenderer'\n },\n {\n key: 'sygms_code',\n header: 'Master Code',\n type: 'text',\n width: '150px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'sygms_isactive',\n header: 'Status',\n type: 'custom',\n width: '100px',\n truncate: false,\n align: 'center',\n renderer: 'masterStatusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '150px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search masters...',\n searchableColumns: ['sygms_title', 'sygms_desc', 'sygms_code'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n tree: {\n enabled: true,\n primaryKey: '_id',\n foreignKey: 'sygms_id_sygms',\n childrenKey: 'children',\n levelKey: 'level',\n expandedKey: 'expanded',\n hasChildrenKey: 'hasChildren'\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none'\n });\n\n // Action handlers for grid\n actionHandlers = {\n onEdit: (item: ICoreSygms) => this.editMaster(item),\n onDelete: (item: ICoreSygms) => this.deleteMaster(item),\n onToggleStatus: (item: ICoreSygms) => this.toggleMasterStatus(item)\n };\n\n ngOnInit(): void {\n this.initializeComponent();\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n // Get type information from route\n this.route.params.subscribe(params => {\n const payload = generateObjectFromString(params['query'] || '');\n this.typeId.set(payload.sygmt_id || '');\n this.typeTitle.set(payload.sygmt_title || '');\n\n if (this.typeId()) {\n this.loadTypeDetails();\n this.loadMasters();\n this.loadParentMasterOptions();\n this.setupFormSubscriptions();\n } else {\n this.error.set('No type ID provided');\n }\n });\n }\n\n /**\n * Load type details\n */\n private loadTypeDetails(): void {\n this.typeService.getTypeById(this.typeId())\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.currentType.set(response.data as ICoreSygms);\n }\n },\n error: (error) => {\n console.error('Error loading type details:', error);\n }\n });\n }\n\n /**\n * Load masters from API\n */\n loadMasters(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const payload: IGeneralMasterListRequest = {\n ...(this.typeId() && { sygms_id_sygmt: this.typeId() })\n // Note: search, pagination, and parent_id are not supported in the new interface\n // These would need to be implemented in the backend if needed\n };\n\n this.masterService.getMasterList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.masters.set(response.data || []);\n this.totalItems.set(response.total || 0);\n this.updateGridData();\n } else {\n this.error.set(response.message || 'Failed to load masters');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error loading masters:', error);\n this.error.set('Failed to load masters. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Load masters by entity ID\n */\n loadMastersByEntity(entityId: string): void {\n this.loading.set(true);\n this.error.set(null);\n\n const payload: IGeneralMasterListRequest = {\n sygms_entity_id_syen: entityId,\n ...(this.typeId() && { sygms_id_sygmt: this.typeId() })\n };\n\n this.masterService.getMasterList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.masters.set(response.data || []);\n this.totalItems.set(response.total || 0);\n this.updateGridData();\n } else {\n this.error.set(response.message || 'Failed to load masters');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error loading masters by entity:', error);\n this.error.set('Failed to load masters. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Load parent master options for dropdown\n */\n private loadParentMasterOptions(): void {\n const payload: IGeneralMasterListRequest = {\n ...(this.typeId() && { sygms_id_sygmt: this.typeId() })\n };\n\n this.masterService.getMasterList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n const options = [\n { value: '', label: '-- Select Parent Master --' },\n ...(response.data || []).map(master => ({\n value: master._id || \"\",\n label: master.sygms_title || \"\"\n }))\n ];\n this.parentMasterOptions.set(options);\n }\n },\n error: (error) => {\n console.error('Error loading parent master options:', error);\n }\n });\n }\n\n /**\n * Setup form subscriptions\n */\n private setupFormSubscriptions(): void {\n // Watch for form changes to enable/disable save button\n this.masterForm.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n // Form validation is handled by computed signals\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n this.gridConfig.update(config => ({\n ...config,\n data: this.masters()\n }));\n }\n\n\n\n // Computed template renderers for grid\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n masterDetailsRenderer: this.masterDetailsRendererTemplate(),\n masterStatusRenderer: this.masterStatusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<ICoreSygms>): void {\n switch (event.type) {\n case 'pageChange':\n if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data && 'pageSize' in event.data) {\n this.currentPage.set(event.data['pageIndex'] as number);\n this.pageSize.set(event.data['pageSize'] as number);\n this.loadMasters();\n }\n break;\n case 'search':\n this.searchTerm.set(event.data as string);\n this.currentPage.set(1);\n this.loadMasters();\n break;\n case 'refresh':\n this.loadMasters();\n break;\n case 'action':\n // Handle action events if needed\n console.log('Action event:', event);\n break;\n case 'rowClick':\n // Handle row click events if needed\n console.log('Row click event:', event);\n break;\n case 'sort':\n // Handle sort events if needed\n console.log('Sort event:', event);\n break;\n case 'export':\n // Handle export events if needed\n console.log('Export event:', event);\n break;\n case 'rowReorder':\n // Handle row reorder events if needed\n console.log('Row reorder event:', event);\n break;\n }\n }\n\n /**\n * Create new master\n */\n createMaster(): void {\n if (!this.masterForm.valid) {\n this.markFormAsTouched();\n return;\n }\n\n const formValue = this.masterForm.getRawValue();\n const newMaster: ICoreSygms = {\n _id: '',\n sygms_code: formValue.sygms_code,\n sygms_id_sygmt: this.typeId(),\n sygms_title: formValue.sygms_title,\n sygms_desc: formValue.sygms_desc,\n sygms_configuration: JSON.parse(formValue.sygms_configuration),\n sygms_id_sygms: formValue.sygms_id_sygms || undefined,\n sygms_entity_id_syen: this.appState.getActiveEntityId() || undefined,\n sygms_isactive: formValue.sygms_isactive\n };\n\n this.loading.set(true);\n this.masterService.createMaster(newMaster)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.resetForm();\n this.loadMasters();\n this.loadParentMasterOptions();\n console.log('✅ Master created successfully');\n } else {\n console.error('❌ Failed to create master:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error creating master:', error);\n console.error('❌ Failed to create master. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update existing master\n */\n updateMaster(): void {\n if (!this.masterForm.valid || !this.editingMasterId()) {\n this.markFormAsTouched();\n return;\n }\n\n const formValue = this.masterForm.getRawValue();\n const updatedMaster: ICoreSygms = {\n _id: this.editingMasterId()!,\n sygms_code: formValue.sygms_code,\n sygms_id_sygmt: this.typeId(),\n sygms_title: formValue.sygms_title,\n sygms_desc: formValue.sygms_desc,\n sygms_configuration: JSON.parse(formValue.sygms_configuration),\n sygms_id_sygms: formValue.sygms_id_sygms || undefined,\n sygms_entity_id_syen: this.appState.getActiveEntityId() || undefined,\n sygms_isactive: formValue.sygms_isactive\n };\n\n this.loading.set(true);\n this.masterService.updateMaster(this.editingMasterId()!, updatedMaster)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.resetForm();\n this.loadMasters();\n this.loadParentMasterOptions();\n console.log('✅ Master updated successfully');\n } else {\n console.error('❌ Failed to update master:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error updating master:', error);\n console.error('❌ Failed to update master. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Edit master\n */\n editMaster(master: ICoreSygms): void {\n this.isEditMode.set(true);\n this.editingMasterId.set(master._id || \"\");\n this.retrievedMaster.set(master);\n\n this.masterForm.patchValue({\n sygms_code: master.sygms_code,\n sygms_title: master.sygms_title,\n sygms_desc: master.sygms_desc,\n sygms_configuration: JSON.stringify(master.sygms_configuration, null, 2),\n sygms_id_sygms: master.sygms_id_sygms || '',\n sygms_isactive: master.sygms_isactive\n });\n\n this.masterForm.markAsPristine();\n }\n\n /**\n * Delete master\n */\n deleteMaster(master: ICoreSygms): void {\n if (confirm(`Are you sure you want to delete the master \"${master.sygms_title}\"?`)) {\n this.loading.set(true);\n this.masterService.deleteMaster(master._id || \"\")\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadMasters();\n this.loadParentMasterOptions();\n console.log('✅ Master deleted successfully');\n } else {\n console.error('❌ Failed to delete master:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error deleting master:', error);\n console.error('❌ Failed to delete master. Please try again.');\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Toggle master status\n */\n toggleMasterStatus(master: ICoreSygms): void {\n this.loading.set(true);\n this.masterService.toggleMasterStatus(master._id || \"\")\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadMasters();\n console.log(`✅ Master ${master.sygms_isactive ? 'deactivated' : 'activated'} successfully`);\n } else {\n console.error('❌ Failed to toggle master status:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error toggling master status:', error);\n console.error('❌ Failed to toggle master status. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Reset to parent (delete entity-specific override)\n */\n resetToParent(master: ICoreSygms): void {\n if (confirm(`Are you sure you want to reset \"${master.sygms_title}\" to parent values?`)) {\n this.loading.set(true);\n this.masterService.deleteMaster(master._id || \"\")\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadMasters();\n console.log('✅ Master reset to parent successfully');\n } else {\n console.error('❌ Failed to reset master:', response.message);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error resetting master:', error);\n console.error('❌ Failed to reset master. Please try again.');\n this.loading.set(false);\n }\n });\n }\n }\n\n /**\n * Save master (create or update)\n */\n saveMaster(): void {\n if (this.isEditMode()) {\n this.updateMaster();\n } else {\n this.createMaster();\n }\n }\n\n /**\n * Cancel form\n */\n cancelForm(): void {\n this.resetForm();\n }\n\n /**\n * Go back to type list\n */\n goBack(): void {\n this.router.navigate(['/control-panel/general-master-type']);\n }\n\n /**\n * Reset form\n */\n resetForm(): void {\n this.masterForm.reset({\n sygms_code: '',\n sygms_title: '',\n sygms_desc: '',\n sygms_configuration: '{}',\n sygms_id_sygms: '',\n sygms_isactive: true\n });\n this.isEditMode.set(false);\n this.editingMasterId.set(null);\n this.retrievedMaster.set(null);\n this.masterForm.markAsPristine();\n this.masterForm.markAsUntouched();\n }\n\n /**\n * Mark form as touched to trigger validation display\n */\n private markFormAsTouched(): void {\n Object.keys(this.masterForm.controls).forEach(key => {\n const control = this.masterForm.get(key);\n control?.markAsTouched();\n });\n }\n\n /**\n * Get dropdown configuration with portal support\n */\n getDropdownConfig() {\n return {};\n }\n\n /**\n * Get dropdown items for actions\n */\n getActionDropdownItems(master: ICoreSygms): DropdownItem[] {\n const items: DropdownItem[] = [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n disabled: false\n },\n {\n id: 'addChild',\n label: 'Add Child',\n icon: 'add',\n disabled: false\n },\n {\n id: 'toggle',\n label: master.sygms_isactive ? 'Deactivate' : 'Activate',\n icon: master.sygms_isactive ? 'block' : 'check_circle',\n disabled: false\n }\n ];\n\n // Add reset to parent option if entity-specific\n if (master.sygms_entity_id_syen) {\n items.push({\n id: 'reset',\n label: 'Reset to Parent',\n icon: 'restore',\n disabled: false\n });\n }\n\n items.push({\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n disabled: false\n });\n\n return items;\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, row: ICoreSygms): void {\n console.log('🔵 onDropdownItemClick called with:', item, row);\n\n switch (item.id) {\n case 'edit':\n console.log('🔵 Calling editMaster with:', row);\n this.editMaster(row);\n break;\n case 'addChild':\n console.log('🔵 Calling onAddChild with:', row);\n this.onAddChild(row);\n break;\n case 'toggle':\n console.log('🔵 Calling toggleMasterStatus with:', row);\n this.toggleMasterStatus(row);\n break;\n case 'reset':\n console.log('🔵 Calling resetToParent with:', row);\n this.resetToParent(row);\n break;\n case 'delete':\n console.log('🔵 Calling deleteMaster with:', row);\n this.deleteMaster(row);\n break;\n default:\n console.log('🔵 Unknown action:', item.id);\n }\n\n // Close all dropdowns after action\n this.closeAllDropdowns();\n }\n\n /**\n * Add child master\n */\n onAddChild(parentMaster: ICoreSygms): void {\n console.log('🔵 onAddChild called with:', parentMaster);\n console.log('🔵 Parent title:', parentMaster.sygms_title);\n\n // Clear edit mode and retrieved item when adding a child\n this.isEditMode.set(false);\n this.editingMasterId.set(null);\n this.retrievedMaster.set(null);\n\n // Reset form and pre-fill with parent context\n this.masterForm.patchValue({\n sygms_code: '',\n sygms_title: '',\n sygms_desc: '',\n sygms_configuration: '{}',\n sygms_id_sygms: parentMaster._id, // Set parent master ID\n sygms_isactive: true\n });\n\n // Store the parent master for reference (you can display this in the UI)\n console.log('🔵 Ready to add child master for parent:', parentMaster.sygms_title);\n }\n\n /**\n * Get parent master display name\n */\n getParentMasterDisplay(): string {\n const parentId = this.masterForm.get('sygms_id_sygms')?.value;\n if (!parentId) return 'Unknown Parent';\n \n const parentMaster = this.masters().find(master => master._id === parentId);\n return parentMaster?.sygms_title || 'Unknown Parent';\n }\n\n /**\n * Clear parent master from form\n */\n clearParentMaster(): void {\n this.masterForm.patchValue({\n sygms_id_sygms: ''\n });\n }\n\n /**\n * Close all dropdowns\n */\n private closeAllDropdowns(): void {\n // Close all dropdowns by clicking outside\n const event = new MouseEvent('click', { bubbles: true });\n document.dispatchEvent(event);\n }\n} ","<!-- General Master Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Quick Add Form Section -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-white\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-0\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-mb-3\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">{{ isEditMode() ? 'Edit Master' : 'Quick Add Master' }}</h6>\n </div>\n \n <!-- Parent Master Info Box -->\n @if (masterForm.get('sygms_id_sygms')?.value) {\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-px-4 tw-py-1 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">account_tree</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-blue-800\">Adding Child</span>\n <span class=\"tw-text-xs tw-text-blue-700\">\n Parent: <span class=\"tw-font-medium\">{{ getParentMasterDisplay() }}</span>\n </span>\n <button \n type=\"button\"\n (click)=\"clearParentMaster()\"\n class=\"tw-text-sm tw-text-blue-600 hover:tw-text-blue-800 hover:tw-bg-blue-100 tw-rounded tw-px-1\">\n ×\n </button>\n </div>\n }\n </div>\n \n <form [formGroup]=\"masterForm\" class=\"tw-space-y-2\">\n \n <!-- First Row - Basic fields -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-6 tw-gap-2\">\n <!-- Master Code -->\n <div class=\"lg:tw-col-span-1\">\n <cide-ele-input \n formControlName=\"sygms_code\" \n label=\"Master Code*\" \n placeholder=\"Enter master code\"\n size=\"sm\"\n [required]=\"true\" \n [maxlength]=\"40\">\n </cide-ele-input>\n </div>\n \n <!-- Master Title -->\n <div class=\"lg:tw-col-span-3\">\n <cide-ele-input \n formControlName=\"sygms_title\" \n label=\"Master Title*\" \n placeholder=\"Enter master title\"\n size=\"sm\"\n [required]=\"true\" \n [maxlength]=\"150\">\n </cide-ele-input>\n </div>\n \n <!-- Active Status -->\n <div class=\"lg:tw-col-span-1 tw-flex tw-items-center tw-pt-0\">\n <cide-ele-input \n formControlName=\"sygms_isactive\"\n type=\"checkbox\"\n label=\"Active\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n \n <!-- Third Row - JSON Configuration and Description/Save side by side -->\n <div class=\"tw-flex tw-gap-4\">\n <!-- JSON Configuration (60% width) -->\n <div class=\"tw-w-3/5\">\n <cide-ele-json-editor \n formControlName=\"sygms_configuration\" \n label=\"Configuration*\" \n size=\"sm\"\n [required]=\"true\">\n </cide-ele-json-editor>\n </div>\n \n <!-- Description and Save Button (40% width) -->\n <div class=\"tw-w-2/5 tw-flex tw-flex-col tw-space-y-4\">\n <!-- Description -->\n <div class=\"tw-flex-1\">\n <cide-ele-textarea \n formControlName=\"sygms_desc\" \n label=\"Description\" \n placeholder=\"Enter description\"\n size=\"sm\"\n [maxlength]=\"500\" \n [rows]=\"4\">\n </cide-ele-textarea>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-space-x-2\">\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\" \n (click)=\"resetForm()\"\n [disabled]=\"loading()\"\n class=\"tw-px-4 tw-py-2\">\n Reset\n </button>\n @if (isEditMode()) {\n <button \n cideEleButton \n variant=\"outline\" \n size=\"sm\" \n type=\"button\" \n (click)=\"cancelForm()\"\n [disabled]=\"loading()\"\n class=\"tw-px-4 tw-py-2\">\n Cancel\n </button>\n }\n <button \n cideEleButton \n variant=\"primary\" \n size=\"sm\" \n type=\"submit\"\n (click)=\"saveMaster()\"\n [disabled]=\"!masterForm.valid || loading()\"\n class=\"tw-px-4 tw-py-2\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-4 tw-h-4 tw-mr-1\">{{ isEditMode() ? 'edit' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update' : 'Save' }}\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-4 tw-py-2 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0\">\n \n <!-- Title and Back Button -->\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n @if (typeTitle()) {\n <div>\n <p class=\"tw-text-xs tw-text-gray-500 tw-m-0\">Type: {{ typeTitle() }}</p>\n </div>\n }\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-2 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Actions can be added here in the future -->\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-3 tw-p-3 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-4 tw-h-4 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Template Renderers -->\n<ng-template #masterDetailsRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-w-full\">\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.sygms_title || 'N/A' }}</div>\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.sygms_desc || 'No description' }}</div>\n </div>\n</ng-template>\n\n<ng-template #masterStatusRendererTemplate let-row=\"row\">\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium\"\n [class.tw-bg-green-100]=\"row.sygms_isactive\"\n [class.tw-text-green-800]=\"row.sygms_isactive\"\n [class.tw-bg-red-100]=\"!row.sygms_isactive\"\n [class.tw-text-red-800]=\"!row.sygms_isactive\">\n {{ row.sygms_isactive ? 'Active' : 'Inactive' }}\n </span>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(row)\"\n [config]=\"getDropdownConfig()\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template> ","// Components\r\nexport * from './components/general-master-type/general-master-type.component';\r\nexport * from './components/general-master/general-master.component';\r\n\r\n// Services\r\nexport * from './services/general-master-type.service';\r\nexport * from './services/general-master.service'; ","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { cidePath, coreRoutesUrl, hostManagerRoutesUrl, MPinCodeSelect, pinCodeSelectControllerResponse } from 'cloud-ide-lms-model';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * @description Data service for pin code (postal code) operations\r\n * Handles API calls for retrieving pin code and location data\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideCorePinCodeService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get pin code data from API\r\n * @param body - MPinCodeSelect payload with sypin_pincode\r\n * @returns Observable of pin code select response\r\n */\r\n getPinCodeData(body: MPinCodeSelect): Observable<pinCodeSelectControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost, \r\n coreRoutesUrl.module, \r\n coreRoutesUrl?.pinCode\r\n ]);\r\n \r\n console.log('📍 PIN CODE SERVICE: Making API call to:', url);\r\n console.log('📍 PIN CODE SERVICE: Payload:', body);\r\n \r\n return this.http.post(url, body) as Observable<pinCodeSelectControllerResponse>;\r\n }\r\n\r\n /**\r\n * Get pin code data by specific pin code\r\n * @param pincode - The pin code to search for\r\n * @returns Observable of pin code data\r\n */\r\n getPinCodeByCode(pincode: string): Observable<pinCodeSelectControllerResponse> {\r\n const payload: MPinCodeSelect = {\r\n sypin_pincode: pincode\r\n };\r\n return this.getPinCodeData(payload);\r\n }\r\n\r\n /**\r\n * Get all postal codes with default parameters\r\n * @returns Observable of all postal codes\r\n */\r\n getAllPostalCodes(): Observable<pinCodeSelectControllerResponse> {\r\n const payload: MPinCodeSelect = { \r\n sypin_pincode: '' // Empty to get all or use a default\r\n };\r\n return this.getPinCodeData(payload);\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { cidePath, coreRoutesUrl, hostManagerRoutesUrl, currencyListControllerResponse, MSycrList, generateStringFromObject } from 'cloud-ide-lms-model';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * @description Data service for currency-related operations\r\n * Handles API calls for retrieving currency data\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideCoreCurrencyService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get all currencies from API\r\n * @param body - MSycrList payload for filtering\r\n * @returns Observable of currency list response\r\n */\r\n getAllCurrencies(body: Partial<MSycrList>): Observable<currencyListControllerResponse> {\r\n const query = generateStringFromObject(body);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost, \r\n coreRoutesUrl.module, \r\n coreRoutesUrl?.currency,\r\n query\r\n ]);\r\n \r\n console.log('💰 CURRENCY SERVICE: Making API call to:', url);\r\n console.log('💰 CURRENCY SERVICE: Payload:', body);\r\n \r\n return this.http.get(url) as Observable<currencyListControllerResponse>;\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { cidePath, coreRoutesUrl, countryListControllerResponse, generateStringFromObject, hostManagerRoutesUrl, MSyctrList } from 'cloud-ide-lms-model';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * @description Data service for country-related operations\r\n * Handles API calls for retrieving country data\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideCoreCountryService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get all countries from API\r\n * @param body - MSyctrList payload for filtering\r\n * @returns Observable of country list response\r\n */\r\n getAllCountries(body: Partial<MSyctrList>): Observable<countryListControllerResponse> {\r\n console.log(body, \"body body\")\r\n const query = generateStringFromObject(body);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost, \r\n coreRoutesUrl.module, \r\n coreRoutesUrl.country,\r\n query\r\n ]);\r\n \r\n console.log('🌍 COUNTRY SERVICE: Making API call to:', url);\r\n console.log('🌍 COUNTRY SERVICE: Payload:', body);\r\n \r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get countries with default parameters\r\n * @returns Observable of country list response\r\n */\r\n getCountries(): Observable<countryListControllerResponse> {\r\n const defaultPayload: Partial<MSyctrList> = {};\r\n return this.getAllCountries(defaultPayload);\r\n }\r\n\r\n /**\r\n * Search countries with specific filters\r\n * @param filters - Search criteria for countries\r\n * @returns Observable of filtered country list\r\n */\r\n searchCountries(filters: Partial<MSyctrList>): Observable<countryListControllerResponse> {\r\n return this.getAllCountries(filters);\r\n }\r\n\r\n /**\r\n * Get country by ID\r\n * @param countryId - ID of the country to retrieve\r\n * @returns Observable of country data\r\n */\r\n getCountryById(countryId: string): Observable<countryListControllerResponse> {\r\n const payload: Partial<MSyctrList> = {\r\n syctr_id: countryId\r\n };\r\n return this.getAllCountries(payload);\r\n }\r\n\r\n /**\r\n * Get countries by region\r\n * @param region - Region code to filter countries\r\n * @returns Observable of countries in the specified region\r\n */\r\n getCountriesByRegion(region: string): Observable<countryListControllerResponse> {\r\n const payload: Partial<MSyctrList> = {\r\n // Note: Replace with actual property name from MSyctrList interface\r\n // syctr_region: region\r\n } as any; // Temporary fix - update when MSyctrList interface is available\r\n return this.getAllCountries(payload);\r\n }\r\n}\r\n","import { Component, signal, OnInit, inject, OnDestroy } from '@angular/core';\nimport { ReactiveFormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { CideEleTabComponent, TabItem, CideEleButtonComponent, CideIconComponent } from 'cloud-ide-element';\nimport { CideSelectComponent } from 'cloud-ide-element';\nimport { CideEleFileManagerService } from 'cloud-ide-element';\nimport { CideInputComponent } from 'cloud-ide-element';\nimport { CideTextareaComponent, CideEleFileInputComponent } from 'cloud-ide-element';\nimport { pinCodeSelectControllerResponse, currencyListControllerResponse, ICoreSycr, countryListControllerResponse, ICoreSyctr, ICoreSypin, selectSearchType, MPinCodeSelect, MSyctrList, entityControllerResponse, CoreSystemEntityListResponse, generateObjectFromString, generalMasterListControllerResponse, ICoreSygms, authUserMstListControllerResponse, hostManagerRoutesUrl, cidePath, coreRoutesUrl } from 'cloud-ide-lms-model';\nimport { Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\nimport { CideCoreEntityManagementService } from '../../services/entity-management.service';\nimport { CideCoreGeneralMasterService } from '../../../general-master-management';\nimport { CideCorePinCodeService } from '../../../shared/services/pin-code.service';\nimport { CideCoreCurrencyService } from '../../../shared/services/currency.service';\nimport { CideCoreCountryService } from '../../../shared/services/country.service';\nimport { CideCoreUserMasterService } from '../../../user-management';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { NotificationService } from 'cloud-ide-element';\n\n\ninterface DropdownOption {\n value: string;\n label: string;\n}\n\n// Interface for pin code data structure with additional fields\ninterface PinCodeData extends ICoreSypin {\n value?: string;\n label?: string;\n}\n\n@Component({\n selector: 'cide-core-entity-create',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n CideInputComponent,\n CideSelectComponent,\n CideTextareaComponent,\n CideEleFileInputComponent,\n CideEleTabComponent,\n CideEleButtonComponent,\n CideIconComponent\n ],\n templateUrl: './entity-create.component.html',\n styleUrl: './entity-create.component.scss'\n})\nexport class CideCoreEntityCreateComponent implements OnInit, OnDestroy {\n // Reactive form\n entityForm: FormGroup;\n\n entityTypes = signal<DropdownOption[]>([]);\n currencies = signal<DropdownOption[]>([]);\n users = signal<DropdownOption[]>([]);\n postalCodes = signal<DropdownOption[]>([]);\n corporateCountries = signal<DropdownOption[]>([]);\n registeredCountries = signal<DropdownOption[]>([]);\n\n // Store the full pin code data for auto-population\n private pinCodeDataMap = new Map<string, PinCodeData>();\n\n // Store logo file for upload\n private logoFile?: File;\n\n loading = signal(false);\n error = signal<string | null>(null);\n success = signal<string | null>(null);\n\n // Loading states for individual dropdowns\n postalCodesLoading = signal(false);\n usersLoading = signal(false);\n registeredCountriesLoading = signal(false);\n corporateCountriesLoading = signal(false);\n\n // Entity mode and ID\n isEditMode = signal(false);\n entityId = signal<string | null>(null);\n\n // Tab configuration\n activeTab = signal('corporate');\n entityTabs = signal<TabItem[]>([\n { id: 'corporate', label: 'Corporate Address', icon: 'business' },\n { id: 'contact', label: 'Contact Information', icon: 'contact_phone' },\n { id: 'registered', label: 'Registered Address', icon: 'location_on' }\n ]);\n\n // Modern dependency injection using inject() - Updated to use structured services\n private entityService = inject(CideCoreEntityManagementService);\n private CideCoreGeneralMasterService = inject(CideCoreGeneralMasterService);\n private pinCodeService = inject(CideCorePinCodeService);\n private userService = inject(CideCoreUserMasterService);\n private currencyService = inject(CideCoreCurrencyService);\n private countryService = inject(CideCoreCountryService);\n private appState = inject(AppStateHelperService);\n private notificationService = inject(NotificationService);\n private fb = inject(FormBuilder);\n private route = inject(ActivatedRoute);\n private router = inject(Router);\n private fileManagerService = inject(CideEleFileManagerService);\n\n private destroy$ = new Subject<void>();\n private globalErrorHandler?: (event: ErrorEvent) => void;\n private globalRejectionHandler?: (event: PromiseRejectionEvent) => void;\n\n // Search subjects for debouncing\n private postalCodeSearchSubject = new Subject<selectSearchType>();\n private userSearchSubject = new Subject<selectSearchType>();\n private corporateCountrySearchSubject = new Subject<selectSearchType>();\n private registeredCountrySearchSubject = new Subject<selectSearchType>();\n\n constructor() {\n this.entityForm = this.fb.group({\n // Basic Information\n syen_name: ['', [Validators.required]],\n syen_entity_code: ['', [Validators.required, Validators.maxLength(40)]],\n syen_entity_type_sygms: ['', [Validators.required]],\n syen_udise_no: [''],\n syen_affiliation_no: [''],\n syen_isactive: [true],\n\n // Corporate Address\n syen_corporate_address: [''],\n syen_corporate_city_sypin: [''],\n syen_corporate_state_sypin: [''],\n syen_corporate_country_syctr: [''],\n syen_corporate_pin_sypin: [''],\n\n // Contact Information\n syen_corporate_contact_person_user: [''],\n syen_corporate_phone: [''],\n syen_corporate_phone_alt: [''],\n syen_corporate_fax: [''],\n syen_corporate_email: ['', [Validators.email]],\n syen_corporate_email_alt: ['', [Validators.email]],\n syen_website: ['', [Validators.pattern(/^https?:\\/\\/.+/)]],\n syen_currency_sycr: [''],\n\n // Registered Address\n syen_registered_address: [''],\n syen_registered_city_sypin: [''],\n syen_registered_state_sypin: [''],\n syen_registered_country_syctr: [''],\n syen_registered_pin_sypin: [''],\n syen_registered_contact_person_user: [''],\n syen_registered_phone: [''],\n syen_registered_email: ['', [Validators.email]],\n syen_photo_id_cyfm: [''],\n\n // Entity Image\n syen_entity_image: ['']\n });\n\n // Listen for postal code changes to auto-populate address fields\n this.setupPostalCodeListeners();\n \n // Setup debounced search subscriptions\n this.setupDebouncedSearch();\n }\n\n ngOnInit() {\n // Add global error handler to catch any unhandled errors\n const errorHandler = (event: ErrorEvent) => {\n console.error('💥 GLOBAL ERROR:', event.error);\n };\n\n const rejectionHandler = (event: PromiseRejectionEvent) => {\n console.error('💥 UNHANDLED PROMISE REJECTION:', event.reason);\n };\n\n window.addEventListener('error', errorHandler);\n window.addEventListener('unhandledrejection', rejectionHandler);\n\n // Store handlers for cleanup\n this.globalErrorHandler = errorHandler;\n this.globalRejectionHandler = rejectionHandler;\n\n // Check for entity ID in query parameters\n this.checkForEntityId();\n\n this.loadDropdowns();\n }\n\n ngOnDestroy(): void {\n // Clean up global event listeners\n if (this.globalErrorHandler) {\n window.removeEventListener('error', this.globalErrorHandler);\n }\n if (this.globalRejectionHandler) {\n window.removeEventListener('unhandledrejection', this.globalRejectionHandler);\n }\n\n // Clean up search subjects\n this.postalCodeSearchSubject.complete();\n this.userSearchSubject.complete();\n this.corporateCountrySearchSubject.complete();\n this.registeredCountrySearchSubject.complete();\n\n // Clean up RxJS subscriptions\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // Check for entity ID in query parameters\n private checkForEntityId() {\n console.log('🔍 Checking for entity ID in query parameters', this.route.params);\n this.route.params.pipe(takeUntil(this.destroy$)).subscribe(params => {\n console.log('🔍 Query params:', params);\n // Check for entityId, id, or entity parameter\n const queryParams = params['query'];\n const queryData = generateObjectFromString(queryParams);\n\n // If entityId is an object string (from generateStringFromObject), try to parse it\n const entityId = queryData.syen_id;\n if (entityId) {\n console.log('🔍 Entity ID found in query params:', entityId);\n this.entityId.set(entityId);\n this.isEditMode.set(true);\n this.loadEntityData(entityId);\n } else {\n console.log('🆕 No entity ID found - creating new entity');\n this.isEditMode.set(false);\n this.entityId.set(null);\n }\n });\n }\n\n // Load entity data for editing\n private loadEntityData(entityId: string) {\n this.loading.set(true);\n this.error.set(null);\n\n console.log('📥 Loading entity data for ID:', entityId);\n\n this.entityService.getEntityById(entityId).pipe(\n takeUntil(this.destroy$)\n ).subscribe({\n next: (response: entityControllerResponse) => {\n console.log('✅ Entity data loaded:', response);\n\n if (response?.success && response?.data) {\n // Handle both array and single object responses\n const entityData = Array.isArray(response.data) ? response.data[0] : response.data;\n if (entityData) {\n this.populateFormWithEntityData(entityData);\n this.success.set('Entity data loaded successfully');\n } else {\n this.error.set('Entity data not found');\n console.error('❌ Entity data not found in response:', response);\n }\n } else {\n this.error.set('Failed to load entity data');\n console.error('❌ Entity data response invalid:', response);\n }\n this.loading.set(false);\n },\n error: (err) => {\n console.error('❌ Failed to load entity data:', err);\n\n let errorMessage = 'Failed to load entity data.';\n\n if (err?.error?.message) {\n errorMessage = err.error.message;\n } else if (err?.message) {\n errorMessage = err.message;\n } else if (err?.status === 404) {\n errorMessage = 'Entity not found.';\n } else if (err?.status === 500) {\n errorMessage = 'Server error. Please try again later.';\n }\n\n this.error.set(errorMessage);\n this.loading.set(false);\n }\n });\n }\n\n // Populate form with entity data\n private populateFormWithEntityData(entityData: CoreSystemEntityListResponse) {\n try {\n console.log('📝 Populating form with entity data:', entityData);\n\n // Map the entity data to form controls - only use properties that exist in CoreSystemEntityListResponse\n const formData = {\n // Basic Information\n syen_name: entityData.syen_name || '',\n syen_entity_code: entityData.syen_entity_code || '',\n syen_entity_type_sygms: entityData.syen_entity_type_sygms || '',\n syen_isactive: entityData.syen_isactive !== undefined ? entityData.syen_isactive : true,\n\n // Contact Information (only properties that exist in CoreSystemEntityListResponse)\n syen_corporate_contact_person_user: entityData.syen_corporate_contact_person_user || '',\n syen_corporate_phone: entityData.syen_corporate_phone || '',\n syen_corporate_email: entityData.syen_corporate_email || '',\n\n // Set default values for other fields since they're not in CoreSystemEntityListResponse\n syen_udise_no: entityData.syen_udise_no || '',\n syen_affiliation_no: entityData.syen_affiliation_no || '',\n syen_corporate_address: entityData.syen_corporate_address || '',\n syen_corporate_city_sypin: entityData.syen_corporate_city_sypin || '',\n syen_corporate_state_sypin: entityData.syen_corporate_state_sypin || '',\n syen_corporate_country_syctr: entityData.syen_corporate_country_syctr || '',\n syen_corporate_pin_sypin: entityData.syen_corporate_pin_sypin || '',\n syen_corporate_phone_alt: entityData.syen_corporate_phone_alt || '',\n syen_corporate_fax: entityData.syen_corporate_fax || '',\n syen_corporate_email_alt: entityData.syen_corporate_email_alt || '',\n syen_website: entityData.syen_website || '',\n syen_currency_sycr: entityData.syen_currency_sycr || '',\n syen_registered_address: entityData.syen_registered_address || '',\n syen_registered_city_sypin: entityData.syen_registered_city_sypin || '',\n syen_registered_state_sypin: entityData.syen_registered_state_sypin || '',\n syen_registered_country_syctr: entityData.syen_registered_country_syctr || '',\n syen_registered_pin_sypin: entityData.syen_registered_pin_sypin || '',\n syen_registered_contact_person_user: entityData.syen_registered_contact_person_user || '',\n syen_registered_phone: entityData.syen_registered_phone || '',\n syen_registered_email: entityData.syen_registered_email || '',\n syen_registered_fax: entityData.syen_registered_fax || '',\n syen_photo_id_cyfm: entityData.syen_photo_id_cyfm || ''\n };\n\n // Patch the form with the entity data\n this.entityForm.patchValue(formData, { emitEvent: false });\n\n console.log('✅ Form populated successfully');\n } catch (error) {\n console.error('💥 Error populating form with entity data:', error);\n this.error.set('Error loading entity data into form');\n }\n }\n\n // Setup listeners for postal code changes\n private setupPostalCodeListeners() {\n // Corporate postal code listener\n this.entityForm.get('syen_corporate_pin_sypin')?.valueChanges.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n ).subscribe(pinCodeId => {\n if (pinCodeId) {\n this.populateAddressFromPinCode(pinCodeId, 'corporate');\n }\n });\n\n // Registered postal code listener\n this.entityForm.get('syen_registered_pin_sypin')?.valueChanges.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n ).subscribe(pinCodeId => {\n if (pinCodeId) {\n this.populateAddressFromPinCode(pinCodeId, 'registered');\n }\n });\n }\n\n // Auto-populate address fields based on selected postal code\n private populateAddressFromPinCode(pinCodeId: string, addressType: 'corporate' | 'registered') {\n const pinCodeData = this.pinCodeDataMap.get(pinCodeId);\n console.log('🔍 Pin Code Data:', pinCodeData);\n if (!pinCodeData) {\n console.warn(`Pin code data not found for ID: ${pinCodeId}`);\n return;\n }\n\n const prefix = addressType === 'corporate' ? 'syen_corporate' : 'syen_registered';\n\n // Populate city, state, and country fields\n this.entityForm.patchValue({\n [`${prefix}_city_sypin`]: pinCodeData.sypin_district || '',\n [`${prefix}_state_sypin`]: pinCodeData.sypin_state_name || '',\n [`${prefix}_country_syctr`]: pinCodeData.sypin_country_id_syctr || ''\n }, { emitEvent: false });\n\n console.log(`📍 Auto-populated ${addressType} address from pin code:`, {\n city: pinCodeData.sypin_district,\n state: pinCodeData.sypin_state_name,\n country: pinCodeData.sypin_country_id_syctr\n });\n }\n\n loadDropdowns() {\n try {\n console.log('🚀 Loading dropdowns...');\n\n // Load entity types via general master service\n this.CideCoreGeneralMasterService.getMasterList({ sygmt_code: 'core_entity_type', sygms_entity_id_syen: this.appState.getActiveEntityId() }).subscribe({\n next: (response) => {\n try {\n console.log('✅ Entity types response:', response);\n const types = this.transformGeneralMasterToDropdown(response);\n this.entityTypes.set(types);\n console.log('📋 Loaded entity types:', types.length);\n } catch (error) {\n console.error('💥 Entity types transform error:', error);\n this.entityTypes.set([]);\n }\n },\n error: (err) => {\n console.error('❌ Failed to load entity types:', err);\n this.entityTypes.set([]);\n }\n });\n\n // Load currencies via currency service\n this.currencyService.getAllCurrencies({}).subscribe({\n next: (response) => {\n try {\n console.log('✅ Currencies response:', response);\n const currencies = this.transformCurrencyToDropdown(response);\n this.currencies.set(currencies);\n console.log('💰 Loaded currencies:', currencies.length);\n } catch (error) {\n console.error('💥 Currencies transform error:', error);\n this.currencies.set([]);\n }\n },\n error: (err) => {\n console.error('❌ Failed to load currencies:', err);\n this.currencies.set([]);\n }\n });\n\n // Load users via user service\n const activeEntityId = this.appState.getActiveEntityId();\n if (activeEntityId) {\n this.userService.getUserList({ syenm_entity_id_syen: activeEntityId }).subscribe({\n next: (response) => {\n try {\n console.log('✅ Users response:', response);\n const users = this.transformUserToDropdown(response);\n this.users.set(users);\n console.log('👥 Loaded users:', users.length);\n } catch (error) {\n console.error('💥 Users transform error:', error);\n this.users.set([]);\n }\n },\n error: (err) => {\n console.error('❌ Failed to load users:', err);\n this.users.set([]);\n }\n });\n } else {\n console.warn('⚠️ No active entity ID found, skipping user loading');\n this.users.set([]);\n }\n\n // Initialize postal codes as empty - will be loaded via search\n this.postalCodes.set([]);\n\n\n // Load countries via country service\n this.countryService.getAllCountries({}).subscribe({\n next: (response) => {\n try {\n console.log('✅ Countries response:', response);\n const countries = this.transformCountryToDropdown(response);\n this.corporateCountries.set(countries);\n this.registeredCountries.set(countries);\n console.log('🌍 Loaded countries:', countries.length);\n } catch (error) {\n console.error('💥 Countries transform error:', error);\n this.corporateCountries.set([]);\n this.registeredCountries.set([]);\n }\n },\n error: (err) => {\n console.error('❌ Failed to load countries:', err);\n this.corporateCountries.set([]);\n this.registeredCountries.set([]);\n }\n });\n } catch (error) {\n console.error('💥 LOADDROPDOWNS EXCEPTION:', error);\n }\n }\n\n // Helper method to transform general master response to dropdown options\n private transformGeneralMasterToDropdown(response: generalMasterListControllerResponse): DropdownOption[] {\n if (!response?.success || !response?.data) {\n return [];\n }\n\n let dataArray: ICoreSygms[] = [];\n\n // Handle different response structures - all general master data is in core_general_master\n if (Array.isArray(response.data)) {\n dataArray = response.data;\n }\n\n return dataArray.map((item: ICoreSygms, index: number) => {\n return {\n // API response already includes value and label fields\n value: (item as { value?: string }).value || item._id || `value_${index}`,\n label: (item as { label?: string }).label || item.sygms_title || 'Untitled'\n };\n });\n }\n\n // Helper method to transform currency response to dropdown options\n private transformCurrencyToDropdown(response: currencyListControllerResponse): DropdownOption[] {\n if (!response?.success || !response?.data) {\n return [];\n }\n\n console.log('🔍 Currency Response:', response);\n\n // Handle different response structures\n let dataArray: ICoreSycr[] = [];\n\n if (Array.isArray(response.data)) {\n dataArray = response.data;\n }\n\n return dataArray.map((item: ICoreSycr) => {\n return {\n value: item._id,\n label: `${item.sycr_code} - ${item.sycr_name} (${item.sycr_symbol})`\n };\n });\n }\n\n // Helper method to transform user response to dropdown options\n private transformUserToDropdown(response: authUserMstListControllerResponse): DropdownOption[] {\n if (!response?.success || !response?.data) {\n return [];\n }\n\n let dataArray: any[] = [];\n\n // Handle different response structures\n if (Array.isArray(response.data)) {\n dataArray = response.data;\n } else if (response.data && typeof response.data === 'object') {\n // If data is an object, try to extract the array\n dataArray = (response.data as any).data || (response.data as any).users || [];\n }\n\n return dataArray.map((item: any) => {\n return {\n value: item._id || \"\",\n label: item?.user_fullname || `${item?.user_firstname || ''} ${item?.user_lastname || ''}`.trim() || \"\"\n };\n });\n }\n\n // Helper method to transform pin code response to dropdown options\n private transformPinCodeToDropdown(response: pinCodeSelectControllerResponse): DropdownOption[] {\n if (!response?.success || !response?.data) {\n return [];\n }\n let dataArray: PinCodeData[] = [];\n\n // Handle different response structures\n if ('core_pin_code' in response.data && response.data.core_pin_code) {\n dataArray = response.data.core_pin_code;\n }\n\n // Clear the data map and rebuild it\n this.pinCodeDataMap.clear();\n\n return dataArray.map((item: PinCodeData) => {\n const pinCodeId = String(item._id);\n // Store the full pin code data for auto-population\n this.pinCodeDataMap.set(pinCodeId, item);\n\n // API response already includes value and label fields\n return {\n value: pinCodeId,\n label: `${item.sypin_pincode} - ${item.sypin_office_name || ''}`\n };\n });\n }\n\n // Helper method to transform country response to dropdown options\n private transformCountryToDropdown(response: countryListControllerResponse): DropdownOption[] {\n try {\n if (!response?.success || !response?.data) {\n console.warn('⚠️ Country response missing success or data:', response);\n return [];\n }\n\n console.log('🔍 Country Response:', response);\n\n let dataArray: ICoreSyctr[] = [];\n\n // Handle different response structures\n if (Array.isArray(response.data)) {\n dataArray = response.data;\n } else if (response.data) {\n dataArray = response.data;\n }\n\n console.log('🔍 Country data array length:', dataArray.length);\n\n return dataArray.map((item: ICoreSyctr) => {\n return {\n value: item._id || \"\",\n label: `${item.syctr_country_iso_name || ''} (${item.syctr_country_iso_code_two_char || 'XX'})`\n };\n });\n } catch (error) {\n console.error('💥 COUNTRY TRANSFORM EXCEPTION:', error);\n return [];\n }\n }\n\n // Helper method to get form control\n getControl(controlName: string) {\n return this.entityForm.get(controlName);\n }\n\n // Setup debounced search subscriptions\n private setupDebouncedSearch(): void {\n // Postal code search with debounce\n this.postalCodeSearchSubject.pipe(\n debounceTime(300),\n distinctUntilChanged((prev, curr) => prev.query === curr.query),\n takeUntil(this.destroy$)\n ).subscribe(event => {\n this.performPostalCodeSearch(event);\n });\n\n // User search with debounce\n this.userSearchSubject.pipe(\n debounceTime(300),\n distinctUntilChanged((prev, curr) => prev.query === curr.query),\n takeUntil(this.destroy$)\n ).subscribe(event => {\n this.performUserSearch(event);\n });\n\n // Corporate country search with debounce\n this.corporateCountrySearchSubject.pipe(\n debounceTime(300),\n distinctUntilChanged((prev, curr) => prev.query === curr.query),\n takeUntil(this.destroy$)\n ).subscribe(event => {\n this.performCorporateCountrySearch(event);\n });\n\n // Registered country search with debounce\n this.registeredCountrySearchSubject.pipe(\n debounceTime(300),\n distinctUntilChanged((prev, curr) => prev.query === curr.query),\n takeUntil(this.destroy$)\n ).subscribe(event => {\n this.performRegisteredCountrySearch(event);\n });\n }\n\n // Handle postal code search with debouncing\n onPostalCodeSearch(event: selectSearchType) {\n this.postalCodeSearchSubject.next(event);\n }\n\n // Perform actual postal code search\n private performPostalCodeSearch(event: selectSearchType) {\n try {\n console.log('🔍 POSTAL CODE SEARCH EVENT:', event);\n\n // Set loading state\n this.postalCodesLoading.set(true);\n\n const payload: MPinCodeSelect = {\n sypin_pincode: event.query || \"\",\n sypin_id: event.value as string || \"\"\n };\n console.log('🔍 POSTAL CODE PAYLOAD:', payload);\n\n this.pinCodeService.getPinCodeData(payload).pipe(\n takeUntil(this.destroy$)\n ).subscribe({\n next: (response) => {\n console.log('✅ POSTAL CODE SEARCH SUCCESS:', response);\n const postalCodes = this.transformPinCodeToDropdown(response);\n this.postalCodes.set(postalCodes);\n console.log('📮 Updated postal codes count:', postalCodes.length);\n },\n error: (err) => {\n console.error('❌ POSTAL CODE SEARCH ERROR:', err);\n this.postalCodes.set([]);\n },\n complete: () => {\n // Clear loading state\n this.postalCodesLoading.set(false);\n }\n });\n } catch (error) {\n console.error('💥 POSTAL CODE SEARCH EXCEPTION:', error);\n this.postalCodes.set([]);\n this.postalCodesLoading.set(false);\n }\n }\n\n // Handle user search\n onUserSearch(event: selectSearchType) {\n this.userSearchSubject.next(event);\n }\n\n // Perform actual user search\n private performUserSearch(event: selectSearchType) {\n try {\n console.log('🔍 USER SEARCH EVENT:', event);\n\n // Set loading state\n this.usersLoading.set(true);\n\n // Use getUserList with search parameters\n const payload = {\n query: event?.query || \"\",\n syenm_entity_id_syen: this.appState.getActiveEntityId(),\n pagination: false // Get all matching users for dropdown\n };\n console.log('🔍 USER SEARCH PAYLOAD:', payload);\n\n this.userService.getUserList(payload).subscribe({\n next: (response) => {\n console.log('✅ USER SEARCH SUCCESS:', response);\n const users = this.transformUserToDropdown(response);\n this.users.set(users);\n console.log('👥 Updated users count:', users.length);\n },\n error: (err) => {\n console.error('❌ USER SEARCH ERROR:', err);\n this.users.set([]);\n },\n complete: () => {\n // Clear loading state\n this.usersLoading.set(false);\n }\n });\n } catch (error) {\n console.error('💥 USER SEARCH EXCEPTION:', error);\n this.users.set([]);\n this.usersLoading.set(false);\n }\n }\n\n // Handle country search\n onCorporateCountrySearch(event: selectSearchType) {\n console.log(event, \"event event\")\n this.corporateCountrySearchSubject.next(event);\n }\n\n // Perform actual corporate country search\n private performCorporateCountrySearch(event: selectSearchType) {\n try {\n console.log('🔍 COUNTRY SEARCH EVENT:', event);\n\n // Set loading state\n this.corporateCountriesLoading.set(true);\n\n const payload: Partial<MSyctrList> = {\n query: event.query,\n syctr_id: event.value as string,\n }\n console.log('🔍 COUNTRY SEARCH PAYLOAD:', payload);\n\n this.countryService.getAllCountries(payload).subscribe({\n next: (response) => {\n console.log('✅ COUNTRY SEARCH SUCCESS:', response);\n const countries = this.transformCountryToDropdown(response);\n this.corporateCountries.set(countries);\n console.log('🌍 Updated countries count:', countries.length);\n },\n error: (err) => {\n console.error('❌ COUNTRY SEARCH ERROR:', err);\n this.corporateCountries.set([]);\n },\n complete: () => {\n // Clear loading state\n this.corporateCountriesLoading.set(false);\n }\n });\n } catch (error) {\n console.error('💥 COUNTRY SEARCH EXCEPTION:', error);\n this.corporateCountries.set([]);\n this.corporateCountriesLoading.set(false);\n }\n }\n\n onRegisteredCountrySearch(event: selectSearchType) {\n this.registeredCountrySearchSubject.next(event);\n }\n\n // Perform actual registered country search\n private performRegisteredCountrySearch(event: selectSearchType) {\n try {\n console.log('🔍 COUNTRY SEARCH EVENT:', event);\n\n // Set loading state\n this.registeredCountriesLoading.set(true);\n\n const payload: Partial<MSyctrList> = {\n query: event.query,\n syctr_id: event.value as string,\n }\n console.log('🔍 COUNTRY SEARCH PAYLOAD:', payload);\n\n this.countryService.getAllCountries(payload).subscribe({\n next: (response) => {\n console.log('✅ COUNTRY SEARCH SUCCESS:', response);\n const countries = this.transformCountryToDropdown(response);\n this.registeredCountries.set(countries);\n console.log('🌍 Updated countries count:', countries.length);\n },\n error: (err) => {\n console.error('❌ COUNTRY SEARCH ERROR:', err);\n this.registeredCountries.set([]);\n },\n complete: () => {\n // Clear loading state\n this.registeredCountriesLoading.set(false);\n }\n });\n } catch (error) {\n console.error('💥 COUNTRY SEARCH EXCEPTION:', error);\n this.registeredCountries.set([]);\n this.registeredCountriesLoading.set(false);\n }\n }\n\n // Handle postal code selection\n onPostalCodeSelection(event: Event | string) {\n let pinCodeId = '';\n if (typeof event === 'string') {\n pinCodeId = event;\n } else {\n const target = event.target as HTMLSelectElement;\n pinCodeId = target?.value || '';\n }\n console.log('📍 Postal Code Selected:', pinCodeId);\n // The auto-population is handled by the form value change listeners\n // This method can be used for additional logic if needed\n }\n\n // Check if a field has an error\n hasError(controlName: string, errorType?: string): boolean {\n const control = this.getControl(controlName);\n if (!control) return false;\n\n if (errorType) {\n return control.hasError(errorType) && (control.dirty || control.touched);\n }\n return control.invalid && (control.dirty || control.touched);\n }\n\n // Get error message for a field\n getErrorMessage(controlName: string): string {\n const control = this.getControl(controlName);\n if (!control || !control.errors) return '';\n\n const fieldName = controlName.replace('syen_', '').replace(/_/g, ' ').replace(/\\b\\w/g, l => l.toUpperCase());\n\n if (control.hasError('required')) {\n return `${fieldName} is required`;\n }\n if (control.hasError('maxlength')) {\n return `Maximum length is ${control.errors['maxlength'].requiredLength} characters`;\n }\n if (control.hasError('email')) {\n return 'Please enter a valid email address';\n }\n if (control.hasError('pattern')) {\n return 'Please enter a valid URL starting with http:// or https://';\n }\n return 'Invalid input';\n }\n\n // Get form validation summary\n getFormValidationSummary(): string[] {\n const errors: string[] = [];\n Object.keys(this.entityForm.controls).forEach(key => {\n const control = this.entityForm.get(key);\n if (control && control.invalid && (control.dirty || control.touched)) {\n errors.push(this.getErrorMessage(key));\n }\n });\n return errors;\n }\n\n // Check if form is valid\n get isFormValid(): boolean {\n return this.entityForm.valid;\n }\n\n // Get current mode for display\n get currentMode(): string {\n return this.isEditMode() ? 'Edit' : 'Create';\n }\n\n // Get current entity ID for display\n get currentEntityId(): string | null {\n return this.entityId();\n }\n\n // Get dynamic page title\n get pageTitle(): string {\n if (this.isEditMode()) {\n const entityName = this.entityForm.get('syen_name')?.value;\n return entityName ? `Edit Entity: ${entityName}` : 'Edit Entity';\n }\n return 'Create New Entity';\n }\n\n // Get dynamic page subtitle\n get pageSubtitle(): string {\n if (this.isEditMode()) {\n return 'Update the entity information below';\n }\n return 'Fill in the required information to create a new entity';\n }\n\n onFileChange(event: FileList | null) {\n if (event && event.length > 0) {\n this.logoFile = event[0];\n console.log('�� Logo File Selected:', this.logoFile.name);\n } else {\n this.logoFile = undefined;\n console.log('📄 No logo file selected.');\n }\n }\n\n onTabChange(tab: TabItem) {\n this.activeTab.set(tab.id);\n }\n\n onSubmit() {\n if (this.entityForm.valid) {\n this.loading.set(true);\n this.error.set(null);\n this.success.set(null);\n\n const formData = this.entityForm.value;\n const isEdit = this.isEditMode();\n const entityId = this.entityId();\n\n console.log(`🏢 ENTITY ${isEdit ? 'UPDATE' : 'CREATE'}: Form data:`, formData);\n\n // Validate required fields before submission\n const requiredFields = ['syen_name', 'syen_entity_code', 'syen_entity_type_sygms'];\n const missingFields = requiredFields.filter(field => !formData[field]);\n\n if (missingFields.length > 0) {\n this.error.set(`Missing required fields: ${missingFields.join(', ')}`);\n this.loading.set(false);\n return;\n }\n\n // Add entity ID to form data if in edit mode\n if (isEdit && entityId) {\n formData._id = entityId;\n }\n\n const saveOperation = this.entityService.saveUpdateEntity(formData);\n\n saveOperation.pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (response) => {\n console.log(`✅ ENTITY ${isEdit ? 'UPDATE' : 'CREATE'} SUCCESS:`, response);\n\n if (response?.success) {\n const successMessage = isEdit\n ? 'Entity updated successfully!'\n : 'Entity created successfully!';\n this.success.set(successMessage);\n\n // Update the entity ID if it's a new entity\n if (!isEdit && response?.data) {\n const entityData = Array.isArray(response.data) ? response.data[0] : response.data;\n if (entityData?._id) {\n this.entityId.set(entityData._id);\n this.isEditMode.set(true);\n }\n }\n\n // Navigate back to entity list after successful update\n this.router.navigate(['/control-panel/entity-list']);\n } else {\n this.error.set(response?.message || `Failed to ${isEdit ? 'update' : 'create'} entity. Please try again.`);\n }\n this.loading.set(false);\n },\n error: (err) => {\n console.error(`❌ ENTITY ${isEdit ? 'UPDATE' : 'CREATE'} ERROR:`, err);\n\n let errorMessage = `Failed to ${isEdit ? 'update' : 'save'} entity settings.`;\n\n if (err?.error?.message) {\n errorMessage = err.error.message;\n } else if (err?.message) {\n errorMessage = err.message;\n } else if (err?.status === 400) {\n errorMessage = 'Invalid data provided. Please check your input.';\n } else if (err?.status === 404 && isEdit) {\n errorMessage = 'Entity not found. It may have been deleted.';\n } else if (err?.status === 409) {\n errorMessage = 'Entity with this code already exists. Please use a different code.';\n } else if (err?.status === 500) {\n errorMessage = 'Server error. Please try again later.';\n }\n\n this.error.set(errorMessage);\n this.loading.set(false);\n }\n });\n } else {\n // Mark all fields as touched to show validation errors\n this.entityForm.markAllAsTouched();\n\n const validationErrors = this.getFormValidationSummary();\n console.warn('⚠️ FORM VALIDATION ERRORS:', validationErrors);\n\n this.error.set(`Please fix the following errors: ${validationErrors.join(', ')}`);\n }\n }\n\n onReset() {\n if (this.isEditMode() && this.entityId()) {\n // In edit mode, reload the original data from API\n console.log('🔄 Resetting form in edit mode - reloading original data');\n this.loadEntityData(this.entityId()!);\n } else {\n // In create mode, clear the form\n console.log('🔄 Resetting form in create mode - clearing all fields');\n \n // Clear logo file\n this.logoFile = undefined;\n\n // Reset form to initial values\n this.entityForm.reset({\n syen_name: '',\n syen_entity_type_sygms: '',\n syen_entity_code: '',\n syen_udise_no: '',\n syen_affiliation_no: '',\n syen_isactive: true,\n syen_corporate_address: '',\n syen_corporate_pin_sypin: '',\n syen_corporate_city_sypin: '',\n syen_corporate_state_sypin: '',\n syen_corporate_country_syctr: '',\n syen_corporate_contact_person_user: '',\n syen_corporate_phone: '',\n syen_corporate_phone_alt: '',\n syen_corporate_fax: '',\n syen_corporate_email: '',\n syen_corporate_email_alt: '',\n syen_website: '',\n syen_currency_sycr: '',\n syen_registered_address: '',\n syen_registered_pin_sypin: '',\n syen_registered_city_sypin: '',\n syen_registered_state_sypin: '',\n syen_registered_country_syctr: '',\n syen_registered_contact_person_user: '',\n syen_registered_phone: '',\n syen_registered_fax: '',\n syen_registered_email: '',\n syen_photo_id_cyfm: ''\n });\n }\n\n this.success.set(null);\n this.error.set(null);\n console.log('🔄 Form reset completed');\n }\n\n onImageUploadSuccess(uploadedId: string) {\n console.log('✅ Image uploaded successfully with ID:', uploadedId);\n // The form control is automatically updated by the file input component\n }\n\n onImageUploadError(error: string) {\n console.error('❌ Image upload failed:', error);\n // Error notifications are now handled by the file input component itself\n }\n\n onImageUploadProgress(progress: number) {\n // Progress notifications are now handled by the file input component itself\n console.log('Upload progress:', progress);\n }\n\n getUploadData() {\n return {\n altText: 'Entity Logo',\n userId: this.appState.getCurrentUser()?._id || '',\n permissions: ['read', 'write'],\n tags: ['entity', 'logo', 'image'],\n uploadType: 'entity_logo',\n };\n }\n\n\n} ","<!-- Modern Entity Create Form -->\n<div class=\"tw-min-h-scree\">\n <div class=\"tw-mx-auto\">\n\n\n <form [formGroup]=\"entityForm\" [class.tw-opacity-60]=\"loading()\" [class.tw-pointer-events-none]=\"loading()\"\n (ngSubmit)=\"onSubmit()\" class=\"tw-space-y-6\">\n\n <!-- Basic Information Section -->\n <div class=\"tw-p-4 tw-pb-0\">\n <div class=\"tw-space-y-6\">\n <!-- Top Section: Image on Right, Form Fields on Left -->\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4\">\n <!-- Left Side: Form Fields -->\n <div class=\"tw-space-y-6\">\n <!-- Institution Name, Entity Type & Active Status -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_250px_120px] tw-gap-4 tw-items-end\">\n <cide-ele-input id=\"syen_name\" type=\"text\" label=\"Institution Name *\" formControlName=\"syen_name\"\n placeholder=\"Enter institution name\" size=\"sm\">\n </cide-ele-input>\n\n <cide-ele-select label=\"Entity Type *\" labelPlacement=\"floating\" [options]=\"entityTypes()\"\n formControlName=\"syen_entity_type_sygms\" placeholder=\"Select institution type\" size=\"sm\">\n </cide-ele-select>\n\n <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-1 tw-h-full\">\n <cide-ele-input type=\"checkbox\" formControlName=\"syen_isactive\" size=\"sm\" label=\"Is Active\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- UDISE, Affiliation & Institution Code -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-4\">\n <cide-ele-input label=\"UDISE Number\" formControlName=\"syen_udise_no\" placeholder=\"Enter UDISE number\" size=\"sm\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Affiliation Number\" formControlName=\"syen_affiliation_no\"\n placeholder=\"Enter affiliation number\" size=\"sm\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Institution Code *\" formControlName=\"syen_entity_code\"\n placeholder=\"Enter unique code\" size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Right Side: Entity Image Upload -->\n <div class=\"tw-flex tw-items-start tw-justify-center tw-pt-0\">\n <cide-ele-file-input id=\"entity_image_upload\" formControlName=\"syen_photo_id_cyfm\" accept=\"image/*\"\n [showPreview]=\"true\" [previewBoxMode]=\"true\" [showFileName]=\"false\" \n previewWidth=\"180px\" previewHeight=\"120px\" [required]=\"true\"\n placeholderText=\"Upload Logo\" placeholderIcon=\"cloud_upload\"\n [autoUpload]=\"true\" [uploadData]=\"getUploadData()\"\n (uploadSuccess)=\"onImageUploadSuccess($event)\" \n (uploadError)=\"onImageUploadError($event)\"\n (uploadProgressChange)=\"onImageUploadProgress($event)\">\n </cide-ele-file-input>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Tab Navigation -->\n <div class=\"tw-px-4 !tw-mt-0\">\n <cide-ele-tab [tabs]=\"entityTabs()\" [activeTabId]=\"activeTab()\" size=\"sm\" variant=\"default\"\n (tabChange)=\"onTabChange($event)\">\n </cide-ele-tab>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tw-transition-all tw-duration-300 tw-ease-in-out !tw-mt-2\" [class.tw-opacity-60]=\"loading()\"\n [class.tw-pointer-events-none]=\"loading()\">\n @switch (activeTab()) {\n\n @case ('corporate') {\n <div class=\"tw-p-4\">\n <div class=\"tw-space-y-6\">\n <!-- Corporate Address - Full Width -->\n <div class=\"tw-w-full\">\n <cide-ele-textarea label=\"Corporate Address *\" formControlName=\"syen_corporate_address\"\n placeholder=\"Enter complete corporate address\" [rows]=\"4\">\n </cide-ele-textarea>\n </div>\n\n <!-- Postal Code & City - Two Columns -->\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\" formControlName=\"syen_corporate_pin_sypin\"\n placeholder=\"Select postal code\" [searchable]=\"true\" [loading]=\"postalCodesLoading()\"\n (searchChange)=\"onPostalCodeSearch($event)\">\n </cide-ele-select>\n \n <cide-ele-input label=\"City\" formControlName=\"syen_corporate_city_sypin\" placeholder=\"Enter city name\">\n </cide-ele-input>\n </div>\n \n <!-- State & Country - Two Columns -->\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"State\" formControlName=\"syen_corporate_state_sypin\" placeholder=\"Enter state name\">\n </cide-ele-input>\n \n <cide-ele-select label=\"Country\" [options]=\"corporateCountries()\"\n formControlName=\"syen_corporate_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\n (searchChange)=\"onCorporateCountrySearch($event)\" [loading]=\"corporateCountriesLoading()\">\n </cide-ele-select>\n </div>\n </div>\n </div>\n }\n\n @case ('contact') {\n <div class=\"tw-p-4\">\n <div class=\"tw-space-y-6\">\n <!-- Contact Person & Currency - Two Columns -->\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-select label=\"Primary Contact Person\" [options]=\"users()\"\n formControlName=\"syen_corporate_contact_person_user\" placeholder=\"Select contact person\"\n [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\n </cide-ele-select>\n \n <cide-ele-select label=\"Currency\" [options]=\"currencies()\" formControlName=\"syen_currency_sycr\"\n placeholder=\"Select currency\">\n </cide-ele-select>\n </div>\n \n <!-- Phone Numbers - Two Columns -->\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Primary Phone *\" formControlName=\"syen_corporate_phone\" type=\"tel\"\n placeholder=\"Enter primary phone number\">\n </cide-ele-input>\n \n <cide-ele-input label=\"Alternate Phone\" formControlName=\"syen_corporate_phone_alt\" type=\"tel\"\n placeholder=\"Enter alternate phone number\">\n </cide-ele-input>\n </div>\n \n <!-- Fax & Website - Two Columns -->\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Fax Number\" id=\"syen_corporate_fax\" formControlName=\"syen_corporate_fax\" placeholder=\"Enter fax number\">\n </cide-ele-input>\n \n <cide-ele-input label=\"Website URL\" formControlName=\"syen_website\" type=\"url\"\n placeholder=\"https://example.com\" autocomplete=\"url\" leadingIcon=\"language\"\n helperText=\"Enter a valid website URL starting with http:// or https://\">\n </cide-ele-input>\n </div>\n \n <!-- Email Addresses - Two Columns -->\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Primary Email *\" formControlName=\"syen_corporate_email\" type=\"email\"\n placeholder=\"Enter primary email address\">\n </cide-ele-input>\n \n <cide-ele-input label=\"Alternate Email\" formControlName=\"syen_corporate_email_alt\" type=\"email\"\n placeholder=\"Enter alternate email address\">\n </cide-ele-input>\n </div>\n </div>\n </div>\n }\n\n @case ('registered') {\n <div class=\"tw-p-4\">\n <div class=\"tw-space-y-6\">\n <!-- Registered Address - Full Width -->\n <div class=\"tw-w-full\">\n <cide-ele-textarea label=\"Registered Address *\" formControlName=\"syen_registered_address\"\n placeholder=\"Enter complete registered address\" [rows]=\"4\">\n </cide-ele-textarea>\n </div>\n\n <!-- Postal Code, City, State & Country - Four Columns -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[220px_0.8fr_0.7fr_240px] tw-gap-6\">\n <cide-ele-select label=\"Postal Code\" [options]=\"postalCodes()\" formControlName=\"syen_registered_pin_sypin\"\n placeholder=\"Select postal code\" [searchable]=\"true\" [loading]=\"postalCodesLoading()\"\n (searchChange)=\"onPostalCodeSearch($event)\" size=\"sm\">\n </cide-ele-select>\n \n <cide-ele-input label=\"City\" formControlName=\"syen_registered_city_sypin\" placeholder=\"Enter city name\">\n </cide-ele-input>\n \n <cide-ele-input label=\"State\" formControlName=\"syen_registered_state_sypin\"\n placeholder=\"Enter state name\">\n </cide-ele-input>\n \n <cide-ele-select label=\"Country\" [options]=\"registeredCountries()\"\n formControlName=\"syen_registered_country_syctr\" placeholder=\"Select country\" [searchable]=\"true\"\n (searchChange)=\"onRegisteredCountrySearch($event)\" [loading]=\"registeredCountriesLoading()\" size=\"sm\">\n </cide-ele-select>\n </div>\n \n <!-- Contact Person, Phone, Email & Fax - Four Columns -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-[1fr_200px_1fr_150px] tw-gap-6\">\n <cide-ele-select label=\"Contact Person\" [options]=\"users()\"\n formControlName=\"syen_registered_contact_person_user\" placeholder=\"Select contact person\"\n [searchable]=\"true\" [loading]=\"usersLoading()\" (searchChange)=\"onUserSearch($event)\">\n </cide-ele-select>\n \n <cide-ele-input label=\"Phone\" formControlName=\"syen_registered_phone\" type=\"tel\"\n placeholder=\"Enter phone number\" size=\"sm\">\n </cide-ele-input>\n \n <cide-ele-input label=\"Email\" formControlName=\"syen_registered_email\" type=\"email\"\n placeholder=\"Enter email address\">\n </cide-ele-input>\n \n <cide-ele-input label=\"Fax\" formControlName=\"syen_registered_fax\" placeholder=\"Enter fax number\" size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n </div>\n }\n\n }\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-p-4\">\n <div class=\"tw-flex tw-justify-end tw-gap-3\">\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"md\" (click)=\"onReset()\" [disabled]=\"loading()\">\n <cide-ele-icon>refresh</cide-ele-icon>\n Reset Form\n </button>\n \n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"md\" [disabled]=\"loading() || entityForm.invalid\"\n [loading]=\"loading()\">\n <cide-ele-icon>{{ isEditMode() ? 'save' : 'add' }}</cide-ele-icon>\n {{ isEditMode() ? 'Update Entity' : 'Create Entity' }}\n </button>\n </div>\n </div>\n </form>\n</div>\n</div>","import { Component, signal, OnInit, inject, viewChild, TemplateRef, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { CideIconComponent } from 'cloud-ide-element';\nimport { CideEleButtonComponent, CideSelectComponent } from 'cloud-ide-element';\nimport { CideEleDataGridComponent ,GridConfiguration, GridEvent, TemplateContext} from 'cloud-ide-element';\nimport { CideEleDropdownComponent, DropdownItem } from 'cloud-ide-element';\nimport { entityControllerResponse, CoreSystemEntityListResponse, generateStringFromObject } from 'cloud-ide-lms-model';\nimport { CideCoreEntityManagementService } from '../../services/entity-management.service';\n\n\n@Component({\n selector: 'cide-core-entity-list',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n CideIconComponent,\n CideEleButtonComponent,\n CideSelectComponent,\n CideEleDataGridComponent,\n CideEleDropdownComponent\n ],\n templateUrl: './entity-list.component.html',\n styleUrl: './entity-list.component.scss',\n styles: [`\n :host {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n \n .entity-list-container {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n \n .tw-overflow-auto {\n flex: 1;\n min-height: 0;\n }\n \n cide-ele-data-grid {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n `]\n})\nexport class CideCoreEntityListComponent implements OnInit {\n // Modern dependency injection using inject()\n router = inject(Router); // Made public for template access\n private entityService = inject(CideCoreEntityManagementService);\n\n // ViewChild reference to the grid component using modern signal approach\n gridComponent = viewChild<CideEleDataGridComponent<CoreSystemEntityListResponse>>(CideEleDataGridComponent);\n\n // Template references using modern viewChild signal approach with proper typing\n entityDetailsRenderer = viewChild.required<TemplateRef<TemplateContext<CoreSystemEntityListResponse>>>('entityDetailsRenderer');\n entityTypeRenderer = viewChild.required<TemplateRef<TemplateContext<CoreSystemEntityListResponse>>>('entityTypeRenderer');\n actionsDropdownRenderer = viewChild.required<TemplateRef<TemplateContext<CoreSystemEntityListResponse>>>('actionsDropdownRenderer');\n\n // State management using Angular Signals\n entities = signal<CoreSystemEntityListResponse[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n searchQuery = signal('');\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n selectedEntityType = signal('');\n\n // Getter and setter for ngModel compatibility\n get selectedEntityTypeValue(): string {\n return this.selectedEntityType();\n }\n\n set selectedEntityTypeValue(value: string) {\n this.selectedEntityType.set(value);\n }\n\n // Pagination calculations\n totalPages = signal(0);\n hasNextPage = signal(false);\n hasPreviousPage = signal(false);\n jumpToPage: number = 1;\n loadStartTime: number = 0;\n\n // Filter options\n entityTypeOptions = signal([\n { value: '', label: 'All Entity Types' },\n { value: 'school', label: 'School' },\n { value: 'college', label: 'College' },\n { value: 'university', label: 'University' },\n { value: 'institute', label: 'Institute' }\n ]);\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<CoreSystemEntityListResponse>>({\n id: 'entity-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'details',\n header: 'Entity Details',\n type: 'custom',\n width: 'lg',\n truncate: true,\n align: 'left',\n renderer: 'entityDetailsRenderer'\n },\n {\n key: 'syen_isactive',\n header: 'Status',\n type: 'status',\n width: 'md',\n truncate: false,\n align: 'center',\n statusConfig: {\n activeValue: true,\n activeLabel: 'Active',\n inactiveLabel: 'Inactive',\n activeClass: 'tw-bg-green-100 tw-text-green-800',\n inactiveClass: 'tw-bg-red-100 tw-text-red-800'\n }\n },\n {\n key: 'syen_entity_type_sygms',\n header: 'Entity Type',\n type: 'custom',\n width: 'md',\n truncate: false,\n align: 'center',\n renderer: 'entityTypeRenderer'\n },\n {\n key: 'actions',\n header: 'Actions',\n type: 'custom',\n width: 'sm',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search entities...',\n searchableColumns: ['syen_name', 'syen_entity_code', 'syen_corporate_email'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n fullHeight: true,\n onRowClick: 'onEntityRowClick',\n onRefresh: 'onEntityRefresh',\n tree: {\n enabled: true,\n primaryKey: '_id',\n foreignKey: 'syen_parent_entity_id',\n childrenKey: 'children',\n levelKey: 'level',\n expandedKey: 'isExpanded',\n hasChildrenKey: 'hasChildren'\n }\n });\n\n // Template renderers for complex columns using computed signal\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext<CoreSystemEntityListResponse>>> => ({\n entityDetailsRenderer: this.entityDetailsRenderer(),\n entityTypeRenderer: this.entityTypeRenderer(),\n actionsDropdownRenderer: this.actionsDropdownRenderer()\n }));\n\n\n // Helper method to get entity type name for template\n getEntityTypeName(row: CoreSystemEntityListResponse): string {\n const entityTypeId = row.syen_entity_type_sygms || 'N/A';\n let entityTypeName = '';\n \n // Check if entity_type_details exists in the row data (using any to bypass type checking)\n const rowData = row as any;\n if (rowData.entity_type_details?.sygms_title) {\n entityTypeName = rowData.entity_type_details.sygms_title;\n } else if (rowData.syen_entity_type_details?.sygms_title) {\n entityTypeName = rowData.syen_entity_type_details.sygms_title;\n } else {\n // Fallback: try to make the entity type ID more readable\n entityTypeName = entityTypeId.replace(/_/g, ' ').replace(/\\b\\w/g, l => l.toUpperCase());\n }\n \n return entityTypeName;\n }\n\n // Type helper for templates - ensures proper typing in template context\n $any = (value: any): any => value;\n\n // Dropdown configuration with portal support\n getDropdownConfig() {\n return {};\n }\n\n // Dropdown methods\n getDropdownItems(entity: CoreSystemEntityListResponse): DropdownItem[] {\n return [\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'addChild',\n label: 'Add Child',\n icon: 'add',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-600',\n hoverBgColor: 'hover:tw-bg-blue-50'\n },\n {\n id: 'toggle',\n label: entity.syen_isactive ? 'Deactivate' : 'Activate',\n icon: 'power_settings_new',\n iconColor: 'tw-text-orange-400',\n textColor: 'tw-text-orange-600',\n hoverBgColor: 'hover:tw-bg-orange-50'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-600',\n hoverBgColor: 'hover:tw-bg-red-50'\n }\n ];\n }\n\n onDropdownItemClick(item: DropdownItem, entity: CoreSystemEntityListResponse): void {\n switch (item.id) {\n case 'edit':\n this.editEntity(entity);\n break;\n case 'addChild':\n this.addChildEntity(entity);\n break;\n case 'toggle':\n this.toggleEntityStatus(entity);\n break;\n case 'delete':\n this.deleteEntity(entity);\n break;\n default:\n console.log('Unknown action:', item.id);\n }\n }\n\n private editEntity(entity: CoreSystemEntityListResponse): void {\n const query: string = generateStringFromObject({\n syen_id: entity._id\n });\n this.router.navigate(['control-panel', 'entity-create', query]);\n }\n\n private addChildEntity(entity: CoreSystemEntityListResponse): void {\n console.log('Adding child entity for:', entity.syen_name);\n // Navigate to entity create form with parent entity ID\n const query: string = generateStringFromObject({\n syen_parent_entity_id: entity._id\n });\n this.router.navigate(['control-panel', 'entity-create', query]);\n }\n\n private toggleEntityStatus(entity: CoreSystemEntityListResponse): void {\n console.log('Toggling entity status for:', entity.syen_name);\n const action = entity.syen_isactive ? 'deactivate' : 'activate';\n const entityName = entity.syen_name || 'this entity';\n \n if (confirm(`Are you sure you want to ${action} ${entityName}?`)) {\n // TODO: Implement actual API call to toggle entity status\n console.log(`${action} entity:`, entity._id);\n // For now, just reload the entities\n this.loadEntities(true);\n }\n }\n\n private deleteEntity(entity: CoreSystemEntityListResponse): void {\n const entityName = entity.syen_name || 'this entity';\n if (confirm(`Are you sure you want to delete ${entityName}?`)) {\n this.onDeleteEntityConfirmed(entity._id || '');\n }\n }\n\n // Action handlers (simplified since we're using dropdown)\n actionHandlers = {};\n\n ngOnInit() {\n console.log('🔧 ENTITY LIST: Component initializing');\n this.updatePaginationState();\n\n // Set initial loading state to false to allow grid to render\n this.loading.set(false);\n\n // Load entities from API\n this.loadEntities();\n }\n\n // Grid event handler\n onGridEvent(event: GridEvent<CoreSystemEntityListResponse>) {\n console.log('📡 GRID EVENT: Received grid event:', event.type, event);\n\n switch (event.type) {\n case 'rowClick':\n this.onEntityRowClick(event.data as CoreSystemEntityListResponse);\n break;\n case 'refresh':\n this.onEntityRefresh();\n break;\n case 'search':\n this.onEntitySearch(event.data as string);\n break;\n case 'pageChange':\n this.onEntityPageChange(event.data as number);\n break;\n default:\n console.log('Unhandled grid event:', event.type);\n }\n }\n\n // Event handlers for grid events\n private onEntityRowClick(entity: CoreSystemEntityListResponse) {\n console.log('Entity row clicked:', entity);\n this.router.navigate(['admin', 'entity', 'view', entity._id]);\n }\n\n private onEntityRefresh() {\n console.log('Refreshing entities...');\n this.loadEntities(true);\n }\n\n private onEntitySearch(query: string) {\n console.log('Search entities:', query);\n this.searchQuery.set(query);\n // The grid handles the actual filtering\n }\n\n private onEntityPageChange(page: number) {\n console.log('Page changed to:', page);\n this.currentPage.set(page);\n \n // Reload data for the new page\n this.loadEntities(false);\n }\n\n private onDeleteEntityConfirmed(entityId: string) {\n // In a real app, you'd call the API to delete\n console.log('Deleting entity:', entityId);\n // For now, just reload the entities\n this.loadEntities(true);\n }\n\n // Update grid data method\n private updateGridData(entities: CoreSystemEntityListResponse[]) {\n console.log('📊 GRID UPDATE: Updating grid with', entities.length, 'entities');\n console.log('📊 GRID UPDATE: Sample entity data:', entities[0] || 'No entities');\n\n // Set the entities signal\n this.entities.set(entities);\n\n // Update grid configuration with new data and ensure loading is false\n this.gridConfig.update(config => ({\n ...config,\n data: entities\n }));\n\n // Ensure loading states are cleared\n this.loading.set(false);\n \n // Clear page change loading state in the grid component\n const gridComp = this.gridComponent();\n if (gridComp) {\n gridComp.clearPageChangeLoading();\n }\n\n console.log('📊 GRID UPDATE: Grid config updated successfully');\n console.log('📊 GRID UPDATE: Current grid data length:', this.gridConfig().data.length);\n console.log('📊 GRID UPDATE: Loading state:', this.loading());\n console.log('📊 GRID UPDATE: Full grid config for debugging:', JSON.stringify(this.gridConfig(), null, 2));\n }\n\n loadEntities(isRefresh: boolean = false) {\n if (isRefresh) {\n console.log('🔄 ENTITY LIST: Refreshing entities');\n // Set the grid's refresh state to true\n const gridComp = this.gridComponent();\n if (gridComp) {\n gridComp.setRefreshing(true);\n }\n } else {\n this.loading.set(true);\n console.log('🔍 ENTITY LIST: Loading entities from API');\n }\n this.error.set(null);\n this.loadStartTime = Date.now();\n\n this.entityService.getEntityList({}).subscribe({\n next: (response: entityControllerResponse) => {\n console.log('✅ ENTITY LIST: API response received:', response);\n\n // Process the response data\n if (response?.data) {\n // Handle both array and single object responses\n const entitiesData = Array.isArray(response.data) ? response.data : [response.data];\n console.log('📋 ENTITY LIST: Processed entities data:', entitiesData.length, 'entities');\n\n if (entitiesData.length > 0) {\n console.log('📊 ENTITY LIST: First entity sample:', entitiesData[0]);\n this.updateGridData(entitiesData);\n this.totalItems.set(entitiesData.length);\n } else {\n console.log('📊 ENTITY LIST: No entities returned, showing test data');\n }\n } else {\n console.warn('⚠️ ENTITY LIST: No data in API response, loading test data');\n }\n\n this.updatePaginationState();\n this.loading.set(false);\n \n // Clear page change loading state in the grid component\n const gridComp = this.gridComponent();\n if (gridComp) {\n gridComp.clearPageChangeLoading();\n }\n \n // Set the grid's refresh state to false when done\n if (isRefresh && gridComp) {\n gridComp.setRefreshing(false);\n }\n },\n error: (err: any) => {\n console.error('❌ ENTITY LIST: API error:', err);\n console.log('🧪 ENTITY LIST: API failed, loading test data for demonstration');\n\n // Load test data when API fails\n this.error.set('API unavailable. Showing sample data.');\n\n this.loading.set(false);\n \n // Clear page change loading state in the grid component\n const gridComp = this.gridComponent();\n if (gridComp) {\n gridComp.clearPageChangeLoading();\n }\n \n // Set the grid's refresh state to false when done\n if (isRefresh && gridComp) {\n gridComp.setRefreshing(false);\n }\n }\n });\n }\n\n private updatePaginationState() {\n const total = Math.ceil(this.totalItems() / this.pageSize());\n this.totalPages.set(total);\n this.hasNextPage.set(this.currentPage() < total);\n this.hasPreviousPage.set(this.currentPage() > 1);\n }\n\n onSearch() {\n this.currentPage.set(1);\n this.loadEntities();\n }\n\n onFilterChange() {\n this.currentPage.set(1);\n this.loadEntities();\n }\n\n onPageChange(page: number | string) {\n if (parseInt(page as string) >= 1 && parseInt(page as string) <= this.totalPages()) {\n this.currentPage.set(parseInt(page as string));\n this.loadEntities();\n }\n }\n\n onPageSizeChange() {\n this.currentPage.set(1);\n this.loadEntities();\n }\n\n onRefresh() {\n this.loadEntities(true); // Pass true for refresh\n }\n\n onAddEntity() {\n // Navigate to entity create form\n this.router.navigate(['/control-panel/entity-create']);\n }\n\n onEditEntity(entity: CoreSystemEntityListResponse) {\n // TODO: Implement edit functionality - navigate to edit form with entity ID\n this.router.navigate(['/control-panel/entity-create'], {\n queryParams: { id: entity._id, mode: 'edit' }\n });\n console.log('Edit entity:', entity);\n }\n\n onViewEntity(entity: CoreSystemEntityListResponse) {\n // TODO: Implement view functionality\n console.log('View entity:', entity);\n }\n\n onDeleteEntity(entity: CoreSystemEntityListResponse) {\n if (confirm(`Are you sure you want to delete \"${entity.syen_name}\"?`)) {\n // TODO: Implement delete functionality\n console.log('Delete entity:', entity);\n }\n }\n\n getStatusClass(isActive: boolean): string {\n return isActive\n ? 'tw-bg-green-100 tw-text-green-800'\n : 'tw-bg-red-100 tw-text-red-800';\n }\n\n getStatusText(isActive: boolean): string {\n return isActive ? 'Active' : 'Inactive';\n }\n\n formatDate(date: Date | string | undefined): string {\n if (!date) return 'N/A';\n return new Date(date).toLocaleDateString();\n }\n\n // Pagination helper methods\n getPageNumbers(): number[] {\n const total = this.totalPages();\n const current = this.currentPage();\n const delta = 2; // Number of pages to show on each side of current page\n\n const pages: number[] = [];\n const start = Math.max(1, current - delta);\n const end = Math.min(total, current + delta);\n\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n\n return pages;\n }\n\n getItemRangeText(): string {\n const start = (this.currentPage() - 1) * this.pageSize() + 1;\n const end = Math.min(this.currentPage() * this.pageSize(), this.totalItems());\n const total = this.totalItems();\n\n return `${start}-${end} of ${total}`;\n }\n\n trackByEntityId(index: number, entity: CoreSystemEntityListResponse): string {\n return entity?._id || '';\n }\n\n // ===== Enhanced Pagination Methods =====\n\n /**\n * Get enhanced page numbers with ellipsis for better navigation\n */\n getEnhancedPageNumbers(): (number | string)[] {\n const total = this.totalPages();\n const current = this.currentPage();\n const pages: (number | string)[] = [];\n\n if (total <= 7) {\n // Show all pages if 7 or fewer\n for (let i = 1; i <= total; i++) {\n pages.push(i);\n }\n } else {\n // Always show first page\n pages.push(1);\n\n if (current <= 4) {\n // Current page is near the beginning\n for (let i = 2; i <= 5; i++) {\n pages.push(i);\n }\n pages.push('...');\n pages.push(total);\n } else if (current >= total - 3) {\n // Current page is near the end\n pages.push('...');\n for (let i = total - 4; i <= total; i++) {\n pages.push(i);\n }\n } else {\n // Current page is in the middle\n pages.push('...');\n for (let i = current - 1; i <= current + 1; i++) {\n pages.push(i);\n }\n pages.push('...');\n pages.push(total);\n }\n }\n\n return pages;\n }\n\n /**\n * Calculate progress percentage based on current position\n */\n getProgressPercentage(): number {\n if (this.totalPages() === 0) return 0;\n return Math.round((this.currentPage() / this.totalPages()) * 100);\n }\n\n /**\n * Jump to specific page functionality\n */\n onJumpToPage(): void {\n if (this.jumpToPage >= 1 && this.jumpToPage <= this.totalPages()) {\n this.onPageChange(this.jumpToPage);\n }\n }\n\n /**\n * Get simulated load time for performance display\n */\n getLoadTime(): number {\n return this.loadStartTime > 0 ? Date.now() - this.loadStartTime : 0;\n }\n\n /**\n * Get total data size for display\n */\n getTotalDataSize(): number {\n return this.totalItems();\n }\n\n /**\n * Export current page entities\n */\n onExportCurrentPage(): void {\n const currentPageEntities = this.entities();\n console.log('Exporting current page:', currentPageEntities);\n // TODO: Implement actual export functionality\n alert(`Exporting ${currentPageEntities.length} entities from current page`);\n }\n\n /**\n * Export all entities\n */\n onExportAll(): void {\n console.log('Exporting all entities');\n // TODO: Implement actual export functionality\n alert(`Exporting all ${this.totalItems()} entities`);\n }\n} ","<!-- Entity List Container -->\r\n<div class=\"entity-list-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-overflow-hidden\">\r\n \r\n <!-- Header Section with Filters -->\r\n <div class=\"tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-4 sm:tw-space-y-0\">\r\n \r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600\">apartment</cide-ele-icon>\r\n <div>\r\n <h5 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">Entity Management</h5>\r\n </div>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <!-- Entity Type Filter -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <label for=\"entityTypeFilter\" class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Type:</label>\r\n <cide-ele-select\r\n id=\"entityTypeFilter\"\r\n [options]=\"entityTypeOptions()\"\r\n [(ngModel)]=\"selectedEntityTypeValue\"\r\n (ngModelChange)=\"loadEntities()\"\r\n class=\"tw-min-w-40\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Add Entity Button -->\r\n <button\r\n cideEleButton\r\n variant=\"primary\"\r\n size=\"sm\"\r\n (click)=\"router.navigate(['control-panel', 'entity-create'])\"\r\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">add</cide-ele-icon>\r\n Add Entity\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex\">\r\n <cide-ele-icon name=\"exclamation-triangle\" class=\"tw-text-red-400\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Data Grid Component -->\r\n <cide-ele-data-grid\r\n [config]=\"gridConfig()\"\r\n [templateRenderers]=\"templateRenderers()\"\r\n [actionHandlers]=\"actionHandlers\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n\r\n</div>\r\n\r\n<!-- Custom Renderer Templates -->\r\n\r\n<!-- Entity Details Renderer Template -->\r\n<!-- Context: { $implicit: unknown, row: entityResponseData, value: unknown, column: GridColumn } -->\r\n<ng-template #entityDetailsRenderer let-value=\"value\" let-entity=\"row\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <div class=\"tw-flex-shrink-0 tw-w-10 tw-h-10 tw-bg-blue-100 tw-rounded-full tw-flex tw-items-center tw-justify-center\">\r\n <span class=\"tw-text-blue-600 tw-font-semibold tw-text-sm\">\r\n {{ (entity.syen_entity_code || 'NA').substring(0, 2).toUpperCase() }}\r\n </span>\r\n </div>\r\n <div class=\"tw-flex-1 tw-min-w-0\">\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"entity.syen_name || 'Unknown Entity'\">\r\n {{ entity.syen_name || 'Unknown Entity' }}\r\n </p>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-truncate\" [title]=\"entity.syen_entity_code || 'N/A'\">\r\n Code: {{ entity.syen_entity_code || 'N/A' }}\r\n </p>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- Entity Type Renderer Template -->\r\n<!-- Context: { $implicit: unknown, row: entityResponseData, value: unknown, column: GridColumn } -->\r\n<ng-template #entityTypeRenderer let-value=\"value\" let-entity=\"row\">\r\n <div class=\"tw-flex tw-flex-col tw-items-center tw-space-y-1\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"getEntityTypeName(entity)\">\r\n {{ getEntityTypeName(entity) }}\r\n </span>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown Renderer Template -->\r\n<!-- Context: { $implicit: unknown, row: entityResponseData, value: unknown, column: GridColumn } -->\r\n<ng-template #actionsDropdownRenderer let-value=\"value\" let-entity=\"row\">\r\n <cide-ele-dropdown \r\n [items]=\"getDropdownItems(entity)\"\r\n [config]=\"getDropdownConfig()\"\r\n (itemClick)=\"onDropdownItemClick($event, entity)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n\r\n","// Entity Management Components\r\nexport { CideCoreEntityCreateComponent } from './components/entity-create/entity-create.component';\r\nexport { CideCoreEntityListComponent } from './components/entity-list/entity-list.component';\r\n\r\n// Entity Management Services\r\nexport { CideCoreEntityManagementService } from './services/entity-management.service';\r\n\r\n","import { Component, inject, signal, OnInit, OnDestroy, DestroyRef, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, FormsModule, Validators, FormArray, AbstractControl, ValidationErrors } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideEleTabComponent, TabItem, CideSelectComponent, CideEleDataGridComponent, GridConfiguration, GridEvent, TemplateContext } from 'cloud-ide-element';\nimport {\n CideCoreUserMasterService\n} from '../../services';\nimport { CideCoreUserRoleService } from '../../../user-role-management/services/user-role.service';\nimport { CideIconComponent, CideEleFileInputComponent, CideEleFileImageDirective } from \"cloud-ide-element\";\nimport { MenuManagementService } from '../../../menu-management';\nimport { TemplateRef, viewChild } from '@angular/core';\nimport {\n authUserMstGetByIdControllerResponse, AuthUserMstGetByIdPayload,\n generateObjectFromString, customEncrypt, CoreSystemEntityListResponse,\n AuthUserMstGetByIdData, ICoreSydsg, ICoreSydept, designationControllerResponse,\n AuthUserCoreEntityMapping, CoreEntityMapping, pinCodeSelectControllerResponse,\n pinCodeSelectResponseData, countryListControllerResponse, ICoreSyctr,\n AuthUserMstCreatePayload, AuthUserMst, generalMasterListControllerResponse,\n ICoreSygms, AuthUserCoreUserContactAddresses, CoreUserContactAddresses,\n AuthUserCoreUserDocuments, AuthUserCoreUserFamilyDetails, customDecrypt, ICoreSyme,\n MMenuListPayload, IGeneralMasterListRequest,\n CoreUserRoleResponse,\n CoreUserRoleRightsResponse,\n CoreUserRolePermissionData,\n selectSearchType,\n CoreUserRoleExceptionsMapping\n} from 'cloud-ide-lms-model';\nimport { AppStateHelperService, CideLytFloatingUploadTriggerDirective, CideLytFloatingUploadService } from 'cloud-ide-layout';\nimport { CideCoreEntityManagementService } from '../../../entity-management';\nimport { CideCoreDepartmentManagementService } from '../../../department-management';\nimport { CideCoreDesignationManagementService } from '../../../designation-management';\nimport { CideCoreGeneralMasterService } from '../../../general-master-management';\nimport { CideCoreGeneralMasterTypeService } from '../../../general-master-management/services/general-master-type.service';\nimport { CideCorePinCodeService } from '../../../shared/services/pin-code.service';\nimport { CideCoreCountryService } from '../../../shared/services/country.service';\nimport { CoreUserRoleExceptions } from 'cloud-ide-lms-model/lib/schema/core/core_user_role_exceptions';\n\n// Interface for menu rights with role permissions\ninterface MenuRightWithRolePermissions extends ICoreSyme {\n _rolePermissions?: Array<{ _id: string; sygms_title: string; menu_id: string }>; // Role permissions for this menu\n}\n\n// Extended interface for role exceptions with tracking properties\ninterface CoreUserRoleExceptionsWithTracking extends CoreUserRoleExceptions {\n _isUserAdded?: boolean;\n _isUserRemoved?: boolean;\n _changeType?: string;\n}\n\n// Type for menu rights map\ntype MenuRightsMap = { [mappingIndex: string]: MenuRightWithRolePermissions[] };\n\n@Component({\n selector: 'cide-core-user-create',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideInputComponent,\n CideSelectComponent,\n CideTextareaComponent,\n CideEleButtonComponent,\n CideEleTabComponent,\n CideEleFileInputComponent,\n CideEleFileImageDirective,\n CideIconComponent,\n CideEleDataGridComponent,\n CideLytFloatingUploadTriggerDirective\n ],\n templateUrl: './user-create.component.html'\n})\n\nexport class CideCoreUserCreateComponent implements OnInit, OnDestroy {\n // Dependency injection\n private destroyRef = inject(DestroyRef);\n private fb = inject(FormBuilder);\n private cdr = inject(ChangeDetectorRef);\n private userMasterService = inject(CideCoreUserMasterService);\n private entityService = inject(CideCoreEntityManagementService);\n private designationService = inject(CideCoreDesignationManagementService);\n private departmentService = inject(CideCoreDepartmentManagementService);\n private CideCoreGeneralMasterService = inject(CideCoreGeneralMasterService);\n private generalMasterTypeService = inject(CideCoreGeneralMasterTypeService);\n private pinCodeService = inject(CideCorePinCodeService);\n private countryService = inject(CideCoreCountryService);\n private userRoleService = inject(CideCoreUserRoleService);\n private menuService = inject(MenuManagementService);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private appState = inject(AppStateHelperService);\n private floatingUploadService = inject(CideLytFloatingUploadService);\n\n userMasterForm: FormGroup;\n activeTab = signal('basic');\n loading = signal(false);\n error = signal<string | null>(null);\n success = signal<string | null>(null);\n\n // User information from route\n userId = signal<string>('');\n isEditMode = signal(false);\n showPasswordFields = signal(false); // Controls password fields visibility in edit mode\n\n // Profile photo management\n profilePhotoPreview = signal<string | null>(null);\n\n contactAddresses = signal<AuthUserCoreUserContactAddresses[]>([]);\n documents = signal<AuthUserCoreUserDocuments[]>([]);\n familyDetails = signal<AuthUserCoreUserFamilyDetails[]>([]);\n entityMappings = signal<AuthUserCoreEntityMapping[]>([]);\n menuRightsMap = signal<{ [mappingIndex: string]: ICoreSyme[] }>({});\n\n // User rights management\n userRightsTypeId = signal<string | null>(null);\n permissions = signal<ICoreSygms[]>([]);\n\n // Template helpers\n Object = Object;\n\n /**\n * Get address type label for header display\n */\n getAddressTypeLabel(addressIndex: number): string {\n const addressTypeId = this.contactAddressesFormArray.at(addressIndex)?.get('sycad_address_type_id_sygms')?.value;\n if (addressTypeId) {\n const addressType = this.addressTypeOptions().find(option => option._id === addressTypeId);\n return addressType?.sygms_title || 'Address';\n }\n return 'Address';\n }\n\n /**\n * Handle address type change to update header\n */\n onAddressTypeChange(addressIndex: number): void {\n // This method is called when address type changes to trigger header update\n // The header will automatically update due to change detection\n }\n\n /**\n * Get document type label for header display\n */\n getDocumentTypeLabel(documentIndex: number): string {\n const documentTypeId = this.documentsFormArray.at(documentIndex)?.get('syusd_document_type_id_sygms')?.value;\n if (documentTypeId) {\n const documentType = this.documentTypeOptions().find(option => option._id === documentTypeId);\n return documentType?.sygms_title || 'Document';\n }\n return 'Document';\n }\n\n /**\n * Handle document type change to update header\n */\n onDocumentTypeChange(documentIndex: number): void {\n // This method is called when document type changes to trigger header update\n // The header will automatically update due to change detection\n }\n\n /**\n * Handle document files selection\n */\n onDocumentFilesSelected(event: Event, documentIndex: number): void {\n const target = event.target as HTMLInputElement;\n const files = target.files;\n \n if (!files || files.length === 0) return;\n \n console.log(`📎 Files selected for document ${documentIndex}:`, files);\n \n // Store files in the document form group or handle upload logic here\n const documentFormGroup = this.documentsFormArray.at(documentIndex);\n if (documentFormGroup) {\n // You can store the files in a custom property or handle upload immediately\n // For now, we'll store them in a custom property for display\n const existingFiles = this.getDocumentFiles(documentIndex);\n const newFiles = Array.from(files);\n const allFiles = [...existingFiles, ...newFiles];\n \n // Store files in the form group's custom property\n (documentFormGroup as any)._uploadedFiles = allFiles;\n \n console.log(`📎 Total files for document ${documentIndex}:`, allFiles.length);\n }\n }\n\n /**\n * Get document group ID\n */\n getDocumentGroupId(documentIndex: number): string {\n const documentFormGroup = this.documentsFormArray.at(documentIndex);\n return documentFormGroup?.get('syusd_photo_group_id_cyfm')?.value || '';\n }\n\n /**\n * Get uploaded files for a document (legacy method for backward compatibility)\n */\n getDocumentFiles(documentIndex: number): any[] {\n // For multiple file upload with group ID, we don't track individual files\n // Return empty array since files are managed by group ID\n return [];\n }\n\n /**\n * Remove a file from document (legacy method for backward compatibility)\n */\n removeDocumentFile(documentIndex: number, fileName: string): void {\n // For multiple file upload with group ID, individual file removal is not supported\n // Files are managed as a group on the server\n console.log(`📎 Individual file removal not supported for group uploads. Document ${documentIndex}, File: ${fileName}`);\n }\n\n constructor() {\n this.userMasterForm = this.fb.group({\n // Basic User Information from auth_user_mst table\n user_username: ['', []],\n user_firstname: ['', []],\n user_middlename: [''],\n user_lastname: ['', []],\n user_fullname: ['', []],\n user_emailid: ['', [Validators.email]],\n user_mobileno: ['', []],\n user_password: [''],\n user_confirm_password: [''],\n user_photo_id_cyfm: [''],\n user_passwordchangeonlogin: [false],\n user_isactive: [true],\n\n // Entity mappings as FormArray\n core_entity_mapping: this.fb.array([]),\n\n // Contact addresses as FormArray\n core_user_contact_addresses: this.fb.array([]),\n\n // Documents as FormArray\n core_user_documents: this.fb.array([]),\n\n // Family details as FormArray\n core_user_family_details: this.fb.array([])\n });\n\n // Initialize role permissions grid configuration\n this.initializeRolePermissionsGrid();\n }\n\n // FormArray getter for entity mappings\n get entityMappingsFormArray(): FormArray {\n return this.userMasterForm.get('core_entity_mapping') as FormArray;\n }\n\n // FormArray getter for contact addresses\n get contactAddressesFormArray(): FormArray {\n return this.userMasterForm.get('core_user_contact_addresses') as FormArray;\n }\n\n // FormArray getter for documents\n get documentsFormArray(): FormArray {\n return this.userMasterForm.get('core_user_documents') as FormArray;\n }\n\n // FormArray getter for family details\n get familyDetailsFormArray(): FormArray {\n return this.userMasterForm.get('core_user_family_details') as FormArray;\n }\n\n // User search functionality for family member selection\n userSearchResults = signal<{ [familyIndex: number]: AuthUserMst[] }>({});\n userSearchLoading = signal<{ [familyIndex: number]: boolean }>({});\n\n // Debounce timer for search\n private searchDebounceTimers: { [familyIndex: number]: number } = {};\n\n // Helper method to create entity mapping FormGroup\n private createEntityMappingFormGroup(): FormGroup {\n const today = new Date().toISOString().split('T')[0];\n return this.fb.group({\n _id: [''],\n syenm_entity_id_syen: ['', []],\n syenm_role_id_syusrol: [''],\n syenm_designation_id_sydsg: [''],\n syenm_department_id_sydept: [''],\n syenm_activefrom: [today, []],\n syenm_activeupto: [''],\n syenm_isdefault: [false],\n syenm_isactive: [true],\n syenm_isloggedin: [true],\n exceptions: this.fb.array([]) // Add exceptions FormArray\n });\n }\n\n // Helper method to create contact address FormGroup\n private createContactAddressFormGroup(): FormGroup {\n return this.fb.group({\n _id: [''],\n sycad_contact_person_name: [''],\n sycad_address_type_id_sygms: [''],\n sycad_contact_address: [''],\n sycad_contact_pin_sypin: [''],\n sycad_contact_city_sypin: [''],\n sycad_contact_state_sypin: [''],\n sycad_contact_country_syctr: [''],\n sycad_contact_phone: [''],\n sycad_contact_phone_alt: [''],\n sycad_contact_fax: [''],\n sycad_contact_email: [''],\n sycad_contact_email_alt: ['']\n });\n }\n\n // Helper method to create document FormGroup\n private createDocumentFormGroup(): FormGroup {\n const formGroup = this.fb.group({\n _id: [''],\n syusd_user_id_user: [''],\n syusd_document_type_id_sygms: [''],\n syusd_doc_number: [''],\n syusd_doc_name_as_per_doc: [''],\n syusd_doc_issue_date: [''],\n syusd_doc_expiry_date: [''],\n syusd_photo_group_id_cyfm: [''],\n syusd_doc_verification_status_id_sygms: [''],\n syusd_doc_kyc_status_id_sygms: [''],\n syusd_isactive: [true]\n });\n \n // Initialize file storage for this document\n (formGroup as any)._uploadedFiles = [];\n \n return formGroup;\n }\n\n // Helper method to create family detail FormGroup\n private createFamilyDetailFormGroup(): FormGroup {\n return this.fb.group({\n _id: [''],\n syfdl_family_member_name: [''],\n syfdl_family_member_id_user: [''],\n syfdl_family_member_dob: [''],\n syfdl_relationship_id_sygms: [''],\n syfdl_blood_group_sygms: [''],\n syfdl_contact_email: [''],\n syfdl_contact_email_id: [''],\n syfdl_contact_phone: [''],\n syfdl_contact_number: [''],\n syfdl_isactive: [true]\n });\n }\n\n userTabs() {\n return [\n { id: 'basic', label: 'User Details', icon: 'person' },\n { id: 'auth', label: 'Authentication', icon: 'security' },\n { id: 'roles', label: 'Entity-Role Mapping', icon: 'admin_panel_settings' },\n { id: 'addresses', label: 'Contact Addresses', icon: 'location_on' },\n { id: 'documents', label: 'Documents', icon: 'description' },\n { id: 'family', label: 'Family Details', icon: 'family_restroom' }\n ];\n }\n\n // User search methods for family member selection\n searchUsers(query: string = '', familyIndex: number = 0) {\n // Update loading state for specific family member\n this.userSearchLoading.update(loading => ({\n ...loading,\n [familyIndex]: true\n }));\n\n // Create payload for user search - no pagination, larger page size\n const searchPayload = {\n total: 0,\n pageIndex: 1,\n pageSize: 100, // Load more users at once since no pagination\n query: query || '',\n pagination: false, // Disable pagination\n sort: {\n order: 'asc' as 'asc',\n key: 'user_fullname'\n }\n };\n\n this.userMasterService.getUserList(searchPayload).subscribe({\n next: (response) => {\n if (response?.success) {\n const userData = response?.data || [];\n this.userSearchResults.update(results => ({\n ...results,\n [familyIndex]: userData\n }));\n } else {\n this.userSearchResults.update(results => ({\n ...results,\n [familyIndex]: []\n }));\n }\n },\n error: (error) => {\n console.error('Error searching users:', error);\n this.userSearchResults.update(results => ({\n ...results,\n [familyIndex]: []\n }));\n },\n complete: () => {\n this.userSearchLoading.update(loading => ({\n ...loading,\n [familyIndex]: false\n }));\n }\n });\n }\n\n // Get user options for the select component\n userOptions(familyIndex: number = 0): AuthUserMst[] {\n return this.userSearchResults()[familyIndex] || [];\n }\n\n // Handle search change from the select component with debouncing\n onUserSearchChange(searchEvent: selectSearchType, familyIndex: number) {\n const query = searchEvent?.query;\n\n // Clear existing debounce timer for this family member\n if (this.searchDebounceTimers[familyIndex]) {\n clearTimeout(this.searchDebounceTimers[familyIndex]);\n }\n\n // Set new debounce timer (300ms delay)\n this.searchDebounceTimers[familyIndex] = setTimeout(() => {\n if (query) {\n this.searchUsers(query, familyIndex);\n } else {\n // If no query, load all users\n this.searchUsers('', familyIndex);\n }\n }, 300);\n }\n\n // Load initial users for the select component\n loadInitialUsers() {\n // Load initial users for all existing family members\n const familyCount = this.familyDetailsFormArray.length;\n for (let i = 0; i < familyCount; i++) {\n this.searchUsers('', i);\n }\n }\n\n // Handle user selection change in the form\n onUserSelectionChange(event: AuthUserMst, familyIndex: number) {\n const selectedUserId = event?._id;\n if (selectedUserId) {\n // Find the selected user from the results for this specific family member\n const userResults = this.userSearchResults()[familyIndex] || [];\n const selectedUser = userResults.find((user: any) => user._id === selectedUserId);\n if (selectedUser) {\n // Update the family member name field with the selected user's name\n const familyGroup = this.familyDetailsFormArray.at(familyIndex);\n familyGroup.patchValue({\n syfdl_family_member_name: selectedUser.user_fullname || selectedUser.user_username || ''\n });\n }\n }\n }\n\n entityOptions = signal<CoreSystemEntityListResponse[]>([]);\n roleOptions = signal<{ [entityId: string]: CoreUserRoleResponse[] }>({});\n designationOptions = signal<{ [entityId: string]: ICoreSydsg[] }>({});\n departmentOptions = signal<{ [entityId: string]: ICoreSydept[] }>({});\n menuOptions = signal<ICoreSyme[]>([]);\n\n // Role permissions grid properties\n rolePermissionsGridConfig = signal<GridConfiguration<any>>({\n id: 'menu-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'details',\n header: 'Menu Item',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'menuDetailsRenderer'\n },\n {\n key: 'syme_type',\n header: 'Type',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'menuTypeRenderer'\n },\n {\n key: 'syme_path',\n header: 'Path',\n type: 'text',\n width: '200px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'syme_isactive',\n header: 'Status',\n type: 'status',\n width: '100px',\n truncate: false,\n align: 'center',\n statusConfig: {\n activeValue: true,\n activeLabel: 'Active',\n inactiveLabel: 'Inactive',\n activeClass: 'tw-bg-green-100 tw-text-green-800',\n inactiveClass: 'tw-bg-red-100 tw-text-red-800'\n }\n },\n {\n key: 'syme_permissions_id_sygms',\n header: 'Permissions',\n type: 'custom',\n width: '200px',\n truncate: true,\n align: 'left',\n renderer: 'permissionsRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '60px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: false,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search menu items...',\n searchableColumns: ['syme_title', 'syme_desc', 'syme_path'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n dragDrop: {\n enabled: true,\n orderField: 'syme_order_by',\n dragClass: 'tw-opacity-50 tw-bg-blue-50',\n dropClass: 'tw-bg-green-50'\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none',\n onRefresh: 'onMenuItemRefresh',\n onRowReorder: 'onRowReorder',\n tree: {\n enabled: true,\n primaryKey: '_id',\n foreignKey: 'syme_id_syme',\n childrenKey: 'children',\n levelKey: 'level',\n expandedKey: 'isExpanded',\n hasChildrenKey: 'hasChildren'\n }\n });\n selectedRoleId = signal<string | null>(null);\n selectedEntityIndex = signal<number | null>(null);\n\n // Template renderers for role permissions grid\n menuDetailsRendererTemplate = viewChild<TemplateRef<TemplateContext>>('menuDetailsRendererTemplate');\n permissionsCheckboxRendererTemplate = viewChild<TemplateRef<TemplateContext>>('permissionsCheckboxRendererTemplate');\n menuTypeRendererTemplate = viewChild<TemplateRef<TemplateContext>>('menuTypeRendererTemplate');\n menuRightsPermissionsRendererTemplate = viewChild<TemplateRef<TemplateContext>>('menuRightsPermissionsRendererTemplate');\n permissionsRendererTemplate = viewChild<TemplateRef<TemplateContext>>('permissionsRendererTemplate');\n addressTypeOptions = signal<ICoreSygms[]>([]);\n\n // Document and Family dropdown options\n documentTypeOptions = signal<ICoreSygms[]>([]);\n photoGroupOptions = signal<any[]>([]);\n documentVerificationStatusOptions = signal<ICoreSygms[]>([]);\n documentKycStatusOptions = signal<ICoreSygms[]>([]);\n bloodGroupOptions = signal<ICoreSygms[]>([]);\n relationshipOptionsData = signal<ICoreSygms[]>([]);\n\n // Address-related data - separate for each address\n addressPostalCodes = signal<{ [addressIndex: number]: pinCodeSelectResponseData[] }>({});\n addressCountries = signal<{ [addressIndex: number]: ICoreSyctr[] }>({});\n addressPostalCodesLoading = signal<{ [addressIndex: number]: boolean }>({});\n addressCountriesLoading = signal<{ [addressIndex: number]: boolean }>({});\n postalCodeDataCache = signal<{ [addressIndex: number]: pinCodeSelectResponseData[] }>({});\n\n ngOnInit(): void {\n this.initializeComponent();\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n // Get user information from route (for edit mode)\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n const queryParams = params['query'];\n console.log(queryParams, 'queryParams');\n\n if (queryParams) {\n // Query parameters passed (following page-controls pattern)\n const queryData = generateObjectFromString(queryParams);\n if (queryData?.user_id) {\n this.userId.set(queryData.user_id);\n this.isEditMode.set(true);\n this.showPasswordFields.set(false); // Reset password fields for edit mode\n this.loadUserData(queryData.user_id);\n }\n } else {\n // Create mode - show password fields by default\n this.isEditMode.set(false);\n this.showPasswordFields.set(true);\n }\n\n // Always load dropdown options\n this.loadDropdownOptions();\n this.loadUserRightsTypeId(); // Load user rights type and permissions\n this.setupFormSubscriptions();\n this.setEntityIdFromAppState();\n \n // Set up floating uploader with current user ID\n this.setupFloatingUploader();\n\n // Load initial users for family member selection\n this.loadInitialUsers();\n });\n }\n\n /**\n * Setup floating uploader with current user ID\n */\n private setupFloatingUploader(): void {\n // Get current user ID from app state or use a default\n const currentUser = this.appState.getCurrentUser();\n const currentUserId = currentUser?._id || 'current-user';\n this.floatingUploadService.setCurrentUserId(currentUserId);\n console.log('🚀 [UserCreate] Floating uploader setup with user ID:', currentUserId);\n }\n\n /**\n * Setup form subscriptions\n */\n private setupFormSubscriptions(): void {\n // Watch for password field changes to trigger confirm password validation\n const passwordControl = this.userMasterForm.get('user_password');\n const confirmPasswordControl = this.userMasterForm.get('user_confirm_password');\n\n if (passwordControl && confirmPasswordControl) {\n // When password changes, re-validate confirm password\n passwordControl.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n confirmPasswordControl.updateValueAndValidity();\n });\n }\n\n // Watch for form changes\n this.userMasterForm.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n // Form validation is handled by reactive forms\n });\n }\n\n /**\n * Set entity ID from app state for new user creation\n */\n private setEntityIdFromAppState(): void {\n if (!this.isEditMode()) {\n const entityId = this.appState.getActiveEntityId();\n if (entityId && this.entityMappings().length === 0) {\n // Add default entity mapping for new users\n this.addDefaultEntityMapping(entityId);\n }\n }\n // Set password validation based on mode\n this.updatePasswordValidation();\n }\n\n /**\n * Cleanup when component is destroyed\n */\n ngOnDestroy(): void {\n console.log('🧹 CideCoreUserCreateComponent: Cleaning up component state');\n\n // Clear all debounce timers\n Object.values(this.searchDebounceTimers).forEach(timer => {\n if (timer) {\n clearTimeout(timer);\n }\n });\n this.searchDebounceTimers = {};\n\n console.log('🧹 CideCoreUserCreateComponent: Component state cleaned up');\n }\n\n /**\n * Update password validation based on create/edit mode\n */\n private updatePasswordValidation(): void {\n const passwordControl = this.userMasterForm.get('user_password');\n const confirmPasswordControl = this.userMasterForm.get('user_confirm_password');\n\n if (this.isEditMode()) {\n // In edit mode, passwords are optional but if provided, must meet requirements\n passwordControl?.setValidators([Validators.minLength(8)]);\n confirmPasswordControl?.setValidators([this.passwordMatchValidator.bind(this)]);\n } else {\n // In create mode, password is required\n passwordControl?.setValidators([Validators.required, Validators.minLength(8)]);\n confirmPasswordControl?.setValidators([Validators.required, this.passwordMatchValidator.bind(this)]);\n }\n\n passwordControl?.updateValueAndValidity();\n confirmPasswordControl?.updateValueAndValidity();\n }\n\n /**\n * Custom validator for password confirmation\n */\n private passwordMatchValidator(control: AbstractControl): ValidationErrors | null {\n if (!this.userMasterForm) {\n return null; // Form not initialized yet\n }\n\n const passwordControl = this.userMasterForm.get('user_password');\n const password = passwordControl?.value;\n const confirmPassword = control.value;\n\n // In edit mode, both fields can be empty (no password change)\n if (this.isEditMode() && !password && !confirmPassword) {\n return null;\n }\n\n // In create mode, both fields are required\n if (!this.isEditMode() && (!password || !confirmPassword)) {\n return { passwordRequired: true };\n }\n\n // If password is provided, confirm password must match\n if (password && confirmPassword && password !== confirmPassword) {\n return { passwordMismatch: true };\n }\n\n return null;\n }\n\n /**\n * Check if password update is required (edit mode with password fields filled or triggered)\n */\n isPasswordUpdateRequired(): boolean {\n if (!this.isEditMode()) {\n return false; // In create mode, password is always required\n }\n\n // In edit mode, check if user explicitly wants to update password\n return this.showPasswordFields();\n }\n\n /**\n * Add default entity mapping with active entity\n */\n private addDefaultEntityMapping(entityId: string): void {\n // Create new FormGroup for entity mapping with active entity\n const newMappingFormGroup = this.createEntityMappingFormGroup();\n newMappingFormGroup.patchValue({\n syenm_entity_id_syen: entityId,\n syenm_isdefault: true\n });\n\n // Add to FormArray\n this.entityMappingsFormArray.push(newMappingFormGroup);\n\n // Update the signal for backward compatibility with template functions\n this.entityMappings.update(mappings => [...mappings, {\n syenm_id_user: this.userId(),\n syenm_id_logses: '',\n syenm_entity_id_syen: { _id: entityId, syen_name: '' },\n syenm_role_id_syusrol: { _id: '', syusrol_name: '' },\n syenm_designation_id_sydsg: { _id: '', sydsg_name: '' },\n syenm_department_id_sydept: { _id: '', sydept_name: '' },\n syenm_activefrom: new Date().toISOString().split('T')[0],\n syenm_activeupto: '',\n syenm_isdefault: true,\n syenm_isactive: true,\n syenm_isloggedin: true\n }]);\n }\n\n /**\n * Load user data for edit mode\n */\n private loadUserData(userId: string): void {\n this.loading.set(true);\n this.error.set(null);\n\n // Create payload using the updated service pattern\n const getPayload = new AuthUserMstGetByIdPayload({\n user_id: userId,\n syenm_entity_id_syen: this.appState.getActiveEntityId()\n });\n\n this.userMasterService.getUserMasterById(getPayload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response: authUserMstGetByIdControllerResponse) => {\n console.log(response, 'response');\n if (response.success && response.data) {\n this.populateFormWithUserData(response.data);\n } else {\n this.error.set(response.message || 'Failed to load user data');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error loading user data:', error);\n this.error.set('Failed to load user data. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with user data\n */\n private populateFormWithUserData(data: AuthUserMstGetByIdData): void {\n if (data.auth_user_mst) {\n // Exclude password from the loaded data\n const { user_password, ...userDataWithoutPassword } = data.auth_user_mst;\n this.userMasterForm.patchValue(userDataWithoutPassword);\n\n // Clear password fields in edit mode\n this.userMasterForm.patchValue({\n user_password: '',\n user_confirm_password: ''\n });\n\n // Handle profile photo if it exists\n if (data.auth_user_mst.user_photo_id_cyfm) {\n console.log('📸 Loading existing profile photo:', data.auth_user_mst.user_photo_id_cyfm);\n // The file-input component will automatically load the file details when the form control value is set\n // We can set a preview URL if we have the file data\n this.loadProfilePhotoPreview(data.auth_user_mst.user_photo_id_cyfm);\n }\n }\n\n // Set additional data\n if (data.core_entity_mapping) {\n this.entityMappings.set(data.core_entity_mapping);\n this.entityMappings()?.forEach((mapping: AuthUserCoreEntityMapping, index: number) => {\n this.onEntityChange(index, mapping);\n if (mapping?.syenm_department_id_sydept) {\n this.onDepartmentChange(mapping?.syenm_department_id_sydept)\n }\n\n });\n // Update entity mappings FormArray\n const entityMappingFormArray = this.entityMappingsFormArray;\n entityMappingFormArray.clear();\n data.core_entity_mapping.forEach((mapping: AuthUserCoreEntityMapping) => {\n const mappingGroup = this.createEntityMappingFormGroup();\n let core_entity_mapping: CoreEntityMapping = {};\n core_entity_mapping = {\n ...mapping,\n syenm_entity_id_syen: mapping?.syenm_entity_id_syen?._id,\n syenm_designation_id_sydsg: mapping?.syenm_designation_id_sydsg?._id,\n syenm_role_id_syusrol: mapping?.syenm_role_id_syusrol?._id,\n syenm_department_id_sydept: mapping?.syenm_department_id_sydept?._id\n };\n mappingGroup.patchValue(core_entity_mapping);\n mappingGroup.get('syenm_entity_id_syen')?.disable();\n entityMappingFormArray.push(mappingGroup);\n });\n\n // Load role permissions for each mapping that has a role selected\n data.core_entity_mapping.forEach((mapping: AuthUserCoreEntityMapping, index: number) => {\n if (mapping.syenm_role_id_syusrol) {\n const roleId = typeof mapping.syenm_role_id_syusrol === 'object'\n ? mapping.syenm_role_id_syusrol._id\n : mapping.syenm_role_id_syusrol;\n\n if (roleId) {\n console.log(`🎭 Loading role permissions for mapping ${index} with role ${roleId}`);\n this.loadRolePermissions(roleId, index);\n }\n }\n });\n }\n\n // Handle existing role exceptions\n if (data.core_user_role_exceptions && Array.isArray(data.core_user_role_exceptions)) {\n console.log('🎭 Loading existing role exceptions:', data.core_user_role_exceptions);\n\n // Group exceptions by mapping index\n const exceptionsByMapping: { [mappingIndex: string]: CoreUserRoleExceptionsMapping[] } = {};\n\n data.core_user_role_exceptions.forEach((exception: CoreUserRoleExceptionsMapping) => {\n // Find the mapping index for this exception\n const mappingIndex = this.findMappingIndexByEntityMappingId(exception.syusrex_user_entity_mapping_id_syenm || '');\n if (mappingIndex !== null) {\n if (!exceptionsByMapping[mappingIndex.toString()]) {\n exceptionsByMapping[mappingIndex.toString()] = [];\n }\n exceptionsByMapping[mappingIndex.toString()].push(exception);\n }\n });\n\n // Add exceptions to each mapping\n Object.keys(exceptionsByMapping).forEach(mappingIndexStr => {\n const mappingIndex = parseInt(mappingIndexStr);\n const mapping = this.entityMappings()[mappingIndex];\n if (mapping) {\n (mapping as (AuthUserCoreEntityMapping & { exceptions?: CoreUserRoleExceptionsMapping[] })).exceptions = exceptionsByMapping[mappingIndexStr];\n }\n });\n }\n\n if (data.core_user_contact_addresses) {\n this.contactAddresses.set(data.core_user_contact_addresses);\n // Update contact addresses FormArray\n const contactFormArray = this.contactAddressesFormArray;\n contactFormArray.clear();\n data.core_user_contact_addresses.forEach((address: AuthUserCoreUserContactAddresses) => {\n const addressGroup = this.createContactAddressFormGroup();\n let core_user_contact_addresses: CoreUserContactAddresses = {\n ...address,\n sycad_address_type_id_sygms: address?.sycad_address_type_id_sygms?._id || \"\",\n sycad_contact_person_syfdl: address?.sycad_contact_person_syfdl?._id || \"\",\n sycad_contact_pin_sypin: address?.sycad_contact_pin_sypin?._id || \"\",\n sycad_contact_country_syctr: address?.sycad_contact_country_syctr?._id || \"\"\n };\n addressGroup.patchValue(core_user_contact_addresses);\n contactFormArray.push(addressGroup);\n });\n\n // Load dropdown data for existing addresses\n this.loadDropdownDataForExistingAddresses();\n }\n\n // Handle documents if present in API response\n if (data.core_user_documents && Array.isArray(data.core_user_documents)) {\n const documentsData = data.core_user_documents;\n this.documents.set(documentsData);\n\n // Clear existing documents FormArray\n while (this.documentsFormArray.length !== 0) {\n this.documentsFormArray.removeAt(0);\n }\n\n // Add documents to FormArray\n documentsData.forEach((document) => {\n const documentGroup = this.createDocumentFormGroup();\n documentGroup.patchValue({\n _id: document._id || '',\n syusd_user_id_user: this.appState.getUserId() || '',\n syusd_document_type_id_sygms: document.syusd_document_type_id_sygms?._id || '',\n syusd_doc_number: document.syusd_doc_number || '',\n syusd_doc_name_as_per_doc: document.syusd_doc_name_as_per_doc || '',\n syusd_photo_group_id_cyfm: document.syusd_photo_group_id_cyfm || '',\n syusd_doc_issue_date: document.syusd_doc_issue_date || '',\n syusd_doc_expiry_date: document.syusd_doc_expiry_date || '',\n syusd_doc_verification_status_id_sygms: document.syusd_doc_verification_status_id_sygms?._id || '',\n syusd_doc_kyc_status_id_sygms: document.syusd_doc_kyc_status_id_sygms?._id || '',\n syusd_isactive: document.syusd_isactive ?? true\n });\n this.documentsFormArray.push(documentGroup);\n });\n }\n\n // Handle family details if present in API response\n if (data.core_user_family_details && Array.isArray(data.core_user_family_details)) {\n const familyData = data.core_user_family_details;\n this.familyDetails.set(familyData);\n\n // Clear existing family details FormArray\n while (this.familyDetailsFormArray.length !== 0) {\n this.familyDetailsFormArray.removeAt(0);\n }\n\n // Add family details to FormArray\n familyData.forEach((familyDetail: any) => {\n const familyGroup = this.createFamilyDetailFormGroup();\n familyGroup.patchValue({\n _id: familyDetail._id || '',\n syfdl_family_member_name: familyDetail.syfdl_family_member_name || '',\n syfdl_family_member_id_user: familyDetail.syfdl_family_member_id_user?._id || '',\n syfdl_family_member_dob: familyDetail.syfdl_family_member_dob || '',\n syfdl_relationship_id_sygms: familyDetail.syfdl_relationship_id_sygms?._id || '',\n syfdl_blood_group_sygms: familyDetail.syfdl_blood_group_sygms?._id || '',\n syfdl_contact_email: familyDetail.syfdl_contact_email || '',\n syfdl_contact_email_id: familyDetail.syfdl_contact_email_id || '',\n syfdl_contact_phone: familyDetail.syfdl_contact_phone || '',\n syfdl_contact_number: familyDetail.syfdl_contact_number || '',\n syfdl_isactive: familyDetail.syfdl_isactive ?? true\n });\n this.familyDetailsFormArray.push(familyGroup);\n });\n }\n\n // Update password validation for edit mode\n this.updatePasswordValidation();\n }\n\n private loadDropdownOptions() {\n // Load entity options\n this.entityService.getEntityList({}).subscribe({\n next: (response) => {\n if (response?.success) {\n console.log(`🏢 entities:`, response.data);\n this.entityOptions.set(response.data || []);\n }\n },\n error: (error) => console.error('Error loading entities:', error)\n });\n\n // Countries will be loaded individually for each address when needed\n\n // Load address types from general master\n this.loadAddressTypes();\n\n // Load document and family dropdown options\n this.loadDocumentTypes();\n this.loadDocumentVerificationStatus();\n this.loadDocumentKycStatus();\n this.loadBloodGroups();\n this.loadRelationshipOptions();\n\n // Load menu options from API\n this.loadMenuOptions();\n\n }\n\n\n\n relationshipOptions() {\n return this.relationshipOptionsData();\n }\n\n onTabChange(tab: TabItem) {\n this.activeTab.set(tab.id);\n }\n\n // Entity Mapping Methods\n addEntityMapping() {\n // Create new FormGroup for entity mapping\n const newMappingFormGroup = this.createEntityMappingFormGroup();\n\n // Add to FormArray\n this.entityMappingsFormArray.push(newMappingFormGroup);\n\n // Update the signal for backward compatibility with template functions\n this.entityMappings.update(mappings => [...mappings, {\n syenm_id_user: this.userId(),\n syenm_id_logses: '',\n syenm_entity_id_syen: { _id: '', syen_name: '' },\n syenm_role_id_syusrol: { _id: '', syusrol_name: '' },\n syenm_designation_id_sydsg: { _id: '', sydsg_name: '' },\n syenm_department_id_sydept: { _id: '', sydept_name: '' },\n syenm_activefrom: new Date().toISOString().split('T')[0],\n syenm_activeupto: '',\n syenm_isdefault: false,\n syenm_isactive: true,\n syenm_isloggedin: true\n }]);\n }\n\n removeEntityMapping(index: number) {\n // Remove menu rights first\n this.clearMenuRightsForMapping(index);\n\n // Remove permission exceptions\n const mapping = this.entityMappings()[index];\n // if (mapping.exceptions) {\n // for (let j = 0; j < mapping.exceptions.length; j++) {\n // this.removePermissionExceptionControls(index, j);\n // }\n // }\n\n // Remove from FormArray\n this.entityMappingsFormArray.removeAt(index);\n\n // Update the signal for backward compatibility with template functions\n this.entityMappings.update(mappings => mappings.filter((_, i) => i !== index));\n\n // Trigger update of entity dropdowns to make removed entity available again\n this.triggerEntityDropdownUpdate();\n }\n\n\n\n onEntityChange(mappingIndex: number, event: AuthUserCoreEntityMapping) {\n // When entity changes, load departments and filter roles based on entity\n console.log(`🏢 Entity changed for mapping ${mappingIndex}:`, event);\n\n // Clear menu rights for this mapping when entity changes\n this.clearMenuRightsForMapping(mappingIndex);\n\n // Clear department selection for this mapping\n this.clearDepartmentForMapping(mappingIndex);\n\n // Clear role selection for this mapping\n this.clearRoleForMapping(mappingIndex);\n\n // Load departments for the selected entity\n if (event) {\n const entityId = event?.syenm_entity_id_syen?._id || '';\n this.loadDepartmentsForEntity(mappingIndex, entityId);\n\n // Load roles for the selected entity\n if (entityId) {\n this.loadRolesForEntity(mappingIndex, entityId);\n }\n }\n\n // Trigger change detection to update other entity dropdowns\n this.triggerEntityDropdownUpdate();\n\n // Automatically load menu rights when both entity and role are selected\n const mapping = this.entityMappings()[mappingIndex];\n if (mapping?.syenm_entity_id_syen && mapping?.syenm_role_id_syusrol) {\n console.log(`🚀 Auto-loading menu rights for mapping ${mappingIndex}`);\n this.loadMenuRights(mappingIndex);\n }\n\n // For now, we'll use all available roles\n // In a real implementation, you'd filter roles based on the entity\n }\n\n /**\n * Trigger update of entity dropdowns to reflect changes in selected entities\n */\n private triggerEntityDropdownUpdate(): void {\n // Force change detection by updating the form\n const currentValue = this.entityMappingsFormArray.value;\n this.entityMappingsFormArray.setValue(currentValue);\n }\n\n onDepartmentChange(event: ICoreSydept) {\n if (!event?._id) {\n return;\n }\n if (this.designationOptions()[event?._id]) {\n return;\n }\n // get the designation options for the selected department;\n this.designationService.getDesignationList({\n sydsg_department_id_sydpt: event?._id || ''\n }).subscribe({\n next: (response: designationControllerResponse) => {\n console.log(response, 'response Designation');\n // designation entty specific\n this.designationOptions.update(map => ({\n ...map,\n [event?._id || '']: response.data || []\n }));\n },\n error: (error) => {\n console.error('Error loading designations:', error);\n }\n });\n\n\n }\n\n getRoleOptionsForEntity(mappingIndex: number): any[] {\n const mapping = this.entityMappings()[mappingIndex];\n console.log(`🎭 getRoleOptionsForEntity:`, mapping);\n if (!mapping?.syenm_entity_id_syen?._id) {\n return [];\n }\n\n const entityId = mapping?.syenm_entity_id_syen?._id || '';\n console.log(`🎭 roles:`, this.roleOptions());\n const roles = this.roleOptions()[entityId];\n\n if (roles) {\n return roles;\n }\n\n // Return empty array if no roles found for this entity\n return [];\n }\n\n /**\n * Get filtered entity options with disabled state for already selected entities in other mappings\n * @param currentMappingIndex The index of the current mapping being edited\n * @returns Entity options with disabled state for already selected entities\n */\n getFilteredEntityOptions(currentMappingIndex: number): (CoreSystemEntityListResponse & { disabled?: boolean })[] {\n const allEntities = this.entityOptions();\n const currentMappings: CoreEntityMapping[] = this.entityMappingsFormArray.getRawValue();\n\n // Get all selected entity IDs from other mappings (excluding current mapping)\n const selectedEntityIds = currentMappings\n .map((mapping: CoreEntityMapping, index: number) => {\n if (index !== currentMappingIndex && mapping.syenm_entity_id_syen) {\n // Handle both object and string formats\n const entityId = mapping.syenm_entity_id_syen;\n return entityId;\n }\n return null;\n })\n .filter((id: string | null) => id !== null && id !== '');\n\n console.log(`🔍 Filtering entities for mapping ${currentMappingIndex}:`, {\n totalEntities: allEntities.length,\n selectedEntityIds,\n availableEntities: allEntities.length - selectedEntityIds.length\n });\n console.log(`🏢 getFilteredEntityOptions selectedEntityIds:`, selectedEntityIds);\n // Return all entities with disabled state for already selected ones\n return allEntities.map((entity: CoreSystemEntityListResponse) => {\n const entityId = entity._id;\n const isDisabled = selectedEntityIds.includes(entityId as string);\n\n if (isDisabled) {\n console.log(`🚫 Entity \"${entity.syen_name}\" (${entityId}) is already selected in another mapping - marking as disabled`);\n }\n\n return {\n ...entity,\n disabled: isDisabled\n };\n });\n }\n\n /**\n * Check if all entities are already selected in other mappings\n * @param currentMappingIndex The index of the current mapping being edited\n * @returns True if all entities are already selected\n */\n isAllEntitiesSelected(currentMappingIndex: number): boolean {\n const allEntities = this.entityOptions();\n const currentMappings = this.entityMappingsFormArray.value;\n\n // Get all selected entity IDs from other mappings (excluding current mapping)\n const selectedEntityIds = currentMappings\n .map((mapping: any, index: number) => {\n if (index !== currentMappingIndex && mapping.syenm_entity_id_syen) {\n const entityId = typeof mapping.syenm_entity_id_syen === 'object'\n ? mapping.syenm_entity_id_syen._id\n : mapping.syenm_entity_id_syen;\n return entityId;\n }\n return null;\n })\n .filter((id: string | null) => id !== null && id !== '');\n\n // Check if all entities are selected\n return allEntities.length > 0 && selectedEntityIds.length >= allEntities.length;\n }\n\n /**\n * Check if all entities are already mapped (for disabling Add Entity Mapping button)\n * @returns True if all entities are already mapped\n */\n isAllEntitiesMapped(): boolean {\n const allEntities = this.entityOptions();\n const currentMappings = this.entityMappingsFormArray.value;\n\n // Get all selected entity IDs\n const selectedEntityIds = currentMappings\n .map((mapping: any) => {\n if (mapping.syenm_entity_id_syen) {\n const entityId = typeof mapping.syenm_entity_id_syen === 'object'\n ? mapping.syenm_entity_id_syen._id\n : mapping.syenm_entity_id_syen;\n return entityId;\n }\n return null;\n })\n .filter((id: string | null) => id !== null && id !== '');\n\n // Check if all entities are selected\n return allEntities.length > 0 && selectedEntityIds.length >= allEntities.length;\n }\n\n /**\n * Clear department selection for a specific mapping\n */\n private clearDepartmentForMapping(mappingIndex: number): void {\n const formControl = this.userMasterForm.get(`core_entity_mapping.${mappingIndex}.syenm_department_id_sydept`);\n if (formControl) {\n formControl.setValue('');\n }\n }\n\n /**\n * Clear role selection for a specific mapping\n */\n private clearRoleForMapping(mappingIndex: number): void {\n const formControl = this.userMasterForm.get(`core_entity_mapping.${mappingIndex}.syenm_role_id_syusrol`);\n if (formControl) {\n formControl.setValue('');\n }\n }\n\n /**\n * Load departments for a specific entity\n */\n private loadDepartmentsForEntity(mappingIndex: number, entityId: string): void {\n console.log(`🏢 Loading departments for entity ${entityId} in mapping ${mappingIndex}`, this.departmentOptions());\n\n // Check if we already have departments for this entity\n const existingDepartments = this.departmentOptions()[entityId];\n if (existingDepartments) {\n console.log(`🏢 Using cached departments for entity ${entityId}:`, existingDepartments);\n return;\n }\n\n // Load departments from service\n this.departmentService.getDepartmentList({\n sydept_entity_id_syen: entityId\n }).subscribe({\n next: (response) => {\n if (response?.success) {\n console.log(`🏢 Departments loaded for entity ${entityId}:`, response.data);\n\n // Store departments for this entity\n this.departmentOptions.update(map => ({\n ...map,\n [entityId]: response.data || []\n }));\n console.log(`🏢 departments:`, this.departmentOptions());\n } else {\n console.error(`❌ Failed to load departments for entity ${entityId}:`, response);\n }\n },\n error: (error) => {\n console.error(`❌ Error loading departments for entity ${entityId}:`, error);\n }\n });\n }\n\n /**\n * Load roles for a specific entity\n */\n private loadRolesForEntity(mappingIndex: number, entityId: string): void {\n console.log(`🎭 Loading roles for entity ${entityId} in mapping ${mappingIndex}`, this.roleOptions());\n\n // Check if we already have roles for this entity\n const existingRoles = this.roleOptions()[entityId];\n if (existingRoles) {\n console.log(`🎭 Using cached roles for entity ${entityId}:`, existingRoles);\n return;\n }\n\n // Load roles from service using getUserRoleList\n this.userRoleService.getUserRoleList({\n syusrol_role_entity_id_syen: entityId\n }).subscribe({\n next: (response) => {\n if (response?.success) {\n console.log(`🎭 Roles loaded for entity ${entityId}:`, response.data);\n\n // Store roles for this entity\n this.roleOptions.update(map => ({\n ...map,\n [entityId]: response.data || []\n }));\n console.log(`🎭 roles:`, this.roleOptions());\n } else {\n console.error(`❌ Failed to load roles for entity ${entityId}:`, response);\n }\n },\n error: (error) => {\n console.error(`❌ Error loading roles for entity ${entityId}:`, error);\n }\n });\n }\n\n /**\n * Get department options for a specific entity mapping\n */\n getDepartmentOptionsForEntity(mappingIndex: number): ICoreSydept[] {\n const mapping = this.entityMappings()[mappingIndex];\n console.log(`🏢 getDepartmentOptionsForEntity:`, mapping);\n if (!mapping?.syenm_entity_id_syen?._id) {\n return [];\n }\n\n const entityId = mapping?.syenm_entity_id_syen?._id || '';\n console.log(`🏢 departments:`, this.departmentOptions());\n const departments = this.departmentOptions()[entityId];\n\n if (departments) {\n return departments;\n }\n return [];\n }\n\n getDesignationOptionsForEntity(mappingIndex: number): ICoreSydsg[] {\n const mapping = (this.entityMappingsFormArray?.getRawValue() as CoreEntityMapping[])[mappingIndex];\n console.log(`🏢 Mapping:`, mapping);\n if (!mapping?.syenm_department_id_sydept) {\n return [];\n }\n const departmentId = mapping?.syenm_department_id_sydept || '';\n const designations = this.designationOptions()[departmentId];\n if (designations) {\n return designations;\n }\n\n return [];\n }\n\n /**\n * Initialize role permissions grid configuration\n */\n private initializeRolePermissionsGrid(): void {\n this.rolePermissionsGridConfig.set({\n id: 'menu-list-grid',\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'details',\n header: 'Menu Item',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'menuDetailsRenderer'\n },\n {\n key: 'syme_type',\n header: 'Type',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'menuTypeRenderer'\n },\n {\n key: 'syme_path',\n header: 'Path',\n type: 'text',\n width: '200px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'syme_isactive',\n header: 'Status',\n type: 'status',\n width: '100px',\n truncate: false,\n align: 'center',\n statusConfig: {\n activeValue: true,\n activeLabel: 'Active',\n inactiveLabel: 'Inactive',\n activeClass: 'tw-bg-green-100 tw-text-green-800',\n inactiveClass: 'tw-bg-red-100 tw-text-red-800'\n }\n },\n {\n key: 'syme_permissions_id_sygms',\n header: 'Permissions',\n type: 'custom',\n width: '200px',\n truncate: true,\n align: 'left',\n renderer: 'permissionsRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '60px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: false,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search menu items...',\n searchableColumns: ['syme_title', 'syme_desc', 'syme_path'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n dragDrop: {\n enabled: true,\n orderField: 'syme_order_by',\n dragClass: 'tw-opacity-50 tw-bg-blue-50',\n dropClass: 'tw-bg-green-50'\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none',\n onRefresh: 'onMenuItemRefresh',\n onRowReorder: 'onRowReorder',\n tree: {\n enabled: true,\n primaryKey: '_id',\n foreignKey: 'syme_id_syme',\n childrenKey: 'children',\n levelKey: 'level',\n expandedKey: 'isExpanded',\n hasChildrenKey: 'hasChildren'\n }\n });\n }\n\n /**\n * Handle role selection change\n */\n onRoleChange(mappingIndex: number, roleId: string): void {\n console.log(`🎭 Role changed for mapping ${mappingIndex}:`, roleId);\n\n if (!roleId) {\n this.clearRolePermissions();\n return;\n }\n\n this.selectedEntityIndex.set(mappingIndex);\n this.selectedRoleId.set(roleId);\n\n // Load role details and permissions\n this.loadRolePermissions(roleId, mappingIndex);\n\n // Automatically load menu rights when both entity and role are selected\n const mapping = this.entityMappings()[mappingIndex];\n if (mapping?.syenm_entity_id_syen && mapping?.syenm_role_id_syusrol) {\n console.log(`🚀 Auto-loading menu rights for mapping ${mappingIndex}`);\n this.loadMenuRights(mappingIndex);\n\n // Force refresh the grid to show updated permission states\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 100);\n }\n }\n\n /**\n * Load role permissions from API\n */\n private loadRolePermissions(roleId: string, mappingIndex: number): void {\n console.log(`🎭 Loading permissions for role:`, roleId);\n\n this.loading.set(true);\n\n // Load role details by ID\n this.userRoleService.getUserRoleById({ syusrol_id: roleId }).subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n console.log(`🎭 Role details loaded:`, response.data);\n\n // Store role permissions for simple lookup\n this.storeRolePermissions(response.data, mappingIndex);\n } else {\n console.error(`❌ Failed to load role details:`, response);\n this.error.set('Failed to load role permissions');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error(`❌ Error loading role details:`, error);\n this.error.set('Error loading role permissions');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Update permission values for a specific menu row\n */\n updateMenuPermissionValues(mappingIndex: number, menuId: string): void {\n this.menuRightsMap.update(map => {\n const newMap = { ...map };\n const menuRights = newMap[mappingIndex.toString()] || [];\n \n const updatedMenuRights = menuRights.map(menu => {\n if (menu._id === menuId) {\n // Re-compute permission values for this menu\n const permissionValues: { [permissionId: string]: { checked: boolean; permission: any } } = {};\n \n if (menu.syme_permissions_id_sygms) {\n menu.syme_permissions_id_sygms.forEach(permissionId => {\n const permission = this.getPermissionById(permissionId);\n if (permission) {\n permissionValues[permissionId] = {\n checked: this.getFormControlValue(menu, permissionId),\n permission: permission\n };\n }\n });\n }\n \n return {\n ...menu,\n _permissionValues: permissionValues\n };\n }\n return menu;\n });\n \n newMap[mappingIndex.toString()] = updatedMenuRights;\n return newMap;\n });\n }\n\n /**\n * Store role permissions for simple lookup\n */\n private storeRolePermissions(roleData: CoreUserRolePermissionData, mappingIndex: number): void {\n console.log(`🎭 Storing role permissions for mapping ${mappingIndex}:`, roleData);\n\n // Extract role permissions from the role data\n const roleRights = roleData.core_user_role_rights;\n\n if (roleRights && Array.isArray(roleRights)) {\n // Store role permissions as objects with ID and title\n const rolePermissionObjects = roleRights.map((right: CoreUserRoleRightsResponse) => {\n const permission = right.syusrgt_role_permissions_id_sygms;\n return {\n _id: permission?._id as string,\n sygms_title: permission?.sygms_title as string,\n menu_id: right.syusrgt_menu_id_syme?._id\n };\n }).filter((permission: { _id: string; sygms_title: string }) => permission._id && permission.sygms_title);\n\n // Update menuRightsMap with role permissions for each menu\n this.menuRightsMap.update(menuMap => {\n const newMenuMap = { ...menuMap };\n const currentMenuRights = newMenuMap[mappingIndex.toString()] || [];\n \n // Update each menu with its role permissions\n const updatedMenuRights = currentMenuRights.map(menu => {\n if (menu._id) {\n const menuSpecificPermissions = rolePermissionObjects\n .filter(permission => \n // Permission must be in the menu's allowed permissions list\n menu.syme_permissions_id_sygms?.includes(permission._id) &&\n // AND must be assigned to this menu in the role data\n permission.menu_id === menu._id\n );\n \n return {\n ...menu,\n _rolePermissions: menuSpecificPermissions\n };\n }\n return menu;\n });\n \n newMenuMap[mappingIndex.toString()] = updatedMenuRights;\n return newMenuMap;\n });\n\n // Update permission values for all menus in this mapping\n const menuRights = this.menuRightsMap()[mappingIndex.toString()] || [];\n menuRights.forEach(menu => {\n if (menu._id) {\n this.updateMenuPermissionValues(mappingIndex, menu._id);\n }\n });\n\n console.log(`🎭 Stored role permission objects for mapping ${mappingIndex}:`, rolePermissionObjects);\n } else {\n console.log(`🎭 No role permissions found in role data`);\n }\n }\n\n /**\n * Clear role permissions\n */\n private clearRolePermissions(): void {\n this.selectedRoleId.set(null);\n this.selectedEntityIndex.set(null);\n }\n\n /**\n * Find mapping index by entity mapping ID\n */\n private findMappingIndexByEntityMappingId(entityMappingId: string): number | null {\n const mappings = this.entityMappings();\n for (let i = 0; i < mappings.length; i++) {\n if (mappings[i]._id === entityMappingId) {\n return i;\n }\n }\n return null;\n }\n\n /**\n * Handle grid events for role permissions\n */\n onRolePermissionsGridEvent(event: GridEvent): void {\n console.log('🎭 Role permissions grid event:', event);\n\n switch (event.type) {\n case 'search':\n // Handle search if needed\n break;\n case 'rowClick':\n // Handle row click if needed\n break;\n default:\n break;\n }\n }\n\n /**\n * Get template renderers for role permissions grid\n */\n get templateRenderers() {\n return {\n menuDetailsRenderer: this.menuDetailsRendererTemplate(),\n permissionsCheckboxRenderer: this.permissionsCheckboxRendererTemplate(),\n menuTypeRenderer: this.menuTypeRendererTemplate()\n };\n }\n\n /**\n * Get permission by ID\n */\n getPermissionById(permissionId: string): any {\n return this.permissions().find(permission => permission._id === permissionId);\n }\n\n /**\n * Check if permission is available in the selected role for a specific menu\n */\n isPermissionInRole(permissionId: string, mappingIndex: number, menuId?: string): boolean {\n const mapping = this.entityMappings()[mappingIndex];\n const roleId = mapping?.syenm_role_id_syusrol;\n\n console.log(`🎭 Checking permission ${permissionId} for role:`, roleId, 'menu:', menuId);\n\n if (!roleId || !menuId) {\n console.log(`🎭 No role ID or menu ID found for mapping ${mappingIndex}`);\n return false;\n }\n\n // Get role permissions from the menu objects in menuRightsMap\n const menuRights = this.menuRightsMap()[mappingIndex.toString()] || [];\n const menu = menuRights.find(m => m._id === menuId);\n \n if (menu && (menu as any)._rolePermissions) {\n const rolePermissions = (menu as any)._rolePermissions;\n const isInRole = rolePermissions.some((permission: any) => permission._id === permissionId && permission.menu_id === menuId);\n console.log(`🎭 Permission ${permissionId} in role for menu ${menuId}: ${isInRole}`);\n return isInRole;\n }\n\n console.log(`🎭 No role permissions found for mapping ${mappingIndex}, menu ${menuId}`);\n return false;\n }\n\n /**\n * Get form control value for a permission\n */\n getFormControlValue(row: ICoreSyme, permissionId: string): boolean {\n console.log(`🎭 Getting form control value for permission: ${permissionId} for menu: ${row.syme_title}`, row);\n const permission = this.getPermissionById(permissionId);\n if (!permission) {\n console.log(`🎭 Permission not found for ID: ${permissionId}`);\n return false;\n }\n\n // Find the current mapping index\n const mappingIndex = this.getCurrentMappingIndex();\n if (mappingIndex === null) {\n console.log(`🎭 No current mapping index found`);\n return false;\n }\n\n // Check if permission is available in the role for this specific menu\n const isRolePermission = this.isPermissionInRole(permissionId, mappingIndex, row._id);\n console.log(`🎭 Permission ${permission.sygms_title} for menu ${row.syme_title}: isRolePermission = ${isRolePermission}`);\n\n if (isRolePermission) {\n // If permission is in role, it should be checked by default\n console.log(`🎭 Returning true for role permission: ${permission.sygms_title}`);\n return true;\n } else {\n // If permission is not in role, check if it's added as exception\n const mapping = this.entityMappings()[mappingIndex];\n const exceptions = (mapping as AuthUserCoreEntityMapping & { exceptions?: Array<CoreUserRoleExceptionsWithTracking> }).exceptions || [];\n const isException = exceptions.some((exception) =>\n exception.syusrex_menu_id_syme === row._id &&\n exception.syusrex_role_permissions_id_sygms === permissionId\n );\n console.log(`🎭 Permission ${permission.sygms_title} is exception: ${isException}`);\n return isException;\n }\n }\n\n\n /**\n * Handle permission change with type safety\n */\n onPermissionChangeSafe(checked: any, row: ICoreSyme, permissionId: string): void {\n this.onPermissionChange(Boolean(checked), row, permissionId);\n }\n\n /**\n * Handle permission change\n */\n onPermissionChange(checked: boolean, row: ICoreSyme, permissionId: string): void {\n const permission = this.getPermissionById(permissionId);\n if (!permission) return;\n\n // Find the current mapping index\n const mappingIndex = this.getCurrentMappingIndex();\n if (mappingIndex === null) return;\n\n // Check if permission is in role for this specific menu\n const isRolePermission = this.isPermissionInRole(permissionId, mappingIndex, row._id);\n\n if (isRolePermission) {\n // Role permissions are handled by the role itself, no form controls needed\n console.log('🎭 Role permission (handled by role):', {\n menu: row.syme_title,\n permission: permission.sygms_title,\n checked: checked\n });\n } else {\n // Handle exception permission\n if (checked) {\n // Add exception\n this.addRoleException(mappingIndex, row._id || '', permissionId);\n } else {\n // Remove exception\n this.removeRoleException(mappingIndex, row._id || '', permissionId);\n }\n\n console.log('🎭 Exception permission changed:', {\n menu: row.syme_title,\n permission: permission.sygms_title,\n checked: checked\n });\n }\n\n // Update the pre-computed permission values for this menu\n this.updateMenuPermissionValues(mappingIndex, row._id || '');\n }\n\n /**\n * Handle permission change for specific mapping\n */\n onPermissionChangeForMapping(checked: boolean, row: any, permissionId: string, mappingIndex: number): void {\n const permission = this.getPermissionById(permissionId);\n if (!permission) return;\n\n const controlName = `core_entity_mapping.${mappingIndex}.menu_rights.${row._id}.${permission.sygms_title}`;\n this.userMasterForm.get(controlName)?.setValue(checked);\n\n console.log('🎭 Permission changed for mapping:', {\n mappingIndex,\n menu: row.syme_title,\n permission: permission.sygms_title,\n checked: checked,\n controlName\n });\n }\n\n /**\n * Get current mapping index (helper method)\n */\n private getCurrentMappingIndex(): number | null {\n // Find the mapping index that has both entity and role selected\n const entityMappings = this.entityMappings();\n for (let i = 0; i < entityMappings.length; i++) {\n const entityId = this.userMasterForm.get(`core_entity_mapping.${i}.syenm_entity_id_syen`)?.value;\n const roleId = this.userMasterForm.get(`core_entity_mapping.${i}.syenm_role_id_syusrol`)?.value;\n\n if (entityId && roleId) {\n return i;\n }\n }\n return null;\n }\n\n /**\n * Add role exception\n */\n addRoleException(mappingIndex: number, menuId: string, permissionId: string): void {\n const mapping = this.entityMappings()[mappingIndex];\n const permission = this.getPermissionById(permissionId);\n\n if (!mapping || !permission) return;\n\n // Get the role ID directly (not as object)\n const roleId = typeof mapping.syenm_role_id_syusrol === 'object'\n ? (mapping.syenm_role_id_syusrol as { _id?: string })?._id ?? ''\n : (mapping.syenm_role_id_syusrol as string | undefined) ?? '';\n\n // Create exception object with change tracking\n const exception: CoreUserRoleExceptionsWithTracking = {\n syusrex_user_entity_mapping_id_syenm: mapping._id || '',\n syusrex_role_id_syusrol: roleId, // Direct ID string\n syusrex_role_permissions_id_sygms: permissionId,\n syusrex_menu_id_syme: menuId,\n syusrex_isactive: true,\n _isUserAdded: true, // Mark as explicitly added by user\n _changeType: 'added' as const // Track the change type\n };\n\n // Add to entity mapping exceptions (check for duplicates first)\n this.entityMappings.update(mappings => {\n const updatedMappings = [...mappings];\n const mappingWithExceptions = updatedMappings[mappingIndex] as AuthUserCoreEntityMapping & { exceptions?: Array<CoreUserRoleExceptionsWithTracking> };\n if (!mappingWithExceptions.exceptions) {\n mappingWithExceptions.exceptions = [];\n }\n \n // Check if exception already exists to prevent duplicates\n const existingException = mappingWithExceptions.exceptions.find(ex => \n ex.syusrex_menu_id_syme === menuId && \n ex.syusrex_role_permissions_id_sygms === permissionId\n );\n \n if (!existingException) {\n mappingWithExceptions.exceptions.push(exception);\n console.log('🎭 Role exception added (new):', exception);\n } else {\n // If exception exists but was removed, mark it as added again\n if ((existingException as CoreUserRoleExceptionsWithTracking)._isUserRemoved) {\n (existingException as CoreUserRoleExceptionsWithTracking)._isUserRemoved = false;\n (existingException as CoreUserRoleExceptionsWithTracking)._isUserAdded = true;\n (existingException as CoreUserRoleExceptionsWithTracking)._changeType = 'added';\n existingException.syusrex_isactive = true;\n console.log('🎭 Role exception reactivated:', existingException);\n } else {\n console.log('🎭 Role exception already exists, skipping duplicate:', existingException);\n }\n }\n \n return updatedMappings;\n });\n\n console.log('🎭 Role exception added:', exception);\n }\n\n /**\n * Remove role exception\n */\n removeRoleException(mappingIndex: number, menuId: string, permissionId: string): void {\n this.entityMappings.update(mappings => {\n const updatedMappings = [...mappings];\n const mapping = updatedMappings[mappingIndex] as AuthUserCoreEntityMapping & { exceptions?: Array<CoreUserRoleExceptionsWithTracking> };\n if (mapping.exceptions) {\n // Instead of removing, mark as removed for tracking\n mapping.exceptions = mapping.exceptions.map((exception) => {\n if (exception.syusrex_menu_id_syme === menuId && exception.syusrex_role_permissions_id_sygms === permissionId) {\n return {\n ...exception,\n _isUserRemoved: true,\n _changeType: 'removed' as const,\n syusrex_isactive: false\n };\n }\n return exception;\n });\n }\n return updatedMappings;\n });\n\n console.log('🎭 Role exception marked as removed:', { mappingIndex, menuId, permissionId });\n }\n\n /**\n * Collect only changed role exceptions from entity mappings\n */\n collectRoleExceptions(): Array<{\n syusrex_user_entity_mapping_id_syenm: string;\n syusrex_role_id_syusrol: string;\n syusrex_role_permissions_id_sygms: string;\n syusrex_menu_id_syme: string;\n syusrex_isactive: boolean;\n _changeType: string;\n }> {\n const exceptions: Array<{\n syusrex_user_entity_mapping_id_syenm: string;\n syusrex_role_id_syusrol: string;\n syusrex_role_permissions_id_sygms: string;\n syusrex_menu_id_syme: string;\n syusrex_isactive: boolean;\n _changeType: string;\n }> = [];\n const entityMappings = this.entityMappings();\n\n entityMappings.forEach((mapping, mappingIndex) => {\n // Get exceptions from the mapping\n const mappingWithExceptions = mapping as AuthUserCoreEntityMapping & { exceptions?: Array<CoreUserRoleExceptionsWithTracking> };\n const mappingExceptions = mappingWithExceptions.exceptions || [];\n\n // Only include exceptions that have been explicitly changed by the user\n mappingExceptions.forEach((exception) => {\n // Check if this exception was explicitly added or removed by the user\n if (exception._isUserAdded || exception._isUserRemoved) {\n // Ensure role ID is direct string, not object\n const roleId = (mapping.syenm_role_id_syusrol as { _id?: string })?._id ?? '';\n\n // Create a unique key for this exception to prevent duplicates\n const exceptionKey = `${mapping._id || `temp_${mappingIndex}`}_${roleId}_${exception.syusrex_role_permissions_id_sygms}_${exception.syusrex_menu_id_syme}`;\n \n // Check if this exception already exists in the collection\n const existingException = exceptions.find(ex => \n ex.syusrex_user_entity_mapping_id_syenm === (mapping._id || `temp_${mappingIndex}`) &&\n ex.syusrex_role_id_syusrol === roleId &&\n ex.syusrex_role_permissions_id_sygms === exception.syusrex_role_permissions_id_sygms &&\n ex.syusrex_menu_id_syme === exception.syusrex_menu_id_syme\n );\n\n if (!existingException) {\n exceptions.push({\n syusrex_user_entity_mapping_id_syenm: mapping._id || `temp_${mappingIndex}`,\n syusrex_role_id_syusrol: roleId,\n syusrex_role_permissions_id_sygms: exception.syusrex_role_permissions_id_sygms || '',\n syusrex_menu_id_syme: exception.syusrex_menu_id_syme || '',\n syusrex_isactive: exception.syusrex_isactive || false,\n _changeType: exception._changeType || 'unknown'\n });\n } else {\n console.log('🎭 Duplicate exception prevented:', exceptionKey);\n }\n }\n });\n });\n\n console.log('🎭 Collected changed role exceptions:', exceptions);\n return exceptions;\n }\n\n\n /**\n * Check if permission is selected for a menu\n */\n isPermissionSelected(menuId: string, permissionId: string): boolean {\n const mappingIndex = this.getCurrentMappingIndex();\n if (mappingIndex === null) return false;\n\n return this.isPermissionInRole(permissionId, mappingIndex, menuId);\n }\n\n /**\n * Handle permission checkbox change (read-only in this context)\n */\n onPermissionCheckboxChange(menuId: string, permissionId: string, isSelected: boolean): void {\n // This is read-only, so we don't actually change anything\n console.log(`🎭 Permission checkbox change (read-only): ${menuId} - ${permissionId} - ${isSelected}`);\n }\n\n /**\n * Check if a menu has child menus with permissions\n */\n hasChildMenusWithPermissions(menuId: string): boolean {\n // For simplified approach, we don't need to check child menus\n // Just return false as we're not using hierarchical permission checking\n return false;\n }\n\n /**\n * Update menu rights grid data to force refresh\n */\n updateMenuRightsGridData(mappingIndex: number): void {\n const menuRights = this.getMenuRightsForMapping(mappingIndex);\n console.log('🔄 Updating menu rights grid data:', menuRights);\n\n // Force update the grid configuration\n this.menuRightsMap.update(map => {\n const newMap = { ...map };\n newMap[mappingIndex.toString()] = menuRights;\n return newMap;\n });\n }\n\n /**\n * Get menu rights grid configuration for a specific mapping\n */\n getMenuRightsGridConfig(mappingIndex: number): GridConfiguration<any> {\n const menuRights = this.getMenuRightsForMapping(mappingIndex);\n\n console.log(`🔍 Grid config for mapping ${mappingIndex}:`);\n console.log(`📊 Menu rights count:`, menuRights.length);\n console.log(`📋 Menu rights data:`, menuRights);\n\n return {\n id: `menu-rights-grid-${mappingIndex}`,\n title: '',\n subtitle: '',\n columns: [\n {\n key: 'details',\n header: 'Menu Item',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'menuDetailsRenderer'\n },\n {\n key: 'syme_type',\n header: 'Type',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'menuTypeRenderer'\n },\n {\n key: 'syme_path',\n header: 'Path',\n type: 'text',\n width: '200px',\n truncate: true,\n align: 'left'\n },\n {\n key: 'syme_isactive',\n header: 'Status',\n type: 'status',\n width: '100px',\n truncate: false,\n align: 'center',\n statusConfig: {\n activeValue: true,\n activeLabel: 'Active',\n inactiveLabel: 'Inactive',\n activeClass: 'tw-bg-green-100 tw-text-green-800',\n inactiveClass: 'tw-bg-red-100 tw-text-red-800'\n }\n },\n {\n key: 'syme_permissions_id_sygms',\n header: 'Permissions',\n type: 'custom',\n width: '200px',\n truncate: true,\n align: 'left',\n renderer: 'permissionsRenderer'\n }\n ],\n data: menuRights,\n trackBy: '_id',\n pagination: {\n enabled: false,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search menu items...',\n searchableColumns: ['syme_title', 'syme_desc', 'syme_path'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n dragDrop: {\n enabled: true,\n orderField: 'syme_order_by',\n dragClass: 'tw-opacity-50 tw-bg-blue-50',\n dropClass: 'tw-bg-green-50'\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none',\n onRefresh: 'onMenuItemRefresh',\n onRowReorder: 'onRowReorder',\n tree: {\n enabled: true,\n primaryKey: '_id',\n foreignKey: 'syme_id_syme',\n childrenKey: 'children',\n levelKey: 'level',\n expandedKey: 'isExpanded',\n hasChildrenKey: 'hasChildren'\n }\n };\n }\n\n /**\n * Get template renderers for menu rights grid\n */\n getMenuRightsTemplateRenderers(mappingIndex: number) {\n return {\n menuDetailsRenderer: this.menuDetailsRendererTemplate(),\n menuTypeRenderer: this.menuTypeRendererTemplate(),\n permissionsRenderer: this.permissionsRendererTemplate()\n };\n }\n\n /**\n * Handle menu rights grid events\n */\n onMenuRightsGridEvent(event: GridEvent, mappingIndex: number): void {\n console.log('🎭 Menu rights grid event:', event, 'for mapping:', mappingIndex);\n\n switch (event.type) {\n case 'search':\n // Handle search if needed\n break;\n case 'rowClick':\n // Handle row click if needed\n break;\n default:\n break;\n }\n }\n\n\n\n\n // Permission Exception Methods\n addPermissionException(mappingIndex: number) {\n const newException = {\n syusrex_menu_id_syme: '',\n syusrex_role_permissions_id_sygms: '',\n syusrex_isactive: true\n };\n\n // Update the entity mapping with the new exception\n this.entityMappings.update(mappings => {\n const updatedMappings = [...mappings];\n // if (!updatedMappings[mappingIndex].exceptions) {\n // updatedMappings[mappingIndex].exceptions = [];\n // }\n // updatedMappings[mappingIndex].exceptions.push(newException);\n return updatedMappings;\n });\n\n // Add form controls for the new exception\n const currentMapping = this.entityMappings()[mappingIndex];\n // const exceptionIndex = currentMapping.exceptions.length - 1;\n\n // this.userMasterForm.addControl(`core_entity_mapping.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_menu_id_syme`, this.fb.control(''));\n // this.userMasterForm.addControl(`core_entity_mapping.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_role_permissions_id_sygms`, this.fb.control(''));\n // this.userMasterForm.addControl(`core_entity_mapping.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_isactive`, this.fb.control(true));\n }\n\n removePermissionException(mappingIndex: number, exceptionIndex: number) {\n // Remove form controls\n this.removePermissionExceptionControls(mappingIndex, exceptionIndex);\n\n // Update the entity mapping by removing the exception\n this.entityMappings.update(mappings => {\n const updatedMappings = [...mappings];\n // updatedMappings[mappingIndex].exceptions = updatedMappings[mappingIndex].exceptions.filter((_: any, i: number) => i !== exceptionIndex);\n return updatedMappings;\n });\n }\n\n private removePermissionExceptionControls(mappingIndex: number, exceptionIndex: number) {\n this.userMasterForm.removeControl(`core_entity_mapping.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_menu_id_syme`);\n this.userMasterForm.removeControl(`core_entity_mapping.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_role_permissions_id_sygms`);\n this.userMasterForm.removeControl(`core_entity_mapping.${mappingIndex}.exceptions.${exceptionIndex}.syusrex_isactive`);\n }\n\n getPermissionExceptions(mappingIndex: number): any[] {\n const mapping = this.entityMappings()[mappingIndex];\n // return mapping?.exceptions || [];\n return [];\n }\n\n // Menu Rights Methods\n getMenuRightsForMapping(mappingIndex: number): ICoreSyme[] {\n const menuRights = this.menuRightsMap();\n return menuRights[mappingIndex.toString()] || [];\n }\n\n loadMenuRights(mappingIndex: number) {\n const mapping = this.entityMappings()[mappingIndex];\n if (!mapping.syenm_entity_id_syen || !mapping.syenm_role_id_syusrol) {\n console.warn('Entity and Role must be selected before loading menu rights');\n return;\n }\n\n console.log('🚀 Loading menu rights for mapping:', mappingIndex);\n this.loading.set(true);\n this.error.set(null);\n\n // Use actual API call to get menu list\n const requestBody: MMenuListPayload = {\n pageIndex: 1,\n pageSize: 1000, // Get all menu items - increased to ensure we get all records\n total: 1000, // Set total to match pageSize to get all records\n sort: { order: 'asc', key: 'syme_order_by' }\n };\n\n console.log('📤 Request body for menu list:', requestBody);\n\n this.menuService.getMenuList(requestBody)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n console.log('✅ Menu list loaded successfully:', response);\n console.log('📊 Total menu items received:', response?.data?.length || 0);\n console.log('📋 Menu items data:', response?.data);\n if (response?.success && response?.data) {\n // Use menu data directly without transformation\n const menuRights = response.data.map((menu: ICoreSyme) => {\n // Get only the permissions that are mapped to this menu\n const mappedPermissions = this.permissions().filter(permission =>\n menu.syme_permissions_id_sygms?.includes(permission._id || '')\n );\n\n // Pre-compute permission values for template performance\n const permissionValues: { [permissionId: string]: { checked: boolean; permission: any } } = {};\n \n if (menu.syme_permissions_id_sygms) {\n menu.syme_permissions_id_sygms.forEach(permissionId => {\n const permission = this.getPermissionById(permissionId);\n if (permission) {\n permissionValues[permissionId] = {\n checked: this.getFormControlValue(menu, permissionId),\n permission: permission\n };\n }\n });\n }\n\n return {\n ...menu,\n role_rights: mappedPermissions, // Use only mapped permissions\n exceptions: [],\n _permissionValues: permissionValues // Pre-computed values\n };\n });\n\n // Update menu rights map\n this.menuRightsMap.update(map => {\n const newMap = {\n ...map,\n [mappingIndex.toString()]: menuRights\n };\n console.log('🗺️ Updated menu rights map:', newMap);\n return newMap;\n });\n\n console.log('📊 Processed menu rights count:', menuRights.length);\n console.log('📋 Menu rights data:', menuRights);\n\n // Initialize entity mapping exceptions array if not exists\n this.entityMappings.update(mappings => {\n const updatedMappings = [...mappings];\n if (!(updatedMappings[mappingIndex] as any).exceptions) {\n (updatedMappings[mappingIndex] as any).exceptions = [];\n }\n return updatedMappings;\n });\n\n console.log('✅ Menu rights loaded for mapping', mappingIndex);\n\n // Force refresh the grid to show updated permission states\n setTimeout(() => {\n this.cdr.detectChanges();\n // Also update the grid configuration to ensure data refresh\n this.updateMenuRightsGridData(mappingIndex);\n }, 100);\n } else {\n console.warn('⚠️ No menu data received from API');\n this.error.set('No menu data received from server');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading menu rights:', error);\n this.error.set('Failed to load menu rights');\n this.loading.set(false);\n }\n });\n }\n\n refreshMenuRights(mappingIndex: number) {\n this.clearMenuRightsForMapping(mappingIndex);\n this.loadMenuRights(mappingIndex);\n }\n\n clearMenuRightsForMapping(mappingIndex: number) {\n // Clear exceptions from entity mapping\n this.entityMappings.update(mappings => {\n const updatedMappings = [...mappings];\n (updatedMappings[mappingIndex] as any).exceptions = [];\n return updatedMappings;\n });\n\n // Clear from menu rights map\n this.menuRightsMap.update(map => {\n const updatedMap = { ...map };\n delete updatedMap[mappingIndex.toString()];\n return updatedMap;\n });\n }\n\n /**\n * Load user rights type ID from general master types\n */\n private loadUserRightsTypeId(): void {\n this.generalMasterTypeService.getTypeList({\n sygmt_code: \"user_rights\"\n })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n const userRightsType = response.data.find(type =>\n type.sygmt_code === 'user_rights' || type.sygmt_title?.toLowerCase().includes('user_rights')\n );\n if (userRightsType) {\n this.userRightsTypeId.set(userRightsType._id || null);\n this.loadPermissions();\n } else {\n this.error.set('User rights type not found in general master types');\n }\n }\n },\n error: (err) => {\n this.error.set('Failed to load user rights type');\n }\n });\n }\n\n /**\n * Load permissions from general master\n */\n private loadPermissions(): void {\n const typeId = this.userRightsTypeId();\n if (!typeId) {\n this.error.set('User rights type not found. Please ensure the \"user_rights\" type exists in general master types.');\n return;\n }\n\n const payload: IGeneralMasterListRequest = { sygms_id_sygmt: typeId };\n this.CideCoreGeneralMasterService.getMasterList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n this.permissions.set(response.data);\n if (this.error()?.includes('permissions')) {\n this.error.set(null);\n }\n } else {\n this.permissions.set([]);\n this.error.set('No permissions found. Please ensure permissions are configured in general master.');\n }\n },\n error: (err) => {\n this.permissions.set([]);\n this.error.set('Failed to load permissions from general master. Please check your configuration.');\n }\n });\n }\n\n hasRoleRight(menuRight: any, permission: string): boolean {\n return menuRight.role_rights.includes(permission);\n }\n\n canOverrideRight(menuRight: any, permission: string): boolean {\n // In a real implementation, this would check if the user can override this specific right\n // For now, allow override for all permissions\n return true;\n }\n\n hasExceptionForMenu(mappingIndex: number, menuId: string): boolean {\n const exceptions = this.getPermissionExceptions(mappingIndex);\n return exceptions.some(ex => ex.syusrex_menu_id_syme === menuId);\n }\n\n // Default Entity Management\n onDefaultEntityChange(mappingIndex: number, event: any) {\n console.log(event, 'onDefaultEntityChange');\n const isDefault = event?.target?.checked || event?.checked || event;\n if (isDefault) {\n // Ensure only one entity can be default\n this.entityMappings.update(mappings => {\n return mappings.map((mapping, index) => {\n if (index === mappingIndex) {\n return { ...mapping, syenm_isdefault: true };\n } else {\n return { ...mapping, syenm_isdefault: false };\n }\n });\n });\n\n // Update FormArray controls to reflect the change\n for (let i = 0; i < this.entityMappingsFormArray.length; i++) {\n const formGroup = this.entityMappingsFormArray.at(i) as FormGroup;\n const defaultControl = formGroup.get('syenm_isdefault');\n if (defaultControl) {\n defaultControl.setValue(i === mappingIndex);\n }\n }\n\n console.log(`Entity mapping ${mappingIndex} set as default. All others unset.`);\n }\n }\n\n getDefaultEntityName(): string {\n const defaultMapping = this.entityMappings().find(mapping => mapping.syenm_isdefault);\n if (defaultMapping) {\n const entity = this.entityOptions().find(opt => opt._id === defaultMapping.syenm_entity_id_syen);\n return entity?.syen_name || '';\n }\n return '';\n }\n\n hasDefaultEntity(): boolean {\n return this.entityMappings().some(mapping => mapping.syenm_isdefault);\n }\n\n // User Context Header Methods\n getUserFullName(): string {\n const firstName = this.userMasterForm.get('user_firstname')?.value || '';\n const middleName = this.userMasterForm.get('user_middlename')?.value || '';\n const lastName = this.userMasterForm.get('user_lastname')?.value || '';\n\n const fullName = this.userMasterForm.get('user_fullname')?.value;\n if (fullName) {\n return fullName;\n }\n\n // Auto-generate from parts\n const parts = [firstName, middleName, lastName].filter(part => part.trim());\n return parts.join(' ');\n }\n\n // Auto-generate full name from name components\n generateFullName(): void {\n const firstName = this.userMasterForm.get('user_firstname')?.value || '';\n const middleName = this.userMasterForm.get('user_middlename')?.value || '';\n const lastName = this.userMasterForm.get('user_lastname')?.value || '';\n\n // Create full name from parts, filtering out empty values\n const parts = [firstName, middleName, lastName].filter(part => part && part.trim());\n const generatedFullName = parts.join(' ');\n\n // Update the full name field if we have any name parts\n console.log('Generated full name:', generatedFullName);\n if (generatedFullName) {\n this.userMasterForm.get('user_fullname')?.setValue(generatedFullName);\n }\n }\n\n // Handle name field changes to auto-generate full name\n onNameFieldChange(): void {\n this.generateFullName();\n }\n\n getUserUsername(): string {\n return this.userMasterForm.get('user_username')?.value || '';\n }\n\n getUserEmail(): string {\n return this.userMasterForm.get('user_emailid')?.value || '';\n }\n\n getUserMobile(): string {\n return this.userMasterForm.get('user_mobileno')?.value || '';\n }\n\n getUserActivePeriod(): string {\n // Active period is now managed at entity mapping level\n return 'Managed per entity';\n }\n\n getUserActiveStatus(): boolean {\n return this.userMasterForm.get('user_isactive')?.value || false;\n }\n\n getUserPhoto(): string | null {\n // Return the profile photo preview URL if available\n return this.profilePhotoPreview();\n }\n\n getEntityMappingCount(): number {\n return this.entityMappings().length;\n }\n\n /**\n * Handle profile photo upload success\n */\n onProfilePhotoUploadSuccess(fileId: string): void {\n console.log('✅ Profile photo uploaded successfully with ID:', fileId);\n // The form control is automatically updated by the file input component\n }\n\n /**\n * Handle profile photo upload error\n */\n onProfilePhotoUploadError(error: string): void {\n console.error('❌ Profile photo upload failed:', error);\n // Error notifications are now handled by the file input component itself\n }\n\n /**\n * Handle profile photo upload progress\n */\n onProfilePhotoUploadProgress(progress: number): void {\n // Progress notifications are now handled by the file input component itself\n console.log('📸 Profile photo upload progress:', progress);\n }\n\n /**\n * Get upload data for profile photo\n */\n getProfilePhotoUploadData() {\n return {\n altText: 'User Profile Photo',\n userId: this.appState.getCurrentUser()?._id || '',\n permissions: ['read', 'write'],\n tags: ['user', 'profile', 'photo', 'avatar'],\n uploadType: 'user_profile_photo',\n };\n }\n\n /**\n * Get upload data for document files with group ID\n */\n getDocumentUploadData(documentIndex: number) {\n const documentFormGroup = this.documentsFormArray.at(documentIndex);\n const photoGroupId = documentFormGroup?.get('syusd_photo_group_id_cyfm')?.value;\n const documentType = documentFormGroup?.get('syusd_document_type_id_sygms')?.value;\n const documentNumber = documentFormGroup?.get('syusd_doc_number')?.value;\n\n // Get document type name for better tagging\n const documentTypeName = this.documentTypeOptions().find(opt => opt._id === documentType)?.sygms_title || 'Document';\n\n return {\n altText: `${documentTypeName} - ${documentNumber || 'Document'}`,\n userId: this.appState.getCurrentUser()?._id || '',\n groupId: photoGroupId, // Use photo group ID or generate one\n permissions: ['read', 'write'],\n tags: ['user', 'document', documentTypeName.toLowerCase(), 'file'],\n uploadType: 'user_document',\n documentIndex: documentIndex,\n documentType: documentType,\n documentNumber: documentNumber\n };\n }\n\n /**\n * Handle document upload success\n * For multiple file upload, uploadResponse is the group ID\n */\n onDocumentUploadSuccess(groupId: string, documentIndex: number): void {\n console.log(`📎 Document upload success for document ${documentIndex} with group ID:`, groupId);\n \n // Update the photo group ID in the form\n const documentFormGroup = this.documentsFormArray.at(documentIndex);\n if (documentFormGroup && groupId) {\n documentFormGroup.get('syusd_photo_group_id_cyfm')?.setValue(groupId);\n console.log(`📎 Updated photo group ID for document ${documentIndex}:`, groupId);\n }\n\n // For multiple file upload, we don't track individual files here\n // The files are managed by the group ID on the server\n // Clear any existing file tracking since we now use group ID\n (documentFormGroup as any)._uploadedFiles = [];\n }\n\n /**\n * Handle document upload error\n */\n onDocumentUploadError(error: any, documentIndex: number): void {\n console.error(`❌ Document upload error for document ${documentIndex}:`, error);\n this.error.set(`Failed to upload document file: ${error?.message || 'Unknown error'}`);\n }\n\n /**\n * Handle document upload progress\n */\n onDocumentUploadProgress(progress: number, documentIndex: number): void {\n console.log(`📊 Document upload progress for document ${documentIndex}: ${progress}%`);\n // You can add progress indication here if needed\n }\n\n /**\n * Load profile photo preview for existing photos\n */\n private loadProfilePhotoPreview(fileId: string): void {\n // The file-input component will handle loading the file details automatically\n // when the form control value is set to the file ID\n console.log('📸 Profile photo preview will be loaded by file-input component for ID:', fileId);\n }\n\n addContactAddress() {\n const newAddress = {\n sycad_contact_person_name: '',\n sycad_address_type_id_sygms: {\n _id: '',\n sygms_name: ''\n },\n sycad_contact_person_syfdl: {\n _id: '',\n syfdl_first_name: ''\n },\n sycad_contact_pin_sypin: {\n _id: '',\n sypin_pincode: 0\n },\n sycad_contact_country_syctr: {\n _id: '',\n syctr_country_iso_name: ''\n },\n sycad_contact_address: '',\n sycad_contact_city_sypin: '',\n sycad_contact_state_sypin: '',\n sycad_contact_phone: undefined,\n sycad_contact_phone_alt: undefined,\n sycad_contact_fax: '',\n sycad_contact_email: '',\n sycad_contact_email_alt: ''\n };\n\n // Update signal for UI tracking\n this.contactAddresses.update(addresses => [...addresses, newAddress]);\n\n // Add FormGroup to FormArray\n const addressFormGroup = this.createContactAddressFormGroup();\n this.contactAddressesFormArray.push(addressFormGroup);\n\n // Get the new address index\n const newAddressIndex = this.contactAddresses().length - 1;\n\n // Initialize dropdown data for the new address\n this.addressPostalCodes.update(current => ({ ...current, [newAddressIndex]: [] }));\n this.addressCountries.update(current => ({ ...current, [newAddressIndex]: [] }));\n this.addressPostalCodesLoading.update(current => ({ ...current, [newAddressIndex]: false }));\n this.addressCountriesLoading.update(current => ({ ...current, [newAddressIndex]: false }));\n this.postalCodeDataCache.update(current => ({ ...current, [newAddressIndex]: [] }));\n\n // Load initial countries for this address\n this.loadCountriesForAddress(newAddressIndex);\n }\n\n removeContactAddress(index: number) {\n // Remove from FormArray\n this.contactAddressesFormArray.removeAt(index);\n\n // Update signal for UI tracking\n this.contactAddresses.update(addresses => addresses.filter((_, i) => i !== index));\n\n // Clean up dropdown data for the removed address\n this.addressPostalCodes.update(current => {\n const newData = { ...current };\n delete newData[index];\n return newData;\n });\n this.addressCountries.update(current => {\n const newData = { ...current };\n delete newData[index];\n return newData;\n });\n this.addressPostalCodesLoading.update(current => {\n const newData = { ...current };\n delete newData[index];\n return newData;\n });\n this.addressCountriesLoading.update(current => {\n const newData = { ...current };\n delete newData[index];\n return newData;\n });\n this.postalCodeDataCache.update(current => {\n const newData = { ...current };\n delete newData[index];\n return newData;\n });\n }\n\n addDocument() {\n // Create a new document FormGroup using the existing helper method\n const newDocumentGroup = this.createDocumentFormGroup();\n\n // Add the new document FormGroup to the FormArray\n this.documentsFormArray.push(newDocumentGroup);\n\n // Update the documents signal to keep UI in sync\n this.documents.update(docs => [...docs, newDocumentGroup.value]);\n }\n\n removeDocument(index: number) {\n // Clean up uploaded files for this document\n const documentFormGroup = this.documentsFormArray.at(index);\n if (documentFormGroup) {\n (documentFormGroup as any)._uploadedFiles = [];\n }\n\n // Remove the document from the FormArray\n this.documentsFormArray.removeAt(index);\n\n // Update the documents signal to keep UI in sync\n this.documents.update(docs => docs.filter((_, i) => i !== index));\n }\n\n addFamilyDetail() {\n // Create a new family detail FormGroup using the existing helper method\n const newFamilyGroup = this.createFamilyDetailFormGroup();\n\n // Add the new family detail FormGroup to the FormArray\n this.familyDetailsFormArray.push(newFamilyGroup);\n\n // Update the family details signal to keep UI in sync\n this.familyDetails.update(families => [...families, newFamilyGroup.value]);\n\n // Load initial users for the new family member\n const newIndex = this.familyDetailsFormArray.length - 1;\n this.searchUsers('', newIndex);\n }\n\n removeFamilyDetail(index: number) {\n // Remove the family detail from the FormArray\n this.familyDetailsFormArray.removeAt(index);\n\n // Update the family details signal to keep UI in sync\n this.familyDetails.update(families => families.filter((_, i) => i !== index));\n\n // Clean up user search data for the removed family member\n this.userSearchResults.update(results => {\n const newResults = { ...results };\n delete newResults[index];\n return newResults;\n });\n\n this.userSearchLoading.update(loading => {\n const newLoading = { ...loading };\n delete newLoading[index];\n return newLoading;\n });\n\n\n }\n\n onSubmit() {\n // Custom validation: ensure at least one entity mapping exists\n if (this.entityMappings().length === 0) {\n console.warn('At least one entity mapping is required for user access.');\n return;\n }\n\n // Custom validation: ensure one entity is set as default\n if (!this.hasDefaultEntity()) {\n console.warn('One entity must be set as default for user access.');\n return;\n }\n\n if (this.userMasterForm.valid) {\n this.loading.set(true);\n\n // Prepare form data with entity mappings and exceptions\n const {\n core_entity_mapping,\n core_user_contact_addresses,\n core_user_documents,\n core_user_family_details,\n ...auth_user_mst\n } = this.userMasterForm.value;\n\n // Collect exceptions from all entity mappings\n const core_user_role_exceptions = this.collectRoleExceptions();\n\n const formData: AuthUserMstCreatePayload = {\n auth_user_mst: auth_user_mst,\n core_entity_mapping: core_entity_mapping || [],\n core_user_role_exceptions: core_user_role_exceptions,\n core_user_contact_addresses: core_user_contact_addresses || [],\n core_user_documents: core_user_documents || [],\n core_user_family_details: core_user_family_details || [],\n core_user_attributes: []\n };\n\n if (this.userId()) {\n formData.auth_user_mst._id = this.userId();\n }\n // Handle password fields based on mode\n if (this.isEditMode()) {\n // In edit mode, only include password if it's being updated\n if (!this.isPasswordUpdateRequired()) {\n // Remove password fields if not updating password\n const { user_password, user_confirm_password, ...dataWithoutPasswords } = formData?.auth_user_mst as (AuthUserMst & { user_confirm_password?: string });\n formData.auth_user_mst = dataWithoutPasswords;\n } else {\n // Encrypt password before sending and remove confirm password field\n const { user_confirm_password, ...dataWithPassword } = formData?.auth_user_mst as (AuthUserMst & { user_confirm_password?: string });\n if (dataWithPassword.user_password) {\n console.log('🔐 Encrypting password for edit mode...');\n const originalPassword = dataWithPassword.user_password;\n dataWithPassword.user_password = customEncrypt(dataWithPassword.user_password);\n\n console.log('✅ Password encrypted for edit mode:', { originalLength: originalPassword, encryptedLength: customDecrypt(dataWithPassword.user_password), dataWithPassword: dataWithPassword.user_password });\n }\n formData.auth_user_mst = dataWithPassword;\n }\n } else {\n // In create mode, encrypt password and remove confirm password field\n const { user_confirm_password, ...dataWithPassword } = formData?.auth_user_mst as (AuthUserMst & { user_confirm_password?: string });\n if (dataWithPassword.user_password) {\n console.log('🔐 Encrypting password for create mode...');\n const originalPassword = dataWithPassword.user_password;\n dataWithPassword.user_password = customEncrypt(dataWithPassword.user_password);\n console.log('✅ Password encrypted for create mode:', { originalLength: originalPassword, encryptedLength: dataWithPassword.user_password.length });\n }\n formData.auth_user_mst = dataWithPassword;\n }\n\n // Log final form data being sent (without password for security)\n const logData = { ...formData };\n console.log('📤 Sending form data to server:', logData);\n\n // Use the service to save user master\n this.userMasterService.saveUpdateUserMaster(logData)\n .subscribe({\n next: (response) => {\n console.log('✅ User master saved successfully:', response);\n this.loading.set(false);\n this.error.set(null); // Clear any previous errors\n\n if (this.isEditMode()) {\n // In edit mode, show success message\n this.success.set('User updated successfully! All changes have been saved.');\n console.log('User updated successfully');\n // Auto-hide success message after 5 seconds\n setTimeout(() => this.success.set(null), 5000);\n } else {\n // In create mode, show success message and reset form for new user\n this.success.set('User created successfully! You can now create another user.');\n // Auto-hide success message after 5 seconds\n setTimeout(() => this.success.set(null), 5000);\n this.resetForm();\n }\n },\n error: (error) => {\n console.error('❌ Error saving user master:', error);\n this.error.set('Failed to save user. Please try again.');\n this.loading.set(false);\n }\n });\n } else {\n console.warn('Form is invalid. Please fill in all required fields.');\n }\n }\n\n resetForm() {\n // Clear contact addresses FormArray\n while (this.contactAddressesFormArray.length !== 0) {\n this.contactAddressesFormArray.removeAt(0);\n }\n\n // Clear documents FormArray\n while (this.documentsFormArray.length !== 0) {\n this.documentsFormArray.removeAt(0);\n }\n\n // Clear family details FormArray\n while (this.familyDetailsFormArray.length !== 0) {\n this.familyDetailsFormArray.removeAt(0);\n }\n\n // Clear entity mapping FormArray\n while (this.entityMappingsFormArray.length !== 0) {\n this.entityMappingsFormArray.removeAt(0);\n }\n\n this.userMasterForm.reset();\n this.contactAddresses.set([]);\n this.documents.set([]);\n this.familyDetails.set([]);\n this.entityMappings.set([]);\n this.menuRightsMap.set({});\n }\n\n /**\n * Go back to user list\n */\n goBackToUserList(): void {\n this.router.navigate(['/control-panel/user-master']);\n }\n\n /**\n * Cancel form and optionally navigate back\n */\n cancelForm(): void {\n if (this.isEditMode()) {\n this.goBackToUserList();\n } else {\n this.resetForm();\n }\n }\n\n /**\n * Get page title based on mode\n */\n getPageTitle(): string {\n return this.isEditMode() ? 'Edit User' : 'Create New User';\n }\n\n /**\n * Check if password fields should be shown in the UI\n */\n shouldShowPasswordFields(): boolean {\n return this.showPasswordFields();\n }\n\n /**\n * Get password field label based on mode\n */\n getPasswordFieldLabel(): string {\n return this.isEditMode() ? 'New Password (leave blank to keep current)' : 'Password';\n }\n\n /**\n * Get password confirmation field label based on mode \n */\n getPasswordConfirmLabel(): string {\n return this.isEditMode() ? 'Confirm New Password' : 'Confirm Password';\n }\n\n /**\n * Get password validation error message\n */\n getPasswordError(): string | null {\n const passwordControl = this.userMasterForm.get('user_password');\n if (passwordControl?.invalid && passwordControl?.touched) {\n if (passwordControl.errors?.['required']) {\n return 'Password is required';\n }\n if (passwordControl.errors?.['minlength']) {\n return 'Password must be at least 8 characters long';\n }\n }\n return null;\n }\n\n /**\n * Get confirm password validation error message\n */\n getConfirmPasswordError(): string | null {\n const confirmControl = this.userMasterForm.get('user_confirm_password');\n if (confirmControl?.invalid && confirmControl?.touched) {\n if (confirmControl.errors?.['required']) {\n return 'Password confirmation is required';\n }\n if (confirmControl.errors?.['passwordRequired']) {\n return 'Password confirmation is required';\n }\n if (confirmControl.errors?.['passwordMismatch']) {\n return 'Passwords do not match';\n }\n }\n return null;\n }\n\n /**\n * Check if password field has error\n */\n hasPasswordError(): boolean {\n const passwordControl = this.userMasterForm.get('user_password');\n return !!(passwordControl?.invalid && passwordControl?.touched);\n }\n\n /**\n * Check if confirm password field has error\n */\n hasConfirmPasswordError(): boolean {\n const confirmControl = this.userMasterForm.get('user_confirm_password');\n return !!(confirmControl?.invalid && confirmControl?.touched);\n }\n\n /**\n * Check if password fields have any input\n */\n hasPasswordInput(): boolean {\n const passwordControl = this.userMasterForm.get('user_password');\n const confirmPasswordControl = this.userMasterForm.get('user_confirm_password');\n\n return !!(passwordControl?.value?.trim() || confirmPasswordControl?.value?.trim());\n }\n\n /**\n * Trigger password update mode (for edit mode)\n */\n triggerPasswordUpdate(): void {\n // Check if there's any existing input in password fields\n const passwordControl = this.userMasterForm.get('user_password');\n const confirmPasswordControl = this.userMasterForm.get('user_confirm_password');\n\n const hasPasswordInput = passwordControl?.value?.trim();\n const hasConfirmPasswordInput = confirmPasswordControl?.value?.trim();\n\n if (hasPasswordInput || hasConfirmPasswordInput) {\n // If there's existing input, ask user for confirmation\n const confirmClear = confirm(\n 'There is existing text in the password fields. Do you want to clear them and start fresh?'\n );\n\n if (confirmClear) {\n // Clear existing password values\n passwordControl?.setValue('');\n confirmPasswordControl?.setValue('');\n passwordControl?.markAsUntouched();\n confirmPasswordControl?.markAsUntouched();\n }\n }\n\n // Enable password fields visibility in edit mode\n this.showPasswordFields.set(true);\n\n // Enable password fields by making them required\n this.updatePasswordValidation();\n\n // Focus on password field after a short delay to ensure UI updates\n setTimeout(() => {\n const passwordField = document.getElementById('user_password');\n passwordField?.focus();\n }, 100);\n }\n\n /**\n * Cancel password update mode (for edit mode)\n */\n cancelPasswordUpdate(): void {\n // Clear password values\n const passwordControl = this.userMasterForm.get('user_password');\n const confirmPasswordControl = this.userMasterForm.get('user_confirm_password');\n\n passwordControl?.setValue('');\n confirmPasswordControl?.setValue('');\n passwordControl?.markAsUntouched();\n confirmPasswordControl?.markAsUntouched();\n\n // Hide password fields in edit mode\n this.showPasswordFields.set(false);\n\n // Update validation to make fields optional again\n this.updatePasswordValidation();\n }\n\n // ==================== ADDRESS-RELATED METHODS ====================\n\n /**\n * Load countries for a specific address dropdown\n */\n loadCountriesForAddress(addressIndex: number): void {\n this.addressCountriesLoading.update(loading => ({ ...loading, [addressIndex]: true }));\n this.countryService.getAllCountries({}).subscribe({\n next: (response: countryListControllerResponse) => {\n console.log('✅ Countries response:', response);\n const countries = response.data || [];\n this.addressCountries.update(current => ({ ...current, [addressIndex]: countries }));\n console.log('🌍 Loaded countries for address', addressIndex, ':', countries.length);\n },\n error: (error) => {\n console.error('💥 Countries transform error:', error);\n this.addressCountries.update(current => ({ ...current, [addressIndex]: [] }));\n },\n complete: () => {\n this.addressCountriesLoading.update(loading => ({ ...loading, [addressIndex]: false }));\n }\n });\n }\n\n /**\n * Search countries with filter for a specific address\n */\n onCountrySearch(event: any, addressIndex: number): void {\n const payload = {\n query: event?.query || '',\n syctr_id: event?.value || ''\n };\n\n this.addressCountriesLoading.update(loading => ({ ...loading, [addressIndex]: true }));\n this.countryService.getAllCountries(payload).subscribe({\n next: (response) => {\n const countries = response.data || [];\n this.addressCountries.update(current => ({ ...current, [addressIndex]: countries }));\n console.log('🌍 Updated countries count for address', addressIndex, ':', countries.length);\n },\n error: (error) => {\n console.error('❌ Failed to search countries:', error);\n this.addressCountries.update(current => ({ ...current, [addressIndex]: [] }));\n },\n complete: () => {\n this.addressCountriesLoading.update(loading => ({ ...loading, [addressIndex]: false }));\n }\n });\n }\n\n /**\n * Search postal codes for a specific address\n */\n onPostalCodeSearch(event: any, addressIndex: number): void {\n const payload = {\n sypin_pincode: event?.query || '',\n sypin_id: event?.value || ''\n };\n\n this.addressPostalCodesLoading.update(loading => ({ ...loading, [addressIndex]: true }));\n this.pinCodeService.getPinCodeData(payload).pipe(\n takeUntilDestroyed(this.destroyRef)\n ).subscribe({\n next: (response: pinCodeSelectControllerResponse) => {\n console.log('📮 Postal codes response:', response);\n const postalCodeData = response?.data?.core_pin_code || [];\n\n // Update dropdown options\n this.addressPostalCodes.update(current => ({ ...current, [addressIndex]: postalCodeData }));\n\n // Cache the full postal code data for auto-filling\n this.postalCodeDataCache.update(current => ({ ...current, [addressIndex]: postalCodeData }));\n },\n error: (error) => {\n console.error('❌ Failed to search postal codes:', error);\n this.addressPostalCodes.update(current => ({ ...current, [addressIndex]: [] }));\n },\n complete: () => {\n this.addressPostalCodesLoading.update(loading => ({ ...loading, [addressIndex]: false }));\n }\n });\n }\n\n /**\n * Handle postal code selection to auto-fill city, state, country\n */\n onPostalCodeSelection(event: pinCodeSelectResponseData, addressIndex: number): void {\n console.log('📍 Postal Code Selection Event:', event, addressIndex);\n const pinCodeId = event._id;\n if (!pinCodeId) return;\n\n // Get the postal code details from the specific address's postal codes\n const addressPostalCodes = this.addressPostalCodes()[addressIndex] || [];\n const selectedPostalCode = addressPostalCodes.find((pc: pinCodeSelectResponseData) => pc._id === pinCodeId);\n console.log('📍 Selected Postal Code:', selectedPostalCode, addressPostalCodes, pinCodeId);\n // Update the form with postal code and auto-fill city, state, country\n const addressFormGroup = this.contactAddressesFormArray.at(addressIndex) as FormGroup;\n if (addressFormGroup) {\n addressFormGroup.patchValue({\n sycad_contact_pin_sypin: pinCodeId,\n sycad_contact_city_sypin: selectedPostalCode?.sypin_district || '',\n sycad_contact_state_sypin: selectedPostalCode?.sypin_state_name || '',\n sycad_contact_country_syctr: selectedPostalCode?.sypin_country_id_syctr || ''\n });\n\n // If country is not in the dropdown yet, load it\n if (selectedPostalCode?.sypin_country_id_syctr && !this.isCountryInDropdown(selectedPostalCode.sypin_country_id_syctr, addressIndex)) {\n this.loadCountryForPostalCode(selectedPostalCode.sypin_country_id_syctr, addressIndex);\n }\n }\n }\n\n /**\n * Check if a country is already in the dropdown for a specific address\n */\n private isCountryInDropdown(countryId: string, addressIndex: number): boolean {\n const addressCountries = this.addressCountries()[addressIndex] || [];\n return addressCountries.some(country => country._id === countryId);\n }\n\n /**\n * Load a specific country for postal code auto-fill\n */\n private loadCountryForPostalCode(countryId: string, addressIndex: number): void {\n const payload = {\n syctr_id: countryId\n };\n\n this.countryService.getAllCountries(payload).subscribe({\n next: (response) => {\n const countries = response.data || [];\n if (countries.length > 0) {\n // Add the country to the existing list\n const currentCountries = this.addressCountries()[addressIndex] || [];\n const updatedCountries = [...currentCountries, ...countries];\n this.addressCountries.update(current => ({ ...current, [addressIndex]: updatedCountries }));\n }\n },\n error: (error) => {\n console.error('❌ Failed to load country for postal code:', error);\n }\n });\n }\n\n /**\n * Get postal code data from the API response cache\n */\n private getPostalCodeDataFromResponse(pinCodeId: string, addressIndex: number): any {\n // Get the cached postal code data for this address\n const postalCodeData = this.postalCodeDataCache()[addressIndex];\n if (!postalCodeData) return null;\n\n // Find the specific postal code data\n return postalCodeData.find((item: any) => item._id === pinCodeId || item.sypin_id === pinCodeId);\n }\n\n /**\n * Load address types from general master service\n */\n private loadAddressTypes(): void {\n this.CideCoreGeneralMasterService.getMasterList({\n sygmt_code: 'user_address_type',\n sygms_entity_id_syen: this.appState.getActiveEntityId()\n }).subscribe({\n next: (response: generalMasterListControllerResponse) => {\n if (response?.success && response.data) {\n console.log('🏠 Address types loaded:', response.data);\n this.addressTypeOptions.set(response.data);\n } else {\n console.error('❌ Failed to load address types');\n this.addressTypeOptions.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading address types:', error);\n this.addressTypeOptions.set([]);\n }\n });\n }\n\n /**\n * Load document types from general master service\n */\n private loadDocumentTypes(): void {\n this.CideCoreGeneralMasterService.getMasterList({\n sygmt_code: 'user_document_type',\n sygms_entity_id_syen: this.appState.getActiveEntityId()\n }).subscribe({\n next: (response: generalMasterListControllerResponse) => {\n if (response?.success && response.data) {\n console.log('📄 Document types loaded:', response.data);\n this.documentTypeOptions.set(response.data);\n } else {\n console.error('❌ Failed to load document types');\n this.documentTypeOptions.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading document types:', error);\n this.documentTypeOptions.set([]);\n }\n });\n }\n\n /**\n * Load document verification status from general master service\n */\n private loadDocumentVerificationStatus(): void {\n this.CideCoreGeneralMasterService.getMasterList({\n sygmt_code: 'document_verification_status',\n sygms_entity_id_syen: this.appState.getActiveEntityId()\n }).subscribe({\n next: (response: generalMasterListControllerResponse) => {\n if (response?.success && response.data) {\n console.log('✅ Document verification status loaded:', response.data);\n this.documentVerificationStatusOptions.set(response.data);\n } else {\n console.error('❌ Failed to load document verification status');\n this.documentVerificationStatusOptions.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading document verification status:', error);\n this.documentVerificationStatusOptions.set([]);\n }\n });\n }\n\n /**\n * Load document KYC status from general master service\n */\n private loadDocumentKycStatus(): void {\n this.CideCoreGeneralMasterService.getMasterList({\n sygmt_code: 'document_kyc_status',\n sygms_entity_id_syen: this.appState.getActiveEntityId()\n }).subscribe({\n next: (response: generalMasterListControllerResponse) => {\n if (response?.success && response.data) {\n console.log('🔐 Document KYC status loaded:', response.data);\n this.documentKycStatusOptions.set(response.data);\n } else {\n console.error('❌ Failed to load document KYC status');\n this.documentKycStatusOptions.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading document KYC status:', error);\n this.documentKycStatusOptions.set([]);\n }\n });\n }\n\n /**\n * Load blood groups from general master service\n */\n private loadBloodGroups(): void {\n this.CideCoreGeneralMasterService.getMasterList({\n sygmt_code: 'blood_group',\n sygms_entity_id_syen: this.appState.getActiveEntityId()\n }).subscribe({\n next: (response: generalMasterListControllerResponse) => {\n if (response?.success && response.data) {\n console.log('🩸 Blood groups loaded:', response.data);\n this.bloodGroupOptions.set(response.data);\n } else {\n console.error('❌ Failed to load blood groups');\n this.bloodGroupOptions.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading blood groups:', error);\n this.bloodGroupOptions.set([]);\n }\n });\n }\n\n /**\n * Load relationship options from general master service\n */\n private loadRelationshipOptions(): void {\n this.CideCoreGeneralMasterService.getMasterList({\n sygmt_code: 'family_relationship',\n sygms_entity_id_syen: this.appState.getActiveEntityId()\n }).subscribe({\n next: (response: generalMasterListControllerResponse) => {\n if (response?.success && response.data) {\n console.log('👨👩👧👦 Relationship options loaded:', response.data);\n this.relationshipOptionsData.set(response.data);\n } else {\n console.error('❌ Failed to load relationship options');\n this.relationshipOptionsData.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading relationship options:', error);\n this.relationshipOptionsData.set([]);\n }\n });\n }\n\n /**\n * Load menu options from API\n */\n private loadMenuOptions(): void {\n const requestBody: MMenuListPayload = {\n pageIndex: 0,\n pageSize: 1000, // Load all menus\n total: 0,\n query: '',\n sort: {\n order: 'asc',\n key: 'syme_order_by'\n }\n };\n\n this.menuService.getMenuList(requestBody).subscribe({\n next: (response) => {\n if (response?.success) {\n console.log('🎭 Menu options loaded:', response.data);\n this.menuOptions.set(response.data || []);\n } else {\n console.error('❌ Failed to load menu options:', response);\n this.menuOptions.set([]);\n }\n },\n error: (error) => {\n console.error('❌ Error loading menu options:', error);\n this.menuOptions.set([]);\n }\n });\n }\n\n /**\n * Load dropdown data for existing addresses in edit mode\n */\n private loadDropdownDataForExistingAddresses(): void {\n const addresses = this.contactAddresses();\n addresses.forEach((_, index) => {\n // Initialize dropdown data for each existing address\n this.addressPostalCodes.update(current => ({ ...current, [index]: [] }));\n this.addressCountries.update(current => ({ ...current, [index]: [] }));\n this.addressPostalCodesLoading.update(current => ({ ...current, [index]: false }));\n this.addressCountriesLoading.update(current => ({ ...current, [index]: false }));\n this.postalCodeDataCache.update(current => ({ ...current, [index]: [] }));\n\n // Load countries for each address\n this.loadCountriesForAddress(index);\n });\n }\n}\n","<!-- \n ENTERPRISE USER MASTER FORM\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<div class=\"tw-w-full tw-h-full tw-p-1 tw-pt-2\">\n <form class=\"tw-max-w-7xl tw-mx-auto tw-bg-transparent\" [formGroup]=\"userMasterForm\" [class.tw-opacity-60]=\"loading()\"\n (ngSubmit)=\"onSubmit()\">\n\n <!-- Success/Error Messages -->\n @if (success()) {\n <div class=\"tw-mb-4 tw-p-4 tw-bg-green-50 tw-border tw-border-green-200 tw-rounded-md tw-shadow-sm\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"check_circle\" class=\"tw-text-green-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-green-800 tw-m-0\">Success</h3>\n <p class=\"tw-text-sm tw-text-green-700 tw-mt-1 tw-m-0\">{{ success() }}</p>\n </div>\n <button type=\"button\" (click)=\"success.set(null)\" class=\"tw-ml-auto tw-text-green-400 hover:tw-text-green-600\">\n <cide-ele-icon name=\"close\" class=\"tw-w-4 tw-h-4\"></cide-ele-icon>\n </button>\n </div>\n </div>\n }\n @if (error()) {\n <div class=\"tw-mb-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md tw-shadow-sm\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n <button type=\"button\" (click)=\"error.set(null)\" class=\"tw-ml-auto tw-text-red-400 hover:tw-text-red-600\">\n <cide-ele-icon name=\"close\" class=\"tw-w-4 tw-h-4\"></cide-ele-icon>\n </button>\n </div>\n </div>\n }\n\n <!-- User Context Header -->\n <div\n class=\"tw-bg-gradient-to-r tw-from-blue-50 tw-to-indigo-50 tw-border tw-border-blue-200 tw-rounded-md tw-p-1 tw-mb-2 tw-shadow-sm\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-flex-wrap tw-gap-2\">\n <!-- User Basic Info Display -->\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-flex-wrap\">\n <!-- Profile Photo Preview -->\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <div\n class=\"tw-w-8 tw-h-8 tw-rounded-full tw-bg-blue-100 tw-border tw-border-blue-200 tw-flex tw-items-center tw-justify-center tw-overflow-hidden\">\n @if (userMasterForm.get('user_photo_id_cyfm')?.value) {\n <img cideEleFileImage [fileId]=\"userMasterForm.get('user_photo_id_cyfm')?.value\"\n [altText]=\"'Profile Photo'\" class=\"tw-w-full tw-h-full tw-object-cover\">\n } @else {\n <cide-ele-icon name=\"person\" class=\"tw-w-5 tw-h-5 tw-text-blue-600\">\n </cide-ele-icon>\n }\n </div>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-xs tw-font-medium tw-text-blue-900\">\n {{ getUserFullName() || 'New User' }}\n </span>\n <span class=\"tw-text-xs tw-text-blue-600\">\n {{ getUserUsername() || 'Username not set' }}\n </span>\n </div>\n </div>\n\n <!-- Contact Info -->\n <div class=\"tw-flex tw-items-center tw-gap-3\">\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-gray-700\">\n <cide-ele-icon variant=\"gray\" size=\"xs\">email</cide-ele-icon>\n <span>{{ getUserEmail() || 'Email not set' }}</span>\n </div>\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-gray-700\">\n <cide-ele-icon variant=\"gray\" size=\"xs\">phone</cide-ele-icon>\n <span>{{ getUserMobile() || 'Mobile not set' }}</span>\n </div>\n </div>\n\n <!-- Active Status -->\n <div class=\"tw-flex tw-items-center tw-gap-1\">\n @if (getUserActiveStatus()) {\n <span\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-700\">\n <cide-ele-icon variant=\"green\" size=\"xs\" class=\"tw-mr-1\">check_circle</cide-ele-icon>\n Active\n </span>\n } @else {\n <span\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-700\">\n <cide-ele-icon variant=\"red\" size=\"xs\" class=\"tw-mr-1\">cancel</cide-ele-icon>\n Inactive\n </span>\n }\n </div>\n </div>\n\n <!-- Entity Info -->\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n @if (hasDefaultEntity()) {\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-blue-700\">\n <cide-ele-icon variant=\"blue\" size=\"xs\">business</cide-ele-icon>\n <span class=\"tw-font-medium\">{{ getDefaultEntityName() }}</span>\n </div>\n } @else {\n <div class=\"tw-flex tw-items-center tw-gap-1 tw-text-xs tw-text-gray-500\">\n <cide-ele-icon variant=\"gray\" size=\"xs\">business</cide-ele-icon>\n <span class=\"tw-italic\">No entity</span>\n </div>\n }\n\n <span class=\"tw-text-xs tw-text-gray-600 tw-px-2 tw-py-1 tw-bg-gray-100 tw-rounded\">\n {{ getEntityMappingCount() }} mapping(s)\n </span>\n </div>\n </div>\n </div>\n\n <!-- Tab Navigation -->\n <div class=\"tw-p-0 tw-mb-2 tw-border-b tw-border-gray-200\">\n <cide-ele-tab [tabs]=\"userTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\n (tabChange)=\"onTabChange($event)\">\n </cide-ele-tab>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n @switch (activeTab()) {\n\n @case ('basic') {\n <!-- User Basic Information Section -->\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\n\n <!-- Top Section: Form Fields on Left, Profile Photo on Right -->\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-[1fr_200px] tw-gap-4 tw-mb-4\">\n <!-- Left Side: Form Fields -->\n <div class=\"tw-space-y-4\">\n <!-- Name Fields - All in One Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-4\">\n <cide-ele-input id=\"user_firstname\" label=\"First Name *\" formControlName=\"user_firstname\"\n placeholder=\"Enter first name\" [maxlength]=\"20\" size=\"md\" (ngModelChange)=\"onNameFieldChange()\">\n </cide-ele-input>\n\n <cide-ele-input id=\"user_middlename\" label=\"Middle Name\" formControlName=\"user_middlename\"\n placeholder=\"Enter middle name\" [maxlength]=\"20\" size=\"md\" (ngModelChange)=\"onNameFieldChange()\">\n </cide-ele-input>\n\n <cide-ele-input id=\"user_lastname\" label=\"Last Name *\" formControlName=\"user_lastname\"\n placeholder=\"Enter last name\" [maxlength]=\"20\" size=\"md\" (ngModelChange)=\"onNameFieldChange()\">\n </cide-ele-input>\n\n <cide-ele-input id=\"user_fullname\" label=\"Full Name * (Auto-generated)\" formControlName=\"user_fullname\"\n placeholder=\"Auto-generated from name fields or enter manually\" [maxlength]=\"62\" size=\"md\">\n </cide-ele-input>\n </div>\n\n <!-- Contact Information - All in One Row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-4\">\n <cide-ele-input id=\"user_username\" label=\"Username *\" formControlName=\"user_username\"\n placeholder=\"Enter unique username\" [maxlength]=\"20\" size=\"md\">\n </cide-ele-input>\n\n <cide-ele-input id=\"user_emailid\" label=\"Email ID *\" formControlName=\"user_emailid\" type=\"email\"\n placeholder=\"Enter valid email address\" [maxlength]=\"320\" size=\"md\">\n </cide-ele-input>\n\n <cide-ele-input id=\"user_mobileno\" label=\"Mobile Number *\" formControlName=\"user_mobileno\" type=\"tel\"\n placeholder=\"Enter mobile number\" [maxlength]=\"15\" size=\"md\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Right Side: Profile Photo Upload -->\n <div class=\"tw-flex tw-items-start tw-justify-center tw-p-0\">\n <cide-ele-file-input id=\"user_photo_id_cyfm\" formControlName=\"user_photo_id_cyfm\" accept=\"image/*\"\n [showPreview]=\"true\" [previewBoxMode]=\"true\" [showFileName]=\"false\" previewWidth=\"180px\"\n previewHeight=\"120px\" placeholderText=\"Upload Photo\" placeholderIcon=\"cloud_upload\" [autoUpload]=\"true\"\n [uploadData]=\"getProfilePhotoUploadData()\" (uploadSuccess)=\"onProfilePhotoUploadSuccess($event)\"\n (uploadError)=\"onProfilePhotoUploadError($event)\"\n (uploadProgressChange)=\"onProfilePhotoUploadProgress($event)\">\n </cide-ele-file-input>\n </div>\n </div>\n\n\n\n <!-- Status Control -->\n <div class=\"tw-grid tw-grid-cols-1 tw-mb-2\">\n <div class=\"tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-100 tw-rounded-lg\">\n <label\n class=\"tw-flex tw-flex-col tw-cursor-pointer tw-py-2 tw-bg-transparent tw-border-none tw-rounded-none tw-transition-all tw-duration-200 hover:tw-bg-blue-75\">\n <cide-ele-input type=\"checkbox\" label=\"Active User Status\" formControlName=\"user_isactive\"\n class=\"tw-h-5 tw-accent-blue-500 tw-rounded tw-mb-1\" />\n <span class=\"tw-font-semibold tw-text-gray-700 tw-text-base\"></span>\n <span class=\"tw-text-sm tw-text-gray-600 tw-mt-1 tw-leading-relaxed\">Enable this user account for system\n access and operations</span>\n </label>\n </div>\n </div>\n </div>\n }\n\n @case ('auth') {\n <!-- Authentication Section -->\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\n <!-- Password Fields -->\n @if (shouldShowPasswordFields()) {\n <div class=\"tw-mb-4\">\n <!-- Password Fields Header for Edit Mode -->\n @if (isEditMode()) {\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-800\">Update Password</h6>\n <button type=\"button\"\n class=\"tw-px-3 tw-py-1 tw-bg-gray-100 tw-text-gray-600 tw-border tw-border-gray-300 tw-rounded-md tw-text-xs tw-font-medium hover:tw-bg-gray-200 tw-transition-colors\"\n (click)=\"cancelPasswordUpdate()\">\n Cancel Password Update\n </button>\n </div>\n }\n\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 md:tw-grid-cols-1 tw-gap-6\">\n <cide-ele-input id=\"user_password\" [label]=\"getPasswordFieldLabel()\" formControlName=\"user_password\"\n type=\"password\" placeholder=\"Enter secure password (min 8 characters)\" size=\"md\">\n </cide-ele-input>\n\n <cide-ele-input id=\"user_confirm_password\" [label]=\"getPasswordConfirmLabel()\"\n formControlName=\"user_confirm_password\" type=\"password\" placeholder=\"Confirm your password\" size=\"md\">\n </cide-ele-input>\n </div>\n </div>\n }\n\n <!-- Password Update Option for Edit Mode -->\n @if (isEditMode() && !shouldShowPasswordFields()) {\n <div class=\"tw-mb-4\">\n <div class=\"tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-blue-800 tw-mb-2\">Password Update</h6>\n <p class=\"tw-text-sm tw-text-blue-600 tw-mb-3\">Current password will be kept. Click below to change\n password.</p>\n\n @if (hasPasswordInput()) {\n <div\n class=\"tw-mb-3 tw-p-2 tw-bg-yellow-50 tw-border tw-border-yellow-200 tw-rounded tw-text-sm tw-text-yellow-700\">\n <cide-ele-icon variant=\"yellow\" size=\"xs\" class=\"tw-mr-1\">warning</cide-ele-icon>\n Password fields contain text. Click \"Change Password\" to manage existing input.\n </div>\n }\n\n <button type=\"button\"\n class=\"tw-px-4 tw-py-2 tw-bg-blue-100 tw-text-blue-700 tw-border tw-border-blue-300 tw-rounded-md tw-text-sm tw-font-medium hover:tw-bg-blue-200 tw-transition-colors\"\n (click)=\"triggerPasswordUpdate()\">\n @if (hasPasswordInput()) {\n Manage Password Fields\n } @else {\n Change Password\n }\n </button>\n </div>\n </div>\n }\n\n <!-- Password Options -->\n <div class=\"tw-grid tw-grid-cols-1 tw-gap-4 tw-mb-4\">\n <div class=\"tw-p-2 tw-bg-yellow-50 tw-border tw-border-yellow-100 tw-rounded-lg\">\n <label\n class=\"tw-flex tw-flex-col tw-gap-2 tw-cursor-pointer tw-py-2 tw-bg-transparent tw-border-none tw-rounded-none tw-transition-all tw-duration-200\">\n <cide-ele-input type=\"checkbox\" label=\"Force Password Change on Login\"\n formControlName=\"user_passwordchangeonlogin\" class=\"tw-h-5 tw-accent-yellow-500 tw-rounded tw-mb-1\" />\n <span class=\"tw-text-sm tw-text-gray-600 tw-mt-1 tw-leading-relaxed\">User will be required to change\n password on next login</span>\n </label>\n </div>\n </div>\n\n </div>\n }\n\n @case ('roles') {\n <!-- Entity, Roles & Permissions Mapping Section -->\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\n\n\n\n <!-- Important Note -->\n <div class=\"tw-bg-amber-50 tw-border tw-border-amber-200 tw-rounded-lg tw-p-2 tw-mb-4\">\n <div class=\"tw-flex tw-items-start tw-gap-3\">\n <cide-ele-icon variant=\"amber\" size=\"lg\">info</cide-ele-icon>\n <div class=\"tw-flex-1\">\n <h4 class=\"tw-text-sm tw-font-semibold tw-text-amber-800 tw-mb-1\">Entity-Role Based Access</h4>\n <p class=\"tw-text-sm tw-text-amber-700 tw-mb-2\">User access is completely managed through entity-role\n mappings below. At least one entity mapping is required for user access.</p>\n @if (hasDefaultEntity()) {\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-mt-2 tw-p-2 tw-bg-amber-100 tw-rounded\">\n <cide-ele-icon variant=\"amber\" size=\"sm\">star</cide-ele-icon>\n <span class=\"tw-text-sm tw-text-amber-800\">\n <strong>Default Entity:</strong> {{ getDefaultEntityName() }}\n </span>\n </div>\n } @else {\n <div class=\"tw-text-sm tw-text-amber-600 tw-mt-2 tw-italic\">\n ⚠️ No default entity selected. Please set one entity as default.\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Entity-Role Mapping Section -->\n <div class=\"tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg tw-p-3 tw-mb-4\">\n <div class=\"tw-flex tw-text-center tw-justify-between tw-items-center tw-mb-4\">\n <div>\n <h4 class=\"tw-text-sm tw-text-left tw-font-semibold tw-text-blue-900 tw-mb-1\">Entity-Role Mapping</h4>\n <p class=\"tw-text-sm tw-text-blue-700\">Map user to entities with specific roles and permissions</p>\n </div>\n <div class=\"tw-flex tw-flex-col tw-items-end\">\n <button cideEleButton variant=\"primary\" size=\"md\" type=\"button\" (click)=\"addEntityMapping()\"\n leftIcon=\"add\" [disabled]=\"isAllEntitiesMapped()\">\n Add Entity Mapping\n </button>\n\n @if (isAllEntitiesMapped()) {\n <div class=\"tw-mt-2 tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-md tw-max-w-xs\">\n <p class=\"tw-text-xs tw-text-blue-700\">\n <cide-ele-icon variant=\"info\" size=\"xs\" class=\"tw-mr-1\">info</cide-ele-icon>\n All available entities are already mapped.\n </p>\n </div>\n }\n </div>\n </div>\n\n <div formArrayName=\"core_entity_mapping\">\n @for (mapping of entityMappings(); track $index; let i = $index) {\n <div class=\"tw-bg-white tw-border tw-border-blue-200 tw-rounded-xl tw-mb-6 tw-overflow-hidden tw-shadow-sm\"\n [formGroupName]=\"i\">\n <div\n class=\"tw-bg-gradient-to-r tw-from-blue-50 tw-to-blue-100 tw-px-6 tw-py-3 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-blue-200\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <h5 class=\"tw-m-0 tw-text-blue-800 tw-text-sm tw-font-semibold\">Entity Mapping {{ i + 1 }}</h5>\n @if (mapping.syenm_isdefault) {\n <span\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n <cide-ele-icon variant=\"green\" size=\"xs\" class=\"tw-mr-1\">star</cide-ele-icon>\n Default\n </span>\n }\n </div>\n <button cideEleButton variant=\"danger\" size=\"sm\" type=\"button\" (click)=\"removeEntityMapping(i)\"\n leftIcon=\"delete\">\n Remove\n </button>\n </div>\n\n <div>\n <!-- Entity and Role Selection -->\n <div class=\"tw-grid tw-px-3 tw-py-1 tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4 tw-mb-4\">\n <div>\n <cide-ele-select label=\"Entity *\" [options]=\"getFilteredEntityOptions(i)\"\n formControlName=\"syenm_entity_id_syen\" valueKey=\"_id\" labelKey=\"syen_name\"\n placeholder=\"Select entity\" size=\"md\" (change)=\"onEntityChange(i, $event)\">\n </cide-ele-select>\n\n @if (isAllEntitiesSelected(i)) {\n <div class=\"tw-mt-2 tw-p-2 tw-bg-yellow-50 tw-border tw-border-yellow-200 tw-rounded-md\">\n <p class=\"tw-text-xs tw-text-yellow-700\">\n <cide-ele-icon variant=\"warning\" size=\"xs\" class=\"tw-mr-1\">info</cide-ele-icon>\n All entities are already mapped. Remove another mapping to add this one.\n </p>\n </div>\n }\n </div>\n <cide-ele-select label=\"Role for this Entity\" [options]=\"getRoleOptionsForEntity(i)\"\n formControlName=\"syenm_role_id_syusrol\" valueKey=\"_id\" labelKey=\"syusrol_role_name\"\n placeholder=\"Select role for this entity\" size=\"md\" (change)=\"onRoleChange(i, $event)\">\n </cide-ele-select>\n </div>\n\n\n <!-- Entity-Specific Details and Active Period - All in One Row -->\n <div class=\"tw-grid tw-px-3 tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-4 tw-mb-4\">\n <cide-ele-select label=\"Department for this Entity\" [options]=\"getDepartmentOptionsForEntity(i)\"\n formControlName=\"syenm_department_id_sydept\" (change)=\"onDepartmentChange($event)\" valueKey=\"_id\"\n labelKey=\"sydept_name\" placeholder=\"Select department\" size=\"md\">\n </cide-ele-select>\n\n <cide-ele-select label=\"Designation for this Entity\" [options]=\"getDesignationOptionsForEntity(i)\"\n valueKey=\"_id\" labelKey=\"sydsg_name\" formControlName=\"syenm_designation_id_sydsg\"\n placeholder=\"Select designation\" size=\"md\">\n </cide-ele-select>\n\n <cide-ele-input label=\"Active From *\" [id]=\"'syenm_activefrom['+i+']'\"\n formControlName=\"syenm_activefrom\" type=\"date\" size=\"md\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Active Until\" [id]=\"'syenm_activeupto['+i+']'\"\n formControlName=\"syenm_activeupto\" type=\"date\" size=\"md\">\n </cide-ele-input>\n </div>\n\n <!-- Mapping Settings -->\n <div class=\"tw-grid tw-px-3 tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-4 tw-mb-4\">\n <div class=\"tw-p-2 tw-bg-green-50 tw-border tw-border-green-200 tw-rounded-lg\">\n <cide-ele-input type=\"checkbox\" label=\"Default Entity\" formControlName=\"syenm_isdefault\"\n (change)=\"onDefaultEntityChange(i, $event)\" class=\"tw-h-5 tw-accent-green-500\" />\n <span class=\"tw-text-xs tw-text-green-600 tw-block tw-mt-1\">Set as user's default entity (only one\n allowed)</span>\n </div>\n\n <div class=\"tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg\">\n <cide-ele-input type=\"checkbox\" label=\"Active Mapping\" formControlName=\"syenm_isactive\"\n class=\"tw-h-5 tw-accent-blue-500\" />\n <span class=\"tw-text-xs tw-text-blue-600 tw-block tw-mt-1\">Enable this entity mapping</span>\n </div>\n </div>\n\n <!-- Menu Rights Grid for this Entity-Role -->\n <div class=\"tw-border-t tw-border-gray-200\">\n\n @if (getMenuRightsForMapping(i).length > 0) {\n <!-- Menu Rights Tree Grid -->\n\n <cide-ele-data-grid [config]=\"getMenuRightsGridConfig(i)\"\n [templateRenderers]=\"getMenuRightsTemplateRenderers(i)\"\n (gridEvent)=\"onMenuRightsGridEvent($event, i)\" class=\"tw-h-96 tw-w-full\">\n </cide-ele-data-grid>\n\n } @else {\n <div class=\"tw-text-center tw-py-8 tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg\">\n <div class=\"tw-text-gray-400 tw-mb-3\">\n <cide-ele-icon variant=\"gray\" size=\"lg\">menu</cide-ele-icon>\n </div>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-600 tw-mb-2\">No Menu Rights Available</h6>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mb-3 tw-text-center\">Select both entity and role to\n automatically load\n menu rights for this mapping.</p>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n\n @if (entityMappings().length === 0) {\n <div class=\"tw-text-center tw-py-8 tw-bg-white tw-border tw-border-blue-200 tw-rounded-lg\">\n <div class=\"tw-text-blue-400 tw-mb-3\">\n <cide-ele-icon variant=\"blue\" size=\"lg\">business</cide-ele-icon>\n </div>\n <h4 class=\"tw-text-sm tw-font-medium tw-text-blue-800 tw-mb-2\">No Entity Mappings</h4>\n <p class=\"tw-text-blue-600 tw-mb-4 tw-text-center\">Add entity mappings to assign specific roles and\n permissions for different entities.</p>\n <button class=\"tw-mx-auto\" cideEleButton variant=\"primary\" size=\"md\" type=\"button\"\n (click)=\"addEntityMapping()\" leftIcon=\"add\">\n Add First Entity Mapping\n </button>\n </div>\n }\n </div>\n\n\n </div>\n }\n\n @case ('addresses') {\n <!-- Contact Addresses Section -->\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\n <div class=\"tw-flex tw-justify-end\">\n <div class=\"tw-flex tw-justify-between tw-items-end tw-mb-2 tw-gap-4\">\n <button cideEleButton variant=\"primary\" size=\"md\" type=\"button\" (click)=\"addContactAddress()\"\n leftIcon=\"add\">\n Add New Address\n </button>\n </div>\n </div>\n\n <div formArrayName=\"core_user_contact_addresses\">\n @for (address of contactAddresses(); track $index; let i = $index) {\n <div [formGroupName]=\"i\"\n class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-xl tw-mb-8 tw-overflow-hidden tw-transition-all tw-duration-300 hover:tw-shadow-lg tw-shadow-sm\">\n <div\n class=\"tw-bg-gradient-to-r tw-from-gray-50 tw-to-gray-100 tw-px-4 tw-py-2 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-gray-200\">\n <!-- Use address type as header instead of generic \"Address X\" -->\n <h4 class=\"tw-m-0 tw-text-gray-700 tw-text-sm tw-font-semibold tw-tracking-tight\">\n {{ getAddressTypeLabel(i) || ('Address ' + (i + 1)) }}\n </h4>\n <button cideEleButton variant=\"danger\" size=\"sm\" type=\"button\" (click)=\"removeContactAddress(i)\"\n leftIcon=\"delete\">\n Remove\n </button>\n </div>\n <div class=\"tw-p-4\">\n <!-- Main Layout: Inputs on Left, Address Textarea on Right -->\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\n \n <!-- Left Side: Input Fields (3/4 width) -->\n <div class=\"lg:tw-col-span-3\">\n <!-- Row 1: Address Type, Contact Person -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3 tw-mb-3\">\n <cide-ele-select label=\"Address Type\" [options]=\"addressTypeOptions()\" id=\"sycad_address_type_id_sygms\"\n formControlName=\"sycad_address_type_id_sygms\" placeholder=\"Select type\" size=\"sm\"\n valueKey=\"_id\" labelKey=\"sygms_title\" (change)=\"onAddressTypeChange(i)\">\n </cide-ele-select>\n\n <cide-ele-input label=\"Contact Person\" formControlName=\"sycad_contact_person_name\"\n placeholder=\"Enter contact person\" size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Row 2: Postal Code, City, State, Country -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-4 tw-gap-3\">\n <cide-ele-select label=\"Postal Code\" [options]=\"addressPostalCodes()[i] || []\"\n formControlName=\"sycad_contact_pin_sypin\" placeholder=\"Select postal code\" [searchable]=\"true\"\n [loading]=\"addressPostalCodesLoading()[i] || false\" (searchChange)=\"onPostalCodeSearch($event, i)\"\n (change)=\"onPostalCodeSelection($event, i)\" size=\"sm\">\n </cide-ele-select>\n\n <cide-ele-input label=\"City\" formControlName=\"sycad_contact_city_sypin\" placeholder=\"Enter city\"\n size=\"sm\">\n </cide-ele-input>\n\n <cide-ele-input label=\"State\" formControlName=\"sycad_contact_state_sypin\" placeholder=\"Enter state\"\n size=\"sm\">\n </cide-ele-input>\n\n <cide-ele-select label=\"Country\" [options]=\"addressCountries()[i] || []\"\n formControlName=\"sycad_contact_country_syctr\" placeholder=\"Select country\" valueKey=\"_id\"\n labelKey=\"syctr_country_iso_name\" [searchable]=\"true\" (searchChange)=\"onCountrySearch($event, i)\"\n [loading]=\"addressCountriesLoading()[i] || false\" size=\"sm\">\n </cide-ele-select>\n </div>\n </div>\n\n <!-- Right Side: Address Textarea (1/4 width, spans 2 rows) -->\n <div class=\"lg:tw-col-span-1 lg:tw-row-span-2 tw-flex tw-flex-col\">\n <cide-ele-textarea label=\"Complete Address\" formControlName=\"sycad_contact_address\"\n placeholder=\"Enter complete address with area, city, and landmarks\" [rows]=\"4\" size=\"sm\"\n class=\"tw-h-full\">\n </cide-ele-textarea>\n </div>\n </div>\n\n <!-- Contact Details: Primary Phone, Alt Phone, Fax, Primary Email in 4 columns -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-4 tw-gap-3 tw-mb-3\">\n <cide-ele-input label=\"Primary Phone\" formControlName=\"sycad_contact_phone\" type=\"tel\"\n placeholder=\"Primary phone\" size=\"sm\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Alternate Phone\" formControlName=\"sycad_contact_phone_alt\" type=\"tel\"\n placeholder=\"Alternate phone\" size=\"sm\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Fax Number\" formControlName=\"sycad_contact_fax\" placeholder=\"Fax number\"\n size=\"sm\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Primary Email\" formControlName=\"sycad_contact_email\" type=\"email\"\n placeholder=\"Primary email\" size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Alternate Email in single row -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3\">\n <cide-ele-input label=\"Alternate Email\" formControlName=\"sycad_contact_email_alt\" type=\"email\"\n placeholder=\"Alternate email address\" size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n @case ('documents') {\n <!-- Documents Section -->\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\n <div class=\"tw-flex tw-justify-end tw-items-end tw-mb-2 tw-gap-4\">\n <button cideEleButton variant=\"primary\" size=\"md\" type=\"button\" (click)=\"addDocument()\" leftIcon=\"add\">\n Add Document\n </button>\n </div>\n\n <div formArrayName=\"core_user_documents\">\n @for (doc of documents(); track $index; let i = $index) {\n <div [formGroupName]=\"i\"\n class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-xl tw-mb-8 tw-overflow-hidden tw-transition-all tw-duration-300 hover:tw-shadow-lg tw-shadow-sm\">\n <div\n class=\"tw-bg-gradient-to-r tw-from-gray-50 tw-to-gray-100 tw-px-4 tw-py-2 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-gray-200\">\n <h4 class=\"tw-m-0 tw-text-gray-700 tw-text-sm tw-font-semibold tw-tracking-tight\">\n {{ getDocumentTypeLabel(i) || ('Document ' + (i + 1)) }}\n </h4>\n <button cideEleButton variant=\"danger\" size=\"sm\" type=\"button\" (click)=\"removeDocument(i)\"\n leftIcon=\"delete\">\n Remove\n </button>\n </div>\n <div class=\"tw-p-4\">\n <!-- Main Layout: Inputs on Left, File Upload on Right -->\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-3 tw-gap-4\">\n \n <!-- Left Side: Document Information (2/3 width) -->\n <div class=\"lg:tw-col-span-2\">\n <!-- Row 1: Document Type, Document Number, Name as per Document -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\n <cide-ele-select label=\"Document Type\" [options]=\"documentTypeOptions()\"\n formControlName=\"syusd_document_type_id_sygms\" placeholder=\"Select type\" size=\"sm\"\n valueKey=\"_id\" labelKey=\"sygms_title\" (change)=\"onDocumentTypeChange(i)\">\n </cide-ele-select>\n\n <cide-ele-input label=\"Document Number\" formControlName=\"syusd_doc_number\"\n placeholder=\"Document number\" size=\"sm\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Name as per Document\" formControlName=\"syusd_doc_name_as_per_doc\"\n placeholder=\"Name on document\" size=\"sm\">\n </cide-ele-input>\n </div>\n\n <!-- Row 2: Issue Date, Expiry Date, Photo Group -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-3 tw-mb-3\">\n <cide-ele-input label=\"Issue Date\" formControlName=\"syusd_doc_issue_date\"\n [id]=\"'syusd_doc_issue_date['+i+']'\" type=\"date\" size=\"sm\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Expiry Date\" formControlName=\"syusd_doc_expiry_date\"\n [id]=\"'syusd_doc_expiry_date['+i+']'\" type=\"date\" size=\"sm\">\n </cide-ele-input>\n\n <cide-ele-select label=\"Photo Group\" [options]=\"photoGroupOptions()\"\n formControlName=\"syusd_photo_group_id_cyfm\" placeholder=\"Select group\" size=\"sm\" valueKey=\"_id\"\n labelKey=\"cyfm_name\">\n </cide-ele-select>\n </div>\n\n <!-- Row 3: Verification Status, KYC Status -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3\">\n <cide-ele-select label=\"Verification Status\" [options]=\"documentVerificationStatusOptions()\"\n formControlName=\"syusd_doc_verification_status_id_sygms\" placeholder=\"Select status\"\n size=\"sm\" valueKey=\"_id\" labelKey=\"sygms_title\">\n </cide-ele-select>\n\n <cide-ele-select label=\"KYC Status\" [options]=\"documentKycStatusOptions()\"\n formControlName=\"syusd_doc_kyc_status_id_sygms\" placeholder=\"Select KYC status\" size=\"sm\"\n valueKey=\"_id\" labelKey=\"sygms_title\">\n </cide-ele-select>\n </div>\n </div>\n\n <!-- Right Side: File Upload (1/3 width) -->\n <div class=\"lg:tw-col-span-1\">\n <div class=\"tw-bg-gray-50 tw-border tw-border-gray-200 tw-rounded-lg tw-p-3 tw-h-full\">\n <h5 class=\"tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-3 tw-m-0\">Document Files</h5>\n \n <!-- File Upload Input -->\n {{documentsFormArray.at(i).get('syusd_photo_group_id_cyfm')?.value}}\n <cide-ele-file-input\n [id]=\"'document-files-' + i\"\n [multiple]=\"true\"\n formControlName=\"syusd_photo_group_id_cyfm\"\n [accept]=\"'.pdf,.jpg,.jpeg,.png,.doc,.docx'\"\n [autoUpload]=\"true\"\n [uploadData]=\"getDocumentUploadData(i)\"\n (change)=\"onDocumentFilesSelected($event, i)\"\n (uploadSuccess)=\"onDocumentUploadSuccess($event, i)\"\n (uploadError)=\"onDocumentUploadError($event, i)\"\n (uploadProgressChange)=\"onDocumentUploadProgress($event, i)\"\n cideFloatingUploadTrigger\n class=\"tw-mb-3\"\n size=\"sm\">\n <div class=\"tw-text-center tw-py-4\">\n <cide-ele-icon name=\"cloud_upload\" class=\"tw-w-6 tw-h-6 tw-text-gray-400 tw-mx-auto tw-mb-2\"></cide-ele-icon>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Upload document files</p>\n <p class=\"tw-text-xs tw-text-gray-400 tw-m-0\">PDF, Images, Word docs</p>\n </div>\n </cide-ele-file-input>\n\n <!-- Upload Status -->\n @if (getDocumentGroupId(i)) {\n <div class=\"tw-space-y-2\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-2\">\n <h6 class=\"tw-text-xs tw-font-medium tw-text-gray-600 tw-m-0\">Upload Status:</h6>\n <span class=\"tw-text-xs tw-text-green-600 tw-font-medium\">\n ✅ Files Uploaded\n </span>\n </div>\n <div class=\"tw-bg-green-50 tw-border tw-border-green-200 tw-rounded tw-p-2\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon name=\"cloud_done\" class=\"tw-w-4 tw-h-4 tw-text-green-500 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-flex tw-flex-col tw-flex-1 tw-min-w-0\">\n <span class=\"tw-text-xs tw-text-green-700 tw-font-medium\">Multiple files uploaded successfully</span>\n <span class=\"tw-text-xs tw-text-green-600 tw-font-mono tw-truncate\" [title]=\"'Group ID: ' + getDocumentGroupId(i)\">\n Group ID: {{ getDocumentGroupId(i).substring(0, 12) }}...\n </span>\n </div>\n </div>\n </div>\n </div>\n } @else {\n <div class=\"tw-text-center tw-text-xs tw-text-gray-400 tw-py-2\">\n No files uploaded yet\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n @case ('family') {\n <!-- Family Details Section -->\n <div class=\"tw-py-1 tw-border-b-0 tw-mb-1\">\n <div class=\"tw-flex tw-justify-end tw-items-end tw-mb-2 tw-gap-4\">\n <button cideEleButton variant=\"primary\" size=\"md\" type=\"button\" (click)=\"addFamilyDetail()\" leftIcon=\"add\">\n Add Family Member\n </button>\n </div>\n\n <div formArrayName=\"core_user_family_details\">\n @for (family of familyDetails(); track $index; let i = $index) {\n <div [formGroupName]=\"i\"\n class=\"tw-bg-white tw-border tw-border-gray-200 tw-rounded-xl tw-mb-8 tw-overflow-hidden tw-transition-all tw-duration-300 hover:tw-shadow-lg tw-shadow-sm\">\n <div\n class=\"tw-bg-gradient-to-r tw-from-gray-50 tw-to-gray-100 tw-px-6 tw-py-1 tw-flex tw-justify-between tw-items-center tw-border-b tw-border-gray-200\">\n <h4 class=\"tw-m-0 tw-text-gray-700 tw-text-sm tw-font-semibold tw-tracking-tight\">Family Member {{ i + 1\n }}\n </h4>\n <button cideEleButton variant=\"danger\" size=\"sm\" type=\"button\" (click)=\"removeFamilyDetail(i)\"\n leftIcon=\"delete\">\n Remove\n </button>\n </div>\n <div class=\"tw-p-3\">\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6 tw-mb-6\">\n <cide-ele-input label=\"Family Member Name\" formControlName=\"syfdl_family_member_name\"\n placeholder=\"Enter family member full name\" size=\"md\">\n </cide-ele-input>\n\n <cide-ele-select label=\"Family Member User\" [options]=\"userOptions(i)\"\n formControlName=\"syfdl_family_member_id_user\" placeholder=\"Select family member user\" size=\"md\"\n valueKey=\"_id\" labelKey=\"user_fullname\" [searchable]=\"true\"\n [loading]=\"userSearchLoading()[i] || false\" (searchChange)=\"onUserSearchChange($event, i)\"\n (change)=\"onUserSelectionChange($event, i)\">\n </cide-ele-select>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6 tw-mb-6\">\n <cide-ele-select label=\"Relationship\" [options]=\"relationshipOptions()\"\n formControlName=\"syfdl_relationship_id_sygms\" placeholder=\"Select relationship\" size=\"md\"\n valueKey=\"_id\" labelKey=\"sygms_title\">\n </cide-ele-select>\n\n <cide-ele-select label=\"Blood Group\" [options]=\"bloodGroupOptions()\"\n formControlName=\"syfdl_blood_group_sygms\" placeholder=\"Select blood group\" size=\"md\" valueKey=\"_id\"\n labelKey=\"sygms_title\">\n </cide-ele-select>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6 tw-mb-6\">\n <cide-ele-input label=\"Date of Birth\" formControlName=\"syfdl_family_member_dob\" type=\"date\" size=\"md\"\n [id]=\"'syfdl_family_member_dob['+i+']'\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Contact Phone\" formControlName=\"syfdl_contact_phone\" type=\"tel\"\n placeholder=\"Enter contact phone\" size=\"md\">\n </cide-ele-input>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6 tw-mb-6\">\n <cide-ele-input label=\"Contact Email\" formControlName=\"syfdl_contact_email\" type=\"email\"\n placeholder=\"Enter contact email\" size=\"md\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Contact Email ID\" formControlName=\"syfdl_contact_email_id\" type=\"email\"\n placeholder=\"Enter contact email ID\" size=\"md\">\n </cide-ele-input>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Contact Number\" formControlName=\"syfdl_contact_number\" type=\"tel\"\n placeholder=\"Enter contact number\" size=\"md\">\n </cide-ele-input>\n\n <div class=\"tw-flex tw-items-center tw-pt-6\">\n <cide-ele-input formControlName=\"syfdl_isactive\" type=\"checkbox\" label=\"Active\" size=\"md\">\n </cide-ele-input>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n }\n </div>\n\n <!-- Form Actions -->\n <div\n class=\"tw-flex tw-justify-end tw-gap-4 tw-py-2 tw-bg-white tw-border-t tw-border-gray-200 tw-sticky tw-bottom-0 tw-z-10\">\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || userMasterForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n Save User Master\n </button>\n </div>\n </form>\n</div>\n\n<!-- Template Renderers for Role Permissions Grid -->\n<ng-template #menuDetailsRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-min-w-0\">\n <!-- Menu Icon -->\n <div class=\"tw-flex-shrink-0\">\n @if (row.syme_type === 'module') {\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">folder</cide-ele-icon>\n } @else if (row.syme_type === 'section') {\n <cide-ele-icon class=\"tw-text-green-600 tw-w-4 tw-h-4\">folder_open</cide-ele-icon>\n } @else if (row.syme_type === 'menu') {\n <cide-ele-icon class=\"tw-text-purple-600 tw-w-4 tw-h-4\">menu</cide-ele-icon>\n } @else {\n <cide-ele-icon class=\"tw-text-gray-600 tw-w-4 tw-h-4\">description</cide-ele-icon>\n }\n </div>\n\n <!-- Menu Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <div class=\"tw-text-xs tw-font-medium tw-text-gray-900 tw-truncate\" [title]=\"row.syme_title\">\n {{ row.syme_title || row.menu?.syme_title || row.menu?.syme_menu_name || 'Untitled' }}\n </div>\n <!-- Green pill indicator for parent menus with child permissions -->\n @if (row.syme_type === 'module' || row.syme_type === 'section') {\n @if (hasChildMenusWithPermissions(row._id)) {\n <span\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800 tw-whitespace-nowrap\">\n Assigned\n </span>\n }\n }\n </div>\n @if (row.permission?.sygms_name) {\n <div class=\"tw-text-xs tw-text-blue-500 tw-truncate\" [title]=\"row.permission?.sygms_name\">\n {{ row.permission?.sygms_name }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- Menu Type Renderer Template -->\n<ng-template #menuTypeRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-justify-center\">\n @if (row.syme_type === 'module') {\n <span\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800\">\n Module\n </span>\n } @else if (row.syme_type === 'section') {\n <span\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n Section\n </span>\n } @else if (row.syme_type === 'menu') {\n <span\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-purple-100 tw-text-purple-800\">\n Menu\n </span>\n } @else {\n <span\n class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-gray-100 tw-text-gray-800\">\n {{ row.syme_type || 'Unknown' }}\n </span>\n }\n </div>\n</ng-template>\n\n<!-- Permissions Checkbox Renderer Template -->\n<ng-template #permissionsCheckboxRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\n @if (row.syme_type === 'menu' && row?.syme_permissions_id_sygms && row?.syme_permissions_id_sygms.length > 0) {\n @for (permissionId of row?.syme_permissions_id_sygms || []; track permissionId) {\n <div class=\"tw-flex tw-items-center tw-space-x-1\">\n <div class=\"tw-flex tw-items-center tw-space-x-1\">\n <input type=\"checkbox\" [checked]=\"isPermissionSelected(row._id, permissionId)\" [disabled]=\"true\"\n class=\"tw-h-4 tw-w-4 tw-text-blue-600 tw-bg-gray-100 tw-border-gray-300 tw-rounded focus:tw-ring-blue-500\">\n <label class=\"tw-text-xs tw-text-gray-700\">\n {{ getPermissionById(permissionId)?.sygms_name || 'Unknown' }}\n </label>\n </div>\n </div>\n }\n } @else {\n <!-- Show green checkmark for parent menus with child permissions -->\n @if (row.syme_type === 'module' || row.syme_type === 'section' || row.syme_type === 'title') {\n @if (hasChildMenusWithPermissions(row._id)) {\n <div class=\"tw-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-bg-green-100 tw-rounded-full\">\n <cide-ele-icon class=\"tw-text-green-600\" size=\"xs\">\n check\n </cide-ele-icon>\n </div>\n } @else {\n <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\n }\n } @else {\n <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\n }\n }\n </div>\n</ng-template>\n\n<!-- Menu Rights Permissions Renderer Template -->\n<ng-template #menuRightsPermissionsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\n <!-- Role Rights Display -->\n @if (row.role_rights && row.role_rights.length > 0) {\n <div class=\"tw-mb-2\">\n <div class=\"tw-text-xs tw-text-gray-500 tw-mb-1\">Role Rights:</div>\n <div class=\"tw-flex tw-flex-wrap tw-gap-1\">\n @for (right of row.role_rights; track $index) {\n <span class=\"tw-inline-block tw-px-2 tw-py-1 tw-text-xs tw-bg-blue-100 tw-text-blue-800 tw-rounded\">\n {{ right }}\n </span>\n }\n </div>\n </div>\n }\n\n\n <!-- Exception Indicator -->\n @if (row.hasException) {\n <div class=\"tw-mt-2\">\n <span class=\"tw-inline-block tw-px-2 tw-py-1 tw-text-xs tw-bg-yellow-100 tw-text-yellow-800 tw-rounded\">\n Override\n </span>\n </div>\n } @else {\n <div class=\"tw-mt-2\">\n <span class=\"tw-text-xs tw-text-gray-400\">Default</span>\n </div>\n }\n </div>\n</ng-template>\n\n<!-- Permissions Renderer Template -->\n<ng-template #permissionsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\n @if (row._permissionValues && Object.keys(row._permissionValues).length > 0) {\n @for (permissionId of Object.keys(row._permissionValues); track permissionId) {\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-input type=\"checkbox\" [ngModel]=\"row._permissionValues[permissionId].checked\"\n (ngModelChange)=\"onPermissionChangeSafe($event, row, permissionId)\"\n [id]=\"'permission-' + row._id + '-' + permissionId\" class=\"tw-h-4 tw-w-4\">\n </cide-ele-input>\n <label [for]=\"'permission-' + row._id + '-' + permissionId\" class=\"tw-text-xs tw-text-gray-700 tw-cursor-pointer\">\n {{ row._permissionValues[permissionId].permission?.sygms_title }}\n </label>\n </div>\n }\n } @else {\n <span class=\"tw-text-xs tw-text-gray-400\">No permissions</span>\n }\n </div>\n</ng-template>","import { Component, inject, signal, OnInit, AfterViewInit, ViewChild, TemplateRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport {\n CideIconComponent\n} from 'cloud-ide-element';\nimport { CideEleButtonComponent, CideSelectComponent } from 'cloud-ide-element';\nimport {\n CideEleDataGridComponent,\n DropdownItem,\n DropdownConfig,\n GridConfiguration,\n GridEvent,\n GridColumn\n} from 'cloud-ide-element';\nimport { CideEleDropdownComponent } from 'cloud-ide-element';\nimport { AuthUserMst, AuthUserMstListPayload, generateStringFromObject } from 'cloud-ide-lms-model';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideCoreUserMasterService } from '../../services/user-master.service';\n\n// Using any type as per project preference - interfaces managed in cloud-ide-lms-model\n\n@Component({\n selector: 'cide-core-user-list',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n CideIconComponent,\n CideEleButtonComponent,\n CideSelectComponent,\n CideEleDataGridComponent,\n CideEleDropdownComponent\n ],\n templateUrl: './user-list.component.html',\n styles: [`\n .user-master-listing-container {\n @apply tw-w-full tw-h-full;\n }\n \n :host {\n @apply tw-w-full tw-h-full tw-flex tw-flex-col;\n }\n `]\n})\nexport class CideCoreUserListComponent implements OnInit, AfterViewInit {\n // Modern dependency injection using inject()\n router = inject(Router);\n userMasterService = inject(CideCoreUserMasterService);\n appState = inject(AppStateHelperService);\n\n // ViewChild reference to the grid component\n @ViewChild(CideEleDataGridComponent) gridComponent!: CideEleDataGridComponent<any>;\n\n // Template references for custom renderers\n @ViewChild('actionsTemplate', { static: true }) actionsTemplate!: TemplateRef<any>;\n @ViewChild('userDetailsTemplate', { static: true }) userDetailsTemplate!: TemplateRef<any>;\n @ViewChild('contactInfoTemplate', { static: true }) contactInfoTemplate!: TemplateRef<any>;\n @ViewChild('organizationTemplate', { static: true }) organizationTemplate!: TemplateRef<any>;\n @ViewChild('validityTemplate', { static: true }) validityTemplate!: TemplateRef<any>;\n @ViewChild('statusTemplate', { static: true }) statusTemplate!: TemplateRef<any>;\n\n // State management using Angular Signals for server-side operations\n users = signal<any[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n\n // Server-side pagination state\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n totalPages = signal(0);\n\n // Server-side search state\n searchQuery = signal('');\n\n // Server-side sorting state\n sortColumn = signal('user_fullname');\n sortDirection = signal<'asc' | 'desc'>('asc');\n\n // Server-side filtering state\n selectedStatusFilter = signal('');\n\n // Getter and setter for ngModel compatibility\n get selectedStatusFilterValue(): string {\n return this.selectedStatusFilter();\n }\n\n set selectedStatusFilterValue(value: string) {\n this.selectedStatusFilter.set(value);\n }\n\n // Filter options\n statusFilterOptions = signal([\n { value: '', label: 'All Status' },\n { value: 'active', label: 'Active Users' },\n { value: 'inactive', label: 'Inactive Users' }\n ]);\n\n // Grid configuration signal for server-side pagination\n gridConfig = signal<GridConfiguration<any>>({\n id: 'user-master-list-grid',\n columns: [\n {\n key: 'user_identity',\n header: 'User Identity',\n type: 'custom',\n width: 'lg',\n truncate: false,\n sortable: true,\n renderer: 'userDetailsRenderer'\n },\n {\n key: 'contact_info',\n header: 'Contact & Login',\n type: 'custom',\n width: 'lg',\n truncate: false,\n renderer: 'contactInfoRenderer'\n },\n {\n key: 'validity_period',\n header: 'Validity Period',\n type: 'custom',\n width: 'md',\n align: 'center',\n renderer: 'validityRenderer'\n },\n {\n key: 'user_isactive',\n header: 'Status',\n type: 'custom',\n width: 'xs',\n align: 'center',\n sortable: true,\n renderer: 'statusRenderer'\n },\n {\n key: 'actions',\n header: 'Actions',\n type: 'custom',\n width: 'sm',\n truncate: false,\n align: 'center',\n renderer: 'actionsRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n // Server-side pagination configuration\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n // Server-side search configuration\n search: {\n enabled: true,\n placeholder: 'Search users by name, username, email, or mobile...',\n searchableColumns: ['user_fullname', 'user_username', 'user_emailid', 'user_mobileno'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n fullHeight: true,\n onRowClick: 'onUserRowClick',\n onRefresh: 'onUserRefresh'\n });\n\n // Template renderers for the grid (will be populated after view init)\n templateRenderers: Record<string, TemplateRef<any>> = {};\n\n ngOnInit() {\n console.log('🔧 USER MASTER LIST: Component initializing');\n this.loading.set(false);\n this.loadUsersFromServer(); // Use server-side loading\n }\n\n ngAfterViewInit() {\n // Set up template renderers after view init\n this.templateRenderers = {\n 'userDetailsRenderer': this.userDetailsTemplate,\n 'contactInfoRenderer': this.contactInfoTemplate,\n 'validityRenderer': this.validityTemplate,\n 'statusRenderer': this.statusTemplate,\n 'actionsRenderer': this.actionsTemplate\n };\n\n // Update grid config to use template renderers\n this.gridConfig.update(config => ({\n ...config,\n columns: config.columns.map(col => {\n if (col.renderer && this.templateRenderers[col.renderer]) {\n return { ...col };\n }\n return col;\n })\n }));\n }\n\n // Grid event handler for server-side operations\n onGridEvent(event: GridEvent<any>) {\n console.log('📡 GRID EVENT: Received grid event:', event.type, event);\n\n switch (event.type) {\n case 'pageChange':\n this.onUserPageChange(event.data as number);\n break;\n case 'search':\n this.onUserSearch(event.data as string);\n break;\n case 'sort':\n this.onUserSort(event.data as unknown as { column: string; direction: 'asc' | 'desc' });\n break;\n case 'refresh':\n this.onUserRefresh();\n break;\n case 'rowClick':\n this.onUserRowClick(event.data as any);\n break;\n }\n }\n\n // Grid event action handlers\n onUserRowClick(user: any) {\n const queryData = generateStringFromObject({ user_id: user._id });\n console.log('📝 ROW CLICK: User row clicked:', queryData, user._id);\n this.router.navigate(['/control-panel/user-master/view', queryData]);\n }\n\n onUserRefresh() {\n console.log('🔄 REFRESH: User list refresh requested');\n this.loadUsersFromServer(true);\n }\n\n onUserSearch(query: string) {\n console.log('🔍 SEARCH: User search with query:', query);\n this.searchQuery.set(query);\n this.currentPage.set(1); // Reset to first page when search changes\n this.loadUsersFromServer();\n }\n\n onUserPageChange(page: number) {\n console.log('📄 PAGE CHANGE: Page changed to:', page);\n this.currentPage.set(page);\n this.loadUsersFromServer();\n }\n\n onPageSizeChange(pageSize: number) {\n console.log('📊 PAGE SIZE CHANGE: Page size changed to:', pageSize);\n this.pageSize.set(pageSize);\n this.currentPage.set(1); // Reset to first page when page size changes\n this.loadUsersFromServer();\n }\n\n onUserSort(sortData: { column: string; direction: 'asc' | 'desc' }) {\n console.log('🔄 SORT CHANGE: Sort changed to:', sortData);\n this.sortColumn.set(sortData.column);\n this.sortDirection.set(sortData.direction);\n this.currentPage.set(1); // Reset to first page when sorting changes\n this.loadUsersFromServer();\n }\n\n onDeleteUserConfirmed(userId: string) {\n console.log('🗑️ DELETE CONFIRMED: Deleting user:', userId);\n // TODO: Implement actual delete API call using service\n // For now, just reload the users from server\n this.loadUsersFromServer(true);\n }\n\n // Update grid data method\n private updateGridData(users: any[]) {\n console.log('📊 GRID UPDATE: Updating grid with', users.length, 'users');\n\n this.users.set(users);\n\n this.gridConfig.update(config => ({\n ...config,\n data: users\n }));\n\n this.loading.set(false);\n\n if (this.gridComponent) {\n this.gridComponent.clearPageChangeLoading();\n }\n }\n\n // Server-side data loading method\n loadUsersFromServer(isRefresh: boolean = false): void {\n console.log('🚀 USER MASTER LIST: Loading users from server');\n\n if (isRefresh) {\n console.log('🔄 USER MASTER LIST: Refreshing users');\n if (this.gridComponent) {\n this.gridComponent.setRefreshing(true);\n }\n } else {\n this.loading.set(true);\n }\n\n this.error.set(null);\n\n // Build server request payload using AuthUserMstListPayload\n const requestPayload = new AuthUserMstListPayload({\n total: this.totalItems(),\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n query: this.searchQuery(),\n pagination: true,\n sort: {\n order: this.sortDirection(),\n key: this.sortColumn()\n },\n syenm_entity_id_syen: this.appState.getActiveEntityId() // Add entity filter if needed\n });\n\n // Validate the payload before making the API call\n const validationErrors = requestPayload.Validate?.();\n if (validationErrors && Object.keys(validationErrors).length > 0) {\n console.error('❌ Payload validation errors:', validationErrors);\n this.error.set('Invalid request parameters');\n this.loading.set(false);\n return;\n }\n\n console.log('📋 Server request payload:', requestPayload);\n\n // Use the service to load users\n this.userMasterService.getUserList(requestPayload)\n .subscribe({\n next: (response) => {\n console.log('✅ Server response received:', response);\n if (response?.success) {\n const userData = response?.data || [];\n this.users.set(userData);\n this.totalItems.set(response.total || 0);\n this.totalPages.set(Math.ceil((response.total || 0) / this.pageSize()));\n\n // Update grid\n this.updateGridData(userData);\n\n console.log('📊 Total items:', this.totalItems());\n console.log('📄 Current page:', this.currentPage());\n console.log('📝 Items on current page:', userData.length);\n } else {\n this.error.set('Failed to load users from server');\n }\n },\n error: (error:any) => {\n console.error('❌ Error loading users:', error);\n this.error.set('Failed to load users from server');\n },\n complete: () => {\n this.loading.set(false);\n\n if (this.gridComponent) {\n this.gridComponent.clearPageChangeLoading();\n if (isRefresh) {\n this.gridComponent.setRefreshing(false);\n }\n }\n }\n });\n }\n\n // Action handlers for dropdown menu\n onViewUser(user: any) {\n console.log('👁️ ACTIONS: Viewing user:', user);\n const queryData = generateStringFromObject({ user_id: user._id });\n this.router.navigate(['/control-panel/user-master/view', queryData]);\n }\n\n onEditUser(user: any) {\n console.log('✏️ ACTIONS: Editing user:', user);\n const queryData = generateStringFromObject({ user_id: user._id });\n this.router.navigate(['/control-panel/user-master/edit', queryData]);\n }\n\n onManageAddresses(user: any) {\n console.log('🏠 ACTIONS: Managing addresses for user:', user);\n const queryData = generateStringFromObject({ user_id: user._id });\n this.router.navigate(['/control-panel/user-master/addresses', queryData]);\n }\n\n onManageDocuments(user: any) {\n console.log('📄 ACTIONS: Managing documents for user:', user);\n const queryData = generateStringFromObject({ user_id: user._id });\n this.router.navigate(['/control-panel/user-master/documents', queryData]);\n }\n\n onManageFamily(user: any) {\n console.log('👨👩👧👦 ACTIONS: Managing family for user:', user);\n const queryData = generateStringFromObject({ user_id: user._id });\n this.router.navigate(['/control-panel/user-master/family', queryData]);\n }\n\n onResetPassword(user: any) {\n console.log('🔑 ACTIONS: Resetting password for user:', user);\n if (confirm(`Are you sure you want to reset password for ${user.user_fullname}?`)) {\n console.log('Password reset confirmed for user:', user._id);\n // TODO: Implement password reset logic using service\n }\n }\n\n onToggleUserStatus(user: any) {\n console.log('🔄 ACTIONS: Toggling status for user:', user);\n const action = user.user_isactive ? 'deactivate' : 'activate';\n if (confirm(`Are you sure you want to ${action} ${user.user_fullname}?`)) {\n console.log(`User status toggle confirmed for user:`, user._id);\n // TODO: Implement status toggle logic using service\n this.loadUsersFromServer(true);\n }\n }\n\n onDeleteUser(user: any) {\n console.log('🗑️ ACTIONS: Deleting user:', user);\n if (confirm(`Are you sure you want to delete ${user.user_fullname}? This action cannot be undone.`)) {\n if (confirm('This will permanently delete the user and all associated data. Are you absolutely sure?')) {\n this.onDeleteUserConfirmed(user._id);\n }\n }\n }\n\n onAddUser() {\n console.log('➕ NAVIGATION: Adding new user');\n this.router.navigate(['/control-panel/user-master/create']);\n }\n\n onFilterChange() {\n console.log('🔍 FILTER: Status filter changed to:', this.selectedStatusFilterValue);\n this.currentPage.set(1); // Reset to first page when filter changes\n this.loadUsersFromServer();\n }\n\n // Helper methods for templates (avoid using new Date() in templates)\n formatDate(dateString: string | undefined): string {\n if (!dateString) return 'Not set';\n try {\n return new Date(dateString).toLocaleDateString();\n } catch {\n return 'Invalid date';\n }\n }\n\n isDateExpired(dateString: string | undefined): boolean {\n if (!dateString) return false;\n try {\n return new Date(dateString) < new Date();\n } catch {\n return false;\n }\n }\n\n getValidityEndText(dateString: string | undefined): string {\n return dateString ? this.formatDate(dateString) : 'No limit';\n }\n\n getUserInitials(firstName: string, lastName: string): string {\n const firstInitial = firstName?.charAt(0) || '';\n const lastInitial = lastName?.charAt(0) || '';\n return (firstInitial + lastInitial).toUpperCase() || 'U';\n }\n\n getPasswordChangeText(requiresChange: boolean): string {\n return requiresChange ? 'Required' : 'Not Required';\n }\n\n // Generate dropdown items for user actions\n getDropdownItems(user: AuthUserMst): DropdownItem[] {\n console.log('🔵 getDropdownItems called for user:', user);\n const items = [\n {\n id: 'view',\n label: 'View Details',\n icon: 'visibility',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'edit',\n label: 'Edit User',\n icon: 'edit',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'divider1',\n label: '',\n divider: true\n },\n {\n id: 'addresses',\n label: 'Manage Addresses',\n icon: 'location_on',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'documents',\n label: 'Manage Documents',\n icon: 'description',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'family',\n label: 'Manage Family',\n icon: 'family_restroom',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'divider2',\n label: '',\n divider: true\n },\n {\n id: 'reset-password',\n label: 'Reset Password',\n icon: 'key',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'toggle-status',\n label: user.user_isactive ? 'Deactivate User' : 'Activate User',\n icon: user.user_isactive ? 'block' : 'check_circle',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'divider3',\n label: '',\n divider: true\n },\n {\n id: 'delete',\n label: 'Delete User',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-600',\n hoverBgColor: 'hover:tw-bg-red-50'\n }\n ];\n console.log('🔵 Returning dropdown items:', items);\n return items;\n }\n\n // Handle dropdown item click\n onDropdownItemClick(item: DropdownItem, user: AuthUserMst): void {\n console.log('🔵 Dropdown item clicked:', item.id, user);\n\n switch (item.id) {\n case 'view':\n this.onViewUser(user);\n break;\n case 'edit':\n this.onEditUser(user);\n break;\n case 'addresses':\n this.onManageAddresses(user);\n break;\n case 'documents':\n this.onManageDocuments(user);\n break;\n case 'family':\n this.onManageFamily(user);\n break;\n case 'reset-password':\n this.onResetPassword(user);\n break;\n case 'toggle-status':\n this.onToggleUserStatus(user);\n break;\n case 'delete':\n this.onDeleteUser(user);\n break;\n }\n }\n}\n","<!-- User Master List Container -->\n<div class=\"user-master-listing-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-table tw-h-full\">\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-4 sm:tw-space-y-0\">\n\n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-3\"> \n <cide-ele-icon class=\"tw-text-blue-600\">people</cide-ele-icon>\n <div>\n <h5 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">User Master Management</h5>\n <p class=\"tw-text-sm tw-text-gray-600\">Manage and view all user master records in the system</p>\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <!-- Status Filter -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <label for=\"statusFilter\" class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Status:</label>\n <cide-ele-select id=\"statusFilter\" [options]=\"statusFilterOptions()\" [(ngModel)]=\"selectedStatusFilterValue\"\n (ngModelChange)=\"onFilterChange()\" class=\"tw-min-w-40\">\n </cide-ele-select>\n </div>\n\n <!-- Add User Button -->\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"onAddUser()\"\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">add</cide-ele-icon>\n Add User\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex\">\n <cide-ele-icon name=\"exclamation-triangle\" class=\"tw-text-red-400\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n <div class=\"tw-h-full tw-overflow-auto\">\n <!-- Data Grid Component -->\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers\"\n [serverSidePagination]=\"true\" [totalServerItems]=\"totalItems()\" [currentServerPage]=\"currentPage()\"\n [currentServerPageSize]=\"pageSize()\" (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n </div>\n </div>\n\n</div>\n\n<!-- Template Definitions for Grid Renderers -->\n\n<!-- User Details Template -->\n<ng-template #userDetailsTemplate let-value let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <div\n class=\"tw-flex-shrink-0 tw-w-12 tw-h-12 tw-bg-blue-100 tw-rounded-full tw-flex tw-items-center tw-justify-center\">\n <span class=\"tw-text-blue-600 tw-font-semibold tw-text-sm\">\n {{ getUserInitials(row.user_firstname, row.user_lastname) }}\n </span>\n </div>\n <div class=\"tw-flex-1 tw-min-w-0\">\n <p class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate\" [title]=\"row.user_fullname\">\n {{ row.user_fullname || 'Unknown User' }}\n </p>\n <p class=\"tw-text-xs tw-text-blue-600 tw-truncate tw-font-medium\" [title]=\"'Username: ' + row.user_username\">\n @{{ row.user_username || 'No username' }}\n </p>\n <p class=\"tw-text-xs tw-text-gray-400 tw-truncate\" [title]=\"'ID: ' + row._id\">\n ID: {{ row._id?.substring(0, 8) }}...\n </p>\n </div>\n </div>\n</ng-template>\n\n<!-- Contact Info Template -->\n<ng-template #contactInfoTemplate let-value let-row=\"row\" let-column=\"column\">\n <div class=\"tw-space-y-1\">\n <p class=\"tw-text-xs tw-text-gray-900 tw-flex tw-items-center\" [title]=\"'Email: ' + row.user_emailid\">\n <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M2.003 5.884L10 9.882l7.997-3.998A2 2 0 0016 4H4a2 2 0 00-1.997 1.884z\" />\n <path d=\"M18 8.118l-8 4-8-4V14a2 2 0 002 2h12a2 2 0 002-2V8.118z\" />\n </svg>\n <span class=\"tw-truncate\">{{ row.user_emailid || 'No email' }}</span>\n </p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-flex tw-items-center\" [title]=\"'Mobile: ' + row.user_mobileno\">\n <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n d=\"M2 3a1 1 0 011-1h2.153a1 1 0 01.986.836l.74 4.435a1 1 0 01-.54 1.06l-1.548.773a11.037 11.037 0 006.105 6.105l.774-1.548a1 1 0 011.059-.54l4.435.74a1 1 0 01.836.986V17a1 1 0 01-1 1h-2C7.82 18 2 12.18 2 5V3z\" />\n </svg>\n <span class=\"tw-truncate\">{{ row.user_mobileno || 'No mobile' }}</span>\n </p>\n <p class=\"tw-text-xs tw-text-gray-500 tw-flex tw-items-center\"\n [title]=\"'Password Change: ' + getPasswordChangeText(row.user_passwordchangeonlogin)\">\n <svg class=\"tw-flex-shrink-0 tw-w-3 tw-h-3 tw-text-gray-400 tw-mr-2\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fill-rule=\"evenodd\"\n d=\"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z\"\n clip-rule=\"evenodd\" />\n </svg>\n <span class=\"tw-truncate\">{{ getPasswordChangeText(row.user_passwordchangeonlogin) }}</span>\n </p>\n </div>\n</ng-template>\n\n\n\n<!-- Validity Template -->\n<ng-template #validityTemplate let-value let-row=\"row\" let-column=\"column\">\n <div class=\"tw-text-center tw-space-y-1\">\n <p class=\"tw-text-xs tw-text-gray-900 tw-font-medium\">\n Validity managed per entity\n </p>\n <p class=\"tw-text-xs tw-text-gray-600\">\n Check entity mappings for details\n </p>\n </div>\n</ng-template>\n\n<!-- Status Template -->\n<ng-template #statusTemplate let-value let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-justify-center\">\n @if (row.user_isactive) {\n <span\n class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800\">\n <svg class=\"tw-w-1.5 tw-h-1.5 tw-mr-1\" fill=\"currentColor\" viewBox=\"0 0 8 8\">\n <circle cx=\"4\" cy=\"4\" r=\"3\" />\n </svg>\n Active\n </span>\n } @else {\n <span\n class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-800\">\n <svg class=\"tw-w-1.5 tw-h-1.5 tw-mr-1\" fill=\"currentColor\" viewBox=\"0 0 8 8\">\n <circle cx=\"4\" cy=\"4\" r=\"3\" />\n </svg>\n Inactive\n </span>\n }\n </div>\n</ng-template>\n\n<!-- Actions Template using cide-ele-dropdown -->\n<ng-template #actionsTemplate let-value let-row=\"row\" let-column=\"column\">\n <cide-ele-dropdown [items]=\"getDropdownItems(row)\" [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm', usePortal: true, minWidth: 200 }\" (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template>","import { Component, inject, signal, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'cide-core-user-attributes',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n template: `\r\n <div class=\"p-5\">\r\n <div class=\"bg-white rounded-lg shadow-md mb-5\">\r\n <div class=\"p-5 border-b border-gray-200 flex justify-between items-center\">\r\n <h2 class=\"text-2xl font-semibold text-gray-800 m-0\">\r\n {{ isEditMode() ? 'Edit' : 'Add' }} User Attribute\r\n </h2>\r\n <div class=\"flex gap-2\">\r\n <button \r\n type=\"button\" \r\n class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n <i class=\"fas fa-arrow-left\"></i> Back\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div class=\"p-5\">\r\n <form [formGroup]=\"attributeForm\" (ngSubmit)=\"onSubmit()\">\r\n <div class=\"mb-8\">\r\n <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Attribute Information</h3>\r\n \r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"syuat_attribute_key\" class=\"mb-2 font-medium text-gray-700\">Attribute Key *</label>\r\n <input \r\n id=\"syuat_attribute_key\"\r\n type=\"text\" \r\n formControlName=\"syuat_attribute_key\" \r\n placeholder=\"Enter attribute key\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n @if (attributeForm.get('syuat_attribute_key')?.hasError('required') && attributeForm.get('syuat_attribute_key')?.touched) {\r\n <div class=\"text-red-500 text-xs mt-1\">\r\n Attribute key is required\r\n </div>\r\n }\r\n </div>\r\n \r\n <div class=\"flex flex-col\">\r\n <label for=\"syuat_data_type\" class=\"mb-2 font-medium text-gray-700\">Data Type</label>\r\n <select \r\n id=\"syuat_data_type\"\r\n formControlName=\"syuat_data_type\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n <option value=\"\">Select data type</option>\r\n <option value=\"string\">String</option>\r\n <option value=\"number\">Number</option>\r\n <option value=\"boolean\">Boolean</option>\r\n <option value=\"date\">Date</option>\r\n <option value=\"object\">Object</option>\r\n <option value=\"array\">Array</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"syuat_attribute_value\" class=\"mb-2 font-medium text-gray-700\">Attribute Value</label>\r\n <textarea \r\n id=\"syuat_attribute_value\"\r\n formControlName=\"syuat_attribute_value\" \r\n placeholder=\"Enter attribute value\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200 resize-y min-h-20\"\r\n rows=\"3\"\r\n ></textarea>\r\n </div>\r\n \r\n <div class=\"flex flex-col\">\r\n <label for=\"syuat_industry_context_sygms\" class=\"mb-2 font-medium text-gray-700\">Industry Context</label>\r\n <select \r\n id=\"syuat_industry_context_sygms\"\r\n formControlName=\"syuat_industry_context_sygms\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n <option value=\"\">Select industry context</option>\r\n <option value=\"it\">Information Technology</option>\r\n <option value=\"healthcare\">Healthcare</option>\r\n <option value=\"finance\">Finance</option>\r\n <option value=\"education\">Education</option>\r\n <option value=\"manufacturing\">Manufacturing</option>\r\n <option value=\"retail\">Retail</option>\r\n <option value=\"other\">Other</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-8\">\r\n <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Additional Information</h3>\r\n \r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"syuat_user_id_user\" class=\"mb-2 font-medium text-gray-700\">User ID</label>\r\n <input \r\n id=\"syuat_user_id_user\"\r\n type=\"text\" \r\n formControlName=\"syuat_user_id_user\" \r\n placeholder=\"Enter user ID\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm bg-gray-50 cursor-not-allowed focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n readonly\r\n >\r\n <small class=\"text-gray-500 text-xs mt-1 italic\">This field is automatically populated</small>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-end gap-4 mt-8 pt-5 border-t border-gray-200\">\r\n <button \r\n type=\"button\" \r\n class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n Cancel\r\n </button>\r\n <button \r\n type=\"submit\" \r\n class=\"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600 transition-colors duration-200 disabled:opacity-60 disabled:cursor-not-allowed\"\r\n [disabled]=\"attributeForm.invalid || isSubmitting()\"\r\n >\r\n {{ isSubmitting() ? 'Saving...' : (isEditMode() ? 'Update' : 'Save') }}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n `\r\n})\r\nexport class CideCoreUserAttributesComponent implements OnInit {\r\n private fb = inject(FormBuilder);\r\n private route = inject(ActivatedRoute);\r\n private router = inject(Router);\r\n\r\n // Signals\r\n isEditMode = signal(false);\r\n isSubmitting = signal(false);\r\n \r\n // Form\r\n attributeForm!: FormGroup;\r\n\r\n ngOnInit() {\r\n this.initializeForm();\r\n this.checkEditMode();\r\n }\r\n\r\n private initializeForm() {\r\n this.attributeForm = this.fb.group({\r\n syuat_attribute_key: ['', [Validators.required]],\r\n syuat_attribute_value: [''],\r\n syuat_data_type: [''],\r\n syuat_industry_context_sygms: [''],\r\n syuat_user_id_user: [''] // This will be populated from route or service\r\n });\r\n }\r\n\r\n private checkEditMode() {\r\n const id = this.route.snapshot.paramMap.get('id');\r\n if (id) {\r\n this.isEditMode.set(true);\r\n this.loadAttribute(id);\r\n }\r\n }\r\n\r\n private loadAttribute(id: string) {\r\n // TODO: Load attribute data from service\r\n console.log('Loading attribute:', id);\r\n }\r\n\r\n onSubmit() {\r\n if (this.attributeForm.valid) {\r\n this.isSubmitting.set(true);\r\n \r\n const formData = this.attributeForm.value;\r\n console.log('Form data:', formData);\r\n \r\n // TODO: Submit to service\r\n setTimeout(() => {\r\n this.isSubmitting.set(false);\r\n this.goBack();\r\n }, 1000);\r\n } else {\r\n this.markFormGroupTouched();\r\n }\r\n }\r\n\r\n private markFormGroupTouched() {\r\n Object.keys(this.attributeForm.controls).forEach(key => {\r\n const control = this.attributeForm.get(key);\r\n control?.markAsTouched();\r\n });\r\n }\r\n\r\n goBack() {\r\n this.router.navigate(['/admin/user-master']);\r\n }\r\n}\r\n","import { Component, inject, signal, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'cide-core-user-contact-addresses',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n template: `\r\n <div class=\"p-5\">\r\n <div class=\"bg-white rounded-lg shadow-md mb-5\">\r\n <div class=\"p-5 border-b border-gray-200 flex justify-between items-center\">\r\n <h2 class=\"text-2xl font-semibold text-gray-800 m-0\">\r\n {{ isEditMode() ? 'Edit' : 'Add' }} Contact Address\r\n </h2>\r\n <div class=\"flex gap-2\">\r\n <button \r\n type=\"button\" \r\n class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n <i class=\"fas fa-arrow-left\"></i> Back\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div class=\"p-5\">\r\n <form [formGroup]=\"contactAddressForm\" (ngSubmit)=\"onSubmit()\">\r\n <div class=\"mb-8\">\r\n <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Contact Information</h3>\r\n \r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"sycad_contact_person_name\" class=\"mb-2 font-medium text-gray-700\">Contact Person Name *</label>\r\n <input \r\n id=\"sycad_contact_person_name\"\r\n type=\"text\" \r\n formControlName=\"sycad_contact_person_name\" \r\n placeholder=\"Enter contact person name\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n @if (contactAddressForm.get('sycad_contact_person_name')?.hasError('required') && contactAddressForm.get('sycad_contact_person_name')?.touched) {\r\n <div class=\"text-red-500 text-xs mt-1\">\r\n Contact person name is required\r\n </div>\r\n }\r\n </div>\r\n \r\n <div class=\"flex flex-col\">\r\n <label for=\"sycad_address_type_id_sygms\" class=\"mb-2 font-medium text-gray-700\">Address Type *</label>\r\n <select \r\n id=\"sycad_address_type_id_sygms\"\r\n formControlName=\"sycad_address_type_id_sygms\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n <option value=\"\">Select address type</option>\r\n <option value=\"permanent\">Permanent</option>\r\n <option value=\"present\">Present</option>\r\n <option value=\"emergency\">Emergency</option>\r\n <option value=\"office\">Office</option>\r\n </select>\r\n @if (contactAddressForm.get('sycad_address_type_id_sygms')?.hasError('required') && contactAddressForm.get('sycad_address_type_id_sygms')?.touched) {\r\n <div class=\"text-red-500 text-xs mt-1\">\r\n Address type is required\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"sycad_contact_person_famb\" class=\"mb-2 font-medium text-gray-700\">Family Member ID (Optional)</label>\r\n <input \r\n id=\"sycad_contact_person_famb\"\r\n type=\"text\" \r\n formControlName=\"sycad_contact_person_famb\" \r\n placeholder=\"Enter family member ID if applicable\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n </div>\r\n \r\n <div class=\"flex flex-col\">\r\n <label for=\"sycad_contact_phone\" class=\"mb-2 font-medium text-gray-700\">Contact Phone *</label>\r\n <input \r\n id=\"sycad_contact_phone\"\r\n type=\"tel\" \r\n formControlName=\"sycad_contact_phone\" \r\n placeholder=\"Enter contact phone number\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n @if (contactAddressForm.get('sycad_contact_phone')?.hasError('required') && contactAddressForm.get('sycad_contact_phone')?.touched) {\r\n <div class=\"text-red-500 text-xs mt-1\">\r\n Contact phone is required\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"sycad_contact_phone_alt\" class=\"mb-2 font-medium text-gray-700\">Alternative Phone</label>\r\n <input \r\n id=\"sycad_contact_phone_alt\"\r\n type=\"tel\" \r\n formControlName=\"sycad_contact_phone_alt\" \r\n placeholder=\"Enter alternative phone number\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n </div>\r\n \r\n <div class=\"flex flex-col\">\r\n <label for=\"sycad_contact_email\" class=\"mb-2 font-medium text-gray-700\">Contact Email</label>\r\n <input \r\n id=\"sycad_contact_email\"\r\n type=\"email\" \r\n formControlName=\"sycad_contact_email\" \r\n placeholder=\"Enter contact email\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n @if (contactAddressForm.get('sycad_contact_email')?.hasError('email') && contactAddressForm.get('sycad_contact_email')?.touched) {\r\n <div class=\"text-red-500 text-xs mt-1\">\r\n Please enter a valid email\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-8\">\r\n <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Address Details</h3>\r\n \r\n <div class=\"col-span-full mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"sycad_contact_address\" class=\"mb-2 font-medium text-gray-700\">Full Address *</label>\r\n <textarea \r\n id=\"sycad_contact_address\"\r\n formControlName=\"sycad_contact_address\" \r\n placeholder=\"Enter complete address\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200 resize-y min-h-20\"\r\n rows=\"3\"\r\n ></textarea>\r\n @if (contactAddressForm.get('sycad_contact_address')?.hasError('required') && contactAddressForm.get('sycad_contact_address')?.touched) {\r\n <div class=\"text-red-500 text-xs mt-1\">\r\n Address is required\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"sycad_contact_pin_sypin\" class=\"mb-2 font-medium text-gray-700\">PIN Code</label>\r\n <input \r\n id=\"sycad_contact_pin_sypin\"\r\n type=\"text\" \r\n formControlName=\"sycad_contact_pin_sypin\" \r\n placeholder=\"Enter PIN code\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n </div>\r\n \r\n <div class=\"flex flex-col\">\r\n <label for=\"sycad_contact_city_sypin\" class=\"mb-2 font-medium text-gray-700\">City</label>\r\n <input \r\n id=\"sycad_contact_city_sypin\"\r\n type=\"text\" \r\n formControlName=\"sycad_contact_city_sypin\" \r\n placeholder=\"Enter city name\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"sycad_contact_state_sypin\" class=\"mb-2 font-medium text-gray-700\">State</label>\r\n <input \r\n id=\"sycad_contact_state_sypin\"\r\n type=\"text\" \r\n formControlName=\"sycad_contact_state_sypin\" \r\n placeholder=\"Enter state name\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n </div>\r\n \r\n <div class=\"flex flex-col\">\r\n <label for=\"sycad_contact_country_syctr\" class=\"mb-2 font-medium text-gray-700\">Country</label>\r\n <input \r\n id=\"sycad_contact_country_syctr\"\r\n type=\"text\" \r\n formControlName=\"sycad_contact_country_syctr\" \r\n placeholder=\"Enter country name\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-8\">\r\n <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Additional Information</h3>\r\n \r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"sycad_contact_fax\" class=\"mb-2 font-medium text-gray-700\">Fax Number</label>\r\n <input \r\n id=\"sycad_contact_fax\"\r\n type=\"text\" \r\n formControlName=\"sycad_contact_fax\" \r\n placeholder=\"Enter fax number\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n </div>\r\n \r\n <div class=\"flex flex-col\">\r\n <label for=\"sycad_corporate_email_alt\" class=\"mb-2 font-medium text-gray-700\">Corporate Email Alternative</label>\r\n <input \r\n id=\"sycad_corporate_email_alt\"\r\n type=\"email\" \r\n formControlName=\"sycad_corporate_email_alt\" \r\n placeholder=\"Enter corporate email alternative\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n @if (contactAddressForm.get('sycad_corporate_email_alt')?.hasError('email') && contactAddressForm.get('sycad_corporate_email_alt')?.touched) {\r\n <div class=\"text-red-500 text-xs mt-1\">\r\n Please enter a valid email\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-end gap-4 mt-8 pt-5 border-t border-gray-200\">\r\n <button \r\n type=\"button\" \r\n class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n Cancel\r\n </button>\r\n <button \r\n type=\"submit\" \r\n class=\"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600 transition-colors duration-200 disabled:opacity-60 disabled:cursor-not-allowed\"\r\n [disabled]=\"contactAddressForm.invalid || isSubmitting()\"\r\n >\r\n {{ isSubmitting() ? 'Saving...' : (isEditMode() ? 'Update' : 'Save') }}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n `\r\n})\r\nexport class CideCoreUserContactAddressesComponent implements OnInit {\r\n private fb = inject(FormBuilder);\r\n private route = inject(ActivatedRoute);\r\n private router = inject(Router);\r\n\r\n // Signals\r\n isEditMode = signal(false);\r\n isSubmitting = signal(false);\r\n \r\n // Form\r\n contactAddressForm!: FormGroup;\r\n\r\n ngOnInit() {\r\n this.initializeForm();\r\n this.checkEditMode();\r\n }\r\n\r\n private initializeForm() {\r\n this.contactAddressForm = this.fb.group({\r\n sycad_contact_person_name: ['', [Validators.required]],\r\n sycad_address_type_id_sygms: ['', [Validators.required]],\r\n sycad_contact_person_famb: [''],\r\n sycad_contact_address: ['', [Validators.required]],\r\n sycad_contact_pin_sypin: [''],\r\n sycad_contact_city_sypin: [''],\r\n sycad_contact_state_sypin: [''],\r\n sycad_contact_country_syctr: [''],\r\n sycad_contact_phone: ['', [Validators.required]],\r\n sycad_contact_phone_alt: [''],\r\n sycad_contact_fax: [''],\r\n sycad_contact_email: ['', [Validators.email]],\r\n sycad_corporate_email_alt: ['', [Validators.email]]\r\n });\r\n }\r\n\r\n private checkEditMode() {\r\n const id = this.route.snapshot.paramMap.get('id');\r\n if (id) {\r\n this.isEditMode.set(true);\r\n this.loadContactAddress(id);\r\n }\r\n }\r\n\r\n private loadContactAddress(id: string) {\r\n // TODO: Load contact address data from service\r\n console.log('Loading contact address:', id);\r\n }\r\n\r\n onSubmit() {\r\n if (this.contactAddressForm.valid) {\r\n this.isSubmitting.set(true);\r\n \r\n const formData = this.contactAddressForm.value;\r\n console.log('Form data:', formData);\r\n \r\n // TODO: Submit to service\r\n setTimeout(() => {\r\n this.isSubmitting.set(false);\r\n this.goBack();\r\n }, 1000);\r\n } else {\r\n this.markFormGroupTouched();\r\n }\r\n }\r\n\r\n private markFormGroupTouched() {\r\n Object.keys(this.contactAddressForm.controls).forEach(key => {\r\n const control = this.contactAddressForm.get(key);\r\n control?.markAsTouched();\r\n });\r\n }\r\n\r\n goBack() {\r\n this.router.navigate(['/admin/user-master']);\r\n }\r\n}\r\n","import { Component, inject, signal, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'cide-core-user-documents',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n template: `\r\n <div class=\"p-5\">\r\n <div class=\"bg-white rounded-lg shadow-md mb-5\">\r\n <div class=\"p-5 border-b border-gray-200 flex justify-between items-center\">\r\n <h2 class=\"text-2xl font-semibold text-gray-800 m-0\">\r\n {{ isEditMode() ? 'Edit' : 'Add' }} User Document\r\n </h2>\r\n <div class=\"flex gap-2\">\r\n <button \r\n type=\"button\" \r\n class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n <i class=\"fas fa-arrow-left\"></i> Back\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div class=\"p-5\">\r\n <form [formGroup]=\"documentForm\" (ngSubmit)=\"onSubmit()\">\r\n <div class=\"mb-8\">\r\n <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Document Information</h3>\r\n \r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"syusd_doc_number\" class=\"mb-2 font-medium text-gray-700\">Document Number *</label>\r\n <input \r\n id=\"syusd_doc_number\"\r\n type=\"text\" \r\n formControlName=\"syusd_doc_number\" \r\n placeholder=\"Enter document number\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n @if (documentForm.get('syusd_doc_number')?.hasError('required') && documentForm.get('syusd_doc_number')?.touched) {\r\n <div class=\"text-red-500 text-xs mt-1\">\r\n Document number is required\r\n </div>\r\n }\r\n </div>\r\n \r\n <div class=\"flex flex-col\">\r\n <label for=\"syusd_address_type_id_sygms\" class=\"mb-2 font-medium text-gray-700\">Document Type *</label>\r\n <select \r\n id=\"syusd_address_type_id_sygms\"\r\n formControlName=\"syusd_address_type_id_sygms\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n <option value=\"\">Select document type</option>\r\n <option value=\"passport\">Passport</option>\r\n <option value=\"aadhar\">Aadhar Card</option>\r\n <option value=\"pan\">PAN Card</option>\r\n <option value=\"driving_license\">Driving License</option>\r\n <option value=\"voter_id\">Voter ID</option>\r\n <option value=\"birth_certificate\">Birth Certificate</option>\r\n <option value=\"caste_certificate\">Caste Certificate</option>\r\n <option value=\"income_certificate\">Income Certificate</option>\r\n <option value=\"other\">Other</option>\r\n </select>\r\n @if (documentForm.get('syusd_address_type_id_sygms')?.hasError('required') && documentForm.get('syusd_address_type_id_sygms')?.touched) {\r\n <div class=\"text-red-500 text-xs mt-1\">\r\n Document type is required\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"syusd_doc_name_as_per_doc\" class=\"mb-2 font-medium text-gray-700\">Name as per Document *</label>\r\n <input \r\n id=\"syusd_doc_name_as_per_doc\"\r\n type=\"text\" \r\n formControlName=\"syusd_doc_name_as_per_doc\" \r\n placeholder=\"Enter name exactly as it appears on document\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n @if (documentForm.get('syusd_doc_name_as_per_doc')?.hasError('required') && documentForm.get('syusd_doc_name_as_per_doc')?.touched) {\r\n <div class=\"text-red-500 text-xs mt-1\">\r\n Document name is required\r\n </div>\r\n }\r\n </div>\r\n \r\n <div class=\"flex flex-col\">\r\n <label for=\"syusd_photo_group_id_cyfm\" class=\"mb-2 font-medium text-gray-700\">Photo/File Group ID</label>\r\n <input \r\n id=\"syusd_photo_group_id_cyfm\"\r\n type=\"text\" \r\n formControlName=\"syusd_photo_group_id_cyfm\" \r\n placeholder=\"Enter file manager group ID\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-8\">\r\n <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Document Dates</h3>\r\n \r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"syusd_doc_issue_date\" class=\"mb-2 font-medium text-gray-700\">Issue Date</label>\r\n <input \r\n id=\"syusd_doc_issue_date\"\r\n type=\"date\" \r\n formControlName=\"syusd_doc_issue_date\" \r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n </div>\r\n \r\n <div class=\"flex flex-col\">\r\n <label for=\"syusd_doc_expiry_date\" class=\"mb-2 font-medium text-gray-700\">Expiry Date</label>\r\n <input \r\n id=\"syusd_doc_expiry_date\"\r\n type=\"date\" \r\n formControlName=\"syusd_doc_expiry_date\" \r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-8\">\r\n <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Verification Status</h3>\r\n \r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"syusd_doc_verification_status_id_sygms\" class=\"mb-2 font-medium text-gray-700\">Document Verification Status</label>\r\n <select \r\n id=\"syusd_doc_verification_status_id_sygms\"\r\n formControlName=\"syusd_doc_verification_status_id_sygms\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n <option value=\"\">Select verification status</option>\r\n <option value=\"pending\">Pending</option>\r\n <option value=\"verified\">Verified</option>\r\n <option value=\"rejected\">Rejected</option>\r\n <option value=\"under_review\">Under Review</option>\r\n </select>\r\n </div>\r\n \r\n <div class=\"flex flex-col\">\r\n <label for=\"syusd_doc_kyc_status_id_sygms\" class=\"mb-2 font-medium text-gray-700\">KYC Status</label>\r\n <select \r\n id=\"syusd_doc_kyc_status_id_sygms\"\r\n formControlName=\"syusd_doc_kyc_status_id_sygms\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n <option value=\"\">Select KYC status</option>\r\n <option value=\"pending\">Pending</option>\r\n <option value=\"in_progress\">In Progress</option>\r\n <option value=\"completed\">Completed</option>\r\n <option value=\"rejected\">Rejected</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"syusd_isactive\" class=\"mb-2 font-medium text-gray-700\">Document Status</label>\r\n <div class=\"flex items-center gap-2 mt-2\">\r\n <input \r\n id=\"syusd_isactive\"\r\n type=\"checkbox\" \r\n formControlName=\"syusd_isactive\"\r\n class=\"w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 focus:ring-2\"\r\n >\r\n <label for=\"syusd_isactive\" class=\"text-sm text-gray-700 cursor-pointer\">\r\n Document is active\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-end gap-4 mt-8 pt-5 border-t border-gray-200\">\r\n <button \r\n type=\"button\" \r\n class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n Cancel\r\n </button>\r\n <button \r\n type=\"submit\" \r\n class=\"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600 transition-colors duration-200 disabled:opacity-60 disabled:cursor-not-allowed\"\r\n [disabled]=\"documentForm.invalid || isSubmitting()\"\r\n >\r\n {{ isSubmitting() ? 'Saving...' : (isEditMode() ? 'Update' : 'Save') }}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n `\r\n})\r\nexport class CideCoreUserDocumentsComponent implements OnInit {\r\n private fb = inject(FormBuilder);\r\n private route = inject(ActivatedRoute);\r\n private router = inject(Router);\r\n\r\n // Signals\r\n isEditMode = signal(false);\r\n isSubmitting = signal(false);\r\n \r\n // Form\r\n documentForm!: FormGroup;\r\n\r\n ngOnInit() {\r\n this.initializeForm();\r\n this.checkEditMode();\r\n }\r\n\r\n private initializeForm() {\r\n this.documentForm = this.fb.group({\r\n syusd_doc_number: ['', [Validators.required]],\r\n syusd_address_type_id_sygms: ['', [Validators.required]],\r\n syusd_doc_name_as_per_doc: ['', [Validators.required]],\r\n syusd_doc_issue_date: [''],\r\n syusd_doc_expiry_date: [''],\r\n syusd_photo_group_id_cyfm: [''],\r\n syusd_doc_verification_status_id_sygms: [''],\r\n syusd_doc_kyc_status_id_sygms: [''],\r\n syusd_isactive: [true]\r\n });\r\n }\r\n\r\n private checkEditMode() {\r\n const id = this.route.snapshot.paramMap.get('id');\r\n if (id) {\r\n this.isEditMode.set(true);\r\n this.loadDocument(id);\r\n }\r\n }\r\n\r\n private loadDocument(id: string) {\r\n // TODO: Load document data from service\r\n console.log('Loading document:', id);\r\n }\r\n\r\n onSubmit() {\r\n if (this.documentForm.valid) {\r\n this.isSubmitting.set(true);\r\n \r\n const formData = this.documentForm.value;\r\n console.log('Form data:', formData);\r\n \r\n // TODO: Submit to service\r\n setTimeout(() => {\r\n this.isSubmitting.set(false);\r\n this.goBack();\r\n }, 1000);\r\n } else {\r\n this.markFormGroupTouched();\r\n }\r\n }\r\n\r\n private markFormGroupTouched() {\r\n Object.keys(this.documentForm.controls).forEach(key => {\r\n const control = this.documentForm.get(key);\r\n control?.markAsTouched();\r\n });\r\n }\r\n\r\n goBack() {\r\n this.router.navigate(['/admin/user-master']);\r\n }\r\n}\r\n","import { Component, inject, signal, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'cide-core-user-entity-access',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n template: `\r\n <div class=\"p-5\">\r\n <div class=\"bg-white rounded-lg shadow-md mb-5\">\r\n <div class=\"p-5 border-b border-gray-200 flex justify-between items-center\">\r\n <h2 class=\"text-2xl font-semibold text-gray-800 m-0\">\r\n {{ isEditMode() ? 'Edit' : 'Add' }} Entity Access\r\n </h2>\r\n <div class=\"flex gap-2\">\r\n <button \r\n type=\"button\" \r\n class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n <i class=\"fas fa-arrow-left\"></i> Back\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div class=\"p-5\">\r\n <form [formGroup]=\"accessForm\" (ngSubmit)=\"onSubmit()\">\r\n <div class=\"mb-8\">\r\n <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Entity Information</h3>\r\n \r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"syepm_entity_id_syen\" class=\"mb-2 font-medium text-gray-700\">Entity ID *</label>\r\n <input \r\n id=\"syepm_entity_id_syen\"\r\n type=\"text\" \r\n formControlName=\"syepm_entity_id_syen\" \r\n placeholder=\"Enter entity ID\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n @if (accessForm.get('syepm_entity_id_syen')?.hasError('required') && accessForm.get('syepm_entity_id_syen')?.touched) {\r\n <div class=\"text-red-500 text-xs mt-1\">\r\n Entity ID is required\r\n </div>\r\n }\r\n </div>\r\n \r\n <div class=\"flex flex-col\">\r\n <label for=\"syepm_ownership_status\" class=\"mb-2 font-medium text-gray-700\">Ownership Status</label>\r\n <select \r\n id=\"syepm_ownership_status\"\r\n formControlName=\"syepm_ownership_status\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n <option value=\"\">Select ownership status</option>\r\n <option value=\"owner\">Owner</option>\r\n <option value=\"admin\">Admin</option>\r\n <option value=\"user\">User</option>\r\n <option value=\"viewer\">Viewer</option>\r\n <option value=\"guest\">Guest</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"syepm_access_passs_to\" class=\"mb-2 font-medium text-gray-700\">Access Pass To</label>\r\n <input \r\n id=\"syepm_access_passs_to\"\r\n type=\"text\" \r\n formControlName=\"syepm_access_passs_to\" \r\n placeholder=\"Enter access pass details\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n </div>\r\n \r\n <div class=\"flex flex-col\">\r\n <label for=\"syepm_isactive\" class=\"mb-2 font-medium text-gray-700\">Access Status</label>\r\n <div class=\"flex items-center gap-2 mt-2\">\r\n <input \r\n id=\"syepm_isactive\"\r\n type=\"checkbox\" \r\n formControlName=\"syepm_isactive\"\r\n class=\"w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 focus:ring-2\"\r\n >\r\n <label for=\"syepm_isactive\" class=\"text-sm text-gray-700 cursor-pointer\">\r\n Access is active\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-8\">\r\n <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Permissions</h3>\r\n \r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"can_edit\" class=\"mb-2 font-medium text-gray-700\">Can Edit</label>\r\n <div class=\"flex items-center gap-2 mt-2\">\r\n <input \r\n id=\"can_edit\"\r\n type=\"checkbox\" \r\n formControlName=\"can_edit\"\r\n class=\"w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 focus:ring-2\"\r\n >\r\n <label for=\"can_edit\" class=\"text-sm text-gray-700 cursor-pointer\">\r\n User can edit this entity\r\n </label>\r\n </div>\r\n </div>\r\n \r\n <div class=\"flex flex-col\">\r\n <label for=\"can_view\" class=\"mb-2 font-medium text-gray-700\">Can View</label>\r\n <div class=\"flex items-center gap-2 mt-2\">\r\n <input \r\n id=\"can_view\"\r\n type=\"checkbox\" \r\n formControlName=\"can_view\"\r\n class=\"w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 focus:ring-2\"\r\n >\r\n <label for=\"can_view\" class=\"text-sm text-gray-700 cursor-pointer\">\r\n User can view this entity\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-8\">\r\n <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Additional Information</h3>\r\n \r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"syepm_user_id_user\" class=\"mb-2 font-medium text-gray-700\">User ID</label>\r\n <input \r\n id=\"syepm_user_id_user\"\r\n type=\"text\" \r\n formControlName=\"syepm_user_id_user\" \r\n placeholder=\"Enter user ID\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm bg-gray-50 cursor-not-allowed focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n readonly\r\n >\r\n <small class=\"text-gray-500 text-xs mt-1 italic\">This field is automatically populated</small>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-end gap-4 mt-8 pt-5 border-t border-gray-200\">\r\n <button \r\n type=\"button\" \r\n class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n Cancel\r\n </button>\r\n <button \r\n type=\"submit\" \r\n class=\"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600 transition-colors duration-200 disabled:opacity-60 disabled:cursor-not-allowed\"\r\n [disabled]=\"accessForm.invalid || isSubmitting()\"\r\n >\r\n {{ isSubmitting() ? 'Saving...' : (isEditMode() ? 'Update' : 'Save') }}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n `\r\n})\r\nexport class CideCoreUserEntityAccessComponent implements OnInit {\r\n private fb = inject(FormBuilder);\r\n private route = inject(ActivatedRoute);\r\n private router = inject(Router);\r\n\r\n // Signals\r\n isEditMode = signal(false);\r\n isSubmitting = signal(false);\r\n \r\n // Form\r\n accessForm!: FormGroup;\r\n\r\n ngOnInit() {\r\n this.initializeForm();\r\n this.checkEditMode();\r\n }\r\n\r\n private initializeForm() {\r\n this.accessForm = this.fb.group({\r\n syepm_entity_id_syen: ['', [Validators.required]],\r\n syepm_ownership_status: [''],\r\n syepm_access_passs_to: [''],\r\n syepm_isactive: [true],\r\n can_edit: [false],\r\n can_view: [true],\r\n syepm_user_id_user: [''] // This will be populated from route or service\r\n });\r\n }\r\n\r\n private checkEditMode() {\r\n const id = this.route.snapshot.paramMap.get('id');\r\n if (id) {\r\n this.isEditMode.set(true);\r\n this.loadAccess(id);\r\n }\r\n }\r\n\r\n private loadAccess(id: string) {\r\n // TODO: Load access data from service\r\n console.log('Loading access:', id);\r\n }\r\n\r\n onSubmit() {\r\n if (this.accessForm.valid) {\r\n this.isSubmitting.set(true);\r\n \r\n const formData = this.accessForm.value;\r\n \r\n // Transform the form data to match the expected structure\r\n const transformedData = {\r\n ...formData,\r\n syepm_actions_allowed: {\r\n can_edit: { status: formData.can_edit },\r\n can_view: { status: formData.can_view }\r\n }\r\n };\r\n \r\n // Remove the individual checkbox values as they're now in actions_allowed\r\n delete transformedData.can_edit;\r\n delete transformedData.can_view;\r\n \r\n console.log('Form data:', transformedData);\r\n \r\n // TODO: Submit to service\r\n setTimeout(() => {\r\n this.isSubmitting.set(false);\r\n this.goBack();\r\n }, 1000);\r\n } else {\r\n this.markFormGroupTouched();\r\n }\r\n }\r\n\r\n private markFormGroupTouched() {\r\n Object.keys(this.accessForm.controls).forEach(key => {\r\n const control = this.accessForm.get(key);\r\n control?.markAsTouched();\r\n });\r\n }\r\n\r\n goBack() {\r\n this.router.navigate(['/admin/user-master']);\r\n }\r\n}\r\n","import { Component, inject, signal, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'cide-core-user-family-details',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n template: `\r\n <div class=\"p-5\">\r\n <div class=\"bg-white rounded-lg shadow-md mb-5\">\r\n <div class=\"p-5 border-b border-gray-200 flex justify-between items-center\">\r\n <h2 class=\"text-2xl font-semibold text-gray-800 m-0\">\r\n {{ isEditMode() ? 'Edit' : 'Add' }} Family Member\r\n </h2>\r\n <div class=\"flex gap-2\">\r\n <button \r\n type=\"button\" \r\n class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n <i class=\"fas fa-arrow-left\"></i> Back\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div class=\"p-5\">\r\n <form [formGroup]=\"familyForm\" (ngSubmit)=\"onSubmit()\">\r\n <div class=\"mb-8\">\r\n <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Family Member Information</h3>\r\n \r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"syfdl_family_member_name\" class=\"mb-2 font-medium text-gray-700\">Family Member Name *</label>\r\n <input \r\n id=\"syfdl_family_member_name\"\r\n type=\"text\" \r\n formControlName=\"syfdl_family_member_name\" \r\n placeholder=\"Enter full name of family member\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n @if (familyForm.get('syfdl_family_member_name')?.hasError('required') && familyForm.get('syfdl_family_member_name')?.touched) {\r\n <div class=\"text-red-500 text-xs mt-1\">\r\n Family member name is required\r\n </div>\r\n }\r\n </div>\r\n \r\n <div class=\"flex flex-col\">\r\n <label for=\"syfdl_relationship_id_sygms\" class=\"mb-2 font-medium text-gray-700\">Relationship *</label>\r\n <select \r\n id=\"syfdl_relationship_id_sygms\"\r\n formControlName=\"syfdl_relationship_id_sygms\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n <option value=\"\">Select relationship</option>\r\n <option value=\"spouse\">Spouse</option>\r\n <option value=\"father\">Father</option>\r\n <option value=\"mother\">Mother</option>\r\n <option value=\"son\">Son</option>\r\n <option value=\"daughter\">Daughter</option>\r\n <option value=\"brother\">Brother</option>\r\n <option value=\"sister\">Sister</option>\r\n <option value=\"grandfather\">Grandfather</option>\r\n <option value=\"grandmother\">Grandmother</option>\r\n <option value=\"uncle\">Uncle</option>\r\n <option value=\"aunt\">Aunt</option>\r\n <option value=\"cousin\">Cousin</option>\r\n <option value=\"other\">Other</option>\r\n </select>\r\n @if (familyForm.get('syfdl_relationship_id_sygms')?.hasError('required') && familyForm.get('syfdl_relationship_id_sygms')?.touched) {\r\n <div class=\"text-red-500 text-xs mt-1\">\r\n Relationship is required\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"syfdl_family_member_dob\" class=\"mb-2 font-medium text-gray-700\">Date of Birth</label>\r\n <input \r\n id=\"syfdl_family_member_dob\"\r\n type=\"date\" \r\n formControlName=\"syfdl_family_member_dob\" \r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n </div>\r\n \r\n <div class=\"flex flex-col\">\r\n <label for=\"syfdl_blood_group_sygms\" class=\"mb-2 font-medium text-gray-700\">Blood Group</label>\r\n <select \r\n id=\"syfdl_blood_group_sygms\"\r\n formControlName=\"syfdl_blood_group_sygms\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n <option value=\"\">Select blood group</option>\r\n <option value=\"A+\">A+</option>\r\n <option value=\"A-\">A-</option>\r\n <option value=\"B+\">B+</option>\r\n <option value=\"B-\">B-</option>\r\n <option value=\"AB+\">AB+</option>\r\n <option value=\"AB-\">AB-</option>\r\n <option value=\"O+\">O+</option>\r\n <option value=\"O-\">O-</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"syfdl_contact_number\" class=\"mb-2 font-medium text-gray-700\">Contact Number *</label>\r\n <input \r\n id=\"syfdl_contact_number\"\r\n type=\"tel\" \r\n formControlName=\"syfdl_contact_number\" \r\n placeholder=\"Enter contact number\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n @if (familyForm.get('syfdl_contact_number')?.hasError('required') && familyForm.get('syfdl_contact_number')?.touched) {\r\n <div class=\"text-red-500 text-xs mt-1\">\r\n Contact number is required\r\n </div>\r\n }\r\n </div>\r\n \r\n <div class=\"flex flex-col\">\r\n <label for=\"syfdl_family_member_id_user\" class=\"mb-2 font-medium text-gray-700\">User ID (if member is a user)</label>\r\n <input \r\n id=\"syfdl_family_member_id_user\"\r\n type=\"text\" \r\n formControlName=\"syfdl_family_member_id_user\" \r\n placeholder=\"Enter user ID if applicable\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-8\">\r\n <h3 class=\"text-lg font-medium text-gray-700 border-b-2 border-blue-500 pb-2 mb-5\">Additional Information</h3>\r\n \r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-5 mb-5\">\r\n <div class=\"flex flex-col\">\r\n <label for=\"syfdl_user_id_user\" class=\"mb-2 font-medium text-gray-700\">Primary User ID</label>\r\n <input \r\n id=\"syfdl_user_id_user\"\r\n type=\"text\" \r\n formControlName=\"syfdl_user_id_user\" \r\n placeholder=\"Enter primary user ID\"\r\n class=\"px-3 py-2 border border-gray-300 rounded-md text-sm bg-gray-50 cursor-not-allowed focus:outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-colors duration-200\"\r\n readonly\r\n >\r\n <small class=\"text-gray-500 text-xs mt-1 italic\">This field is automatically populated</small>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-end gap-4 mt-8 pt-5 border-t border-gray-200\">\r\n <button \r\n type=\"button\" \r\n class=\"px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors duration-200\"\r\n (click)=\"goBack()\"\r\n (keyup.enter)=\"goBack()\"\r\n >\r\n Cancel\r\n </button>\r\n <button \r\n type=\"submit\" \r\n class=\"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600 transition-colors duration-200 disabled:opacity-60 disabled:cursor-not-allowed\"\r\n [disabled]=\"familyForm.invalid || isSubmitting()\"\r\n >\r\n {{ isSubmitting() ? 'Saving...' : (isEditMode() ? 'Update' : 'Save') }}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n `\r\n})\r\nexport class CideCoreUserFamilyDetailsComponent implements OnInit {\r\n private fb = inject(FormBuilder);\r\n private route = inject(ActivatedRoute);\r\n private router = inject(Router);\r\n\r\n // Signals\r\n isEditMode = signal(false);\r\n isSubmitting = signal(false);\r\n \r\n // Form\r\n familyForm!: FormGroup;\r\n\r\n ngOnInit() {\r\n this.initializeForm();\r\n this.checkEditMode();\r\n }\r\n\r\n private initializeForm() {\r\n this.familyForm = this.fb.group({\r\n syfdl_family_member_name: ['', [Validators.required]],\r\n syfdl_relationship_id_sygms: ['', [Validators.required]],\r\n syfdl_family_member_dob: [''],\r\n syfdl_contact_number: ['', [Validators.required]],\r\n syfdl_blood_group_sygms: [''],\r\n syfdl_family_member_id_user: [''],\r\n syfdl_user_id_user: [''] // This will be populated from route or service\r\n });\r\n }\r\n\r\n private checkEditMode() {\r\n const id = this.route.snapshot.paramMap.get('id');\r\n if (id) {\r\n this.isEditMode.set(true);\r\n this.loadFamilyMember(id);\r\n }\r\n }\r\n\r\n private loadFamilyMember(id: string) {\r\n // TODO: Load family member data from service\r\n console.log('Loading family member:', id);\r\n }\r\n\r\n onSubmit() {\r\n if (this.familyForm.valid) {\r\n this.isSubmitting.set(true);\r\n \r\n const formData = this.familyForm.value;\r\n console.log('Form data:', formData);\r\n \r\n // TODO: Submit to service\r\n setTimeout(() => {\r\n this.isSubmitting.set(false);\r\n this.goBack();\r\n }, 1000);\r\n } else {\r\n this.markFormGroupTouched();\r\n }\r\n }\r\n\r\n private markFormGroupTouched() {\r\n Object.keys(this.familyForm.controls).forEach(key => {\r\n const control = this.familyForm.get(key);\r\n control?.markAsTouched();\r\n });\r\n }\r\n\r\n goBack() {\r\n this.router.navigate(['/admin/user-master']);\r\n }\r\n}\r\n","// User Management Module Export Index\n\n// Components\nexport { CideCoreUserCreateComponent } from './components/user-create/user-create.component';\nexport { CideCoreUserListComponent } from './components/user-list/user-list.component';\n\n// Services \nexport * from './services';\n\n// User Forms Components\nexport { CideCoreUserAttributesComponent } from './components/user-forms/user-attributes.component';\nexport { CideCoreUserContactAddressesComponent } from './components/user-forms/user-contact-addresses.component';\nexport { CideCoreUserDocumentsComponent } from './components/user-forms/user-documents.component';\nexport { CideCoreUserEntityAccessComponent } from './components/user-forms/user-entity-access.component';\nexport { CideCoreUserFamilyDetailsComponent } from './components/user-forms/user-family-details.component';\n","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideEleDataGridComponent, CideIconComponent, CideEleButtonComponent, CideSelectComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, TemplateContext, NotificationService, ConfirmationService, DropdownConfig } from 'cloud-ide-element';\nimport { type MUserRole, generateStringFromObject } from 'cloud-ide-lms-model';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideCoreUserRoleService } from '../../services/user-role.service';\nimport { Observable, forkJoin, of } from 'rxjs';\nimport { map, catchError, switchMap } from 'rxjs/operators';\nimport type { UserRole, Entity, ApiResponse } from '../../interfaces/user-role.interface';\nimport type { MUserRoleDeletePayload, MUserRoleToggleStatusPayload } from 'cloud-ide-lms-model';\n\n@Component({\n selector: 'cide-core-user-role-list',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n CideIconComponent,\n CideEleButtonComponent,\n CideEleDataGridComponent,\n CideEleDropdownComponent\n ],\n templateUrl: './user-role-list.component.html',\n styles: [`\n .user-role-listing-container {\n @apply tw-w-full tw-h-full;\n }\n \n :host {\n @apply tw-w-full tw-h-full tw-flex tw-flex-col;\n }\n `]\n})\nexport class CideCoreUserRoleListComponent implements OnInit, OnDestroy {\n // Dependency injection\n private readonly destroyRef = inject(DestroyRef);\n private readonly userRoleService = inject(CideCoreUserRoleService);\n private readonly router = inject(Router);\n private readonly appState = inject(AppStateHelperService);\n private readonly notificationService = inject(NotificationService);\n private readonly confirmationService = inject(ConfirmationService);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n userRoleDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('userRoleDetailsRendererTemplate');\n entityRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('entityRendererTemplate');\n statusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('statusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n // State management using Angular Signals for server-side operations\n userRoles = signal<UserRole[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n\n // Server-side pagination state\n currentPage = signal(1);\n pageSize = signal(10);\n totalItems = signal(0);\n totalPages = signal(0);\n\n // Server-side search state\n searchQuery = signal('');\n\n // Server-side sorting state\n sortColumn = signal('syusrol_role_name');\n sortDirection = signal<'asc' | 'desc'>('asc');\n\n // Server-side filtering state\n selectedStatusFilter = signal('');\n\n // Getter and setter for ngModel compatibility\n get selectedStatusFilterValue(): string {\n return this.selectedStatusFilter();\n }\n\n set selectedStatusFilterValue(value: string) {\n this.selectedStatusFilter.set(value);\n }\n\n // Filter options\n statusFilterOptions = signal([\n { value: '', label: 'All Status' },\n { value: 'active', label: 'Active Roles' },\n { value: 'inactive', label: 'Inactive Roles' },\n { value: 'locked', label: 'Locked Roles' }\n ]);\n\n // Grid configuration signal\n gridConfig = signal<GridConfiguration<UserRole>>({\n id: 'user-role-list-grid',\n columns: [\n {\n key: 'details',\n header: 'Role Details',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'userRoleDetailsRenderer'\n },\n {\n key: 'entity',\n header: 'Entity',\n type: 'custom',\n width: '150px',\n truncate: true,\n align: 'left',\n renderer: 'entityRenderer'\n },\n {\n key: 'syusrol_isactive',\n header: 'Status',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'statusRenderer'\n },\n {\n key: 'actions',\n header: '',\n type: 'custom',\n width: '150px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search user roles...',\n searchableColumns: ['syusrol_role_name', 'syusrol_role_description'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none'\n });\n\n ngOnInit(): void {\n console.log('👥 User Role List Component initialized');\n this.loadUserRoles();\n }\n\n ngOnDestroy(): void {\n console.log('👥 User Role List Component destroyed');\n }\n\n /**\n * Load user roles from API\n */\n loadUserRoles(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const payload: MUserRole = {\n syusrol_role_entity_id_syen: this.appState.activeEntity()?._id || '',\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n query: this.searchQuery() || \"\",\n sort: {\n key: this.sortColumn(),\n order: this.sortDirection()\n }\n };\n\n this.userRoleService.getUserRoleList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n this.userRoles.set(response.data);\n this.totalItems.set(response.data.length);\n this.totalPages.set(Math.ceil(response.data.length / this.pageSize()));\n this.updateGridData();\n this.notificationService.success(`Loaded ${response.data.length} user role(s) successfully.`);\n } else {\n console.warn('⚠️ No user role data received');\n this.userRoles.set([]);\n this.totalItems.set(0);\n this.totalPages.set(0);\n this.notificationService.warning('No user roles found.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading user roles:', error);\n this.error.set('Failed to load user roles. Please try again.');\n this.userRoles.set([]);\n this.totalItems.set(0);\n this.totalPages.set(0);\n this.loading.set(false);\n this.notificationService.error('Failed to load user roles. Please try again.');\n }\n });\n }\n\n /**\n * Update grid data\n */\n private updateGridData(): void {\n this.gridConfig.update(config => ({\n ...config,\n data: this.userRoles()\n }));\n }\n\n // Computed template renderers for grid\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n userRoleDetailsRenderer: this.userRoleDetailsRendererTemplate(),\n entityRenderer: this.entityRendererTemplate(),\n statusRenderer: this.statusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<UserRole>): void {\n switch (event.type) {\n case 'pageChange':\n if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data && 'pageSize' in event.data) {\n this.currentPage.set(event.data['pageIndex'] as number);\n this.pageSize.set(event.data['pageSize'] as number);\n this.loadUserRoles();\n }\n break;\n case 'search':\n this.searchQuery.set(event.data as string);\n this.currentPage.set(1);\n this.loadUserRoles();\n break;\n case 'refresh':\n this.loadUserRoles();\n break;\n case 'action':\n // Handle action events if needed\n console.log('Action event:', event);\n break;\n case 'rowClick':\n // Handle row click events if needed\n console.log('Row click event:', event);\n break;\n case 'sort':\n // Handle sort events if needed\n console.log('Sort event:', event);\n break;\n case 'export':\n // Handle export events if needed\n console.log('Export event:', event);\n break;\n default:\n console.log('🔄 Unhandled grid event:', event.type);\n }\n }\n\n // Filter handlers\n onStatusFilterChange(): void {\n console.log('🔍 Status filter changed:', this.selectedStatusFilter());\n this.currentPage.set(1); // Reset to first page when filtering\n this.loadUserRoles();\n }\n\n clearFilters(): void {\n console.log('🧹 Clearing filters');\n this.selectedStatusFilter.set('');\n this.searchQuery.set('');\n this.currentPage.set(1);\n this.loadUserRoles();\n }\n\n // User Role actions\n createUserRole(): void {\n console.log('➕ Navigating to create user role');\n this.notificationService.info('Opening user role creation form.');\n this.router.navigate(['/control-panel/user-role/create']);\n }\n\n viewUserRole(userRole: UserRole): void {\n console.log('👁️ Viewing user role:', userRole);\n this.notificationService.info(`Opening user role \"${userRole.syusrol_role_name}\" for viewing.`);\n const queryParams = generateStringFromObject({ syusrol_id: userRole._id });\n this.router.navigate(['/control-panel/user-role/view', queryParams]);\n }\n\n editUserRole(userRole: UserRole): void {\n console.log('✏️ Editing user role:', userRole);\n \n this.notificationService.info(`Opening user role \"${userRole.syusrol_role_name}\" for editing.`);\n const queryParams = generateStringFromObject({ syusrol_id: userRole._id });\n this.router.navigate(['/control-panel/user-role/edit', queryParams]);\n }\n\n deleteUserRole(userRole: UserRole): void {\n console.log('🗑️ DELETE METHOD CALLED - Deleting user role:', userRole);\n \n // Show confirmation dialog\n console.log('🔔 Showing confirmation dialog for delete');\n this.confirmationService.ask({\n title: 'Delete User Role',\n message: `Are you sure you want to delete the user role \"${userRole.syusrol_role_name}\"?\\n\\nThis action cannot be undone and will also delete all associated role rights.`,\n confirmText: 'Delete',\n cancelText: 'Cancel',\n type: 'danger'\n }).then((confirmed: boolean) => {\n console.log('🔔 Confirmation dialog result:', confirmed);\n if (confirmed) {\n console.log('🗑️ Confirmed deletion, calling service with ID:', userRole._id);\n this.loading.set(true);\n \n this.userRoleService.deleteUserRole({ syusrol_id: userRole._id || '' } as MUserRoleDeletePayload).subscribe({\n next: (response) => {\n if (response?.success) {\n console.log('✅ User role deleted successfully');\n this.notificationService.success(`User role \"${userRole.syusrol_role_name}\" has been deleted successfully.`);\n this.loadUserRoles(); // Reload the list\n } else {\n console.error('❌ Failed to delete user role');\n this.notificationService.error(response?.message || 'Failed to delete user role');\n this.loading.set(false);\n }\n },\n error: (error) => {\n console.error('❌ Error deleting user role:', error);\n this.notificationService.error('Failed to delete user role. Please try again.');\n this.loading.set(false);\n }\n });\n }\n });\n }\n\n toggleUserRoleStatus(userRole: UserRole): void {\n console.log('🔄 Toggling user role status:', userRole);\n \n const action = userRole.syusrol_isactive ? 'deactivate' : 'activate';\n const actionText = userRole.syusrol_isactive ? 'Deactivate' : 'Activate';\n \n // Show confirmation dialog\n console.log('🔔 Showing confirmation dialog for toggle status');\n this.confirmationService.ask({\n title: `${actionText} User Role`,\n message: `Are you sure you want to ${action} the user role \"${userRole.syusrol_role_name}\"?`,\n confirmText: actionText,\n cancelText: 'Cancel',\n type: 'warning'\n }).then((confirmed: boolean) => {\n console.log('🔔 Confirmation dialog result:', confirmed);\n if (confirmed) {\n console.log('🔄 Calling toggleUserRoleStatus with ID:', userRole._id);\n this.userRoleService.toggleUserRoleStatus({ syusrol_id: userRole._id || '' } as MUserRoleToggleStatusPayload).subscribe({\n next: (response) => {\n console.log('🔄 Toggle user role status response:', response);\n if (response?.success) {\n console.log('✅ User role status toggled successfully');\n this.notificationService.success(`User role \"${userRole.syusrol_role_name}\" has been ${action}d successfully.`);\n this.loadUserRoles();\n } else {\n console.error('❌ Failed to toggle user role status');\n this.notificationService.error(response?.message || 'Failed to toggle user role status');\n this.loading.set(false);\n }\n },\n error: (error) => {\n console.error('❌ Error toggling user role status:', error);\n this.notificationService.error('Failed to toggle user role status. Please try again.');\n this.loading.set(false);\n }\n });\n }\n });\n }\n\n /**\n * Get dropdown configuration\n */\n getDropdownConfig(): DropdownConfig {\n return {\n triggerIcon: 'more_vert',\n triggerSize: 'sm',\n menuPosition: 'right',\n forcePosition: 'bottom',\n offsetX: 0,\n offsetY: 4,\n usePortal: true\n };\n }\n\n /**\n * Get action dropdown items\n */\n getActionDropdownItems(userRole: UserRole): DropdownItem[] {\n console.log('🔽 Generating dropdown items for:', userRole.syusrol_role_name);\n console.log('🔽 User role data:', {\n isActive: userRole.syusrol_isactive\n });\n \n const items: DropdownItem[] = [\n {\n id: 'view',\n label: 'View Details',\n icon: 'visibility',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-600',\n hoverBgColor: 'hover:tw-bg-blue-50'\n },\n {\n id: 'toggle-status',\n label: userRole.syusrol_isactive ? 'Deactivate' : 'Activate',\n icon: userRole.syusrol_isactive ? 'toggle_off' : 'toggle_on',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-600',\n hoverBgColor: 'hover:tw-bg-red-50',\n divider: true\n }\n ];\n return items;\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, userRole: UserRole): void {\n console.log('🔽 Dropdown item clicked:', item.id, 'for user role:', userRole.syusrol_role_name);\n \n switch (item.id) {\n case 'view':\n this.viewUserRole(userRole);\n break;\n case 'edit':\n this.editUserRole(userRole);\n break;\n case 'toggle-status':\n this.toggleUserRoleStatus(userRole);\n break;\n case 'delete':\n this.deleteUserRole(userRole);\n break;\n default:\n console.log('❓ Unknown dropdown item clicked:', item.id);\n }\n }\n\n // Export handler\n private handleExport(format: string): void {\n console.log(`📤 Exporting user roles as ${format}`);\n // Implement export logic here\n // Could export current filtered/sorted data or all data\n }\n\n // Utility methods\n formatDate(date: string | Date): string {\n if (!date) return '-';\n return new Date(date).toLocaleDateString();\n }\n\n getStatusBadgeClass(userRole: UserRole): string {\n if (userRole.syusrol_isactive) return 'tw-bg-green-100 tw-text-green-800';\n return 'tw-bg-orange-100 tw-text-orange-800';\n }\n\n getStatusText(userRole: UserRole): string {\n if (userRole.syusrol_isactive) return 'Active';\n return 'Inactive';\n }\n\n getEntityName(entity: any): string {\n if (typeof entity === 'object' && entity?.syen_name) {\n return entity.syen_name;\n }\n return entity || 'N/A';\n }\n}\n","<!-- User Role Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n \n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">admin_panel_settings</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">User Role Management</h5>\n </div>\n\n <!-- Actions -->\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <button cideEleButton variant=\"primary\" size=\"md\" leftIcon=\"add\" \n (click)=\"createUserRole()\">\n Create User Role\n </button>\n </div>\n </div>\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n \n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n <cide-ele-data-grid \n [config]=\"gridConfig()\" \n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Template Renderers -->\n<ng-template #userRoleDetailsRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-w-full\">\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.syusrol_role_name || 'N/A' }}</div>\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.syusrol_role_description || 'No description' }}</div>\n </div>\n</ng-template>\n\n<ng-template #entityRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-text-sm\">\n <span class=\"tw-text-gray-900\">{{ getEntityName(row.syusrol_role_entity_id_syen) }}</span>\n </div>\n</ng-template>\n\n<ng-template #statusRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-items-center tw-justify-center\">\n <!-- Active/Inactive Status Badge -->\n <span class=\"tw-inline-flex tw-items-center tw-justify-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-text-center\"\n [ngClass]=\"getStatusBadgeClass(row)\">\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">\n {{ row.syusrol_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ getStatusText(row) }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template>\n","import { Component, signal, computed, viewChild, TemplateRef, DestroyRef, inject, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, FormArray, Validators, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { Subject, takeUntil } from 'rxjs';\nimport { CideEleButtonComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent, CideIconComponent, NotificationService, ConfirmationService, GridConfiguration, GridEvent, TemplateContext } from 'cloud-ide-element';\nimport { CideEleDataGridComponent } from 'cloud-ide-element';\nimport { generateStringFromObject, MUserRoleWithRightsPayload, generateObjectFromString, MMenuListPayload } from 'cloud-ide-lms-model';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideCoreUserRoleService } from '../../services/user-role.service';\nimport { Observable, forkJoin, of } from 'rxjs';\nimport { map, catchError, switchMap } from 'rxjs/operators';\nimport type { UserRole, UserRoleRight, Entity, Menu, Permission } from '../../interfaces/user-role.interface';\nimport { CideCoreGeneralMasterService } from '../../../general-master-management/services/general-master.service';\nimport { CideCoreGeneralMasterTypeService } from '../../../general-master-management/services/general-master-type.service';\nimport { ICoreSygms, IGeneralMasterListRequest } from 'cloud-ide-lms-model';\nimport { MenuManagementService } from '../../../menu-management';\n\n@Component({\n selector: 'cide-core-user-role-form',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n CideEleButtonComponent,\n CideIconComponent,\n CideInputComponent,\n CideSelectComponent,\n CideTextareaComponent,\n CideEleDataGridComponent\n ],\n templateUrl: './user-role-form.component.html',\n styles: [`\n :host {\n @apply tw-w-full tw-h-full tw-flex tw-flex-col;\n }\n `]\n})\nexport class CideCoreUserRoleFormComponent implements OnInit, OnDestroy {\n // Dependency injection\n private readonly destroyRef = inject(DestroyRef);\n private readonly userRoleService = inject(CideCoreUserRoleService);\n private readonly menuService = inject(MenuManagementService);\n private readonly generalMasterService = inject(CideCoreGeneralMasterService);\n private readonly generalMasterTypeService = inject(CideCoreGeneralMasterTypeService);\n private readonly router = inject(Router);\n private readonly route = inject(ActivatedRoute);\n private readonly appState = inject(AppStateHelperService);\n private readonly notificationService = inject(NotificationService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly fb = inject(FormBuilder);\n private readonly cdr = inject(ChangeDetectorRef);\n private destroy$ = new Subject<void>();\n\n // State management\n userRoleForm!: FormGroup;\n roleRightsForm!: FormGroup;\n loading = signal(false);\n error = signal<string | null>(null);\n isEditMode = signal(false);\n isViewMode = signal(false);\n userRoleId = signal<string | null>(null);\n\n // Data signals\n entities = signal<Entity[]>([]);\n menus = signal<Menu[]>([]);\n permissions = signal<Permission[]>([]);\n originalRights = signal<UserRoleRight[]>([]);\n userRightsTypeId = signal<string | null>(null);\n\n // Template renderers for Role Rights grid\n menuDetailsRendererTemplate = viewChild<TemplateRef<TemplateContext>>('menuDetailsRendererTemplate');\n permissionsCheckboxRendererTemplate = viewChild<TemplateRef<TemplateContext>>('permissionsCheckboxRendererTemplate');\n\n // Form mode\n get formTitle(): string {\n if (this.isViewMode()) return 'View User Role';\n if (this.isEditMode()) return 'Edit User Role';\n return 'Create User Role';\n }\n\n get submitButtonText(): string {\n if (this.isViewMode()) return 'Close';\n if (this.isEditMode()) return 'Update User Role';\n return 'Create User Role';\n }\n\n // Grid configuration for Role Rights - Copied from working menu list\n roleRightsGridConfig = signal<GridConfiguration<UserRoleRight>>({\n id: 'menu-list-grid',\n title: '',\n subtitle: '',\n fullHeight: true,\n columns: [\n {\n key: 'details',\n header: 'Menu Item',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'menuDetailsRenderer'\n },\n {\n key: 'syme_type',\n header: 'Type',\n type: 'custom',\n width: '120px',\n truncate: false,\n align: 'center',\n renderer: 'menuTypeRenderer'\n },\n {\n key: 'syme_permissions_id_sygms',\n header: 'Available Permissions',\n type: 'custom',\n width: '300px',\n truncate: false,\n align: 'left',\n renderer: 'permissionsCheckboxRenderer'\n }\n ],\n data: [],\n trackBy: '_id',\n pagination: {\n enabled: false,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search menu items...',\n searchableColumns: ['syme_title', 'syme_desc', 'syme_path'],\n debounceMs: 300\n },\n loading: {\n useDefer: false,\n skeletonRows: 5,\n showOverlay: false\n },\n scroll: {\n enabled: true,\n maxHeight: '900px',\n minHeight: '200px',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 25\n },\n\n dragDrop: {\n enabled: false,\n orderField: 'syme_order_by',\n dragClass: 'tw-opacity-50 tw-bg-blue-50',\n dropClass: 'tw-bg-green-50'\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none',\n tree: {\n enabled: true,\n primaryKey: '_id',\n foreignKey: 'syme_id_syme',\n childrenKey: 'children',\n levelKey: 'level',\n expandedKey: 'isExpanded',\n hasChildrenKey: 'hasChildren'\n }\n });\n\n // Computed template renderers for grid\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => {\n const renderers: Record<string, TemplateRef<TemplateContext>> = {};\n\n if (this.menuDetailsRendererTemplate()) {\n renderers['menuDetailsRenderer'] = this.menuDetailsRendererTemplate()!;\n }\n if (this.permissionsCheckboxRendererTemplate()) {\n renderers['permissionsCheckboxRenderer'] = this.permissionsCheckboxRendererTemplate()!;\n }\n\n return renderers;\n });\n\n ngOnInit(): void {\n console.log('👥 User Role Form Component initialized');\n this.initializeForm();\n this.loadMasterData();\n this.checkForUserRoleId();\n }\n\n ngOnDestroy(): void {\n console.log('👥 User Role Form Component destroyed');\n\n // Clean up RxJS subscriptions\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Initialize the forms\n */\n private initializeForm(): void {\n // Get entity ID from app state\n const currentEntityId = this.appState.activeEntity()?._id;\n\n // Initialize main user role form\n this.userRoleForm = this.fb.group({\n syusrol_role_name: ['', Validators.required],\n syusrol_role_description: ['', Validators.required],\n syusrol_role_entity_id_syen: [currentEntityId, Validators.required], // Auto-set from app state\n syusrol_isactive: [true]\n });\n\n // Initialize separate role rights form\n this.roleRightsForm = this.fb.group({\n roleRights: this.fb.array([])\n });\n\n // Subscribe to form changes to update grid data\n }\n\n /**\n * Check for user role ID in query parameters\n */\n private checkForUserRoleId(): void {\n console.log('🔍 Checking for user role ID in query parameters', this.route.params);\n this.route.params.pipe(takeUntil(this.destroy$)).subscribe(params => {\n console.log('🔍 Query params:', params);\n\n const url = this.router.url;\n const queryParams = params['query'];\n const queryData = generateObjectFromString(queryParams);\n\n // Check for user role ID\n const userRoleId = queryData.syusrol_id;\n\n if (userRoleId) {\n console.log('🔍 User Role ID found in query params:', userRoleId);\n this.userRoleId.set(userRoleId);\n\n // Determine mode based on URL\n if (url.includes('/view/')) {\n this.isViewMode.set(true);\n this.isEditMode.set(false);\n this.loadUserRoleData(userRoleId, true);\n } else if (url.includes('/edit/')) {\n this.isViewMode.set(false);\n this.isEditMode.set(true);\n this.loadUserRoleData(userRoleId, false);\n } else {\n // Default to edit mode if ID is provided but no specific mode\n this.isViewMode.set(false);\n this.isEditMode.set(true);\n this.loadUserRoleData(userRoleId, false);\n }\n } else {\n console.log('🆕 No user role ID found - creating new user role');\n this.isViewMode.set(false);\n this.isEditMode.set(false);\n this.userRoleId.set(null);\n }\n });\n }\n\n /**\n * Load master data (menus, permissions)\n */\n private loadMasterData(): void {\n console.log('🔄 Loading master data for User Role Form...');\n\n // Load menus from API using the same service as menu listing\n this.loadMenusFromAPI();\n\n // Load permissions from general master\n this.loadUserRightsTypeId();\n }\n\n\n /**\n * Load menus from API using the same service as menu listing\n */\n private loadMenusFromAPI(): void {\n console.log('📋 Loading menus from API...');\n\n if (!this.menuService) {\n console.error('❌ MenuService is not available');\n return;\n }\n\n const requestBody: MMenuListPayload = {\n pagination: false,\n sort: { order: 'asc', key: 'syme_order_by' }\n };\n\n this.menuService.getMenuList(requestBody)\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (response) => {\n console.log('✅ Menus loaded from API:', response);\n if (response?.success && response.data) {\n // Assign directly to grid without any processing\n this.roleRightsGridConfig.update(config => ({\n ...config,\n data: response.data as any\n }));\n\n // Initialize role rights for all menu items\n this.initializeRoleRightsForAllMenus(response.data);\n } else {\n console.warn('⚠️ No menu data received from API');\n this.roleRightsGridConfig.update(config => ({\n ...config,\n data: []\n }));\n }\n },\n error: (error: any) => {\n console.error('❌ Error loading menus from API:', error);\n this.roleRightsGridConfig.update(config => ({\n ...config,\n data: []\n }));\n }\n });\n }\n\n /**\n * Load user rights type ID from general master type service\n */\n private loadUserRightsTypeId(): void {\n console.log('🔍 Loading user rights type ID...');\n\n this.generalMasterTypeService.getTypeList({})\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n // Find the type with code 'user_rights'\n const userRightsType = response.data.find(type =>\n type.sygmt_code === 'user_rights' || type.sygmt_title?.toLowerCase().includes('user_rights')\n );\n\n if (userRightsType) {\n console.log('✅ Found user rights type:', userRightsType);\n this.userRightsTypeId.set(userRightsType._id || null);\n this.loadPermissions();\n } else {\n console.warn('⚠️ User rights type not found');\n this.error.set('User rights type not found in general master types');\n }\n }\n },\n error: (err) => {\n console.error('❌ Error loading user rights type:', err);\n this.error.set('Failed to load user rights type');\n }\n });\n }\n\n /**\n * Load permissions from general master service\n */\n private loadPermissions(): void {\n const typeId = this.userRightsTypeId();\n if (!typeId) {\n console.warn('⚠️ Cannot load permissions: user rights type ID not found');\n return;\n }\n\n console.log('🔍 Loading permissions for type ID:', typeId);\n\n const payload: IGeneralMasterListRequest = {\n sygms_id_sygmt: typeId\n };\n\n this.generalMasterService.getMasterList(payload)\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n console.log('✅ Permissions loaded:', response.data);\n // Convert ICoreSygms to Permission interface\n const permissions: Permission[] = response.data.map(perm => ({\n _id: perm._id,\n sygms_name: perm.sygms_title || perm.sygms_code || 'Unknown',\n sygms_code: perm.sygms_code || '',\n sygms_description: perm.sygms_desc || '',\n sygms_isactive: perm.sygms_isactive ?? true\n }));\n this.permissions.set(permissions);\n } else {\n console.warn('⚠️ No permissions data received');\n this.permissions.set([]);\n }\n },\n error: (err) => {\n console.error('❌ Error loading permissions:', err);\n this.permissions.set([]);\n }\n });\n }\n\n\n /**\n * Load user role data\n */\n private loadUserRoleData(userRoleId: string, isViewMode: boolean): void {\n this.loading.set(true);\n this.error.set(null);\n\n this.userRoleService.getUserRoleById({ syusrol_id: userRoleId })\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: async (response) => {\n if (response?.success && response.data) {\n const userRoleData = response.data.core_user_role;\n\n // Populate form with user role data\n this.userRoleForm.patchValue({\n syusrol_role_name: userRoleData.syusrol_role_name,\n syusrol_role_description: userRoleData.syusrol_role_description,\n syusrol_role_entity_id_syen: userRoleData.syusrol_role_entity_id_syen,\n syusrol_isactive: userRoleData.syusrol_isactive\n });\n\n // Store original rights for comparison\n const rightsData = await Promise.all((response?.data?.core_user_role_rights || [])?.map((rights) => {\n return {\n ...rights,\n syusrgt_menu_id_syme: rights.syusrgt_menu_id_syme?._id,\n syusrgt_role_permissions_id_sygms: rights.syusrgt_role_permissions_id_sygms?._id,\n }\n }));\n this.originalRights.set(rightsData);\n\n // Populate role rights\n this.populateRoleRights(rightsData);\n\n // Disable form if in view mode\n if (isViewMode) {\n this.userRoleForm.disable();\n }\n\n this.notificationService.success('User role data loaded successfully.');\n setTimeout(() => this.cdr.detectChanges(), 0);\n } else {\n this.error.set('Failed to load user role data.');\n this.notificationService.error('Failed to load user role data.');\n this.cdr.detectChanges();\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading user role data:', error);\n this.error.set('Failed to load user role data. Please try again.');\n this.loading.set(false);\n this.notificationService.error('Failed to load user role data. Please try again.');\n this.cdr.detectChanges();\n }\n });\n }\n\n /**\n * Populate role rights form array\n */\n private populateRoleRights(rights: UserRoleRight[]): void {\n const rightsArray = this.roleRightsForm.get('roleRights') as FormArray;\n rightsArray.clear();\n\n rights.forEach(right => {\n rightsArray.push(this.createRoleRightFormGroup(right));\n });\n }\n\n /**\n * Create role right form group\n */\n private createRoleRightFormGroup(right?: UserRoleRight): FormGroup {\n return this.fb.group({\n _id: [right?._id || ''],\n menuId: [right?.syusrgt_menu_id_syme || '', Validators.required], // Add menuId for easy lookup\n syusrgt_menu_id_syme: [right?.syusrgt_menu_id_syme || '', Validators.required],\n syusrgt_role_permissions_id_sygms: [right?.syusrgt_role_permissions_id_sygms || '', Validators.required],\n syusrgt_isactive: [right?.syusrgt_isactive ?? true]\n });\n }\n\n /**\n * Get role rights form array\n */\n get roleRightsArray(): FormArray {\n return this.roleRightsForm.get('roleRights') as FormArray;\n }\n\n /**\n * Add new role right\n */\n addRoleRight(): void {\n if (this.isViewMode()) return;\n\n const rightsArray = this.roleRightsArray;\n rightsArray.push(this.createRoleRightFormGroup());\n }\n\n /**\n * Remove role right\n */\n removeRoleRight(index: number): void {\n if (this.isViewMode()) return;\n\n const rightsArray = this.roleRightsArray;\n rightsArray.removeAt(index);\n }\n\n /**\n * Get entity name by ID\n */\n getEntityName(entityId: string): string {\n const entity = this.entities().find(e => e._id === entityId);\n return entity?.syen_name || 'N/A';\n }\n\n /**\n * Get menu name by ID\n */\n getMenuName(menuId: string): string {\n const menu = this.menus().find(m => m._id === menuId);\n return menu?.syme_title || menu?.syme_menu_name || 'N/A';\n }\n\n /**\n * Get permission name by ID\n */\n getPermissionName(permissionId: string): string {\n const permission = this.permissions().find(p => p._id === permissionId);\n return permission?.sygms_name || 'N/A';\n }\n\n /**\n * Get permission names by IDs\n */\n getPermissionNames(permissionIds: string[]): string {\n if (!permissionIds || permissionIds.length === 0) {\n return 'No permissions';\n }\n\n const permissionNames = permissionIds\n .map(id => {\n const permission = this.permissions().find(p => p._id === id);\n return permission?.sygms_name || 'Unknown';\n })\n .filter(name => name !== 'Unknown');\n\n return permissionNames.length > 0 ? permissionNames.join(', ') : 'No valid permissions';\n }\n\n\n\n /**\n * Edit role right (focus on the form row)\n */\n editRoleRight(index: number): void {\n // Scroll to the form row or highlight it\n console.log('Edit role right at index:', index);\n // You could add visual feedback here\n }\n\n /**\n * Toggle role right status\n */\n toggleRoleRightStatus(index: number): void {\n if (this.isViewMode()) return;\n\n const control = this.roleRightsArray.at(index);\n const currentStatus = control.get('syusrgt_isactive')?.value;\n control.get('syusrgt_isactive')?.setValue(!currentStatus);\n }\n\n /**\n * Handle grid events\n */\n onRoleRightsGridEvent(event: GridEvent<UserRoleRight>): void {\n console.log('🔍 Role Rights Grid Event:', event);\n\n // Log specific event types to debug automatic update calls\n if (event.type) {\n console.log('🔍 Grid Event Type:', event.type);\n }\n\n // Prevent any automatic form updates from grid events that shouldn't trigger form changes\n if (event.type === 'rowClick' || event.type === 'sort' || event.type === 'pageChange' || event.type === 'search') {\n console.log('🔍 Grid event detected that should not trigger form updates:', event.type);\n return;\n }\n\n // Handle any other grid-specific events if needed\n }\n\n /**\n * Handle form submission\n */\n onSubmit(): void {\n if (this.isViewMode()) {\n this.router.navigate(['/control-panel/user-role']);\n return;\n }\n console.log(\"userRoleForm\", this.userRoleForm)\n if (this.userRoleForm.invalid) {\n this.notificationService.error('Please fill in all required fields correctly.');\n this.cdr.detectChanges();\n return;\n }\n\n const userRoleData = this.userRoleForm.value;\n const roleRightsData = this.roleRightsForm.value;\n\n // Build role rights - each record represents a single permission\n const roleRightsWithPermissions = roleRightsData.roleRights\n .filter((right: any) => right.syusrgt_role_permissions_id_sygms) // Only include records with permissions\n .map((right: any) => ({\n _id: right._id || undefined,\n syusrgt_menu_id_syme: right.syusrgt_menu_id_syme,\n syusrgt_role_permissions_id_sygms: right.syusrgt_role_permissions_id_sygms, // Single permission ID\n syusrgt_isactive: right.syusrgt_isactive\n }));\n\n const payload: MUserRoleWithRightsPayload = {\n core_user_role: {\n _id: this.userRoleId() || undefined,\n syusrol_role_name: userRoleData.syusrol_role_name,\n syusrol_role_description: userRoleData.syusrol_role_description,\n syusrol_role_entity_id_syen: userRoleData.syusrol_role_entity_id_syen,\n syusrol_isactive: userRoleData.syusrol_isactive\n },\n core_user_role_rights: roleRightsWithPermissions,\n core_user_role_rights_delete: this.getDeletedRightsIds()\n };\n\n console.log('💾 Saving user role with', roleRightsWithPermissions.length, 'role rights');\n\n this.saveUserRole(payload);\n }\n\n /**\n * Get deleted rights IDs\n */\n private getDeletedRightsIds(): string[] {\n const currentRights = this.roleRightsArray.value;\n const originalRights = this.originalRights();\n\n return originalRights\n .filter(original => !currentRights.some((current: any) => current._id === original._id))\n .map(right => right._id!)\n .filter(id => id);\n }\n\n /**\n * Save user role\n */\n private saveUserRole(payload: MUserRoleWithRightsPayload): void {\n this.loading.set(true);\n\n const saveOperation = this.userRoleService.saveUpdateUserRole(payload);\n\n saveOperation\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (response) => {\n if (response?.success) {\n const action = this.isEditMode() ? 'updated' : 'created';\n this.notificationService.success(`User role has been ${action} successfully.`);\n this.cdr.detectChanges();\n this.router.navigate(['/control-panel/user-role']);\n } else {\n this.notificationService.error(response?.message || 'Failed to save user role.');\n this.cdr.detectChanges();\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error saving user role:', error);\n this.notificationService.error('Failed to save user role. Please try again.');\n this.cdr.detectChanges();\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Handle cancel\n */\n onCancel(): void {\n if (this.userRoleForm.dirty && !this.isViewMode()) {\n this.confirmationService.ask({\n title: 'Discard Changes',\n message: 'You have unsaved changes. Are you sure you want to discard them?',\n confirmText: 'Discard',\n cancelText: 'Keep Editing',\n type: 'warning'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n this.router.navigate(['/control-panel/user-role']);\n }\n });\n } else {\n this.router.navigate(['/control-panel/user-role']);\n }\n }\n\n /**\n * Handle permission checkbox change\n */\n onPermissionCheckboxChange(menuId: string, permissionId: string, isChecked: any): void {\n if (this.isViewMode()) {\n return; // Don't allow changes in view mode\n }\n\n // Prevent changes if forms are not initialized\n if (!this.userRoleForm || !this.roleRightsForm) {\n console.warn('⚠️ Forms not initialized, skipping permission change');\n return;\n }\n\n // Handle different value types from cide-ele-input\n const checked = isChecked === true || isChecked === 'true' || isChecked === 1;\n\n if (checked) {\n // Add a new role right record for this permission\n this.addRoleRightForPermission(menuId, permissionId);\n } else {\n // Remove the role right record for this permission\n this.removeRoleRightForPermission(menuId, permissionId);\n }\n\n // Update both forms to trigger validation\n this.userRoleForm.updateValueAndValidity();\n this.roleRightsForm.updateValueAndValidity();\n\n // Trigger change detection to ensure UI updates\n this.cdr.detectChanges();\n }\n\n /**\n * Add a role right record for a specific permission\n */\n private addRoleRightForPermission(menuId: string, permissionId: string): void {\n // Check if this permission already has a role right record\n const existingIndex = this.roleRightsArray.controls.findIndex(control => {\n const menuIdValue = control.get('menuId')?.value || control.get('syusrgt_menu_id_syme')?.value;\n const permissionValue = control.get('syusrgt_role_permissions_id_sygms')?.value;\n return menuIdValue === menuId && permissionValue === permissionId;\n });\n\n if (existingIndex === -1) {\n // Create new role right record for this permission\n const newRoleRight = this.createRoleRightFormGroup({\n syusrgt_menu_id_syme: menuId,\n syusrgt_role_permissions_id_sygms: permissionId,\n syusrgt_isactive: true\n });\n\n this.roleRightsArray.push(newRoleRight);\n }\n }\n\n /**\n * Remove a role right record for a specific permission\n */\n private removeRoleRightForPermission(menuId: string, permissionId: string): void {\n const indexToRemove = this.roleRightsArray.controls.findIndex(control => {\n const menuIdValue = control.get('menuId')?.value || control.get('syusrgt_menu_id_syme')?.value;\n const permissionValue = control.get('syusrgt_role_permissions_id_sygms')?.value;\n return menuIdValue === menuId && permissionValue === permissionId;\n });\n\n if (indexToRemove >= 0) {\n this.roleRightsArray.removeAt(indexToRemove);\n }\n }\n\n /**\n * Check if a permission is selected for a menu\n */\n isPermissionSelected(menuId: string, permissionId: string): boolean {\n // Early return if forms are not initialized\n if (!this.roleRightsForm || !this.roleRightsArray) {\n return false;\n }\n\n // Check if there's a role right record for this specific menu and permission\n const roleRight = this.roleRightsArray.controls.find(control => {\n const menuIdValue = control.get('menuId')?.value || control.get('syusrgt_menu_id_syme')?.value;\n const permissionValue = control.get('syusrgt_role_permissions_id_sygms')?.value;\n return menuIdValue === menuId && permissionValue === permissionId;\n });\n\n return !!roleRight;\n }\n\n /**\n * Get permission by ID\n */\n getPermissionById(permissionId: string): Permission | undefined {\n return this.permissions().find(p => p._id === permissionId);\n }\n\n /**\n * Get selected permissions for a menu (for debugging)\n */\n getSelectedPermissionsForMenu(menuId: string): string {\n const roleRight = this.roleRightsArray.controls.find(control => {\n const menuIdValue = control.get('menuId')?.value;\n const syusrgtMenuId = control.get('syusrgt_menu_id_syme')?.value;\n return menuIdValue === menuId || syusrgtMenuId === menuId;\n });\n\n if (roleRight) {\n const permissions = roleRight.get('permissions')?.value || [];\n return permissions.join(', ') || 'None';\n }\n\n return 'None';\n }\n\n /**\n * Initialize role rights for all menu items\n * Note: We don't create role rights upfront - they are created only when permissions are selected\n */\n private initializeRoleRightsForAllMenus(menuItems: any[]): void {\n console.log('🔄 Menu items loaded for role rights grid:', menuItems.length);\n console.log('🔄 Role rights will be created dynamically when permissions are selected');\n \n // Don't create role rights upfront - they will be created when checkboxes are checked\n // This ensures we only have role rights for actually selected permissions\n }\n\n\n /**\n * Check if the form has any role rights with permissions\n */\n hasAnyRoleRightsWithPermissions(): boolean {\n // Check if there are any role right records (each record represents a permission)\n return this.roleRightsArray.controls.length > 0;\n }\n\n /**\n * Check if the form is ready to save\n */\n get isFormReadyToSave(): boolean {\n return this.userRoleForm.valid && this.hasAnyRoleRightsWithPermissions();\n }\n\n /**\n * Check if a parent menu has any child menus with assigned permissions\n */\n hasChildMenusWithPermissions(parentMenuId: string): boolean {\n const roleRights = this.roleRightsArray.controls;\n\n // Check if any role right has a menu that is a child of the parent AND has permissions\n return roleRights.some(control => {\n const menuId = control.get('menuId')?.value || control.get('syusrgt_menu_id_syme')?.value;\n const permissionId = control.get('syusrgt_role_permissions_id_sygms')?.value;\n \n // Check if this is a child menu of the parent AND has a permission assigned\n return menuId && permissionId && this.isChildMenuOfParent(menuId, parentMenuId);\n });\n }\n\n /**\n * Show notification with proper change detection\n */\n private showNotification(message: string, type: 'success' | 'error' | 'info' | 'warning' = 'info'): void {\n switch (type) {\n case 'success':\n this.notificationService.success(message);\n break;\n case 'error':\n this.notificationService.error(message);\n break;\n case 'warning':\n this.notificationService.warning(message);\n break;\n default:\n this.notificationService.info(message);\n }\n\n // Force change detection after notification\n setTimeout(() => this.cdr.detectChanges(), 0);\n }\n\n /**\n * Check if a menu is a child of a parent menu\n */\n private isChildMenuOfParent(menuId: string, parentMenuId: string): boolean {\n // This is a simplified check - you might need to enhance this based on your menu structure\n // For now, we'll check if the menu data shows it as a child\n const menuData = this.roleRightsGridConfig().data?.find((menu: any) => menu._id === menuId);\n return !!(menuData && (menuData as any).syme_parent_id === parentMenuId);\n }\n\n}\n","<!-- User Role Form Container -->\n<div class=\"tw-w-full tw-h-full\">\n <form class=\"tw-max-w-7xl tw-mx-auto tw-bg-transparent tw-h-full tw-flex tw-flex-col\" [formGroup]=\"userRoleForm\" [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mb-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n <!-- User Role Basic Information Section -->\n <div class=\"tw-py-2 tw-border-b-0 tw-mb-0 tw-p-3\">\n\n <!-- Basic Fields -->\n <div class=\"tw-grid tw-grid-cols-1 xl:tw-grid-cols-2 lg:tw-grid-cols-2 md:tw-grid-cols-1 tw-gap-6 tw-mb-0\">\n <!-- Left Column: Role Name -->\n <div>\n <cide-ele-input \n id=\"syusrol_role_name\" \n label=\"Role Name *\" \n formControlName=\"syusrol_role_name\"\n placeholder=\"Enter role name\" \n [maxlength]=\"50\" \n size=\"md\"\n [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n\n <!-- Right Column: Description -->\n <div>\n <cide-ele-textarea \n id=\"syusrol_role_description\" \n label=\"Description *\" \n formControlName=\"syusrol_role_description\"\n placeholder=\"Enter role description\" \n rows=\"3\"\n [maxlength]=\"200\"\n [disabled]=\"isViewMode()\">\n </cide-ele-textarea>\n </div>\n </div>\n\n <!-- Active Status Row -->\n <div class=\"tw-mb-0\">\n <cide-ele-input \n id=\"syusrol_isactive\" \n label=\"Active Status\" \n formControlName=\"syusrol_isactive\"\n type=\"checkbox\" \n size=\"md\"\n [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Role Rights Section -->\n <div class=\"tw-pt-2 tw-border-b-0 tw-mb-0 tw-flex-1 tw-flex tw-flex-col tw-min-h-0\">\n\n <!-- Role Rights Grid -->\n <div class=\"tw-flex-1 tw-min-h-0 tw-w-full\" style=\"height: 400px; max-height: 900px;\">\n <cide-ele-data-grid \n [config]=\"roleRightsGridConfig()\" \n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onRoleRightsGridEvent($event)\"\n class=\"tw-h-full tw-w-full\">\n </cide-ele-data-grid>\n </div>\n\n <!-- Role Rights Form (Hidden but functional) -->\n <div [formGroup]=\"roleRightsForm\" class=\"tw-hidden\">\n <div formArrayName=\"roleRights\">\n @for (right of roleRightsArray.controls; track $index; let i = $index) {\n <div [formGroupName]=\"i\">\n <cide-ele-select formControlName=\"syusrgt_menu_id_syme\">\n <option value=\"\">Select Menu</option>\n @for (menu of menus(); track menu._id) {\n <option [value]=\"menu._id\">{{ menu.syme_title || menu.syme_menu_name }}</option>\n }\n </cide-ele-select>\n <cide-ele-select formControlName=\"syusrgt_role_permissions_id_sygms\">\n <option value=\"\">Select Permission</option>\n @for (permission of permissions(); track permission._id) {\n <option [value]=\"permission._id\">{{ permission.sygms_name }}</option>\n }\n </cide-ele-select>\n <cide-ele-input formControlName=\"syusrgt_isactive\" type=\"checkbox\"></cide-ele-input>\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-flex tw-justify-end tw-p-3 tw-gap-4 tw-py-2 tw-bg-white tw-border-t tw-border-gray-200 tw-sticky tw-bottom-0 tw-z-10\">\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"onCancel()\" leftIcon=\"arrow_back\"\n [disabled]=\"loading()\">\n {{ isViewMode() ? 'Close' : 'Cancel' }}\n </button>\n\n @if (!isViewMode()) {\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || !isFormReadyToSave\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ submitButtonText }}\n </button>\n }\n </div>\n </form>\n</div>\n\n<!-- Template Renderers for Role Rights Grid -->\n<ng-template #menuDetailsRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-items-center tw-min-w-0\">\n <!-- Menu Icon -->\n <div class=\"tw-flex-shrink-0\">\n <cide-ele-icon \n class=\"tw-text-gray-400\" \n size=\"xs\">\n {{ row.syme_icon || 'folder_open' }}\n </cide-ele-icon>\n </div>\n \n <!-- Menu Details -->\n <div class=\"tw-ml-3 tw-min-w-0 tw-flex-1\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <div class=\"tw-text-xs tw-font-medium tw-text-gray-900 tw-truncate\" \n [title]=\"row.syme_title\">\n {{ row.syme_title || row.menu?.syme_title || row.menu?.syme_menu_name || 'Untitled' }}\n </div>\n <!-- Green pill indicator for parent menus with child permissions -->\n @if (row.syme_type === 'module' || row.syme_type === 'section') {\n @if (hasChildMenusWithPermissions(row._id)) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800 tw-whitespace-nowrap\">\n Assigned\n </span>\n }\n }\n </div>\n @if (row.permission?.sygms_name) {\n <div class=\"tw-text-xs tw-text-blue-500 tw-truncate\" \n [title]=\"row.permission?.sygms_name\">\n {{ row.permission?.sygms_name }}\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n\n<!-- Permissions Checkbox Renderer Template -->\n<ng-template #permissionsCheckboxRendererTemplate let-row=\"row\" let-value=\"value\">\n <div class=\"tw-flex tw-flex-wrap tw-gap-2 tw-max-w-full\">\n @if (row.syme_type === 'menu' && row?.syme_permissions_id_sygms && row?.syme_permissions_id_sygms.length > 0) {\n @for (permissionId of row?.syme_permissions_id_sygms || []; track permissionId) {\n <div class=\"tw-flex tw-items-center tw-space-x-1\">\n <cide-ele-input \n type=\"checkbox\"\n [label]=\"getPermissionById(permissionId)?.sygms_name || 'Unknown'\"\n [ngModel]=\"isPermissionSelected(row._id, permissionId)\"\n (ngModelChange)=\"onPermissionCheckboxChange(row._id, permissionId, $event)\"\n size=\"xs\"\n [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n }\n } @else {\n <!-- Show green checkmark for parent menus with child permissions -->\n @if (row.syme_type === 'module' || row.syme_type === 'section' || row.syme_type === 'title') {\n @if (hasChildMenusWithPermissions(row._id)) {\n <div class=\"tw-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-bg-green-100 tw-rounded-full\">\n <cide-ele-icon \n class=\"tw-text-green-600\" \n size=\"xs\">\n check\n </cide-ele-icon>\n </div>\n } @else {\n <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\n }\n } @else {\n <span class=\"tw-text-xs tw-text-gray-400\">N/A</span>\n }\n }\n </div>\n</ng-template>","// Custom interfaces for better type safety\nexport interface UserRole {\n _id?: string;\n syusrol_role_name?: string;\n syusrol_role_description?: string;\n syusrol_role_entity_id_syen?: string | Entity;\n syusrol_isactive?: boolean;\n syusrol_islocked?: boolean;\n syusrol_created_by?: string;\n syusrol_created_at?: string | Date;\n syusrol_updated_by?: string;\n syusrol_updated_at?: string | Date;\n __v?: number;\n}\n\nexport interface UserRoleRight {\n _id?: string;\n syusrgt_role_id_syusrol?: string | UserRole;\n syusrgt_menu_id_syme?: string | Menu;\n syusrgt_role_permissions_id_sygms?: string | Permission;\n syusrgt_isactive?: boolean;\n syusrgt_created_by?: string;\n syusrgt_created_at?: string | Date;\n syusrgt_updated_by?: string;\n syusrgt_updated_at?: string | Date;\n __v?: number;\n}\n\nexport interface Entity {\n _id?: string;\n syen_name?: string;\n syen_code?: string;\n syen_description?: string;\n syen_isactive?: boolean;\n}\n\nexport interface Menu {\n _id?: string;\n syme_title?: string; // API response property\n syme_menu_name?: string; // Fallback data property\n syme_menu_code?: string;\n syme_menu_description?: string;\n syme_desc?: string; // API response property\n syme_menu_url?: string;\n syme_path?: string; // API response property\n syme_icon?: string; // Menu icon\n syme_parent_id?: string; // Parent menu ID for tree structure\n syme_isactive?: boolean;\n}\n\nexport interface Permission {\n _id?: string;\n sygms_name?: string;\n sygms_code?: string;\n sygms_description?: string;\n sygms_isactive?: boolean;\n}\n\nexport interface ApiResponse<T> {\n success: boolean;\n code: number;\n data: T;\n total?: number;\n pageIndex?: number;\n pageSize?: number;\n message?: string;\n}\n\nexport interface UserRoleWithRights {\n core_user_role: UserRole;\n core_user_role_rights: UserRoleRight[];\n}\n\nexport interface UserRoleListResponse {\n success: boolean;\n code: number;\n data: UserRole[];\n total: number;\n message: string;\n}\n\nexport interface UserRoleWithRightsResponse {\n success: boolean;\n code: number;\n data: UserRoleWithRights;\n message: string;\n}\n\n// DeleteUserRolePayload is now imported from cloud-ide-lms-model as MUserRoleDeletePayload\n// ToggleUserRolePayload is now imported from cloud-ide-lms-model as MUserRoleToggleStatusPayload\n\n// UserRoleWithRightsPayload is now imported from cloud-ide-lms-model as MUserRoleWithRightsPayload\n","// User Role Management Module Exports\nexport * from './services/user-role.service';\nexport * from './components/user-role-list/user-role-list.component';\nexport * from './components/user-role-form/user-role-form.component';\nexport * from './interfaces/user-role.interface';\n\n","/*\n * Public API Surface of cloud-ide-core\n */\nexport * from './lib/cloud-ide-core.routes';\nexport * from './lib/cloud-ide-core.service';\nexport * from './lib/cloud-ide-core.component';\n\n// Menu Management Module\nexport * from './lib/core/menu-management';\n\n// Department Management Module\nexport * from './lib/core/department-management';\n\n// Designation Management Module\nexport * from './lib/core/designation-management';\n\n// Grade Level Management Module\nexport * from './lib/core/grade-level-management';\n\n// Page Management Components\nexport * from './lib/core/page-management';\n\n// User Management Module\nexport * from './lib/core/user-management';\n\n// User Role Management Module\nexport * from './lib/core/user-role-management';\n\n// Entity Management Module\nexport * from './lib/core/entity-management';\n\n// General Master Management Module\nexport * from './lib/core/general-master-management';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1"],"mappings":";;;;;;;;;;;;;;;;;AAGO,MAAM,UAAU,GAAY;AAC/B,IAAA;AACI,QAAA,IAAI,EAAE,iBAAiB;AACvB,QAAA,aAAa,EAAE,MAAM,kEAAyE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC;AAC7H,QAAA,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,aAAa,EAAE,MAAM,wEAA2F,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,+BAA+B,CAAC;AAC7J,QAAA,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,aAAa,EAAE,MAAM,yEAA8F,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,gCAAgC,CAAC;AACjK,QAAA,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,aAAa,EAAE,MAAM,wEAA8F,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,+BAA+B,CAAC;AAChK,QAAA,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,aAAa,EAAE,MAAM,kEAAyE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,yBAAyB,CAAC;AACrI,QAAA,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,aAAa,EAAE,MAAM,OAAO,mDAAiE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,yBAAyB,CAAC;AACrI,QAAA,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,kBAAkB;AACxB,QAAA,aAAa,EAAE,MAAM,OAAO,mDAAiE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,yBAAyB,CAAC;AACrI,QAAA,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,aAAa,EAAE,MAAM,mEAA2E,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,0BAA0B,CAAC;AACxI,QAAA,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,mBAAmB;AACzB,QAAA,aAAa,EAAE,MAAM,mEAA2E,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,0BAA0B,CAAC;AACxI,QAAA,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,eAAe;AACrB,QAAA,aAAa,EAAE,MAAM,sEAAiF,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,6BAA6B,CAAC;AACjJ,QAAA,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,sBAAsB;AAC5B,QAAA,aAAa,EAAE,MAAM,sEAAiF,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,6BAA6B,CAAC;AACjJ,QAAA,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,sBAAsB;AAC5B,QAAA,aAAa,EAAE,MAAM,uEAA6F,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,8BAA8B,CAAC;AAC9J,QAAA,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,6BAA6B;AACnC,QAAA,aAAa,EAAE,MAAM,uEAA6F,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,8BAA8B,CAAC;AAC9J,QAAA,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,oBAAoB;AAC1B,QAAA,aAAa,EAAE,MAAM,2EAAuG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,kCAAkC,CAAC;AAC5K,QAAA,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,2BAA2B;AACjC,QAAA,aAAa,EAAE,MAAM,2EAAuG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,kCAAkC,CAAC;AAC5K,QAAA,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;;AAED,IAAA;AACI,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,aAAa,EAAE,MAAM,kEAAyE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,yBAAyB,CAAC;AACrI,QAAA,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,oBAAoB;AAC1B,QAAA,aAAa,EAAE,MAAM,oEAA6E,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,2BAA2B,CAAC;AAC3I,QAAA,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,yBAAyB;AAC/B,QAAA,aAAa,EAAE,MAAM,oEAA6E,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,2BAA2B,CAAC;AAC3I,QAAA,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,yBAAyB;AAC/B,QAAA,aAAa,EAAE,MAAM,oEAA6E,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,2BAA2B,CAAC;AAC3I,QAAA,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,aAAa,EAAE,MAAM,oEAA+E,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,2BAA2B,CAAC;QAC7I,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,eAAe;AACrB,QAAA,aAAa,EAAE,MAAM,sEAAmF,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,6BAA6B,CAAC;QACnJ,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,sBAAsB;AAC5B,QAAA,aAAa,EAAE,MAAM,sEAAmF,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,6BAA6B,CAAC;QACnJ,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;;AAED,IAAA;AACI,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,aAAa,EAAE,MAAM,sEAAwF,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,6BAA6B,CAAC;AACxJ,QAAA,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,kBAAkB;AACxB,QAAA,aAAa,EAAE,MAAM,sEAAwF,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,6BAA6B,CAAC;AACxJ,QAAA,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,uBAAuB;AAC7B,QAAA,aAAa,EAAE,MAAM,sEAAwF,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,6BAA6B,CAAC;AACxJ,QAAA,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,uBAAuB;AAC7B,QAAA,aAAa,EAAE,MAAM,sEAAwF,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,6BAA6B,CAAC;AACxJ,QAAA,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,EAAE;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE;AACnB;AACJ;;;MCjQQ,mBAAmB,CAAA;AAE9B,IAAA,WAAA,GAAA;uGAFW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA;;2FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCSY,qBAAqB,CAAA;uGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAPtB,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGU,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAXjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,UAAA,EACT,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EACD,CAAA;;;;AAIT,EAAA,CAAA,EAAA;;;MCaU,qBAAqB,CAAA;AAKZ,IAAA,IAAA;AAJZ,IAAA,MAAM,GAAG,CAAA,EAAG,aAAa,EAAE,gBAAgB,EAAE;AAC7C,IAAA,eAAe,GAAG,IAAI,eAAe,CAAc,EAAE,CAAC;AACvD,IAAA,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AAEtD,IAAA,WAAA,CAAoB,IAAgB,EAAA;QAAhB,IAAA,CAAA,IAAI,GAAJ,IAAI;AACtB,QAAA,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC;;AAInE;;AAEG;AACH,IAAA,WAAW,CAAC,IAAsB,EAAA;AAChC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC;QAC5C,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAA6B,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACvJ,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAoC,KAAI;AAC3C,YAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;gBACrB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;;AAEnD,SAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC;AAChE,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;SAC/B,CAAC,CACH;;AAGL;;AAEG;IACH,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK;;AAGnC;;;AAGG;AACH,IAAA,cAAc,CAAC,QAAmB,EAAA;AAChC,QAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC;QAC5C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QAC7G,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAA6B,GAAG,EAAE,QAAQ;AAC5D,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAoC,KAAI;AAC3C,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,eAAe,EAAE;;SAEzB,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;IACH,cAAc,CAAC,EAAU,EAAE,QAAmB,EAAA;QAC5C,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,EAAE,EAAE,QAAQ,CAAC;QAChD,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QAC7G,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAA6B,GAAG,EAAE,QAAQ;AAC5D,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAoC,KAAI;AAC3C,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,eAAe,EAAE;;SAEzB,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;;AAIG;AACH,IAAA,eAAe,CAAC,EAAU,EAAA;AACxB,QAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,CAAC;AAC3C,QAAA,MAAM,OAAO,GAA4B,EAAE,OAAO,EAAE,EAAE,EAAE;AACxD,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC5H,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA6B,GAAG;aACjD,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;;AAIG;AACH,IAAA,cAAc,CAAC,EAAU,EAAA;AACvB,QAAA,MAAM,OAAO,GAA2B,EAAE,OAAO,EAAE,EAAE,EAAE;AACvD,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACpH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAA+B,GAAG;AACtD,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAsC,KAAI;AAC7C,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,eAAe,EAAE;;SAEzB,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;;AAIG;AACH,IAAA,uBAAuB,CAAC,GAAa,EAAA;AACnC,QAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,GAAG,CAAC;AACjD,QAAA,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE;AACvB,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACpH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAyD,GAAG;AAChF,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAgE,KAAI;AACvE,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,eAAe,EAAE;;SAEzB,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,oBAAoB,CAAC,EAAU,EAAA;AAC7B,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,EAAE,CAAC;AAC7C,QAAA,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE;AACtB,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACpH,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA6B,GAAG,EAAE,EAAE;AACrD,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAoC,KAAI;AAC3C,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,eAAe,EAAE;;SAEzB,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;AACH,IAAA,kBAAkB,CAAC,OAAmC,EAAA;AACpD,QAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAChI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAuC,GAAG,EAAE,OAAO;AACtE,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAA8C,KAAI;AACrD,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,eAAe,EAAE;;SAEzB,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAqB,iBAAiB;aACvD,IAAI,CACH,GAAG,CAAC,CAAC,QAA4B,KAAK,QAAQ,CAAC,IAAI,CAAC,EACpD,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;IACH,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAqB,iBAAiB;aACvD,IAAI,CACH,GAAG,CAAC,CAAC,QAA4B,KAAK,QAAQ,CAAC,IAAI,CAAC,EACpD,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;IACH,gBAAgB,CAAC,EAAU,EAAE,KAAA,GAAqB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAA;;AAE1E,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,GAAG,KAAK,EAAE,EAAE;AACnB,gBAAA,OAAO,IAAI;;;AAGf,QAAA,OAAO,IAAI;;AAGb;;AAEG;AACH,IAAA,kBAAkB,CAAC,SAAkB,EAAA;QACnC,MAAM,QAAQ,GAAgB,EAAE;QAEhC,MAAM,YAAY,GAAG,CAAC,KAAkB,EAAE,KAAA,GAAgB,CAAC,KAAI;AAC7D,YAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AACnB,gBAAA,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;oBAC1B,QAAQ,CAAC,IAAI,CAAC;AACZ,wBAAA,GAAG,IAAI;wBACP,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AACvC,qBAAA,CAAC;;AAEN,aAAC,CAAC;AACJ,SAAC;AAED,QAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AACxC,QAAA,OAAO,QAAQ;;AAGjB;;AAEG;IACK,eAAe,GAAA;;AAErB,QAAA,MAAM,WAAW,GAAqB;AACpC,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,QAAQ,EAAE;SACX;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC;YACtC,IAAI,EAAE,MAAK;AACT,gBAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC;aAChD;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;;AAEtD,SAAA,CAAC;;AAGJ;;AAEG;AACK,IAAA,WAAW,CAAC,KAAc,EAAA;QAChC,IAAI,YAAY,GAAG,mBAAmB;AAEtC,QAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,YAAA,YAAY,GAAG,KAAK,CAAC,OAAO;;AACvB,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,YAAY,GAAG,KAAK;;AAGtB,QAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,YAAY,CAAC;QAC7D,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;;uGA9PvC,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAArB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA;;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCDY,4BAA4B,CAAA;AAC/B,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,wBAAwB,GAAG,IAAI,eAAe,CAAe,EAAE,CAAC;AACjE,IAAA,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE;AAExE,IAAA,WAAA,GAAA;AACE,QAAA,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC;;AAG1E;;AAEG;AACH,IAAA,aAAa,CAAC,OAAkC,EAAA;AAC9C,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAAsC,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;AACzK,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAA6C,KAAI;AACpD,YAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;gBACrB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;;AAE5D,SAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC;AAC/D,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;SAC/B,CAAC,CACH;;AAGL;;AAEG;IACH,sBAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK;;AAG5C;;;AAGG;AACH,IAAA,UAAU,CAAC,MAAkB,EAAA;AAC3B,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG;AAC7B,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,EAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,kBAAkB,EAAE,MAAM,CAAC;;AAG5E,QAAA,MAAM,OAAO,GAAe;AAC1B,YAAA,IAAI,MAAM,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;YACtC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;YAC/C,oBAAoB,EAAE,MAAM,CAAC;SAC9B;QAED,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;QACtH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAA8C,GAAG,EAAE,OAAO;AAC5E,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAqD,KAAI;AAC5D,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,iBAAiB,EAAE;;SAE3B,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,YAAY,CAAC,MAAkB,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;;AAGhC;;AAEG;IACH,YAAY,CAAC,EAAU,EAAE,MAAkB,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;;AAGhD;;;AAGG;AACH,IAAA,aAAa,CAAC,EAAU,EAAA;AACtB,QAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,EAAE,CAAC;AAChD,QAAA,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACrI,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAsC,GAAG;aAC1D,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;AACH,IAAA,YAAY,CAAC,EAAU,EAAA;AACrB,QAAA,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;AAC7H,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAwC,GAAG;AAC/D,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAA+C,KAAI;AACtD,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,iBAAiB,EAAE;;SAE3B,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,kBAAkB,CAAC,EAAU,EAAA;AAC3B,QAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,EAAE,CAAC;AAClD,QAAA,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE;AACtB,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;QAC7H,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA8C,GAAG,EAAE,EAAE;AACtE,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAqD,KAAI;AAC5D,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,iBAAiB,EAAE;;SAE3B,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,qBAAqB,CAAC,IAAY,EAAE,MAAc,EAAE,SAAkB,EAAA;AACpE,QAAA,MAAM,OAAO,GAA2B,EAAE,IAAI,EAAE,MAAM,EAAE;QACxD,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS;;AAElC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;AAChJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAyD,GAAG;aAC7E,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;IACK,iBAAiB,GAAA;QACvB,MAAM,cAAc,GAA8B,EAAE;AACpD,QAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC;YAC3C,IAAI,EAAE,MAAK;AACT,gBAAA,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC;aAC1D;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC;;AAEhE,SAAA,CAAC;;AAGJ;;AAEG;AACK,IAAA,WAAW,CAAC,KAAc,EAAA;QAChC,IAAI,YAAY,GAAG,mBAAmB;AAEtC,QAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,YAAA,YAAY,GAAG,KAAK,CAAC,OAAO;;AACvB,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,YAAY,GAAG,KAAK;;AAGtB,QAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,YAAY,CAAC;QAC5D,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;;uGAnLvC,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,cAF3B,MAAM,EAAA,CAAA;;2FAEP,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAHxC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCEY,gCAAgC,CAAA;AACnC,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,4BAA4B,GAAG,IAAI,eAAe,CAAe,EAAE,CAAC;AACrE,IAAA,sBAAsB,GAAG,IAAI,CAAC,4BAA4B,CAAC,YAAY,EAAE;AAEhF,IAAA,WAAA,GAAA;AACE,QAAA,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC;;AAG9E;;AAEG;AACH,IAAA,WAAW,CAAC,IAAwB,EAAA;AAClC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC;QAC5C,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAA0C,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;AACjL,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAiD,KAAI;AACxD,YAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;gBACrB,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;;AAEhE,SAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC;AACnE,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;SAC/B,CAAC,CACH;;AAGL;;AAEG;IACH,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,4BAA4B,CAAC,KAAK;;AAGhD;;;;AAIG;AACH,IAAA,QAAQ,CAAC,IAAgB,EAAA;AACvB,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG;AAC3B,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,EAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,uBAAuB,EAAE,IAAI,CAAC;;AAG/E,QAAA,MAAM,OAAO,GAAe;AAC1B,YAAA,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YAClC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,cAAc,EAAE,IAAI,CAAC;SACtB;QAED,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC;QAC1H,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAkD,GAAG,EAAE,OAAO;AAChF,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAyD,KAAI;AAChE,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,eAAe,EAAE;;SAEzB,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;AACH,IAAA,WAAW,CAAC,EAAU,EAAA;AACpB,QAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,EAAE,CAAC;AACrD,QAAA,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACzI,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA0C,GAAG;aAC9D,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;AACH,IAAA,UAAU,CAAC,EAAU,EAAA;AACnB,QAAA,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;AACjI,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAA4C,GAAG;AACnE,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAmD,KAAI;AAC1D,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,eAAe,EAAE;;SAEzB,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,mBAAmB,CAAC,GAAa,EAAA;AAC/B,QAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,GAAG,CAAC;AAC3D,QAAA,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE;AACvB,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;AACjI,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAyD,GAAG;AAChF,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAgE,KAAI;AACvE,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,eAAe,EAAE;;SAEzB,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,gBAAgB,CAAC,OAA8C,EAAA;AAC7D,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACjI,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAkD,GAAG,EAAE,EAAE;AAC1E,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAyD,KAAI;AAChE,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,eAAe,EAAE;;SAEzB,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;IACH,mBAAmB,CAAC,IAAY,EAAE,SAAkB,EAAA;AAClD,QAAA,MAAM,OAAO,GAA2B,EAAE,IAAI,EAAE;QAChD,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS;;AAElC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;AACpJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAyD,GAAG;aAC7E,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;IACH,WAAW,GAAA;QACT,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;AAClI,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA0C,GAAG;aAC9D,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;IACH,YAAY,CAAC,EAAU,EAAE,KAAA,GAAsB,IAAI,CAAC,4BAA4B,CAAC,KAAK,EAAA;AACpF,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,GAAG,KAAK,EAAE,EAAE;AACnB,gBAAA,OAAO,IAAI;;;AAGf,QAAA,OAAO,IAAI;;AAGb;;AAEG;AACH,IAAA,cAAc,CAAC,SAAkB,EAAA;QAC/B,MAAM,QAAQ,GAAiB,EAAE;QAEjC,MAAM,YAAY,GAAG,CAAC,KAAmB,EAAE,KAAA,GAAgB,CAAC,KAAI;AAC9D,YAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AACnB,gBAAA,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;oBAC1B,QAAQ,CAAC,IAAI,CAAC;AACZ,wBAAA,GAAG,IAAI;wBACP,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AACxC,qBAAA,CAAC;;AAEN,aAAC,CAAC;AACJ,SAAC;AAED,QAAA,YAAY,CAAC,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC;AACrD,QAAA,OAAO,QAAQ;;AAGjB;;AAEG;IACK,eAAe,GAAA;QACrB,MAAM,WAAW,GAAuB,EAAE;AAC1C,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC;YACtC,IAAI,EAAE,MAAK;AACT,gBAAA,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC;aAC/D;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC;;AAErE,SAAA,CAAC;;AAGJ;;AAEG;AACK,IAAA,WAAW,CAAC,KAAc,EAAA;QAChC,IAAI,YAAY,GAAG,mBAAmB;AAEtC,QAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,YAAA,YAAY,GAAG,KAAK,CAAC,OAAO;;AACvB,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,YAAY,GAAG,KAAK;;AAGtB,QAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,YAAY,CAAC;QACjE,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;;uGAjOvC,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gCAAgC,cAF/B,MAAM,EAAA,CAAA;;2FAEP,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAH5C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCaY,iBAAiB,CAAA;;AAEpB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,WAAW,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC3C,IAAA,oBAAoB,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAC3D,IAAA,wBAAwB,GAAG,MAAM,CAAC,gCAAgC,CAAC;AACnE,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,EAAE,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACnC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;;AAG/B,IAAA,2BAA2B,GAAG,SAAS,CAAC,QAAQ,CAA0C,6BAA6B,CAAC;AACxH,IAAA,wBAAwB,GAAG,SAAS,CAAC,QAAQ,CAA0C,0BAA0B,CAAC;AAClH,IAAA,2BAA2B,GAAG,SAAS,CAAC,QAAQ,CAA0C,6BAA6B,CAAC;AACxH,IAAA,+BAA+B,GAAG,SAAS,CAAC,QAAQ,CAA0C,iCAAiC,CAAC;;IAGhI,IAAI,GAAG,IAAI;;AAGX,IAAA,SAAS,GAAG,MAAM,CAAc,EAAE,qDAAC;AACnC,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,aAAa,GAAG,MAAM,CAAW,EAAE,yDAAC;AACpC,IAAA,WAAW,GAAG,MAAM,CAAe,EAAE,uDAAC;AACtC,IAAA,gBAAgB,GAAG,MAAM,CAAgB,IAAI,4DAAC;AAC9C,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;;AAGvB,IAAA,kBAAkB,GAAG,MAAM,CAAmB,IAAI,8DAAC;;AAGnD,IAAA,iBAAiB,GAAG,MAAM,CAAmB,IAAI,6DAAC;;AAGlD,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;;AAG1B,IAAA,aAAa,GAAG,MAAM,CAAc,EAAE,yDAAC;AACvC,IAAA,eAAe,GAAG,MAAM,CAAC,KAAK,2DAAC;;AAK/B,IAAA,WAAW,GAAG,MAAM,CAAC,CAAC,uDAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,EAAE,oDAAC;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC;;AAKtB,IAAA,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AAC3B,QAAA,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1G,QAAA,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,QAAA,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAA0C,QAAQ,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACpG,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;AACjC,QAAA,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,QAAA,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,QAAA,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,QAAA,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC3D,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,yBAAyB,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAW,EAAE;AACxD,KAAA,CAAC;;AAKF,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC9B,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;;YAE7B,OAAO;AACL,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACtC,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE;AACrC,gBAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;AAClC,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe;aAC5C;;aACI;;YAEL,OAAO;AACL,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ;aACnC;;AAEL,KAAC,2DAAC;;AAGF,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;QAChC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,UAAU,KAAK;AAC3C,YAAA,KAAK,EAAE,UAAU,CAAC,GAAG,IAAI,EAAE;YAC3B,KAAK,EAAE,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,UAAU,IAAI;AAC3D,SAAA,CAAC,CAAC;AACL,KAAC,6DAAC;;IAGF,UAAU,GAAG,MAAM,CAA+B;AAChD,QAAA,EAAE,EAAE,gBAAgB;AACpB,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,WAAW;AACnB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,WAAW;AAChB,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,WAAW;AAChB,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE;AACR,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,eAAe;AACpB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,YAAY,EAAE;AACZ,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,WAAW,EAAE,QAAQ;AACrB,oBAAA,aAAa,EAAE,UAAU;AACzB,oBAAA,WAAW,EAAE,mCAAmC;AAChD,oBAAA,aAAa,EAAE;AAChB;AACF,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,2BAA2B;AAChC,gBAAA,MAAM,EAAE,aAAa;AACrB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA;AACD,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,sBAAsB;AACnC,YAAA,iBAAiB,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC;AAC3D,YAAA,UAAU,EAAE;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,SAAS,EAAE;AACZ,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,eAAe;AAC3B,YAAA,SAAS,EAAE,6BAA6B;AACxC,YAAA,SAAS,EAAE;AACZ,SAAA;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE,0CAA0C;AACtD,QAAA,SAAS,EAAE,mBAAmB;AAC9B,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,IAAI,EAAE;AACJ,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,UAAU,EAAE,cAAc;AAC1B,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,WAAW,EAAE,YAAY;AACzB,YAAA,cAAc,EAAE;AACjB;AACF,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGF,IAAA,iBAAiB,GAAG,QAAQ,CAAC,OAAgE;AAC3F,QAAA,mBAAmB,EAAE,IAAI,CAAC,2BAA2B,EAAE;AACvD,QAAA,gBAAgB,EAAE,IAAI,CAAC,wBAAwB,EAAE;AACjD,QAAA,mBAAmB,EAAE,IAAI,CAAC,2BAA2B,EAAE;AACvD,QAAA,uBAAuB,EAAE,IAAI,CAAC,+BAA+B;AAC9D,KAAA,CAAC,6DAAC;AAEH;;;AAGG;IACH,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;;;AAIjC,IAAA,eAAe,GAAG,QAAQ,CAAC,OAAO;QAChC,GAAG,IAAI,CAAC,iBAAiB;AAC1B,KAAA,CAAC,2DAAC;AAEH;;;AAGG;IACH,kBAAkB,GAAA;;AAEhB,QAAA,OAAO,EAAE;;;AAIX,IAAA,cAAc,GAAG;AACf,QAAA,cAAc,EAAE,CAAC,GAAc,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;AACpE,QAAA,gBAAgB,EAAE,CAAC,GAAc,KAAK,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;AAC1E,QAAA,gBAAgB,EAAE,CAAC,GAAc,KAAK,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;QACxE,kBAAkB,EAAE,CAAC,GAAc,KAAK,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;AACpE,QAAA,iBAAiB,EAAE,MAAM,IAAI,CAAC,iBAAiB,EAAE;QACjD,UAAU,EAAE,CAAC,GAAc,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AACpD,QAAA,UAAU,EAAE,MAAM,IAAI,CAAC,cAAc,EAAE;AACvC,QAAA,SAAS,EAAE,MAAM,IAAI,CAAC,aAAa;KACpC;AAID,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC,wDAAC;;IAG9D,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAC3E,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,uDAAC;AACpE,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,2DAAC;;AAGxD,IAAA,WAAA,GAAA;;QAEE,IAAI,CAAC,mBAAmB,EAAE;;AAG1B,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC7B,IAAI,CAAC,qBAAqB,EAAE;AAC9B,SAAC,CAAC;;AAGJ;;AAEG;IACK,mBAAmB,GAAA;AACzB,QAAA,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC;QACzE,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,qBAAqB,EAAE;;AAG9B;;AAEG;IACK,mBAAmB,GAAA;AACzB,QAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtE,QAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAG1E;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzE,QAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAG7E;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAChC,MAA8D,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9G,MAAgF,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAKzI;;AAEG;AACK,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,GAAG,SAAS,GAAG,QAAQ;AACzD,KAAC,0DAAC;AAEF;;AAEG;IACH,aAAa,GAAA;AACX,QAAA,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC;AAC1D,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAEpB,QAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC;AACtD,QAAA,MAAM,WAAW,GAAqB;AACpC,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE;AACxB,YAAA,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE;AAC7B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE;YACxB,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe;SAC3C;AACD,QAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,WAAW,CAAC;;AAG5C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC;AAC/C,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC;AAC/C,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YACvB;;AAGF,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW;AACrC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,QAAQ,CAAC;AAChE,gBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;oBACrB,OAAO,CAAC,GAAG,CAAC,4CAA4C,EAAE,QAAQ,CAAC,IAAI,CAAC;oBACxE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC;AAC9C,oBAAA,MAAM,QAAQ,GAAG,QAAQ,EAAE,IAAI,IAAI,EAAE;AACrC,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;;oBAGxC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;wBACrC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AACrC,wBAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC;;AAGvD,oBAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;;qBACxB;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,QAAQ,CAAC;AACzD,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC;;aAE9C;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC;gBAChD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,4CAA4C,CAAC;aAC5E;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC;AACxD,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AASN;;AAEG;AACK,IAAA,kBAAkB,CAAC,KAAY,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;;AAG1C,QAAA,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,8BAA8B,CAAC,EAAE;;YAE3F,QAAQ,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAW,KAAI;gBACnE,MAAM,QAAQ,GAAG,EAAiB;AAClC,gBAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;AACrC,aAAC,CAAC;;YAGF,QAAQ,CAAC,gBAAgB,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAC,CAAC,EAAW,KAAI;gBAChF,MAAM,MAAM,GAAG,EAAiB;AAChC,gBAAA,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;AAC/C,aAAC,CAAC;;;AAIN;;AAEG;AACK,IAAA,oBAAoB,CAAC,KAAY,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;QAC1C,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAgB;QAEnE,IAAI,YAAY,EAAE;YAChB,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,aAAa,CAAC;YACvD,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,cAAc,CAAC;AAExD,YAAA,IAAI,MAAM,IAAI,MAAM,EAAE;gBACpB,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;;gBAGvB,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAgB;gBACvE,IAAI,QAAQ,EAAE;AACZ,oBAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;;;gBAIrC,QAAQ,MAAM;AACZ,oBAAA,KAAK,MAAM;AACT,wBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;wBACzB;AACF,oBAAA,KAAK,QAAQ;AACX,wBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;wBAC7B;AACF,oBAAA,KAAK,QAAQ;AACX,wBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;wBAC3B;;;;;AAUV;;AAEG;AACK,IAAA,cAAc,CAAC,SAAsB,EAAA;AAC3C,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,SAAS,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,SAAS,CAAC,MAAM,CAAC;AAEpD,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,IAAG;AAC9B,YAAA,MAAM,SAAS,GAAG;AAChB,gBAAA,GAAG,MAAM;AACT,gBAAA,IAAI,EAAE;aACP;AACD,YAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC;AACrD,YAAA,OAAO,SAAS;AAClB,SAAC,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;;AAO3C;;AAEG;AACH,IAAA,WAAW,CAAC,KAA2B,EAAA;AACrC,QAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC;AACjC,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAc,CAAC;AACzC,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,aAAa,EAAE;gBACpB;YACF,KAAK,YAAY,EAAE;;AAEjB,gBAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAA0C;gBACjE,IAAI,QAAQ,EAAE;oBACZ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBACpC,IAAI,CAAC,aAAa,EAAE;;qBACf;;AAEL,oBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAc;oBACjC,IAAI,IAAI,EAAE;AACR,wBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;wBAC1B,IAAI,CAAC,aAAa,EAAE;;;gBAGxB;;AAEF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,iBAAiB,EAAE;gBACxB;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAiB,CAAC;gBAChD;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE;AAChC,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAc,CAAC;;qBAClC,IAAI,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,EAAE;AACzC,oBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAc,CAAC;;qBACtC,IAAI,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,EAAE;AACzC,oBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAc,CAAC;;gBAE3C;YACF,KAAK,YAAY,EAAE;AACjB,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAA2E,CAAC;gBACpG;;;;AAKN;;AAEG;AAKH;;AAEG;IACH,iBAAiB,GAAA;QACf,IAAI,CAAC,aAAa,EAAE;;AAGtB;;AAEG;AACH,IAAA,kBAAkB,CAAC,QAAmB,EAAA;;QAEpC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC;;AAGvC;;AAEG;AACH,IAAA,YAAY,CAAC,IAAkG,EAAA;AAC7G,QAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjE,QAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC;;QAGrE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;;;QAI/C,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ;QAClG,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC;;AAG1E,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;;AAGjC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;;QAG9B,IAAI,CAAC,0BAA0B,EAAE;QACjC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;;AAGrD;;AAEG;IACK,0BAA0B,GAAA;AAChC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE;AACvC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AAClB,YAAA,GAAG,aAAa;AAChB,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS;AACrB,SAAA,CAAC;;AAGJ;;;;AAIG;IACH,aAAa,GAAA;AACX,QAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;;QAGtC,MAAM,YAAY,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;;AAG5E,QAAA,MAAM,yBAAyB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM;AACnE,YAAA,GAAG,IAAI;YACP,aAAa,EAAE,KAAK,GAAG;AACxB,SAAA,CAAC,CAAC;;AAGH,QAAA,MAAM,OAAO,GAAG;YACd,cAAc,EAAE,yBAAyB,CAAC,GAAG,CAAC,IAAI,KAAK;AACrD,gBAAA,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;AACvB,gBAAA,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI;AACtC,aAAA,CAAC;SACH;AAED,QAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,yBAAyB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC;;AAG1G,QAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,OAAO;AACxC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC;oBAClG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,uCAAA,EAA0C,yBAAyB,CAAC,MAAM,CAAA,MAAA,CAAQ,CAAC;;AAEpH,oBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE/B,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;;oBAE7C,IAAI,CAAC,aAAa,EAAE;;qBACf;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,QAAQ,CAAC;AAC5D,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC;AAChD,oBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,gCAAgC,CAAC;;aAEnE;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC;AACvD,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC;AAChD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA,8BAAA,EAAiC,KAAK,CAAC,OAAO,IAAI,wBAAwB,CAAA,CAAE,CAAC;;AAE/G,SAAA,CAAC;;AAGN;;;AAGG;AACK,IAAA,gCAAgC,CAAC,SAAsB,EAAA;QAC7D,MAAM,QAAQ,GAAgB,EAAE;AAChC,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU;AAEtC,QAAA,MAAM,YAAY,GAAG,CAAC,KAAkB,KAAI;AAC1C,YAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;;AAEnB,gBAAA,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC3C,oBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACnB,oBAAA,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;;AAG1B,oBAAA,IAAK,IAAY,CAAC,QAAQ,IAAK,IAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/D,wBAAA,YAAY,CAAE,IAAY,CAAC,QAAQ,CAAC;;;AAG1C,aAAC,CAAC;AACJ,SAAC;;;AAID,QAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE;AACvC,YAAA,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC;AACzE,YAAA,OAAO,SAAS;;;QAIlB,YAAY,CAAC,SAAS,CAAC;QAEvB,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,EAAE,+BAA+B,CAAC;AAC7E,QAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK;YACvD,EAAE,EAAE,IAAI,CAAC,GAAG;YACZ,KAAK,EAAE,IAAI,CAAC,UAAU;YACtB,MAAM,EAAE,IAAI,CAAC,YAAY;AACzB,YAAA,WAAW,EAAG,IAAY,CAAC,QAAQ,GAAI,IAAY,CAAC,QAAQ,CAAC,MAAM,GAAG;SACvE,CAAC,CAAC,CAAC;AAEJ,QAAA,OAAO,QAAQ;;AAGjB;;AAEG;AACK,IAAA,mBAAmB,CAAC,SAAsB,EAAA;;QAEhD,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAK,IAAY,CAAC,QAAQ,IAAK,IAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;;AAG7F;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC;;AAGxD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;AAC1C,QAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;YACtC,IAAI,CAAC,0BAA0B,EAAE;;;AAInC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AAE/B,QAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC;;AAGhD;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE;;AAG/B;;AAEG;AACH,IAAA,mBAAmB,CAAC,MAAc,EAAA;AAChC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;QACpC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;AAErC,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,YAAA,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;;aACnB;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;;QAGtB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;;AAGtC;;AAEG;IACH,eAAe,GAAA;;;;AAKf;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;;AAG5B;;AAEG;AACH,IAAA,YAAY,CAAC,MAAc,EAAA;AACzB,QAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,MAAM,CAAC;;AAEnD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;;AAG9B;;;AAGG;AACH,IAAA,eAAe,CAAC,MAAc,EAAA;AAC5B,QAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,MAAM,CAAC;AACtD,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEtB,QAAA,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM;AACpC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,QAAQ,CAAC,IAAI,CAAC;;;oBAGjE,IAAI,QAAQ,GAAqB,IAAI;AACrC,oBAAA,QAAQ,GAAG,QAAQ,CAAC,IAAI,IAAI,IAAI;AAEhC,oBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAGpC,oBAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,QAAQ,EAAE;AACjC,wBAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;;;qBAE/B;AACL,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC;;aAEjD;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;gBACb,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,kDAAkD,CAAC;aAClF;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;AACH,IAAA,mBAAmB,CAAC,QAAmB,EAAA;AACrC,QAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,QAAQ,CAAC;;AAG5D,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3B,YAAA,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,EAAE;AACrC,YAAA,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,EAAE;AACnC,YAAA,SAAS,EAAG,QAAQ,CAAC,SAAqD,IAAI,QAAQ;AACtF,YAAA,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,EAAE;AACzC,YAAA,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,EAAE;AACnC,YAAA,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,EAAE;AACnC,YAAA,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,EAAE;AACnC,YAAA,yBAAyB,EAAE,QAAQ,CAAC,yBAAyB,IAAI,EAAE;AACnE,YAAA,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,IAAI;AAC7C,YAAA,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI;AAC1C,SAAA,CAAC;;AAGF,QAAA,IAAI,QAAQ,CAAC,YAAY,EAAE;;YAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,YAAY,CAAC;YACpF,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;;;QAI3C,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAGvE;;AAEG;AACH,IAAA,cAAc,CAAC,MAAc,EAAA;AAC3B,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,MAAM,CAAC;AACrD,QAAA,IAAI,OAAO,CAAC,iDAAiD,CAAC,EAAE;AAC9D,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEtB,YAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM;AACnC,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,wBAAA,IAAI,CAAC,aAAa,EAAE,CAAC;;yBAChB;AACL,wBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC;;iBAE/C;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;oBACb,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,gDAAgD,CAAC;iBAChF;gBACD,QAAQ,EAAE,MAAK;AACb,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,aAAA,CAAC;;;AAIR;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AAErC,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB;;QAGF,IAAI,OAAO,CAAC,CAAA,gCAAA,EAAmC,QAAQ,CAAC,MAAM,CAAA,uBAAA,CAAyB,CAAC,EAAE;AACxF,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGtB,YAAA,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,QAAQ;AAC9C,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,wBAAA,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC;AACzD,wBAAA,IAAI,CAAC,aAAa,EAAE,CAAC;wBACrB,IAAI,CAAC,cAAc,EAAE;;yBAChB;AACL,wBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC;;iBAErD;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;oBACb,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,6CAA6C,CAAC;iBAC7E;gBACD,QAAQ,EAAE,MAAK;AACb,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,aAAA,CAAC;;;AAIR;;AAEG;AACH,IAAA,gBAAgB,CAAC,MAAc,EAAA;AAC7B,QAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,MAAM,CAAC;AACvD,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEtB,QAAA,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,MAAM;AACzC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,oBAAA,IAAI,CAAC,aAAa,EAAE,CAAC;;qBAChB;AACL,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC;;aAEtD;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;gBACb,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,yCAAyC,CAAC;aACzE;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;AACH,IAAA,cAAc,CAAC,KAAY,EAAA;AACzB,QAAA,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACtD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;;AAG5B;;AAEG;IACH,QAAQ,GAAA;;;AAIR;;AAEG;AACH,IAAA,kBAAkB,CAAC,IAAY,EAAA;AAC7B,QAAA,MAAM,OAAO,GAA2B;AACtC,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,MAAM,EAAE,WAAW;AACnB,YAAA,OAAO,EAAE;SACV;AACD,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI;;AAG9B;;AAEG;AACH,IAAA,gBAAgB,CAAC,QAAiB,EAAA;QAChC,OAAO,QAAQ,GAAG,QAAQ,GAAG,UAAU;;AAGzC;;AAEG;AACH,IAAA,cAAc,CAAC,QAAiB,EAAA;QAC9B,OAAO,QAAQ,GAAG,mCAAmC,GAAG,+BAA+B;;AAGzF;;AAEG;AACH,IAAA,gBAAgB,CAAC,IAAY,EAAA;QAC3B,QAAQ,IAAI;AACV,YAAA,KAAK,QAAQ,EAAE,OAAO,qCAAqC;AAC3D,YAAA,KAAK,SAAS,EAAE,OAAO,iCAAiC;AACxD,YAAA,KAAK,MAAM,EAAE,OAAO,mCAAmC;AACvD,YAAA,KAAK,OAAO,EAAE,OAAO,iCAAiC;AACtD,YAAA,SAAS,OAAO,iCAAiC;;;AAMrD;;AAEG;AACH,IAAA,cAAc,CAAC,MAAc,EAAA;QAC3B,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;;AAG9C;;AAEG;IACH,mBAAmB,GAAA;;;AAGjB,QAAA,OAAO,KAAK;;AAGd;;AAEG;IACH,kBAAkB,GAAA;;;AAGhB,QAAA,OAAO,EAAE;;AAKX;;AAEG;IACH,aAAa,CAAC,KAAa,EAAE,IAAe,EAAA;AAC1C,QAAA,OAAO,IAAI,CAAC,GAAG,IAAI,EAAE;;AAKvB;;AAEG;IACH,gBAAgB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE;AAE/B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;;AAGzC,QAAA,MAAM,QAAQ,GAAuB;YACnC,GAAG,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,IAAI,EAAE;YACxC,UAAU,EAAE,SAAS,CAAC,UAAU;AAChC,YAAA,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,EAAE;YACpC,SAAS,EAAE,SAAS,CAAC,SAAS;AAC9B,YAAA,YAAY,EAAE,SAAS,CAAC,YAAY,IAAI,SAAS;AACjD,YAAA,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,EAAE;AACpC,YAAA,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,EAAE;AACpC,YAAA,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,EAAE;YACpC,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,aAAa,EAAE,SAAS,CAAC,aAAa;AACtC,YAAA,yBAAyB,EAAE,SAAS,CAAC,yBAAyB,IAAI;SAC5D;;QAGR,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;;YAEjD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG;YAC5C,IAAI,MAAM,EAAE;AACV,gBAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC;gBAC7C,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC;AAC1D,oBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,wBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,4BAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC;;4BAE/C,IAAI,CAAC,iBAAiB,EAAE;AACxB,4BAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,4BAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;;4BAEhC,IAAI,CAAC,aAAa,EAAE;;qBAEvB;oBACD,KAAK,EAAE,MAAK;AACV,wBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC;;AAE/C,iBAAA,CAAC;;;aAEC;;AAEL,YAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;YACxC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC;AAClD,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,wBAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC;;wBAE/C,IAAI,CAAC,iBAAiB,EAAE;;wBAExB,IAAI,CAAC,aAAa,EAAE;;iBAEvB;gBACD,KAAK,EAAE,MAAK;AACV,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC;;AAE/C,aAAA,CAAC;;;AAIN;;AAEG;IACH,iBAAiB,GAAA;;AAEf,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGjC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;AAEhC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACtB,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,QAAQ;AACnB,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,CAAC;AAChB,YAAA,yBAAyB,EAAE;AAC5B,SAAA,CAAC;;AAGJ;;AAEG;AACH,IAAA,UAAU,CAAC,UAAqB,EAAA;AAC9B,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,UAAU,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,UAAU,CAAC,UAAU,CAAC;;AAGtD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGhC,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;;AAGvE,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3B,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,SAAS;YACpB,YAAY,EAAE,UAAU,CAAC,GAAG;AAC5B,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,CAAC;AAChB,YAAA,yBAAyB,EAAE;AAC5B,SAAA,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,4CAA4C,EAAE,IAAI,CAAC,kBAAkB,EAAE,EAAE,UAAU,CAAC;;AAGlG;;AAEG;AAGH;;AAEG;AACH,IAAA,cAAc,CAAC,MAAc,EAAA;;QAE3B,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG;YACzD,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM,EAAE;AACjD,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;;AAEnC,SAAC,CAAC;;QAGF,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,gBAAA,EAAmB,MAAM,CAAA,EAAA,CAAI,CAAC;QACtE,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;;;AAI1C;;AAEG;IACH,gBAAgB,CAAC,MAAc,EAAE,MAAc,EAAA;AAC7C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC;AAC/D,QAAA,IAAI,CAAC,IAAI;YAAE;;QAGX,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,gBAAA,EAAmB,MAAM,CAAA,EAAA,CAAI,CAAC;QACtE,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;;;QAIrC,QAAQ,MAAM;AACZ,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC;gBACnC;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBACzB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBAC7B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;gBAC3B;;;AAIN;;AAEG;IACH,gBAAgB,CAAC,QAAgB,EAAE,UAAqB,EAAA;;AAEtD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGhC,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3B,YAAA,YAAY,EAAE;AACf,SAAA,CAAC;;AAGF,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;;QAGvC,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,8BAA8B,CAAC;QAC1E,IAAI,WAAW,EAAE;AACf,YAAA,WAAW,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;;;QAIpE,UAAU,CAAC,MAAK;YACd,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC;YACxD,IAAI,UAAU,EAAE;gBACd,UAAU,CAAC,KAAK,EAAE;;SAErB,EAAE,GAAG,CAAC;;AAGT;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3B,YAAA,YAAY,EAAE,EAAE;YAChB,SAAS,EAAE,QAAQ;AACpB,SAAA,CAAC;;AAGJ;;AAEG;AACH,IAAA,gBAAgB,CAAC,IAAY,EAAA;AAC3B,QAAA,MAAM,OAAO,GAA8B;AACzC,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,MAAM,EAAE,WAAW;AACnB,YAAA,OAAO,EAAE;SACV;AACD,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS;;AASnC;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC;AAC/C,QAAA,MAAM,QAAQ,GAAgB;AAC5B,YAAA;AACE,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,UAAU,EAAE,WAAW;AACvB,gBAAA,SAAS,EAAE,uBAAuB;AAClC,gBAAA,SAAS,EAAE,QAAmD;AAC9D,gBAAA,SAAS,EAAE,YAAY;AACvB,gBAAA,SAAS,EAAE,WAAW;AACtB,gBAAA,SAAS,EAAE,EAAE;AACb,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,aAAa,EAAE,CAAC;AAChB,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,UAAU,EAAE,iBAAiB;AAC7B,gBAAA,SAAS,EAAE,8BAA8B;AACzC,gBAAA,SAAS,EAAE,SAAoD;AAC/D,gBAAA,SAAS,EAAE,QAAQ;AACnB,gBAAA,SAAS,EAAE,QAAQ;AACnB,gBAAA,SAAS,EAAE,EAAE;AACb,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,aAAa,EAAE,CAAC;AAChB,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,SAAS,EAAE,sBAAsB;AACjC,gBAAA,SAAS,EAAE,MAAiD;AAC5D,gBAAA,SAAS,EAAE,WAAW;AACtB,gBAAA,SAAS,EAAE,UAAU;AACrB,gBAAA,SAAS,EAAE,WAAW;AACtB,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,aAAa,EAAE,CAAC;AAChB,gBAAA,YAAY,EAAE;AACf;SACF;AAED,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;AAIpC,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC7B,QAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC;;AAGhD;;AAEG;IACK,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC;AACxC,YAAA,UAAU,EAAE;SACb;AACE,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;AACtC,oBAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAC5C,IAAI,CAAC,UAAU,KAAK,aAAa,IAAI,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAC7F;oBACD,IAAI,cAAc,EAAE;wBAClB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,IAAI,IAAI,CAAC;wBACrD,IAAI,CAAC,eAAe,EAAE;;yBACjB;AACL,wBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC;;;aAGzE;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC;;AAEpD,SAAA,CAAC;;AAGN;;AAEG;IACK,eAAe,GAAA;AACrB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACtC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kGAAkG,CAAC;YAClH;;AAGF,QAAA,MAAM,OAAO,GAA8B,EAAE,cAAc,EAAE,MAAM,EAAE;AACrE,QAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,OAAO;AAC5C,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACnC,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE;AACzC,wBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;;;qBAEjB;AACL,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACxB,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mFAAmF,CAAC;;aAEtG;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACxB,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kFAAkF,CAAC;;AAErG,SAAA,CAAC;;AAGN;;AAEG;AACH,IAAA,kBAAkB,CAAC,aAAuB,EAAA;QACxC,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AAChD,YAAA,OAAO,gBAAgB;;QAGzB,MAAM,eAAe,GAAG;aACrB,GAAG,CAAC,EAAE,IAAG;AACR,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC;AAC7D,YAAA,OAAO,UAAU,IAAI,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,UAAU,IAAI,SAAS,IAAI,SAAS;AAChG,SAAC;aACA,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC;AAErC,QAAA,OAAO,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,sBAAsB;;AAGzF;;AAEG;AACH,IAAA,iBAAiB,CAAC,YAAoB,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,CAAC;;AAG7D;;AAEG;AACH,IAAA,qBAAqB,CAAC,aAAuB,EAAA;QAC3C,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AAChD,YAAA,OAAO,gBAAgB;;QAGzB,MAAM,eAAe,GAAG;aACrB,GAAG,CAAC,EAAE,IAAG;AACR,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC;AAC7D,YAAA,OAAO,UAAU,IAAI,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,UAAU,IAAI,SAAS,IAAI,SAAS;AAChG,SAAC;aACA,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC;AAErC,QAAA,OAAO,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,sBAAsB;;AAGzF;;AAEG;IACH,gBAAgB,GAAA;AACd,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK;AAC7D,QAAA,IAAI,WAAW,KAAK,MAAM,EAAE;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3B,gBAAA,yBAAyB,EAAE;AAC5B,aAAA,CAAC;;;AAIN;;AAEG;AACH,IAAA,gBAAgB,CAAC,QAAmB,EAAA;QAClC,OAAO;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,UAAU;AACd,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;gBACZ,KAAK,EAAE,QAAQ,CAAC,aAAa,GAAG,YAAY,GAAG,UAAU;gBACzD,IAAI,EAAE,QAAQ,CAAC,aAAa,GAAG,OAAO,GAAG,cAAc;AACvD,gBAAA,QAAQ,EAAE;AACX;SACF;;AAGH;;AAEG;IACH,mBAAmB,CAAC,IAAkB,EAAE,QAAmB,EAAA;AACzD,QAAA,QAAQ,IAAI,CAAC,EAAE;AACb,YAAA,KAAK,UAAU;gBACb,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,EAAE,QAAQ,CAAC;gBACnD;AACF,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC;gBACrC;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC;gBACvC;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC;gBACzC;;;uGAx7CK,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,6BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,6BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,0BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,6BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,6BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClC9B,qyTAoRA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDhQI,YAAY,8HACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,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,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,wBAAwB,mRACxB,sBAAsB,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,IAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,mBAAmB,2ZACnB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKf,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAlB7B,SAAS;+BACE,yBAAyB,EAAA,UAAA,EACvB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,WAAW;wBACX,wBAAwB;wBACxB,sBAAsB;wBACtB,kBAAkB;wBAClB,mBAAmB;wBACnB,qBAAqB;wBACrB,iBAAiB;wBACjB;AACD,qBAAA,EAAA,QAAA,EAAA,qyTAAA,EAAA;;;;;;;;AE9BH;;AAEG;AAEH;;MCmBa,mCAAmC,CAAA;AAI1B,IAAA,IAAA;AAHZ,IAAA,qBAAqB,GAAG,IAAI,eAAe,CAAgB,EAAE,CAAC;AAC/D,IAAA,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE;AAElE,IAAA,WAAA,CAAoB,IAAgB,EAAA;QAAhB,IAAA,CAAA,IAAI,GAAJ,IAAI;AACtB,QAAA,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC;;AAGjF;;AAEG;AACH,IAAA,iBAAiB,CAAC,IAAiB,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC;QAC5C,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAA+B,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AAC/J,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAsC,KAAI;AAC7C,YAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;gBACrB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;;AAEzD,SAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAK,CAAC;AACtE,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;SAC/B,CAAC,CACH;;AAGL;;AAEG;IACH,0BAA0B,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK;;AAGzC;;;AAGG;AACH,IAAA,gBAAgB,CAAC,UAAuB,EAAA;AACtC,QAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,UAAU,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;QACnH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAA+B,GAAG,EAAE,UAAU;AAChE,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAsC,KAAI;AAC7C,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,qBAAqB,EAAE;;SAE/B,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;IACH,gBAAgB,CAAC,EAAU,EAAE,UAAuB,EAAA;QAClD,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,EAAE,EAAE,UAAU,CAAC;QACnD,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;QACnH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAA+B,GAAG,EAAE,UAAU;AAChE,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAsC,KAAI;AAC7C,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,qBAAqB,EAAE;;SAE/B,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;AACH,IAAA,iBAAiB,CAAC,EAAU,EAAA;AAC1B,QAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,EAAE,CAAC;AAC5C,QAAA,MAAM,OAAO,GAA8B,EAAE,SAAS,EAAE,EAAE,EAAE;AAC5D,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAClI,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAmC,GAAG;aACvD,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;AACH,IAAA,gBAAgB,CAAC,EAAU,EAAA;AACzB,QAAA,MAAM,OAAO,GAA6B,EAAE,SAAS,EAAE,EAAE,EAAE;AAC3D,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AAC1H,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAqC,GAAG;AAC5D,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAA4C,KAAI;AACnD,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,qBAAqB,EAAE;;SAE/B,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,yBAAyB,CAAC,GAAa,EAAA;AACrC,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,GAAG,CAAC;AAClD,QAAA,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE;AACvB,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AAC1H,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAyD,GAAG;AAChF,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAgE,KAAI;AACvE,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,qBAAqB,EAAE;;SAE/B,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,sBAAsB,CAAC,OAAuC,EAAA;AAC5D,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;QAC1I,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA2C,GAAG,EAAE,EAAE;AACnE,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAkD,KAAI;AACzD,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,qBAAqB,EAAE;;SAE/B,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;IACH,kBAAkB,CAAC,EAAU,EAAE,KAAA,GAAuB,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAA;AACpF,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,GAAG,KAAK,EAAE,EAAE;AACnB,gBAAA,OAAO,IAAI;;;AAGf,QAAA,OAAO,IAAI;;AAGb;;AAEG;AACH,IAAA,oBAAoB,CAAC,SAAkB,EAAA;QACrC,MAAM,QAAQ,GAAkB,EAAE;QAElC,MAAM,YAAY,GAAG,CAAC,KAAoB,EAAE,KAAA,GAAgB,CAAC,KAAI;AAC/D,YAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AACnB,gBAAA,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;oBAC1B,QAAQ,CAAC,IAAI,CAAC;AACZ,wBAAA,GAAG,IAAI;wBACP,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AACxC,qBAAA,CAAC;;AAEN,aAAC,CAAC;AACJ,SAAC;AAED,QAAA,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;AAC9C,QAAA,OAAO,QAAQ;;AAGjB;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,QAAQ,EAAE;SACX;AACD,QAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC;YAC5C,IAAI,EAAE,MAAK;AACT,gBAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC;aACtD;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC;;AAE5D,SAAA,CAAC;;AAGJ;;AAEG;AACK,IAAA,WAAW,CAAC,KAAc,EAAA;QAChC,IAAI,YAAY,GAAG,mBAAmB;AAEtC,QAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,YAAA,YAAY,GAAG,KAAK,CAAC,OAAO;;AACvB,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,YAAY,GAAG,KAAK;;AAGtB,QAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,YAAY,CAAC;QACnE,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;;uGA5MvC,mCAAmC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnC,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,cAFlC,MAAM,EAAA,CAAA;;2FAEP,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAH/C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCOY,+BAA+B,CAAA;;AAElC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,iBAAiB,GAAG,MAAM,CAAC,mCAAmC,CAAC;AAC/D,IAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACxC,IAAA,EAAE,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACnC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;;AAGzD,IAAA,iCAAiC,GAAG,SAAS,CAAC,QAAQ,CAAwD,mCAAmC,CAAC;AAClJ,IAAA,gCAAgC,GAAG,SAAS,CAAC,QAAQ,CAAwD,kCAAkC,CAAC;AAChJ,IAAA,+BAA+B,GAAG,SAAS,CAAC,QAAQ,CAAwD,iCAAiC,CAAC;;IAG9I,IAAI,GAAG,IAAI;;AAGX,IAAA,WAAW,GAAG,MAAM,CAAgB,EAAE,uDAAC;AACvC,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,aAAa,GAAG,MAAM,CAAW,EAAE,yDAAC;AACpC,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;;AAGvB,IAAA,wBAAwB,GAAG,MAAM,CAAqB,IAAI,oEAAC;;AAG3D,IAAA,mBAAmB,GAAG,MAAM,CAAqB,IAAI,+DAAC;;AAGtD,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;;AAG1B,IAAA,WAAW,GAAG,MAAM,CAAC,CAAC,uDAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,EAAE,oDAAC;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC;;AAGtB,IAAA,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QAC3B,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;QACpC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;QACpC,kBAAkB,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;QAC3C,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1C,2BAA2B,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;AAChD,QAAA,qBAAqB,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE;AACnF,KAAA,CAAC;;IAGF,UAAU,GAAG,MAAM,CAAiC;AAClD,QAAA,EAAE,EAAE,sBAAsB;AAC1B,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,YAAY;AACpB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,aAAa;AAClB,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE;AACR,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,iBAAiB;AACtB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA;AACD,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,IAAI,EAAE;AACJ,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,UAAU,EAAE,6BAA6B;AACzC,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,cAAc,EAAE;AACjB,SAAA;AACD,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,uBAAuB;AACpC,YAAA,iBAAiB,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,oBAAoB,CAAC;AACvE,YAAA,UAAU,EAAE;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,SAAS,EAAE;AACZ,SAAA;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE,0CAA0C;AACtD,QAAA,SAAS,EAAE;AACZ,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGF,IAAA,iBAAiB,GAAG,QAAQ,CAAC,OAAqD;AAChF,QAAA,yBAAyB,EAAE,IAAI,CAAC,iCAAiC,EAAE;AACnE,QAAA,wBAAwB,EAAE,IAAI,CAAC,gCAAgC,EAAE;AACjE,QAAA,uBAAuB,EAAE,IAAI,CAAC,+BAA+B;AAC9D,KAAA,CAAC,6DAAC;AAEH;;AAEG;IACH,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;;;AAIjC,IAAA,eAAe,GAAG,QAAQ,CAAC,OAAO;QAChC,GAAG,IAAI,CAAC,iBAAiB;AAC1B,KAAA,CAAC,2DAAC;AAEH;;AAEG;IACH,kBAAkB,GAAA;AAChB,QAAA,OAAO,EAAE;;;AAIX,IAAA,cAAc,GAAG;AACf,QAAA,gBAAgB,EAAE,CAAC,GAAgB,KAAK,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;AAC1E,QAAA,kBAAkB,EAAE,CAAC,GAAgB,KAAK,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;AACpF,QAAA,kBAAkB,EAAE,CAAC,GAAgB,KAAK,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;QAC9E,oBAAoB,EAAE,CAAC,GAAgB,KAAK,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;AAC1E,QAAA,mBAAmB,EAAE,MAAM,IAAI,CAAC,mBAAmB,EAAE;QACrD,UAAU,EAAE,CAAC,GAAgB,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG;KACtD;;AAGD,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE;AAE/C,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;AAEzB,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IAAG;YACzB,OAAO,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACrD,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAChD,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC3D,SAAC,CAAC;AACJ,KAAC,yDAAC;AAEF,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC,wDAAC;;IAG9D,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAC3E,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,uDAAC;AACpE,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,2DAAC;;AAGxD,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC7B,IAAI,CAAC,qBAAqB,EAAE;AAC9B,SAAC,CAAC;;AAGJ;;AAEG;IACK,mBAAmB,GAAA;AACzB,QAAA,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC;QACvF,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,qBAAqB,EAAE;;AAG9B;;AAEG;IACK,mBAAmB,GAAA;AACzB,QAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtE,QAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAG1E;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzE,QAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAG7E;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAChC,MAA8D,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9G,MAAsF,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAI3J;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC;AAC1E,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAEpB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE;AACxB,YAAA,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE;AAC7B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU;SACvB;AACD,QAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,WAAW,CAAC;AAE5C,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC;AACrD,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC;AACrD,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YACvB;;AAGF,QAAA,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,WAAW;AACjD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,uDAAuD,EAAE,QAAQ,CAAC;AAC9E,gBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;oBACrB,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE,QAAQ,CAAC,IAAI,CAAC;AACzE,oBAAA,MAAM,cAAc,GAAG,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC3C,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC;oBACpC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;AACxC,oBAAA,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;;qBAC9B;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,QAAQ,CAAC;AACzD,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC;;aAE/C;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,GAAG,CAAC;gBAC9D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,6CAA6C,CAAC;aAC7E;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC;AACxE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;AACK,IAAA,cAAc,CAAC,WAA0B,EAAA;AAC/C,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,WAAW,CAAC;AAE1D,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,IAAG;AAC9B,YAAA,MAAM,SAAS,GAAG;AAChB,gBAAA,GAAG,MAAM;AACT,gBAAA,IAAI,EAAE;aACP;AACD,YAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC;AACtD,YAAA,OAAO,SAAS;AAClB,SAAC,CAAC;;AAGJ;;AAEG;AACH,IAAA,WAAW,CAAC,KAA6B,EAAA;AACvC,QAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC;AACjC,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAc,CAAC;AACzC,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,eAAe,EAAE;gBACtB;YACF,KAAK,YAAY,EAAE;AACjB,gBAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAA0C;gBACjE,IAAI,QAAQ,EAAE;oBACZ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBACpC,IAAI,CAAC,eAAe,EAAE;;qBACjB;AACL,oBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAc;oBACjC,IAAI,IAAI,EAAE;AACR,wBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;wBAC1B,IAAI,CAAC,eAAe,EAAE;;;gBAG1B;;AAEF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,mBAAmB,EAAE;gBAC1B;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAmB,CAAC;gBACpD;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE;AAChC,oBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAc,CAAC;;qBACpC,IAAI,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,EAAE;AACzC,oBAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAc,CAAC;;qBAC5C,IAAI,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,EAAE;AACzC,oBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAc,CAAC;;gBAE7C;;;AAIN;;AAEG;IACH,mBAAmB,GAAA;QACjB,IAAI,CAAC,eAAe,EAAE;;AAGxB;;AAEG;AACH,IAAA,oBAAoB,CAAC,UAAuB,EAAA;QAC1C,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,IAAI,EAAE,CAAC;;AAG3C;;AAEG;AACH,IAAA,cAAc,CAAC,MAAc,EAAA;AAC3B,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,MAAM,CAAC;AACrD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;;AAGhC;;AAEG;AACH,IAAA,iBAAiB,CAAC,MAAc,EAAA;AAC9B,QAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,MAAM,CAAC;AACxD,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEtB,QAAA,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,MAAM;AAC5C,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,QAAQ,CAAC,IAAI,CAAC;oBAClE,IAAI,UAAU,GAAuB,IAAI;AACzC,oBAAA,UAAU,GAAG,QAAQ,CAAC,IAAI,IAAI,IAAI;AAElC,oBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC;AAExC,oBAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,UAAU,EAAE;AACnC,wBAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;;;qBAEjC;AACL,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC;;aAElD;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;gBACb,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,mDAAmD,CAAC;aACnF;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;AACH,IAAA,mBAAmB,CAAC,UAAuB,EAAA;AACzC,QAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,UAAU,CAAC;AAE9D,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3B,YAAA,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,EAAE;AACzC,YAAA,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,EAAE;AACzC,YAAA,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,IAAI,EAAE;AACvD,YAAA,eAAe,EAAE,UAAU,CAAC,eAAe,IAAI,IAAI;AACnD,YAAA,2BAA2B,EAAE,UAAU,CAAC,2BAA2B,IAAI,EAAE;AACzE,YAAA,qBAAqB,EAAE,UAAU,CAAC,qBAAqB,IAAI;AAC5D,SAAA,CAAC;AAEF,QAAA,IAAI,UAAU,CAAC,2BAA2B,EAAE;YAC1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,UAAU,CAAC,2BAA2B,CAAC;YAC7G,IAAI,gBAAgB,EAAE;AACpB,gBAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,gBAAgB,CAAC;;;QAIvD,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAGvE;;AAEG;IACH,MAAM,gBAAgB,CAAC,MAAc,EAAA;AACnC,QAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,MAAM,CAAC;;AAGvD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC;AACjE,QAAA,MAAM,cAAc,GAAG,UAAU,EAAE,WAAW,IAAI,iBAAiB;AAEnE,QAAA,IAAI;YACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,cAAc,CAAC;YAE9E,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEtB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,MAAM;AAC3C,qBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,qBAAA,SAAS,CAAC;AACT,oBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,wBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;4BACpB,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,YAAA,EAAe,cAAc,CAAA,sBAAA,CAAwB,CAAC;4BACvF,IAAI,CAAC,eAAe,EAAE;;6BACjB;AACL,4BAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,6BAA6B,CAAC;;qBAEhE;AACD,oBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;wBACb,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,iDAAiD,CAAC;qBACjG;oBACD,QAAQ,EAAE,MAAK;AACb,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,iBAAA,CAAC;;;QAEN,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;;;AAI1C;;AAEG;AACH,IAAA,sBAAsB,CAAC,MAAc,EAAA;AACnC,QAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,MAAM,CAAC;;AAG7D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC;AACjE,QAAA,MAAM,cAAc,GAAG,UAAU,EAAE,WAAW,IAAI,YAAY;AAC9D,QAAA,MAAM,SAAS,GAAG,UAAU,EAAE,eAAe,GAAG,UAAU,GAAG,QAAQ;AAErE,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAEtB,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE;AAChE,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,YAAA,EAAe,cAAc,CAAA,EAAA,EAAK,SAAS,CAAA,aAAA,CAAe,CAAC;oBAC5F,IAAI,CAAC,eAAe,EAAE;;qBACjB;AACL,oBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,oCAAoC,CAAC;;aAEvE;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;gBACb,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,yCAAyC,CAAC;aACzF;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;IACH,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE;AAE/B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAEzC,QAAA,MAAM,UAAU,GAAyB;YACvC,GAAG,EAAE,IAAI,CAAC,mBAAmB,EAAE,EAAE,GAAG,IAAI,EAAE;YAC1C,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,WAAW,EAAE,SAAS,CAAC,WAAW;AAClC,YAAA,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,IAAI,EAAE;YACtD,eAAe,EAAE,SAAS,CAAC,eAAe;AAC1C,YAAA,2BAA2B,EAAE,SAAS,CAAC,2BAA2B,IAAI,SAAS;YAC/E,qBAAqB,EAAE,SAAS,CAAC;SAClC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;YACnD,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE,EAAE,GAAG;YAC9C,IAAI,MAAM,EAAE;AACV,gBAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC;gBAC9C,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC;AACpE,oBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,wBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,4BAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC;4BAChD,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,YAAA,EAAe,UAAU,CAAC,WAAW,CAAA,sBAAA,CAAwB,CAAC;4BAC/F,IAAI,CAAC,iBAAiB,EAAE;AACxB,4BAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,4BAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;4BAClC,IAAI,CAAC,eAAe,EAAE;;6BACjB;AACL,4BAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,6BAA6B,CAAC;;qBAEhE;AACD,oBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;wBACb,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,6BAA6B,CAAC;;AAE/E,iBAAA,CAAC;;;aAEC;AACL,YAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;YACzC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC;AAC5D,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,wBAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC;wBAChD,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,YAAA,EAAe,UAAU,CAAC,WAAW,CAAA,sBAAA,CAAwB,CAAC;wBAC/F,IAAI,CAAC,iBAAiB,EAAE;wBACxB,IAAI,CAAC,eAAe,EAAE;;yBACjB;AACL,wBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,6BAA6B,CAAC;;iBAEhE;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;oBACb,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,6BAA6B,CAAC;;AAE/E,aAAA,CAAC;;;AAIN;;AAEG;IACH,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;AAElC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACtB,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,kBAAkB,EAAE,EAAE;AACtB,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,2BAA2B,EAAE,EAAE;YAC/B,qBAAqB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI;AAC7D,SAAA,CAAC;;AAGJ;;AAEG;AACH,IAAA,UAAU,CAAC,UAAuB,EAAA;AAChC,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,UAAU,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,UAAU,CAAC,WAAW,CAAC;;AAGtD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGlC,QAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAU,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,IAAI,CAAC,wBAAwB,EAAE,CAAC;;AAGnF,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3B,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,kBAAkB,EAAE,EAAE;AACtB,YAAA,eAAe,EAAE,IAAI;YACrB,2BAA2B,EAAE,UAAU,CAAC,GAAG;YAC3C,qBAAqB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI;AAC7D,SAAA,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,4CAA4C,EAAE,IAAI,CAAC,wBAAwB,EAAE,EAAE,WAAW,CAAC;;AAGzG;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3B,YAAA,2BAA2B,EAAE;AAC9B,SAAA,CAAC;;AAGJ;;AAEG;AACK,IAAA,kBAAkB,CAAC,KAAY,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAE1C,QAAA,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,8BAA8B,CAAC,EAAE;YAC3F,QAAQ,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAW,KAAI;gBACnE,MAAM,QAAQ,GAAG,EAAiB;AAClC,gBAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;AACrC,aAAC,CAAC;YAEF,QAAQ,CAAC,gBAAgB,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAC,CAAC,EAAW,KAAI;gBAChF,MAAM,MAAM,GAAG,EAAiB;AAChC,gBAAA,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;AAC/C,aAAC,CAAC;;;AAIN;;AAEG;AACK,IAAA,oBAAoB,CAAC,KAAY,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;QAC1C,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAgB;QAEnE,IAAI,YAAY,EAAE;YAChB,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,aAAa,CAAC;YACvD,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,cAAc,CAAC;AAExD,YAAA,IAAI,MAAM,IAAI,MAAM,EAAE;gBACpB,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;gBAEvB,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAgB;gBACvE,IAAI,QAAQ,EAAE;AACZ,oBAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;;gBAGrC,QAAQ,MAAM;AACZ,oBAAA,KAAK,MAAM;AACT,wBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;wBAC3B;AACF,oBAAA,KAAK,QAAQ;AACX,wBAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;wBACnC;AACF,oBAAA,KAAK,QAAQ;AACX,wBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;wBAC7B;;;;;AAMV;;AAEG;AACH,IAAA,cAAc,CAAC,MAAc,EAAA;QAC3B,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG;YACzD,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM,EAAE;AACjD,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;;AAEnC,SAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,gBAAA,EAAmB,MAAM,CAAA,EAAA,CAAI,CAAC;QACtE,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;;;AAI1C;;AAEG;IACH,sBAAsB,CAAC,MAAc,EAAE,MAAc,EAAA;AACnD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC;AACjE,QAAA,IAAI,CAAC,IAAI;YAAE;QAEX,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,gBAAA,EAAmB,MAAM,CAAA,EAAA,CAAI,CAAC;QACtE,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;;QAGrC,QAAQ,MAAM;AACZ,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;gBAC3B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;gBACnC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBAC7B;;;AAIN;;AAEG;AACH,IAAA,gBAAgB,CAAC,QAAiB,EAAA;QAChC,OAAO,QAAQ,GAAG,QAAQ,GAAG,UAAU;;AAGzC;;AAEG;AACH,IAAA,cAAc,CAAC,QAAiB,EAAA;QAC9B,OAAO,QAAQ,GAAG,mCAAmC,GAAG,+BAA+B;;AAGzF;;AAEG;AACH,IAAA,gBAAgB,CAAC,GAAgB,EAAA;QAC/B,OAAO;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,UAAU;AACd,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;gBACZ,KAAK,EAAE,GAAG,CAAC,eAAe,GAAG,YAAY,GAAG,UAAU;AACtD,gBAAA,IAAI,EAAE,oBAAoB;AAC1B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,SAAS,EAAE,iBAAiB;AAC5B,gBAAA,SAAS,EAAE,iBAAiB;AAC5B,gBAAA,YAAY,EAAE;AACf;SACF;;AAGH;;AAEG;IACH,mBAAmB,CAAC,IAAkB,EAAE,GAAgB,EAAA;QACtD,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,IAAI,EAAE,GAAG,CAAC;AAE7D,QAAA,QAAQ,IAAI,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;gBAClC;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBACpB;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;gBAC1C;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;gBACpC;AACF,YAAA;gBACE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,EAAE,CAAC;;QAG9C,IAAI,CAAC,iBAAiB,EAAE;;AAG1B;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxD,QAAA,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;;AAG/B;;AAEG;IACH,aAAa,CAAC,KAAa,EAAE,IAAiB,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC,GAAG,IAAI,EAAE;;uGAtyBZ,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7B5C,m2PAwNe,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzMX,YAAY,8HACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,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,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,wBAAwB,mRACxB,sBAAsB,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,IAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,qBAAqB,0UACrB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,mCAAmC,EAAA,QAAA,EAAA,+BAAA,EAAA,CAAA,EAAA,CAAA;;2FAK1B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAlB3C,SAAS;+BACE,2BAA2B,EAAA,UAAA,EACzB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,WAAW;wBACX,wBAAwB;wBACxB,sBAAsB;wBACtB,kBAAkB;wBAClB,qBAAqB;wBACrB,iBAAiB;wBACjB,wBAAwB;wBACxB;AACD,qBAAA,EAAA,QAAA,EAAA,m2PAAA,EAAA;;;;;;;;AEzBH;;MCyBa,oCAAoC,CAAA;AAK3B,IAAA,IAAA;AAJZ,IAAA,MAAM,GAAG,CAAA,EAAG,aAAa,EAAE,WAAW,EAAE;AACxC,IAAA,sBAAsB,GAAG,IAAI,eAAe,CAAe,EAAE,CAAC;AAC/D,IAAA,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE;AAEpE,IAAA,WAAA,CAAoB,IAAgB,EAAA;QAAhB,IAAA,CAAA,IAAI,GAAJ,IAAI;AACtB,QAAA,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC;;AAGlF;;AAEG;AACH,IAAA,kBAAkB,CAAC,IAAkB,EAAA;AACnC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC;QAC5C,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAAgC,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AACjK,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAuC,KAAI;AAC9C,YAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;gBACrB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;;AAE1D,SAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,KAAK,CAAC;AACvE,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;SAC/B,CAAC,CACH;;AAGL;;AAEG;IACH,2BAA2B,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK;;AAG1C;;;AAGG;AACH,IAAA,iBAAiB,CAAC,WAAuB,EAAA;AACvC,QAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,WAAW,CAAC;;AAGjD,QAAA,MAAM,OAAO,GAAG,IAAI,+BAA+B,CAAC,WAAW,CAAC;QAEhE,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QACpH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAA4C,GAAG,EAAE,OAAO;AAC1E,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAmD,KAAI;AAC1D,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,sBAAsB,EAAE;;SAEhC,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;IACH,iBAAiB,CAAC,EAAU,EAAE,WAAuB,EAAA;QACnD,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,EAAE,EAAE,WAAW,CAAC;;AAGrD,QAAA,MAAM,OAAO,GAAG,IAAI,+BAA+B,CAAC,WAAW,CAAC;QAEhE,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QACpH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAA4C,GAAG,EAAE,OAAO;AAC1E,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAmD,KAAI;AAC1D,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,sBAAsB,EAAE;;SAEhC,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;AACH,IAAA,kBAAkB,CAAC,EAAU,EAAA;AAC3B,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,EAAE,CAAC;AAC7C,QAAA,MAAM,OAAO,GAA+B,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC5D,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACnI,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAoC,GAAG;aACxD,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;AACH,IAAA,iBAAiB,CAAC,EAAU,EAAA;AAC1B,QAAA,MAAM,OAAO,GAA8B,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC3D,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AAC3H,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAsC,GAAG;AAC7D,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAA6C,KAAI;AACpD,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,sBAAsB,EAAE;;SAEhC,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,0BAA0B,CAAC,GAAa,EAAA;AACtC,QAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,GAAG,CAAC;AACnD,QAAA,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE;AACvB,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AAC3H,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAyD,GAAG;AAChF,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAgE,KAAI;AACvE,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,sBAAsB,EAAE;;SAEhC,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,uBAAuB,CAAC,EAAU,EAAA;AAChC,QAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,EAAE,CAAC;AAC/C,QAAA,MAAM,OAAO,GAAoC,EAAE,QAAQ,EAAE,EAAE,EAAE;AACjE,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;QAC3I,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA4C,GAAG,EAAE,EAAE;AACpE,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAmD,KAAI;AAC1D,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,sBAAsB,EAAE;;SAEhC,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;IACH,mBAAmB,CAAC,EAAU,EAAE,KAAA,GAAsB,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAA;AACrF,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,GAAG,KAAK,EAAE,EAAE;AACnB,gBAAA,OAAO,IAAI;;;AAGf,QAAA,OAAO,IAAI;;AAGb;;AAEG;AACH,IAAA,qBAAqB,CAAC,SAAkB,EAAA;QACtC,MAAM,QAAQ,GAAiB,EAAE;QAEjC,MAAM,YAAY,GAAG,CAAC,KAAmB,EAAE,KAAA,GAAgB,CAAC,KAAI;AAC9D,YAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AACnB,gBAAA,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;oBAC1B,QAAQ,CAAC,IAAI,CAAC;AACZ,wBAAA,GAAG,IAAI;wBACP,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AACvC,qBAAA,CAAC;;AAEN,aAAC,CAAC;AACJ,SAAC;AAED,QAAA,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;AAC/C,QAAA,OAAO,QAAQ;;AAGjB;;AAEG;IACK,sBAAsB,GAAA;AAC5B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,QAAQ,EAAE;SACX;AACD,QAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC;YAC7C,IAAI,EAAE,MAAK;AACT,gBAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC;aACvD;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC;;AAE7D,SAAA,CAAC;;AAGJ;;AAEG;AACK,IAAA,WAAW,CAAC,KAAc,EAAA;QAChC,IAAI,YAAY,GAAG,mBAAmB;AAEtC,QAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,YAAA,YAAY,GAAG,KAAK,CAAC,OAAO;;AACvB,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,YAAY,GAAG,KAAK;;AAGtB,QAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,YAAY,CAAC;QACpE,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;;uGAvNvC,oCAAoC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApC,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oCAAoC,cAFnC,MAAM,EAAA,CAAA;;2FAEP,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAHhD,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCCY,mCAAmC,CAAA;AAK1B,IAAA,IAAA;AAJZ,IAAA,MAAM,GAAG,CAAA,EAAG,aAAa,EAAE,UAAU,EAAE;AACvC,IAAA,qBAAqB,GAAG,IAAI,eAAe,CAAgB,EAAE,CAAC;AAC/D,IAAA,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE;AAElE,IAAA,WAAA,CAAoB,IAAgB,EAAA;QAAhB,IAAA,CAAA,IAAI,GAAJ,IAAI;AACtB,QAAA,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC;;AAGjF;;AAEG;AACH,IAAA,iBAAiB,CAAC,IAAiB,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC;QAC5C,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAA+B,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AAC/J,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAsC,KAAI;AAC7C,YAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;gBACrB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;;AAEzD,SAAC,CAAC,EACF,UAAU,CAAC,KAAK,IAAG;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAK,CAAC;AACtE,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;SAC/B,CAAC,CACH;;AAGL;;AAEG;IACH,0BAA0B,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK;;AAGzC;;;AAGG;AACH,IAAA,gBAAgB,CAAC,UAAuB,EAAA;AACtC,QAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,UAAU,CAAC;QAChD,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;QACnH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAA+B,GAAG,EAAE,UAAU;AAChE,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAsC,KAAI;AAC7C,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,qBAAqB,EAAE;;SAE/B,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;IACH,gBAAgB,CAAC,EAAU,EAAE,UAAuB,EAAA;QAClD,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,EAAE,EAAE,UAAU,CAAC;QACpD,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;QACnH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAA+B,GAAG,EAAE,UAAU;AAChE,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAsC,KAAI;AAC7C,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,qBAAqB,EAAE;;SAE/B,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;AACH,IAAA,iBAAiB,CAAC,OAAkC,EAAA;AAClD,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAClI,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAmC,GAAG;aACvD,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;AACH,IAAA,gBAAgB,CAAC,EAAU,EAAA;AACzB,QAAA,MAAM,OAAO,GAA6B,EAAE,SAAS,EAAE,EAAE,EAAE;AAC3D,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AAC1H,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAqC,GAAG;AAC5D,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAA4C,KAAI;AACnD,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,qBAAqB,EAAE;;SAE/B,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,yBAAyB,CAAC,GAAa,EAAA;AACrC,QAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,GAAG,CAAC;AACnD,QAAA,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE;AACvB,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AAC1H,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAyD,GAAG;AAChF,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAgE,KAAI;AACvE,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,qBAAqB,EAAE;;SAE/B,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;AACH,IAAA,sBAAsB,CAAC,EAAU,EAAA;AAC/B,QAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,EAAE,CAAC;AAC/C,QAAA,MAAM,OAAO,GAAmC,EAAE,SAAS,EAAE,EAAE,EAAE;QACjE,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;QACpI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAA2C,GAAG,EAAE,OAAO;AAC1E,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAkD,KAAI;AACzD,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,qBAAqB,EAAE;;SAE/B,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;;AAGG;AACH,IAAA,wBAAwB,CAAC,OAAyC,EAAA;AAChE,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,OAAO,CAAC;QACtD,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;QACtI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAA6C,GAAG,EAAE,OAAO;AAC5E,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAoD,KAAI;AAC3D,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,IAAI,CAAC,qBAAqB,EAAE;;SAE/B,CAAC,EACF,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;IACH,kBAAkB,CAAC,EAAU,EAAE,KAAA,GAAuB,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAA;AACpF,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,GAAG,KAAK,EAAE,EAAE;AACnB,gBAAA,OAAO,IAAI;;;AAGf,QAAA,OAAO,IAAI;;AAGb;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,QAAQ,EAAE;SACX;AACD,QAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC;YAC5C,IAAI,EAAE,MAAK;AACT,gBAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC;aACvD;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC;;AAE7D,SAAA,CAAC;;AAGJ;;AAEG;AACK,IAAA,WAAW,CAAC,KAAc,EAAA;QAChC,IAAI,YAAY,GAAG,mBAAmB;AAEtC,QAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,YAAA,YAAY,GAAG,KAAK,CAAC,OAAO;;AACvB,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,YAAY,GAAG,KAAK;;AAGtB,QAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,YAAY,CAAC;QACpE,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;;uGA1MvC,mCAAmC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnC,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,cAFlC,MAAM,EAAA,CAAA;;2FAEP,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAH/C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCsBY,gCAAgC,CAAA;;AAEnC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,kBAAkB,GAAG,MAAM,CAAC,oCAAoC,CAAC;AACjE,IAAA,iBAAiB,GAAG,MAAM,CAAC,mCAAmC,CAAC;AAC/D,IAAA,iBAAiB,GAAG,MAAM,CAAC,mCAAmC,CAAC;AAC/D,IAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACxC,IAAA,EAAE,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACnC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;;AAGzD,IAAA,kCAAkC,GAAG,SAAS,CAAC,QAAQ,CAAwD,oCAAoC,CAAC;AACpJ,IAAA,iCAAiC,GAAG,SAAS,CAAC,QAAQ,CAAwD,mCAAmC,CAAC;AAClJ,IAAA,+BAA+B,GAAG,SAAS,CAAC,QAAQ,CAAwD,iCAAiC,CAAC;;IAG9I,IAAI,GAAG,IAAI;;AAGX,IAAA,YAAY,GAAG,MAAM,CAAe,EAAE,wDAAC;AACvC,IAAA,WAAW,GAAG,MAAM,CAAgB,EAAE,uDAAC;AACvC,IAAA,WAAW,GAAG,MAAM,CAAgB,EAAE,uDAAC;AACvC,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,aAAa,GAAG,MAAM,CAAW,EAAE,yDAAC;AACpC,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;;AAGvB,IAAA,yBAAyB,GAAG,MAAM,CAAoB,IAAI,qEAAC;AAC3D,IAAA,wBAAwB,GAAG,MAAM,CAAqB,IAAI,oEAAC;;AAG3D,IAAA,oBAAoB,GAAG,MAAM,CAAoB,IAAI,gEAAC;;AAGtD,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;;AAG1B,IAAA,WAAW,GAAG,MAAM,CAAC,CAAC,uDAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,EAAE,oDAAC;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC;;AAGtB,IAAA,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AAC3B,QAAA,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1G,QAAA,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AACzG,QAAA,iBAAiB,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACnE,mBAAmB,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;AACxC,QAAA,yBAAyB,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACrE,QAAA,2BAA2B,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvE,QAAA,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC5D,mBAAmB,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;AACpG,KAAA,CAAC;;IAGF,UAAU,GAAG,MAAM,CAAgC;AACjD,QAAA,EAAE,EAAE,uBAAuB;AAC3B,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,wBAAwB;AAChC,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,MAAM;AACX,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE;AACR,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,aAAa;AAClB,gBAAA,MAAM,EAAE,aAAa;AACrB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE;AACR,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA;AACD,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,IAAI,EAAE;AACJ,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,cAAc,EAAE;AACjB,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,wCAAwC;AACrD,YAAA,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC;AAClD,YAAA,UAAU,EAAE;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,SAAS,EAAE;AACZ,SAAA;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE,0CAA0C;AACtD,QAAA,SAAS,EAAE;AACZ,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGF,IAAA,iBAAiB,GAAG,QAAQ,CAAC,OAAqD;AAChF,QAAA,0BAA0B,EAAE,IAAI,CAAC,kCAAkC,EAAE;AACrE,QAAA,yBAAyB,EAAE,IAAI,CAAC,iCAAiC,EAAE;AACnE,QAAA,uBAAuB,EAAE,IAAI,CAAC,+BAA+B;AAC9D,KAAA,CAAC,6DAAC;AAEH;;AAEG;IACH,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;;;AAIjC,IAAA,eAAe,GAAG,QAAQ,CAAC,OAAO;QAChC,GAAG,IAAI,CAAC,iBAAiB;AAC1B,KAAA,CAAC,2DAAC;AAEH;;AAEG;IACH,kBAAkB,GAAA;AAChB,QAAA,OAAO,EAAE;;;AAIX,IAAA,cAAc,GAAG;AACf,QAAA,iBAAiB,EAAE,CAAC,GAAe,KAAK,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;AAC3E,QAAA,mBAAmB,EAAE,CAAC,GAAe,KAAK,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;AACrF,QAAA,mBAAmB,EAAE,CAAC,GAAe,KAAK,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;QAC/E,qBAAqB,EAAE,CAAC,GAAe,KAAK,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC;AAC3E,QAAA,oBAAoB,EAAE,MAAM,IAAI,CAAC,oBAAoB,EAAE;QACvD,UAAU,EAAE,CAAC,GAAe,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG;KACrD;;AAGD,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE;AAE/C,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;AAEzB,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IAAG;YACzB,OAAO,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACpD,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC/C,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1D,SAAC,CAAC;AACJ,KAAC,yDAAC;AAEF,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC,wDAAC;;IAG9D,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAC3E,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,uDAAC;AACpE,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,2DAAC;;AAGxD,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;QAChC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,UAAU,KAAK;AAC3C,YAAA,KAAK,EAAE,UAAU,CAAC,GAAG,IAAI,EAAE;AAC3B,YAAA,KAAK,EAAE,UAAU,CAAC,WAAW,IAAI;AAClC,SAAA,CAAC,CAAC;AACL,KAAC,6DAAC;;AAGF,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;QAChC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,UAAU,KAAK;AAC3C,YAAA,KAAK,EAAE,UAAU,CAAC,GAAG,IAAI,EAAE;AAC3B,YAAA,KAAK,EAAE,UAAU,CAAC,WAAW,IAAI;AAClC,SAAA,CAAC,CAAC;AACL,KAAC,6DAAC;;AAGF,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC7B,IAAI,CAAC,qBAAqB,EAAE;AAC9B,SAAC,CAAC;;AAGJ;;AAEG;IACK,mBAAmB,GAAA;AACzB,QAAA,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC;;QAExF,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,qBAAqB,EAAE;;AAG9B;;AAEG;IACK,mBAAmB,GAAA;AACzB,QAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtE,QAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAG1E;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzE,QAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAG7E;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAChC,MAA8D,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9G,MAAuF,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAI9J;;AAEG;IACH,gBAAgB,GAAA;AACd,QAAA,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC;AAC5E,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAEpB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE;AACxB,YAAA,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE;AAC7B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU;SACvB;AACD,QAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,WAAW,CAAC;AAE5C,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC5B,YAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC;AACtD,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,sCAAsC,CAAC;AACtD,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YACvB;;AAGF,QAAA,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,WAAW;AACnD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,wDAAwD,EAAE,QAAQ,CAAC;AAC/E,gBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;oBACrB,OAAO,CAAC,GAAG,CAAC,8CAA8C,EAAE,QAAQ,CAAC,IAAI,CAAC;AAC1E,oBAAA,MAAM,eAAe,GAAG,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC5C,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC;oBACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;;AAGxC,oBAAA,IAAI,CAAC,sCAAsC,CAAC,eAAe,CAAC;;AAG5D,oBAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC;;qBAC/B;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,QAAQ,CAAC;AACzD,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC;;aAEhD;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,GAAG,CAAC;gBAC/D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,8CAA8C,CAAC;aAC9E;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC;AAC1E,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC;AAE3E,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC;YACrD;;AAGF,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE;SACR;AAED,QAAA,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,WAAW;AACjD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,oEAAoE,EAAE,QAAQ,CAAC;AAC3F,gBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;oBACrB,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,QAAQ,CAAC,IAAI,CAAC;AAChE,oBAAA,MAAM,cAAc,GAAG,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC3C,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC;;oBAEpC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;;qBACnC;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,QAAQ,CAAC;;aAE3D;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC;;AAErD,SAAA,CAAC;;AAGN;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC;AAE3E,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC;YACrD;;AAGF,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,GAAG;SACd;AAED,QAAA,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,WAAW;AACjD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,QAAQ,CAAC;AAClD,gBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;oBACrB,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,QAAQ,CAAC,IAAI,CAAC;AACjE,oBAAA,MAAM,cAAc,GAAG,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC3C,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC;;oBAEpC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;wBAClC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;;;qBAErC;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,QAAQ,CAAC;;aAE5D;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC;;AAEtD,SAAA,CAAC;;AAGN;;;AAGG;IACK,qBAAqB,GAAA;AAC3B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AAExC,QAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE;YACjD,WAAW,EAAE,WAAW,CAAC,MAAM;YAC/B,YAAY,EAAE,YAAY,CAAC;AAC5B,SAAA,CAAC;;QAGF,MAAM,iBAAiB,GAAG,IAAI,CAAC,kCAAkC,CAAC,YAAY,CAAC;AAC/E,QAAA,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE,iBAAiB,CAAC;;QAG7E,MAAM,eAAe,GAAG,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,CAAC;;AAGxE,QAAA,IAAI,CAAC,+BAA+B,CAAC,eAAe,EAAE,YAAY,CAAC;AAEnE,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,eAAe,CAAC;AAC1D,QAAA,OAAO,eAAe;;AAGxB;;AAEG;AACK,IAAA,sCAAsC,CAAC,YAA0B,EAAA;AACvE,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAuB;AACpD,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAuB;AAEpD,QAAA,YAAY,CAAC,OAAO,CAAC,WAAW,IAAG;;YAEjC,MAAM,wBAAwB,GAAG,WAAkB;YACnD,IAAI,wBAAwB,CAAC,UAAU,IAAI,wBAAwB,CAAC,UAAU,CAAC,GAAG,EAAE;AAClF,gBAAA,aAAa,CAAC,GAAG,CAAC,wBAAwB,CAAC,UAAU,CAAC,GAAG,EAAE,wBAAwB,CAAC,UAAU,CAAC;gBAC/F,OAAO,CAAC,GAAG,CAAC,CAAA,oCAAA,EAAuC,wBAAwB,CAAC,UAAU,CAAC,WAAW,CAAA,CAAE,CAAC;;;YAIvG,IAAI,wBAAwB,CAAC,UAAU,IAAI,wBAAwB,CAAC,UAAU,CAAC,GAAG,EAAE;AAClF,gBAAA,aAAa,CAAC,GAAG,CAAC,wBAAwB,CAAC,UAAU,CAAC,GAAG,EAAE,wBAAwB,CAAC,UAAU,CAAC;gBAC/F,OAAO,CAAC,GAAG,CAAC,CAAA,qCAAA,EAAwC,wBAAwB,CAAC,UAAU,CAAC,WAAW,CAAA,CAAE,CAAC;;AAE1G,SAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;AAExD,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,OAAA,EAAU,aAAa,CAAC,IAAI,CAAA,iBAAA,EAAoB,aAAa,CAAC,IAAI,CAAA,mCAAA,CAAqC,CAAC;;AAGtH;;AAEG;AACK,IAAA,kCAAkC,CAAC,YAA0B,EAAA;AACnE,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAuB;AAEpD,QAAA,YAAY,CAAC,OAAO,CAAC,WAAW,IAAG;YACjC,MAAM,wBAAwB,GAAG,WAAkB;YACnD,IAAI,wBAAwB,CAAC,UAAU,IAAI,wBAAwB,CAAC,UAAU,CAAC,GAAG,EAAE;;AAElF,gBAAA,aAAa,CAAC,GAAG,CAAC,wBAAwB,CAAC,UAAU,CAAC,GAAG,EAAE,wBAAwB,CAAC,UAAU,CAAC;gBAC/F,OAAO,CAAC,GAAG,CAAC,CAAA,oCAAA,EAAuC,wBAAwB,CAAC,UAAU,CAAC,WAAW,CAAA,CAAE,CAAC;;AAEzG,SAAC,CAAC;QAEF,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,CAAA,aAAA,EAAgB,iBAAiB,CAAC,MAAM,CAAA,qCAAA,CAAuC,CAAC;AAC5F,QAAA,OAAO,iBAAiB;;AAG1B;;;AAGG;IACK,+BAA+B,CAAC,eAAmC,EAAE,YAA0B,EAAA;AACrG,QAAA,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC;;AAG9D,QAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAA4B;;AAG1D,QAAA,YAAY,CAAC,OAAO,CAAC,WAAW,IAAG;AACjC,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,8BAAA,EAAiC,WAAW,CAAC,UAAU,CAAA,EAAA,EAAK,WAAW,CAAC,GAAG,CAAA,CAAA,CAAG,CAAC;AAE3F,YAAA,MAAM,eAAe,GAAqB;AACxC,gBAAA,GAAG,EAAE,WAAW,CAAC,GAAG,IAAI,EAAE;AAC1B,gBAAA,IAAI,EAAE,WAAW,CAAC,UAAU,IAAI,EAAE;AAClC,gBAAA,IAAI,EAAE,WAAW,CAAC,UAAU,IAAI,EAAE;AAClC,gBAAA,WAAW,EAAE,WAAW,CAAC,iBAAiB,IAAI,EAAE;AAChD,gBAAA,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,CAAC;AACR,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,MAAM,EAAE,WAAW,CAAC,cAAc,IAAI,IAAI;AAC1C,gBAAA,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,2BAA2B,IAAI,EAAE,EAAE,WAAW,CAAC;gBAC/F,QAAQ,EAAE,IAAI;aACf;YAED,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,IAAI,EAAE,EAAE,eAAe,CAAC;AAC5D,SAAC,CAAC;;AAGF,QAAA,YAAY,CAAC,OAAO,CAAC,WAAW,IAAG;AACjC,YAAA,MAAM,eAAe,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,IAAI,EAAE,CAAC;AACjE,YAAA,IAAI,CAAC,eAAe;gBAAE;AAEtB,YAAA,IAAI,WAAW,CAAC,mBAAmB,EAAE;;gBAEnC,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,mBAAmB,CAAC;gBACtE,IAAI,UAAU,EAAE;AACd,oBAAA,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;AACzC,oBAAA,UAAU,CAAC,WAAW,GAAG,IAAI;oBAC7B,eAAe,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC;AAC5C,oBAAA,eAAe,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG;AACzC,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,SAAA,EAAY,WAAW,CAAC,UAAU,CAAA,aAAA,EAAgB,UAAU,CAAC,IAAI,CAAA,QAAA,EAAW,eAAe,CAAC,KAAK,CAAA,CAAA,CAAG,CAAC;;qBAC5G;AACL,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,oCAAA,EAAuC,WAAW,CAAC,UAAU,CAAA,EAAA,EAAK,WAAW,CAAC,mBAAmB,CAAA,CAAE,CAAC;;;AAGtH,SAAC,CAAC;;QAGF,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,CAAA,SAAA,EAAY,gBAAgB,CAAC,MAAM,CAAA,kBAAA,CAAoB,CAAC;AAEpE,QAAA,gBAAgB,CAAC,OAAO,CAAC,eAAe,IAAG;AACzC,YAAA,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,eAAe,CAAC,GAAG,CAAC;AACzE,YAAA,IAAI,WAAW,IAAI,WAAW,CAAC,yBAAyB,EAAE;;gBAExD,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,IAC9C,IAAI,CAAC,GAAG,KAAK,CAAA,KAAA,EAAQ,WAAW,CAAC,yBAAyB,CAAA,CAAE,CAC7D;gBAED,IAAI,cAAc,EAAE;AAClB,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,2BAAA,EAA8B,eAAe,CAAC,IAAI,CAAA,eAAA,EAAkB,cAAc,CAAC,IAAI,CAAA,CAAE,CAAC;oBACtG,eAAe,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,GAAG,CAAC;AAChD,oBAAA,eAAe,CAAC,QAAQ,GAAG,cAAc,CAAC,GAAG;AAC7C,oBAAA,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;AAC7C,oBAAA,cAAc,CAAC,WAAW,GAAG,IAAI;;qBAC5B;AACL,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,wCAAA,EAA2C,eAAe,CAAC,IAAI,CAAA,EAAA,EAAK,WAAW,CAAC,yBAAyB,CAAA,CAAE,CAAC;;;iBAErH;gBACL,OAAO,CAAC,GAAG,CAAC,CAAA,oBAAA,EAAuB,eAAe,CAAC,IAAI,CAAA,kBAAA,CAAoB,CAAC;;AAEhF,SAAC,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC;;AAGvE;;;AAGG;AACK,IAAA,yBAAyB,CAAC,YAA0B,EAAA;AAC1D,QAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAA4B;QAC1D,MAAM,gBAAgB,GAAuB,EAAE;AAE/C,QAAA,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC;;AAGnD,QAAA,YAAY,CAAC,OAAO,CAAC,WAAW,IAAG;AACjC,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,8BAAA,EAAiC,WAAW,CAAC,UAAU,CAAA,EAAA,EAAK,WAAW,CAAC,GAAG,CAAA,CAAA,CAAG,CAAC;AAE3F,YAAA,MAAM,eAAe,GAAqB;AACxC,gBAAA,GAAG,EAAE,WAAW,CAAC,GAAG,IAAI,EAAE;AAC1B,gBAAA,IAAI,EAAE,WAAW,CAAC,UAAU,IAAI,EAAE;AAClC,gBAAA,IAAI,EAAE,WAAW,CAAC,UAAU,IAAI,EAAE;AAClC,gBAAA,WAAW,EAAE,WAAW,CAAC,iBAAiB,IAAI,EAAE;AAChD,gBAAA,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,CAAC;AACR,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,MAAM,EAAE,WAAW,CAAC,cAAc,IAAI,IAAI;AAC1C,gBAAA,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,2BAA2B,IAAI,EAAE,EAAE,WAAW,CAAC;gBAC/F,QAAQ,EAAE,IAAI;aACf;YAED,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,IAAI,EAAE,EAAE,eAAe,CAAC;AAC5D,SAAC,CAAC;;AAGF,QAAA,YAAY,CAAC,OAAO,CAAC,WAAW,IAAG;AACjC,YAAA,MAAM,eAAe,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,IAAI,EAAE,CAAC;AACjE,YAAA,IAAI,CAAC,eAAe;gBAAE;;YAGtB,IAAI,QAAQ,GAAkB,IAAI;AAElC,YAAA,IAAI,WAAW,CAAC,mBAAmB,EAAE;;AAEnC,gBAAA,QAAQ,GAAG,WAAW,CAAC,mBAAmB;gBAC1C,OAAO,CAAC,GAAG,CAAC,CAAA,GAAA,EAAM,WAAW,CAAC,UAAU,CAAA,yBAAA,EAA4B,QAAQ,CAAA,CAAE,CAAC;;AAC1E,iBAAA,IAAI,WAAW,CAAC,yBAAyB,EAAE;;AAEhD,gBAAA,QAAQ,GAAG,CAAA,KAAA,EAAQ,WAAW,CAAC,yBAAyB,EAAE;gBAC1D,OAAO,CAAC,GAAG,CAAC,CAAA,GAAA,EAAM,WAAW,CAAC,UAAU,CAAA,wBAAA,EAA2B,QAAQ,CAAA,CAAE,CAAC;;iBACzE;gBACL,OAAO,CAAC,GAAG,CAAC,CAAA,GAAA,EAAM,WAAW,CAAC,UAAU,CAAA,4CAAA,CAA8C,CAAC;;AAGzF,YAAA,eAAe,CAAC,QAAQ,GAAG,QAAQ;YAEnC,IAAI,QAAQ,EAAE;;AAEZ,gBAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;;oBAEhC,OAAO,CAAC,GAAG,CAAC,CAAA,GAAA,EAAM,WAAW,CAAC,UAAU,CAAA,sCAAA,CAAwC,CAAC;;qBAC5E;;oBAEL,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAC/C,IAAI,UAAU,EAAE;AACd,wBAAA,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;AACzC,wBAAA,UAAU,CAAC,WAAW,GAAG,IAAI;wBAC7B,eAAe,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC;AAC5C,wBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,SAAA,EAAY,WAAW,CAAC,UAAU,CAAA,aAAA,EAAgB,UAAU,CAAC,IAAI,CAAA,QAAA,EAAW,eAAe,CAAC,KAAK,CAAA,CAAA,CAAG,CAAC;;yBAC5G;;AAEL,wBAAA,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC;wBACtC,OAAO,CAAC,GAAG,CAAC,CAAA,SAAA,EAAY,WAAW,CAAC,UAAU,CAAA,wCAAA,EAA2C,QAAQ,CAAA,CAAA,CAAG,CAAC;;;;iBAGpG;;AAEL,gBAAA,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,CAAA,SAAA,EAAY,WAAW,CAAC,UAAU,CAAA,oBAAA,CAAsB,CAAC;;AAEzE,SAAC,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,CAAA,mCAAA,EAAsC,gBAAgB,CAAC,MAAM,CAAA,kBAAA,CAAoB,CAAC;AAC9F,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,qBAAA,CAAuB,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACpH,OAAO,CAAC,GAAG,CAAC,CAAA,yBAAA,CAA2B,EAAE,cAAc,CAAC,IAAI,CAAC;AAC7D,QAAA,OAAO,gBAAgB;;AAGzB;;AAEG;AACK,IAAA,wBAAwB,CAAC,WAA0B,EAAA;AACzD,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAA4B;QACzD,MAAM,eAAe,GAAuB,EAAE;;AAG9C,QAAA,WAAW,CAAC,OAAO,CAAC,UAAU,IAAG;AAC/B,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,6BAAA,EAAgC,UAAU,CAAC,WAAW,CAAA,EAAA,EAAK,UAAU,CAAC,GAAG,CAAA,CAAA,CAAG,CAAC;AAEzF,YAAA,MAAM,cAAc,GAAqB;AACvC,gBAAA,GAAG,EAAE,CAAA,KAAA,EAAQ,UAAU,CAAC,GAAG,IAAI,EAAE,CAAA,CAAE;AACnC,gBAAA,IAAI,EAAE,UAAU,CAAC,WAAW,IAAI,EAAE;AAClC,gBAAA,IAAI,EAAE,UAAU,CAAC,WAAW,IAAI,EAAE;AAClC,gBAAA,WAAW,EAAE,UAAU,CAAC,kBAAkB,IAAI,EAAE;AAChD,gBAAA,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,CAAC;AACR,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,MAAM,EAAE,UAAU,CAAC,eAAe,IAAI,IAAI;AAC1C,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,QAAQ,EAAE,UAAU,CAAC,2BAA2B,GAAG,CAAA,KAAA,EAAQ,UAAU,CAAC,2BAA2B,CAAA,CAAE,GAAG;aACvG;YAED,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC;AACvD,SAAC,CAAC;;AAGF,QAAA,WAAW,CAAC,OAAO,CAAC,UAAU,IAAG;AAC/B,YAAA,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA,KAAA,EAAQ,UAAU,CAAC,GAAG,IAAI,EAAE,CAAA,CAAE,CAAC;AACxE,YAAA,IAAI,CAAC,cAAc;gBAAE;AAErB,YAAA,IAAI,UAAU,CAAC,2BAA2B,EAAE;;AAE1C,gBAAA,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA,KAAA,EAAQ,UAAU,CAAC,2BAA2B,CAAA,CAAE,CAAC;gBACtF,IAAI,UAAU,EAAE;AACd,oBAAA,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;AACxC,oBAAA,UAAU,CAAC,WAAW,GAAG,IAAI;oBAC7B,cAAc,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC;AAC3C,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,SAAA,EAAY,UAAU,CAAC,WAAW,CAAA,aAAA,EAAgB,UAAU,CAAC,IAAI,CAAA,QAAA,EAAW,cAAc,CAAC,KAAK,CAAA,CAAA,CAAG,CAAC;;qBAC3G;;AAEL,oBAAA,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;oBACpC,OAAO,CAAC,GAAG,CAAC,CAAA,SAAA,EAAY,UAAU,CAAC,WAAW,CAAA,2BAAA,CAA6B,CAAC;;;iBAEzE;;AAEL,gBAAA,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,CAAA,SAAA,EAAY,UAAU,CAAC,WAAW,CAAA,mBAAA,CAAqB,CAAC;;AAExE,SAAC,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,CAAA,kCAAA,EAAqC,eAAe,CAAC,MAAM,CAAA,iBAAA,CAAmB,CAAC;AAC3F,QAAA,OAAO,eAAe;;AAGxB;;;AAGG;IACK,oCAAoC,CAAC,eAAmC,EAAE,gBAAoC,EAAA;AACpH,QAAA,MAAM,qBAAqB,GAAG,CAAC,IAAsB,KAAI;;AAEvD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAClD,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,MAAM,CAAC,eAAe,IAAG;gBACvE,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,eAAe,CAAC,GAAG,CAAC;AAChF,gBAAA,OAAO,WAAW;oBACX,WAAW,CAAC,yBAAyB,KAAK,YAAY;AACtD,oBAAA,CAAC,WAAW,CAAC,mBAAmB,CAAC;AAC1C,aAAC,CAAC;AAEF,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,SAAA,EAAY,sBAAsB,CAAC,MAAM,CAAA,kCAAA,EAAqC,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;AACtG,YAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,YAAY,CAAA,CAAE,CAAC;AAChD,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,+BAAA,CAAiC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC9H,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,qBAAA,CAAuB,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK;gBACjE,EAAE,EAAE,CAAC,CAAC,GAAG;gBACT,IAAI,EAAE,CAAC,CAAC,UAAU;gBAClB,MAAM,EAAE,CAAC,CAAC,yBAAyB;gBACnC,QAAQ,EAAE,CAAC,CAAC;aACb,CAAC,CAAC,CAAC;AAEJ,YAAA,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE;AACrC,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;AAGvB,gBAAA,sBAAsB,CAAC,OAAO,CAAC,eAAe,IAAG;AAC/C,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,uBAAA,EAA0B,eAAe,CAAC,IAAI,CAAA,OAAA,EAAU,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;;oBAGhF,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;AACtC,oBAAA,eAAe,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG;;AAGnC,oBAAA,IAAI,CAAC,sBAAsB,CAAC,eAAe,EAAE,gBAAgB,CAAC;AAE9D,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;AACrC,iBAAC,CAAC;;;AAIJ,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAG;AAC5B,gBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;oBAC/B,qBAAqB,CAAC,KAAK,CAAC;;AAEhC,aAAC,CAAC;AACJ,SAAC;;AAGD,QAAA,eAAe,CAAC,OAAO,CAAC,IAAI,IAAG;AAC7B,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;gBAC9B,qBAAqB,CAAC,IAAI,CAAC;;AAE/B,SAAC,CAAC;;AAGJ;;AAEG;IACK,sBAAsB,CAAC,UAA4B,EAAE,mBAAuC,EAAA;AAClG,QAAA,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,eAAe,IACzD,eAAe,CAAC,QAAQ,KAAK,UAAU,CAAC,GAAG,CAC5C;AAED,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,SAAA,EAAY,QAAQ,CAAC,MAAM,CAAA,0BAAA,EAA6B,UAAU,CAAC,IAAI,CAAA,CAAE,CAAC;AAEtF,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,YAAA,UAAU,CAAC,WAAW,GAAG,IAAI;AAE7B,YAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAG;AACvB,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,6BAAA,EAAgC,KAAK,CAAC,IAAI,CAAA,OAAA,EAAU,UAAU,CAAC,IAAI,CAAA,CAAE,CAAC;;gBAGlF,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC;AAClC,gBAAA,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG;;AAG/B,gBAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,CAAC;AAEvD,gBAAA,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC,aAAC,CAAC;;;AAIN;;AAEG;IACK,iBAAiB,CAAC,YAAoB,EAAE,WAAwB,EAAA;AACtE,QAAA,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,YAAY,CAAC;;QAGjE,IAAI,WAAW,EAAE;YACf,MAAM,wBAAwB,GAAG,WAAkB;AACnD,YAAA,IAAI,wBAAwB,CAAC,UAAU,IAAI,wBAAwB,CAAC,UAAU,CAAC,GAAG,KAAK,YAAY,EAAE;gBACnG,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE,wBAAwB,CAAC,UAAU,CAAC,WAAW,CAAC;AAC3G,gBAAA,OAAO,wBAAwB,CAAC,UAAU,CAAC,WAAW,IAAI,KAAK;;;;QAKnE,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;AAC7D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,YAAY,CAAC;AACzE,QAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,UAAU,CAAC;AAEhD,QAAA,MAAM,MAAM,GAAG,UAAU,IAAI,UAAU,CAAC,WAAW,IAAI,KAAK,IAAI,KAAK;AACrE,QAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,MAAM,CAAC;AACpD,QAAA,OAAO,MAAM;;AAGf;;AAEG;AACK,IAAA,cAAc,CAAC,YAA0B,EAAA;AAC/C,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,YAAY,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;AAE1D,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,EAAE;;QAGrD,MAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC;AAEpE,QAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,aAAa,CAAC;AAEzD,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,IAAG;AAC9B,YAAA,MAAM,SAAS,GAAG;AAChB,gBAAA,GAAG,MAAM;AACT,gBAAA,IAAI,EAAE;aACP;AACD,YAAA,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE,aAAa,CAAC;AACzE,YAAA,OAAO,SAAS;AAClB,SAAC,CAAC;;AAGJ;;AAEG;AACK,IAAA,uBAAuB,CAAC,KAAyB,EAAA;QACvD,MAAM,SAAS,GAAuB,EAAE;AAExC,QAAA,MAAM,WAAW,GAAG,CAAC,IAAsB,KAAI;AAC7C,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;;AAEtD,SAAC;AAED,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;AACxC,QAAA,OAAO,SAAS;;AAGlB;;AAEG;AACH,IAAA,WAAW,CAAC,KAA4B,EAAA;AACtC,QAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC;AACjC,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAc,CAAC;AACzC,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,gBAAgB,EAAE;gBACvB;YACF,KAAK,YAAY,EAAE;AACjB,gBAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAA0C;gBACjE,IAAI,QAAQ,EAAE;oBACZ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBACpC,IAAI,CAAC,gBAAgB,EAAE;;qBAClB;AACL,oBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAc;oBACjC,IAAI,IAAI,EAAE;AACR,wBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;wBAC1B,IAAI,CAAC,gBAAgB,EAAE;;;gBAG3B;;AAEF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,oBAAoB,EAAE;gBAC3B;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAkB,CAAC;gBACpD;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE;AAChC,oBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAc,CAAC;;qBACrC,IAAI,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,EAAE;AACzC,oBAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,IAAc,CAAC;;qBAC7C,IAAI,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,EAAE;AACzC,oBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAc,CAAC;;gBAE9C;;;AAIN;;AAEG;IACH,oBAAoB,GAAA;QAClB,IAAI,CAAC,gBAAgB,EAAE;;AAGzB;;AAEG;AACH,IAAA,qBAAqB,CAAC,WAAuB,EAAA;QAC3C,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,IAAI,EAAE,CAAC;;AAG7C;;AAEG;AACH,IAAA,eAAe,CAAC,MAAc,EAAA;AAC5B,QAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,MAAM,CAAC;AACtD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;;AAGjC;;AAEG;AACH,IAAA,kBAAkB,CAAC,MAAc,EAAA;AAC/B,QAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,MAAM,CAAC;AACzD,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEtB,QAAA,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM;AAC9C,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE,QAAQ,CAAC,IAAI,CAAC;oBACnE,IAAI,WAAW,GAAsB,IAAI;AACzC,oBAAA,WAAW,GAAG,QAAQ,CAAC,IAAI,IAAI,IAAI;AAEnC,oBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC;AAE1C,oBAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,WAAW,EAAE;AACpC,wBAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;;;qBAElC;AACL,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC;;aAEnD;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;gBACb,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,oDAAoD,CAAC;aACpF;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;AACH,IAAA,mBAAmB,CAAC,WAAuB,EAAA;AACzC,QAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,WAAW,CAAC;AAE/D,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3B,YAAA,UAAU,EAAE,WAAW,CAAC,UAAU,IAAI,EAAE;AACxC,YAAA,UAAU,EAAE,WAAW,CAAC,UAAU,IAAI,EAAE;AACxC,YAAA,iBAAiB,EAAE,WAAW,CAAC,iBAAiB,IAAI,EAAE;AACtD,YAAA,mBAAmB,EAAE,WAAW,CAAC,mBAAmB,IAAI,EAAE;AAC1D,YAAA,yBAAyB,EAAE,WAAW,CAAC,yBAAyB,IAAI,EAAE;AACtE,YAAA,2BAA2B,EAAE,WAAW,CAAC,2BAA2B,IAAI,EAAE;AAC1E,YAAA,cAAc,EAAE,WAAW,CAAC,cAAc,IAAI,IAAI;AAClD,YAAA,mBAAmB,EAAE,WAAW,CAAC,mBAAmB,IAAI;AACzD,SAAA,CAAC;AAEF,QAAA,IAAI,WAAW,CAAC,mBAAmB,EAAE;YACnC,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,WAAW,CAAC,mBAAmB,CAAC;YACxG,IAAI,iBAAiB,EAAE;AACrB,gBAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,iBAAiB,CAAC;;;AAIzD,QAAA,IAAI,WAAW,CAAC,yBAAyB,EAAE;YACzC,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,WAAW,CAAC,yBAAyB,CAAC;YAC5G,IAAI,gBAAgB,EAAE;AACpB,gBAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,gBAAgB,CAAC;;;QAIvD,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAGvE;;AAEG;IACH,MAAM,iBAAiB,CAAC,MAAc,EAAA;AACpC,QAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,MAAM,CAAC;;AAGxD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC;AACnE,QAAA,MAAM,eAAe,GAAG,WAAW,EAAE,UAAU,IAAI,kBAAkB;AAErE,QAAA,IAAI;YACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,eAAe,CAAC;YAE/E,IAAI,SAAS,EAAE;AACf,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEtB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,MAAM;AAC7C,qBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,qBAAA,SAAS,CAAC;AACT,oBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,wBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;4BAClB,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,aAAA,EAAgB,eAAe,CAAA,sBAAA,CAAwB,CAAC;4BAC3F,IAAI,CAAC,gBAAgB,EAAE;;6BAClB;AACH,4BAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,8BAA8B,CAAC;;qBAEnE;AACD,oBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;wBACX,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,kDAAkD,CAAC;qBACpG;oBACD,QAAQ,EAAE,MAAK;AACb,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,iBAAA,CAAC;;;QAEJ,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;;;AAIzD;;AAEG;AACH,IAAA,uBAAuB,CAAC,MAAc,EAAA;AACpC,QAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,MAAM,CAAC;AAC9D,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEtB,QAAA,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,MAAM;AACnD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,gBAAgB,EAAE;;qBAClB;AACL,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC;;aAExD;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;gBACb,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,yCAAyC,CAAC;aACzE;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;IACH,iBAAiB,CAAC,MAAc,EAAE,WAAmB,EAAA;QACnD,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,MAAM,EAAE,WAAW,CAAC;QAErE,MAAM,OAAO,GAAG,MAAM,CAAC,iCAAiC,EAAE,WAAW,CAAC;AAEtE,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,WAAW,EAAE;AAC/D,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGtB,YAAA,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM;AAC9C,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;oBACjB,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;AACrC,wBAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI;;AAGjC,wBAAA,MAAM,kBAAkB,GAAwB;AAC9C,4BAAA,GAAG,WAAW;AACd,4BAAA,UAAU,EAAE,OAAO,CAAC,IAAI;yBACzB;;wBAGD,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,EAAE,kBAAkB;AACjE,6BAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,6BAAA,SAAS,CAAC;AACT,4BAAA,IAAI,EAAE,CAAC,cAAc,KAAI;AACvB,gCAAA,IAAI,cAAc,CAAC,OAAO,EAAE;AAC1B,oCAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC;oCACjD,IAAI,CAAC,gBAAgB,EAAE;;qCAClB;oCACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,IAAI,8BAA8B,CAAC;;6BAE3E;AACD,4BAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gCAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC;gCACnD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,8BAA8B,CAAC;6BAC9D;4BACD,QAAQ,EAAE,MAAK;AACb,gCAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,yBAAA,CAAC;;yBACC;AACL,wBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC;AAC7D,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;iBAE1B;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,oBAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,GAAG,CAAC;oBAChE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,gCAAgC,CAAC;AAC/D,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,aAAA,CAAC;;;AAIR;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;YAC7B,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAC3D;;AAGF,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;;AAGzC,QAAA,MAAM,WAAW,GAAwB;YACvC,GAAG,EAAE,IAAI,CAAC,oBAAoB,EAAE,EAAE,GAAG,IAAI,EAAE;YAC3C,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,UAAU,EAAE,SAAS,CAAC,UAAU;AAChC,YAAA,iBAAiB,EAAE,SAAS,CAAC,iBAAiB,IAAI,EAAE;AACpD,YAAA,mBAAmB,EAAE,SAAS,CAAC,mBAAmB,IAAI,SAAS;YAC/D,yBAAyB,EAAE,SAAS,CAAC,yBAAyB;YAC9D,2BAA2B,EAAE,SAAS,CAAC,2BAA2B;YAClE,cAAc,EAAE,SAAS,CAAC,cAAc;YACxC,mBAAmB,EAAE,SAAS,CAAC;SAChC;;AAGD,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,yBAAyB;YAC9F,CAAC,WAAW,CAAC,2BAA2B,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE;AAC9E,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC;YACpD;;QAGF,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;YACpD,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE,EAAE,GAAG;YAC/C,IAAI,MAAM,EAAE;gBACV,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,MAAM,EAAE,WAAW,CAAC;gBAC5D,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC;AACvE,oBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,wBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,4BAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC;4BACjD,IAAI,CAAC,iBAAiB,EAAE;AACxB,4BAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,4BAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;4BACnC,IAAI,CAAC,gBAAgB,EAAE;;6BAClB;4BACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,8BAA8B,CAAC;;qBAErE;AACD,oBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,wBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC;wBACnD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,8BAA8B,CAAC;;AAEhE,iBAAA,CAAC;;;aAEC;AACL,YAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,WAAW,CAAC;YACxD,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC;AAC/D,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,wBAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC;wBACjD,IAAI,CAAC,iBAAiB,EAAE;wBACxB,IAAI,CAAC,gBAAgB,EAAE;;yBAClB;wBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,8BAA8B,CAAC;;iBAErE;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,oBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC;oBACnD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,8BAA8B,CAAC;;AAEhE,aAAA,CAAC;;;AAIN;;AAEG;IACH,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC,QAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;AAEnC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACtB,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,iBAAiB,EAAE,EAAE;AACrB,YAAA,mBAAmB,EAAE,EAAE;AACvB,YAAA,yBAAyB,EAAE,EAAE;AAC7B,YAAA,2BAA2B,EAAE,EAAE;AAC/B,YAAA,cAAc,EAAE,IAAI;YACpB,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI;AAC3D,SAAA,CAAC;;AAGF,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGtB;;AAEG;AACH,IAAA,UAAU,CAAC,UAAsB,EAAA;AAC/B,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,UAAU,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,UAAU,CAAC,UAAU,CAAC;;AAGrD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGnC,QAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,UAAU,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,IAAI,CAAC,yBAAyB,EAAE,CAAC;;AAGrF,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3B,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,iBAAiB,EAAE,EAAE;YACrB,mBAAmB,EAAE,UAAU,CAAC,GAAG;AACnC,YAAA,yBAAyB,EAAE,UAAU,CAAC,yBAAyB,IAAI,EAAE;AACrE,YAAA,2BAA2B,EAAE,EAAE;AAC/B,YAAA,cAAc,EAAE,IAAI;YACpB,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI;AAC3D,SAAA,CAAC;;AAGF,QAAA,IAAI,UAAU,CAAC,yBAAyB,EAAE;YACxC,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,yBAAyB,CAAC;YACrG,IAAI,gBAAgB,EAAE;AACpB,gBAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,gBAAgB,CAAC;;;AAIvD,QAAA,OAAO,CAAC,GAAG,CAAC,4CAA4C,EAAE,IAAI,CAAC,yBAAyB,EAAE,EAAE,UAAU,CAAC;;AAGzG;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3B,YAAA,mBAAmB,EAAE;AACtB,SAAA,CAAC;;AAGJ;;AAEG;IACH,6BAA6B,GAAA;AAC3B,QAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3B,YAAA,yBAAyB,EAAE;AAC5B,SAAA,CAAC;;AAGJ;;AAEG;AACH,IAAA,kBAAkB,CAAC,UAAuB,EAAA;AACxC,QAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,UAAU,CAAC;AAC7D,QAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAU,CAAC;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;YAC3B,yBAAyB,EAAE,UAAU,CAAC;AACvC,SAAA,CAAC;;AAGJ;;AAEG;AACK,IAAA,kBAAkB,CAAC,KAAY,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAE1C,QAAA,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,8BAA8B,CAAC,EAAE;YAC3F,QAAQ,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAW,KAAI;gBACnE,MAAM,QAAQ,GAAG,EAAiB;AAClC,gBAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;AACrC,aAAC,CAAC;YAEF,QAAQ,CAAC,gBAAgB,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAC,CAAC,EAAW,KAAI;gBAChF,MAAM,MAAM,GAAG,EAAiB;AAChC,gBAAA,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;AAC/C,aAAC,CAAC;;;AAIN;;AAEG;AACK,IAAA,oBAAoB,CAAC,KAAY,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;QAC1C,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAgB;QAEnE,IAAI,YAAY,EAAE;YAChB,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,aAAa,CAAC;YACvD,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,cAAc,CAAC;AAExD,YAAA,IAAI,MAAM,IAAI,MAAM,EAAE;gBACpB,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;gBAEvB,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAgB;gBACvE,IAAI,QAAQ,EAAE;AACZ,oBAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;;gBAGrC,QAAQ,MAAM;AACZ,oBAAA,KAAK,MAAM;AACT,wBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;wBAC5B;AACF,oBAAA,KAAK,QAAQ;AACX,wBAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;wBACpC;AACF,oBAAA,KAAK,QAAQ;AACX,wBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;wBAC9B;;;;;AAMV;;AAEG;AACH,IAAA,cAAc,CAAC,MAAc,EAAA;QAC3B,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG;YACzD,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM,EAAE;AACjD,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;;AAEnC,SAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,gBAAA,EAAmB,MAAM,CAAA,EAAA,CAAI,CAAC;QACtE,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;;;AAI1C;;AAEG;IACH,uBAAuB,CAAC,MAAc,EAAE,MAAc,EAAA;AACpD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC;AAClE,QAAA,IAAI,CAAC,IAAI;YAAE;QAEX,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,gBAAA,EAAmB,MAAM,CAAA,EAAA,CAAI,CAAC;QACtE,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;;QAGrC,QAAQ,MAAM;AACZ,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;gBAC5B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;gBACpC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;gBAC9B;;;AAIN;;AAEG;AACH,IAAA,gBAAgB,CAAC,QAAiB,EAAA;QAChC,OAAO,QAAQ,GAAG,QAAQ,GAAG,UAAU;;AAGzC;;AAEG;AACH,IAAA,cAAc,CAAC,QAAiB,EAAA;QAC9B,OAAO,QAAQ,GAAG,mCAAmC,GAAG,+BAA+B;;AAGzF;;AAEG;AACH,IAAA,gBAAgB,CAAC,GAAqB,EAAA;;AAEpC,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE;YAC7B,OAAO;AACL,gBAAA;AACE,oBAAA,EAAE,EAAE,gBAAgB;AACpB,oBAAA,KAAK,EAAE,iBAAiB;AACxB,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,SAAS,EAAE,kBAAkB;AAC7B,oBAAA,SAAS,EAAE,kBAAkB;AAC7B,oBAAA,YAAY,EAAE;AACf;aACF;;aACI;;YAEL,OAAO;AACL,gBAAA;AACE,oBAAA,EAAE,EAAE,MAAM;AACV,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,SAAS,EAAE,kBAAkB;AAC7B,oBAAA,SAAS,EAAE,kBAAkB;AAC7B,oBAAA,YAAY,EAAE;AACf,iBAAA;AACD,gBAAA;AACE,oBAAA,EAAE,EAAE,UAAU;AACd,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,SAAS,EAAE,kBAAkB;AAC7B,oBAAA,SAAS,EAAE,kBAAkB;AAC7B,oBAAA,YAAY,EAAE;AACf,iBAAA;AACD,gBAAA;AACE,oBAAA,EAAE,EAAE,QAAQ;oBACZ,KAAK,EAAE,GAAG,CAAC,MAAM,GAAG,YAAY,GAAG,UAAU;AAC7C,oBAAA,IAAI,EAAE,oBAAoB;AAC1B,oBAAA,SAAS,EAAE,kBAAkB;AAC7B,oBAAA,SAAS,EAAE,kBAAkB;AAC7B,oBAAA,YAAY,EAAE;AACf,iBAAA;AACD,gBAAA;AACE,oBAAA,EAAE,EAAE,QAAQ;AACZ,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,SAAS,EAAE,iBAAiB;AAC5B,oBAAA,SAAS,EAAE,iBAAiB;AAC5B,oBAAA,YAAY,EAAE;AACf;aACF;;;AAIL;;AAEG;IACH,mBAAmB,CAAC,IAAkB,EAAE,GAAqB,EAAA;QAC3D,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,IAAI,EAAE,GAAG,CAAC;AAE7D,QAAA,QAAQ,IAAI,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,EAAE;AAC9B,oBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;;gBAE/B;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,EAAE;;oBAE9B,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC;oBACpE,IAAI,WAAW,EAAE;AACf,wBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;;;gBAGhC;AACF,YAAA,KAAK,gBAAgB;AACnB,gBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE;;AAE7B,oBAAA,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;AACjD,oBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,CAAC;oBACvE,IAAI,UAAU,EAAE;wBACd,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,UAAU,CAAC,WAAW,CAAC;AAC3E,wBAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC;;AAEnC,wBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,wBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;AACnC,wBAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC;wBACxC,IAAI,CAAC,iBAAiB,EAAE;;;gBAG5B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,EAAE;AAC9B,oBAAA,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC;;gBAEvC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,EAAE;AAC9B,oBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC;;gBAEjC;AACF,YAAA;gBACE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,EAAE,CAAC;;QAG9C,IAAI,CAAC,iBAAiB,EAAE;;AAG1B;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxD,QAAA,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;;AAG/B;;AAEG;IACH,aAAa,CAAC,KAAa,EAAE,IAAgB,EAAA;AAC3C,QAAA,OAAO,IAAI,CAAC,GAAG,IAAI,EAAE;;uGA1+CZ,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,oCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9C7C,syUAiRe,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjPX,YAAY,8HACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,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,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,wBAAwB,mRACxB,sBAAsB,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,IAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,mBAAmB,2ZACnB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKf,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAlB5C,SAAS;+BACE,4BAA4B,EAAA,UAAA,EAC1B,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,WAAW;wBACX,wBAAwB;wBACxB,sBAAsB;wBACtB,kBAAkB;wBAClB,mBAAmB;wBACnB,qBAAqB;wBACrB,iBAAiB;wBACjB;AACD,qBAAA,EAAA,QAAA,EAAA,syUAAA,EAAA;;;;;;;;AE1CH;;MC6Ba,+BAA+B,CAAA;;AAElC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,iBAAiB,GAAG,MAAM,CAAC,mCAAmC,CAAC;AAC/D,IAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACxC,IAAA,EAAE,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACnC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;;AAGzD,IAAA,0BAA0B,GAAG,SAAS,CAAC,QAAQ,CAAwD,4BAA4B,CAAC;AACpI,IAAA,iCAAiC,GAAG,SAAS,CAAC,QAAQ,CAAwD,mCAAmC,CAAC;AAClJ,IAAA,gCAAgC,GAAG,SAAS,CAAC,QAAQ,CAAwD,kCAAkC,CAAC;AAChJ,IAAA,+BAA+B,GAAG,SAAS,CAAC,QAAQ,CAAwD,iCAAiC,CAAC;;IAI9I,IAAI,GAAG,IAAI;;AAGX,IAAA,WAAW,GAAG,MAAM,CAAgB,EAAE,uDAAC;AACvC,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,aAAa,GAAG,MAAM,CAAW,EAAE,yDAAC;AACpC,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;;AAGvB,IAAA,mBAAmB,GAAG,MAAM,CAAqB,IAAI,+DAAC;;AAGtD,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;;AAG1B,IAAA,eAAe,GAAG,MAAM,CAAC,KAAK,2DAAC;;AAG/B,IAAA,WAAW,GAAG,MAAM,CAAC,CAAC,uDAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,EAAE,oDAAC;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC;;AAGtB,IAAA,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AAC3B,QAAA,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1G,QAAA,kBAAkB,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACpE,QAAA,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/F,QAAA,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7D,qBAAqB,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;AACtG,KAAA,CAAC;;IAGF,UAAU,GAAG,MAAM,CAAiC;AAClD,QAAA,EAAE,EAAE,uBAAuB;AAC3B,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,GAAG,EAAE,YAAY;AACjB,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,aAAa;AACrB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,iBAAiB;AACtB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA;AACD,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE;AACR,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,cAAc;AAC1B,YAAA,SAAS,EAAE,6BAA6B;AACxC,YAAA,SAAS,EAAE;AACZ,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,wBAAwB;AACrC,YAAA,iBAAiB,EAAE,CAAC,aAAa,EAAE,oBAAoB,CAAC;AACxD,YAAA,UAAU,EAAE;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,SAAS,EAAE;AACZ,SAAA;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE,0CAA0C;AACtD,QAAA,SAAS,EAAE;AACZ,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGF,IAAA,iBAAiB,GAAG,QAAQ,CAAC,OAAqD;AAChF,QAAA,kBAAkB,EAAE,IAAI,CAAC,0BAA0B,EAAE;AACrD,QAAA,yBAAyB,EAAE,IAAI,CAAC,iCAAiC,EAAE;AACnE,QAAA,wBAAwB,EAAE,IAAI,CAAC,gCAAgC,EAAE;AACjE,QAAA,uBAAuB,EAAE,IAAI,CAAC,+BAA+B;AAC9D,KAAA,CAAC,6DAAC;AAEH;;AAEG;IACH,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;;;AAIjC,IAAA,eAAe,GAAG,QAAQ,CAAC,OAAO;QAChC,GAAG,IAAI,CAAC,iBAAiB;AAC1B,KAAA,CAAC,2DAAC;AAEH;;AAEG;IACH,kBAAkB,GAAA;AAChB,QAAA,OAAO,EAAE;;;AAIX,IAAA,cAAc,GAAG;AACf,QAAA,gBAAgB,EAAE,CAAC,GAAgB,KAAK,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;AAC1E,QAAA,kBAAkB,EAAE,CAAC,GAAgB,KAAK,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;AACpF,QAAA,kBAAkB,EAAE,CAAC,GAAgB,KAAK,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;QAC9E,oBAAoB,EAAE,CAAC,GAAgB,KAAK,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;AAC1E,QAAA,mBAAmB,EAAE,MAAM,IAAI,CAAC,mBAAmB,EAAE;AACrD,QAAA,UAAU,EAAE,MAAM,IAAI,CAAC,cAAc,EAAE;AACvC,QAAA,SAAS,EAAE,MAAM,IAAI,CAAC,mBAAmB;KAC1C;;AAGD,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE;AAE/C,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;AAEzB,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IAAG;YACzB,OAAO,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACrD,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC3D,SAAC,CAAC;AACJ,KAAC,yDAAC;AAEF,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC,wDAAC;;IAG9D,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAC3E,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,uDAAC;AACpE,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,2DAAC;;IAGxD,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGrD,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC7B,IAAI,CAAC,qBAAqB,EAAE;AAC9B,SAAC,CAAC;;AAGJ;;AAEG;IACK,mBAAmB,GAAA;AACzB,QAAA,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC;QACvF,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,qBAAqB,EAAE;;AAG9B;;AAEG;IACK,mBAAmB,GAAA;AACzB,QAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtE,QAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAG1E;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzE,QAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAG7E;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAChC,MAA8D,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9G,MAAsF,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAI3J;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC;AAC1E,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAEpB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE;AACxB,YAAA,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE;AAC7B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU;SACvB;AACD,QAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,WAAW,CAAC;AAE5C,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC;AACrD,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,sCAAsC,CAAC;AACtD,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YACvB;;AAGF,QAAA,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,WAAW;AACjD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,uDAAuD,EAAE,QAAQ,CAAC;AAC9E,gBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;oBACrB,OAAO,CAAC,GAAG,CAAC,8CAA8C,EAAE,QAAQ,CAAC,IAAI,CAAC;AAC1E,oBAAA,MAAM,cAAc,GAAG,QAAQ,EAAE,IAAI,IAAI,EAAE;AAC3C,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC;oBACpC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;AACxC,oBAAA,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;;AAInC,oBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;AACtB,wBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE;wBAC3C,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;;;qBAEtD;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,QAAQ,CAAC;AACzD,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC;;aAEhD;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,GAAG,CAAC;gBAC9D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,8CAA8C,CAAC;aAC9E;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC;AACxE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;AACK,IAAA,cAAc,CAAC,WAA0B,EAAA;AAC/C,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,WAAW,CAAC;;AAG1D,QAAA,MAAM,SAAS,GAAmC;YAChD,GAAG,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC;SACvB;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AAC9B,QAAA,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC;;AAGjF;;AAEG;AACH,IAAA,WAAW,CAAC,KAA6B,EAAA;AACvC,QAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC;AACjC,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAc,CAAC;AACzC,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,eAAe,EAAE;gBACtB;YACF,KAAK,YAAY,EAAE;AACjB,gBAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAA0C;gBACjE,IAAI,QAAQ,EAAE;oBACZ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBACpC,IAAI,CAAC,eAAe,EAAE;;qBACjB;AACL,oBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAc;oBACjC,IAAI,IAAI,EAAE;AACR,wBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;wBAC1B,IAAI,CAAC,eAAe,EAAE;;;gBAG1B;;AAEF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,mBAAmB,EAAE;gBAC1B;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAmB,CAAC;gBACpD;AACF,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAA6E,CAAC;gBAC7G;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE;AAChC,oBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAc,CAAC;;qBACpC,IAAI,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,EAAE;AACzC,oBAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAc,CAAC;;qBAC5C,IAAI,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,EAAE;AACzC,oBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAc,CAAC;;gBAE7C;;;AAIN;;AAEG;IACH,mBAAmB,GAAA;QACjB,IAAI,CAAC,eAAe,EAAE;;AAGxB;;AAEG;AACH,IAAA,mBAAmB,CAAC,IAAsG,EAAA;AACxH,QAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC;;AAIlD,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,QAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;;AAGzC;;AAEG;IACK,0BAA0B,GAAA;;AAEhC,QAAA,MAAM,SAAS,GAAmC;YAChD,GAAG,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;SAC9B;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AAC9B,QAAA,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC;;AAG7E;;;AAGG;IACH,mBAAmB,GAAA;AACjB,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;;;;AAK7C,QAAA,MAAM,OAAO,GAAqC;AAChD,YAAA,qBAAqB,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK;AACrD,gBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;AACzB,gBAAA,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI;AACpC,aAAA,CAAC;SACH;AAED,QAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,OAAO,CAAC;;AAG3D,QAAA,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,OAAO;AACpD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAoD,KAAI;AAC7D,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,oBAAA,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC;AAC1D,oBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,2CAA2C,CAAC;;AAE7E,oBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;;oBAE/B,IAAI,CAAC,eAAe,EAAE;;qBACjB;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,QAAQ,CAAC;AACnE,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC;AACvD,oBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,uCAAuC,CAAC;;aAE1E;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC;AAC9D,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC;AACvD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA,qCAAA,EAAwC,KAAK,CAAC,OAAO,IAAI,wBAAwB,CAAA,CAAE,CAAC;;AAEtH,SAAA,CAAC;;AAGN;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC;;AAGxD,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AAC/B,QAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC;;AAGhD;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE;;AAM/B;;AAEG;AACH,IAAA,oBAAoB,CAAC,UAAuB,EAAA;QAC1C,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,IAAI,EAAE,CAAC;;AAG3C;;AAEG;AACH,IAAA,cAAc,CAAC,MAAc,EAAA;AAC3B,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,MAAM,CAAC;AACrD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;;AAGhC;;AAEG;AACH,IAAA,iBAAiB,CAAC,MAAc,EAAA;AAC9B,QAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,MAAM,CAAC;AACxD,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,MAAM,OAAO,GAA8B,EAAE,SAAS,EAAE,MAAM,EAAE;AAChE,QAAA,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,OAAO;AAC7C,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE,QAAQ,CAAC,IAAI,CAAC;oBACnE,IAAI,UAAU,GAAuB,IAAI;AACzC,oBAAA,UAAU,GAAG,QAAQ,CAAC,IAAI,IAAI,IAAI;AAElC,oBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC;AAExC,oBAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,UAAU,EAAE;AACnC,wBAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;;;qBAEjC;AACL,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC;;aAEnD;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;gBACb,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,oDAAoD,CAAC;aACpF;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;AACH,IAAA,mBAAmB,CAAC,UAAuB,EAAA;AACzC,QAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,UAAU,CAAC;AAE9D,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3B,YAAA,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,EAAE;AACzC,YAAA,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,IAAI,EAAE;AACvD,YAAA,YAAY,EAAE,UAAU,CAAC,YAAY,IAAI,CAAC;AAC1C,YAAA,eAAe,EAAE,UAAU,CAAC,eAAe,IAAI,IAAI;AACnD,YAAA,qBAAqB,EAAE,UAAU,CAAC,qBAAqB,IAAI;AAC5D,SAAA,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAGvE;;AAEG;IACH,MAAM,gBAAgB,CAAC,MAAc,EAAA;AACnC,QAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,MAAM,CAAC;;AAGvD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC;AACvE,QAAA,MAAM,cAAc,GAAG,UAAU,EAAE,WAAW,IAAI,kBAAkB;AAEpE,QAAA,IAAI;;YAEF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,cAAc,CAAC;YAE9E,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEtB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,MAAM;AAC3C,qBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,qBAAA,SAAS,CAAC;AACT,oBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,wBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;4BACpB,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,aAAA,EAAgB,cAAc,CAAA,gCAAA,CAAkC,CAAC;4BAClG,IAAI,CAAC,eAAe,EAAE;;6BACjB;AACL,4BAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC;AAC9C,4BAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,iDAAiD,CAAC;;qBAEpF;AACD,oBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;wBACb,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,kDAAkD,CAAC;AACjF,wBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA,4BAAA,EAA+B,GAAG,CAAC,OAAO,IAAI,wBAAwB,CAAA,CAAE,CAAC;qBACzG;oBACD,QAAQ,EAAE,MAAK;AACb,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,iBAAA,CAAC;;;QAEN,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC;;;AAIxD;;AAEG;AACH,IAAA,MAAM,yBAAyB,GAAA;AAC7B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE;AACxC,QAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,uCAAuC,CAAC;YACzE;;;QAIF,MAAM,mBAAmB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;AACnG,QAAA,MAAM,eAAe,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAEpF,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM;AAEhC,QAAA,IAAI;YACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;AACnD,gBAAA,KAAK,EAAE,qBAAqB;AAC5B,gBAAA,OAAO,EAAE,CAAA,gCAAA,EAAmC,KAAK,CAAA,YAAA,EAAe,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAA,eAAA,EAAkB,eAAe,CAAA,iCAAA,CAAmC;AACxJ,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,IAAI,EAAE,gBAAgB;AACtB,gBAAA,WAAW,EAAE,CAAA,OAAA,EAAU,KAAK,CAAA,KAAA,EAAQ,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAA,CAAE;AAC1D,gBAAA,UAAU,EAAE;AACb,aAAA,CAAC;YAEF,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEtB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,WAAW;AACzD,qBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,qBAAA,SAAS,CAAC;AACT,oBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,wBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;4BACpB,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,EAAG,KAAK,eAAe,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAA,sBAAA,CAAwB,CAAC;AACrG,4BAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;4BAC1B,IAAI,CAAC,eAAe,EAAE;;6BACjB;AACL,4BAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC;AAC/C,4BAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,kDAAkD,CAAC;;qBAErF;AACD,oBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;wBACb,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,+CAA+C,CAAC;AAC9E,wBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA,6BAAA,EAAgC,GAAG,CAAC,OAAO,IAAI,wBAAwB,CAAA,CAAE,CAAC;qBAC1G;oBACD,QAAQ,EAAE,MAAK;AACb,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,iBAAA,CAAC;;;QAEN,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC;;;AAI7D;;AAEG;AACH,IAAA,sBAAsB,CAAC,MAAc,EAAA;AACnC,QAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,MAAM,CAAC;AAC7D,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEtB,QAAA,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,MAAM;AACjD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,eAAe,EAAE;;qBACjB;AACL,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC;;aAExD;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;gBACb,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,yCAAyC,CAAC;aACzE;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;IACH,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE;AAE/B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;;AAGzC,QAAA,IAAI,KAAK,GAAG,SAAS,CAAC,YAAY;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;AACtB,YAAA,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE;;AAGnC,QAAA,MAAM,UAAU,GAAyB;YACvC,GAAG,EAAE,IAAI,CAAC,mBAAmB,EAAE,EAAE,GAAG,IAAI,EAAE;YAC1C,WAAW,EAAE,SAAS,CAAC,WAAW;AAClC,YAAA,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,IAAI,EAAE;AACtD,YAAA,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,SAAS,CAAC,eAAe;YAC1C,qBAAqB,EAAE,SAAS,CAAC;SAClC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;YACnD,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE,EAAE,GAAG;YAC9C,IAAI,MAAM,EAAE;AACV,gBAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,MAAM,CAAC;gBAC/C,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC;AACpE,oBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,wBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,4BAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC;4BACjD,IAAI,CAAC,iBAAiB,EAAE;AACxB,4BAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,4BAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;4BAClC,IAAI,CAAC,eAAe,EAAE;;qBAEzB;oBACD,KAAK,EAAE,MAAK;AACV,wBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC;;AAEjD,iBAAA,CAAC;;;aAEC;AACL,YAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;YAC1C,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC;AAC5D,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,wBAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC;wBACjD,IAAI,CAAC,iBAAiB,EAAE;wBACxB,IAAI,CAAC,eAAe,EAAE;;iBAEzB;gBACD,KAAK,EAAE,MAAK;AACV,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC;;AAEjD,aAAA,CAAC;;;AAIN;;AAEG;IACK,kBAAkB,GAAA;AACxB,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,EAAE;AAC7C,QAAA,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC,YAAA,OAAO,CAAC;;QAGV,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;QACtF,OAAO,QAAQ,GAAG,CAAC;;AAGrB;;AAEG;IACH,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGlC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAE3C,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACtB,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,kBAAkB,EAAE,EAAE;AACtB,YAAA,YAAY,EAAE,SAAS;AACvB,YAAA,eAAe,EAAE,IAAI;YACrB,qBAAqB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI;AAC7D,SAAA,CAAC;;AAGJ;;AAEG;AACK,IAAA,kBAAkB,CAAC,KAAY,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAE1C,QAAA,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,8BAA8B,CAAC,EAAE;YAC3F,QAAQ,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAW,KAAI;gBACnE,MAAM,QAAQ,GAAG,EAAiB;AAClC,gBAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;AACrC,aAAC,CAAC;YAEF,QAAQ,CAAC,gBAAgB,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAC,CAAC,EAAW,KAAI;gBAChF,MAAM,MAAM,GAAG,EAAiB;AAChC,gBAAA,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;AAC/C,aAAC,CAAC;;;AAIN;;AAEG;AACK,IAAA,oBAAoB,CAAC,KAAY,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;QAC1C,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAgB;QAEnE,IAAI,YAAY,EAAE;YAChB,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,aAAa,CAAC;YACvD,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,cAAc,CAAC;AAExD,YAAA,IAAI,MAAM,IAAI,MAAM,EAAE;gBACpB,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;gBAEvB,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAgB;gBACvE,IAAI,QAAQ,EAAE;AACZ,oBAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;;gBAGrC,QAAQ,MAAM;AACZ,oBAAA,KAAK,MAAM;AACT,wBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;wBAC3B;AACF,oBAAA,KAAK,QAAQ;AACX,wBAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;wBACnC;AACF,oBAAA,KAAK,QAAQ;AACX,wBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;wBAC7B;;;;;AAMV;;AAEG;AACH,IAAA,cAAc,CAAC,MAAc,EAAA;QAC3B,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG;YACzD,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM,EAAE;AACjD,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;;AAEnC,SAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,gBAAA,EAAmB,MAAM,CAAA,EAAA,CAAI,CAAC;QACtE,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;;;AAI1C;;AAEG;IACH,sBAAsB,CAAC,MAAc,EAAE,MAAc,EAAA;AACnD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC;AACjE,QAAA,IAAI,CAAC,IAAI;YAAE;QAEX,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,gBAAA,EAAmB,MAAM,CAAA,EAAA,CAAI,CAAC;QACtE,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;;QAGrC,QAAQ,MAAM;AACZ,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;gBAC3B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;gBACnC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBAC7B;;;AAIN;;AAEG;AACH,IAAA,gBAAgB,CAAC,QAAiB,EAAA;QAChC,OAAO,QAAQ,GAAG,QAAQ,GAAG,UAAU;;AAGzC;;AAEG;AACH,IAAA,cAAc,CAAC,QAAiB,EAAA;QAC9B,OAAO,QAAQ,GAAG,mCAAmC,GAAG,+BAA+B;;AAGzF;;AAEG;AACH,IAAA,gBAAgB,CAAC,GAAgB,EAAA;QAC/B,OAAO;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;gBACZ,KAAK,EAAE,GAAG,CAAC,eAAe,GAAG,YAAY,GAAG,UAAU;AACtD,gBAAA,IAAI,EAAE,oBAAoB;AAC1B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,SAAS,EAAE,iBAAiB;AAC5B,gBAAA,SAAS,EAAE,iBAAiB;AAC5B,gBAAA,YAAY,EAAE;AACf;SACF;;AAGH;;AAEG;IACH,mBAAmB,CAAC,IAAkB,EAAE,GAAgB,EAAA;QACtD,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,IAAI,EAAE,GAAG,CAAC;AAE7D,QAAA,QAAQ,IAAI,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;gBAClC;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;gBAC1C;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;gBACpC;AACF,YAAA;gBACE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,EAAE,CAAC;;QAG9C,IAAI,CAAC,iBAAiB,EAAE;;AAG1B;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxD,QAAA,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;;AAG/B;;AAEG;IACH,aAAa,CAAC,KAAa,EAAE,IAAiB,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC,GAAG,IAAI,EAAE;;uGAv5BZ,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,4BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,4BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7B5C,0iMAgL4D,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjKxD,YAAY,8HACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,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,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,wBAAwB,mRACxB,sBAAsB,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,IAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,qBAAqB,0UACrB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,iCAAiC,EAAA,QAAA,EAAA,6BAAA,EAAA,CAAA,EAAA,CAAA;;2FAKxB,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAlB3C,SAAS;+BACE,4BAA4B,EAAA,UAAA,EAC1B,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,WAAW;wBACX,wBAAwB;wBACxB,sBAAsB;wBACtB,kBAAkB;wBAClB,qBAAqB;wBACrB,iBAAiB;wBACjB,wBAAwB;wBACxB;AACD,qBAAA,EAAA,QAAA,EAAA,0iMAAA,EAAA;;;;;;;;AEzBH;;MC0Ba,6BAA6B,CAAA;AACpB,IAAA,IAAA;AAApB,IAAA,WAAA,CAAoB,IAAgB,EAAA;QAAhB,IAAA,CAAA,IAAI,GAAJ,IAAI;;AAExB;;AAEG;AACH,IAAA,WAAW,CAAC,IAAkB,EAAA;AAC5B,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC;QAC5C,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAAgC,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAC1J,aAAA,IAAI,CACH,UAAU,CAAC,KAAK,IAAG;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC;AAChE,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;SAC/B,CAAC,CACH;;AAGL;;AAEG;AACH,IAAA,kBAAkB,CAAC,OAAwC,EAAA;QACzD,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QAC7G,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAA4C,GAAG,EAAE,OAAO;aAC1E,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAIL;;AAEG;AACH,IAAA,WAAW,CAAC,EAAU,EAAA;AACpB,QAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,EAAE,CAAC;AACtC,QAAA,MAAM,OAAO,GAA+B,EAAE,OAAO,EAAE,EAAE,EAAE;AAC3D,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC5H,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAoC,GAAG;aACxD,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,UAAU,CAAC,EAAU,EAAA;AACnB,QAAA,MAAM,OAAO,GAA8B,EAAE,OAAO,EAAE,EAAE,EAAE;AAC1D,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACpH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAsC,GAAG;aAC7D,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAKL;;AAEG;AACH,IAAA,gBAAgB,CAAC,OAAwC,EAAA;AACvD,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACpH,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA4C,GAAG,EAAE,EAAE;aACpE,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,YAAY,CAAC,OAA2C,EAAA;AACtD,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;AACvI,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA+C,GAAG;aACnE,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,mBAAmB,CAAC,OAA2C,EAAA;QAC7D,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CACpC,GAAG,CAAC,CAAC,QAAsD,KAAK,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC,CAC3F;;AAKH;;AAEG;AACK,IAAA,WAAW,CAAC,KAAc,EAAA;QAChC,IAAI,YAAY,GAAG,mBAAmB;AAEtC,QAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,YAAA,YAAY,GAAG,KAAK,CAAC,OAAO;;AACvB,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,YAAY,GAAG,KAAK;;AAGtB,QAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,YAAY,CAAC;QAC7D,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;;uGA1GvC,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,cAF5B,MAAM,EAAA,CAAA;;2FAEP,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCDY,yBAAyB,CAAA;;AAE5B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,WAAW,GAAG,MAAM,CAAC,6BAA6B,CAAC;AACnD,IAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACxC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;;AAG/B,IAAA,2BAA2B,GAAG,SAAS,CAAC,QAAQ,CAAwD,6BAA6B,CAAC;AACtI,IAAA,0BAA0B,GAAG,SAAS,CAAC,QAAQ,CAAwD,4BAA4B,CAAC;AACpI,IAAA,+BAA+B,GAAG,SAAS,CAAC,QAAQ,CAAwD,iCAAiC,CAAC;;IAG9I,IAAI,GAAG,IAAI;;AAGX,IAAA,KAAK,GAAG,MAAM,CAAc,EAAE,iDAAC;AAC/B,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,aAAa,GAAG,MAAM,CAAW,EAAE,yDAAC;AACpC,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;;AAGvB,IAAA,WAAW,GAAG,MAAM,CAAC,CAAC,uDAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,EAAE,oDAAC;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC;;IAGtB,UAAU,GAAG,MAAM,CAA+B;AAChD,QAAA,EAAE,EAAE,gBAAgB;AACpB,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,cAAc;AACtB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,gBAAgB;AACrB,gBAAA,MAAM,EAAE,WAAW;AACnB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE;AACR,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,eAAe;AACpB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA;AACD,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,iBAAiB;AAC9B,YAAA,iBAAiB,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,gBAAgB,CAAC;AAChE,YAAA,UAAU,EAAE;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,SAAS,EAAE;AACZ,SAAA;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE;AACV,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGF,IAAA,cAAc,GAAG;QACf,MAAM,EAAE,CAAC,IAAe,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAChD,QAAQ,EAAE,CAAC,IAAe,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACpD,cAAc,EAAE,CAAC,IAAe,KAAK,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAChE,cAAc,EAAE,CAAC,IAAe,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QAC5D,gBAAgB,EAAE,CAAC,IAAe,KAAK,IAAI,CAAC,cAAc,CAAC,IAAI;KAChE;AAED,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,mBAAmB,EAAE;;AAG5B;;AAEG;IACK,mBAAmB,GAAA;QACzB,IAAI,CAAC,SAAS,EAAE;;AAGlB;;AAEG;IACK,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAEpB,QAAA,MAAM,OAAO,GAAiB;AAC5B,YAAA,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE;AAC7B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI;SAC7B;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO;AACjC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAuC,KAAI;AAChD,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;oBACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;oBACxC,IAAI,CAAC,cAAc,EAAE;;qBAChB;oBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,sBAAsB,CAAC;;AAE5D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC;AAC5C,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC;AACzD,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;IACK,cAAc,GAAA;QACpB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK;AAChC,YAAA,GAAG,MAAM;AACT,YAAA,IAAI,EAAE,IAAI,CAAC,KAAK;AACjB,SAAA,CAAC,CAAC;;AAGL;;AAEG;IACH,oBAAoB,GAAA;QAClB,OAAO;AACL,YAAA,mBAAmB,EAAE,IAAI,CAAC,2BAA2B,EAAE;AACvD,YAAA,kBAAkB,EAAE,IAAI,CAAC,0BAA0B,EAAE;AACrD,YAAA,uBAAuB,EAAE,IAAI,CAAC,+BAA+B;SAC9D;;AAGH;;AAEG;AACH,IAAA,WAAW,CAAC,KAA2B,EAAA;AACrC,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,YAAY;AACf,gBAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,KAAK,CAAC;gBAC3C,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,UAAU,IAAI,KAAK,CAAC,IAAI,EAAE;AACpG,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAW,CAAC;AAClD,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAW,CAAC;oBACnD,IAAI,CAAC,SAAS,EAAE;;gBAElB;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAc,CAAC;AACzC,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,SAAS,EAAE;gBAChB;AACF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,SAAS,EAAE;gBAChB;AACF,YAAA,KAAK,QAAQ;;AAEX,gBAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;gBACnC;AACF,YAAA,KAAK,UAAU;;AAEb,gBAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC;gBACtC;AACF,YAAA,KAAK,MAAM;;AAET,gBAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC;gBACjC;AACF,YAAA,KAAK,QAAQ;;AAEX,gBAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;gBACnC;AACF,YAAA,KAAK,YAAY;;AAEf,gBAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC;gBACxC;;;AAIN;;AAEG;IACH,UAAU,GAAA;QACR,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,0BAA0B,CAAC,CAAC;;AAGpD;;AAEG;AACH,IAAA,QAAQ,CAAC,IAAe,EAAA;QACtB,MAAM,KAAK,GAAW,wBAAwB,CAAC;YAC7C,OAAO,EAAE,IAAI,CAAC,GAAG;YACjB,UAAU,EAAE,IAAI,CAAC;AAClB,SAAA,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;;AAG3D;;AAEG;AACH,IAAA,UAAU,CAAC,IAAe,EAAA;QACxB,IAAI,OAAO,CAAC,CAAA,0CAAA,EAA6C,IAAI,CAAC,UAAU,CAAA,EAAA,CAAI,CAAC,EAAE;AAC7E,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE;AACvC,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;wBACpB,IAAI,CAAC,SAAS,EAAE;AAChB,wBAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;;yBACrC;wBACL,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,QAAQ,CAAC,OAAO,CAAC;;AAE7D,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;iBACxB;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,oBAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC;AAC5C,oBAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC;AAC3D,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,aAAA,CAAC;;;AAIR;;AAEG;AACH,IAAA,gBAAgB,CAAC,IAAe,EAAA;AAC9B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE;AAC9F,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,SAAS,EAAE;AAChB,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,OAAA,EAAU,IAAI,CAAC,aAAa,GAAG,aAAa,GAAG,WAAW,CAAA,aAAA,CAAe,CAAC;;qBACjF;oBACL,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,QAAQ,CAAC,OAAO,CAAC;;AAEpE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;AACnD,gBAAA,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC;AAClE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;AACH,IAAA,YAAY,CAAC,IAAe,EAAA;AAC1B,QAAA,MAAM,KAAK,GAAW,wBAAwB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AAClG,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,eAAe,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;;AAG9D;;AAEG;AACH,IAAA,cAAc,CAAC,IAAe,EAAA;AAC5B,QAAA,MAAM,KAAK,GAAW,wBAAwB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AAClG,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,eAAe,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;;AAGjE;;AAEG;AACH,IAAA,sBAAsB,CAAC,IAAe,EAAA;QACpC,OAAO;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,UAAU;AACd,gBAAA,KAAK,EAAE,iBAAiB;AACxB,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;gBACZ,KAAK,EAAE,IAAI,CAAC,aAAa,GAAG,YAAY,GAAG,UAAU;gBACrD,IAAI,EAAE,IAAI,CAAC,aAAa,GAAG,OAAO,GAAG,cAAc;AACnD,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,QAAQ,EAAE;AACX;SACF;;AAGH;;;AAGG;IACH,mBAAmB,CAAC,IAAkB,EAAE,GAAc,EAAA;QACpD,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,IAAI,EAAE,GAAG,CAAC;AAE7D,QAAA,QAAQ,IAAI,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,GAAG,CAAC;AAC7C,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAClB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,GAAG,CAAC;AACjD,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;gBACtB;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,GAAG,CAAC;AACnD,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;gBACxB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,GAAG,CAAC;AACrD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;gBAC1B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,GAAG,CAAC;AAC/C,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBACpB;AACF,YAAA;gBACE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,EAAE,CAAC;;;QAI9C,IAAI,CAAC,iBAAiB,EAAE;;AAG1B;;AAEG;IACK,iBAAiB,GAAA;;AAEvB,QAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxD,QAAA,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;;uGApYpB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,6BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,6BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,4BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,4BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxBtC,mkIA0Ge,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1FX,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,EACZ,wBAAwB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,sBAAsB,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIf,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAZrC,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,wBAAwB;wBACxB,sBAAsB;wBACtB,iBAAiB;wBACjB;AACD,qBAAA,EAAA,QAAA,EAAA,mkIAAA,EAAA;;;;;;;;MEKU,wBAAwB,CAAA;AAGf,IAAA,IAAA;AAFZ,IAAA,MAAM,GAAG,CAAA,EAAG,aAAa,EAAE,SAAS,EAAE;AAE9C,IAAA,WAAA,CAAoB,IAAgB,EAAA;QAAhB,IAAA,CAAA,IAAI,GAAJ,IAAI;AACtB,QAAA,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC;;AAGtE;;AAEG;AACH,IAAA,YAAY,CAAC,IAAuB,EAAA;AAClC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC;QAC5C,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAAqC,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACpK,aAAA,IAAI,CACH,UAAU,CAAC,KAAK,IAAG;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC;AAC3D,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;SAC/B,CAAC,CACH;;AAGL;;AAEG;AACH,IAAA,WAAW,CAAC,OAA6C,EAAA;AACvD,QAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC;QAEvC,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QAClH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAiD,GAAG,EAAE,OAAO;aAC/E,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,WAAW,CAAC,OAA6C,EAAA;AACvD,QAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC;QAEvC,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QAClH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAiD,GAAG,EAAE,OAAO;aAC/E,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,YAAY,CAAC,EAAU,EAAA;AACrB,QAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,EAAE,CAAC;AACvC,QAAA,MAAM,OAAO,GAAoC,EAAE,OAAO,EAAE,EAAE,EAAE;AAChE,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACjI,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAyC,GAAG;aAC7D,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,iBAAiB,CAAC,MAAc,EAAA;AAC9B,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,MAAM,CAAC;AACjD,QAAA,MAAM,OAAO,GAAqC,EAAE,iBAAiB,EAAE,MAAM,EAAE;AAC/E,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACnI,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA6C,GAAG;aACjE,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,WAAW,CAAC,EAAU,EAAA;AACpB,QAAA,MAAM,OAAO,GAAmC,EAAE,OAAO,EAAE,EAAE,EAAE;AAC/D,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACzH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAA2C,GAAG;aAClE,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,iBAAiB,CAAC,OAA6C,EAAA;AAC7D,QAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,OAAO,CAAC;AAC9C,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACzH,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAiD,GAAG,EAAE,EAAE;aACzE,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAKL;;AAEG;AACK,IAAA,WAAW,CAAC,KAAc,EAAA;QAChC,IAAI,YAAY,GAAG,mBAAmB;AAEtC,QAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,YAAA,YAAY,GAAG,KAAK,CAAC,OAAO;;AACvB,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,YAAY,GAAG,KAAK;;AAGtB,QAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,YAAY,CAAC;QACxD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;;uGApHvC,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFvB,MAAM,EAAA,CAAA;;2FAEP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCOY,0BAA0B,CAAA;;AAE7B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,YAAY,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAC/C,IAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACxC,IAAA,EAAE,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACnC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;;AAGtC,IAAA,4BAA4B,GAAG,SAAS,CAAC,QAAQ,CAAwD,8BAA8B,CAAC;AACxI,IAAA,2BAA2B,GAAG,SAAS,CAAC,QAAQ,CAAwD,6BAA6B,CAAC;AACtI,IAAA,+BAA+B,GAAG,SAAS,CAAC,QAAQ,CAAwD,iCAAiC,CAAC;;IAG9I,IAAI,GAAG,IAAI;;AAGX,IAAA,MAAM,GAAG,MAAM,CAAc,EAAE,kDAAC;AAChC,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,aAAa,GAAG,MAAM,CAAW,EAAE,yDAAC;AACpC,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;;AAGvB,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,QAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;AACjC,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK;AACpB,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAG;AACtB,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,EAAE,WAAW,EAAE;AAChD,YAAA,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,EAAE,WAAW,EAAE;AACpD,YAAA,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,EAAE,WAAW,EAAE;YAC9C,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClE,SAAC,CAAC;AACJ,KAAC,0DAAC;;AAIF,IAAA,oBAAoB,CAAC,KAAY,EAAA;AAC/B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAiC;QACtD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;;;AAI1C,IAAA,MAAM,GAAG,MAAM,CAAS,EAAE,kDAAC;AAC3B,IAAA,SAAS,GAAG,MAAM,CAAS,EAAE,qDAAC;;AAG9B,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,cAAc,GAAG,MAAM,CAAgB,IAAI,0DAAC;AAC5C,IAAA,cAAc,GAAG,MAAM,CAAmB,IAAI,0DAAC;;AAG/C,IAAA,WAAW,GAAG,MAAM,CAAC,CAAC,uDAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,EAAE,oDAAC;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC;;AAGtB,IAAA,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QACxB,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvC,SAAS,EAAE,CAAC,EAAE,CAAC;QACf,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC5C,kBAAkB,EAAE,CAAC,EAAE,CAAC;QACxB,cAAc,EAAE,CAAC,EAAE,CAAC;QACpB,kBAAkB,EAAE,CAAC,IAAI,CAAC;QAC1B,mBAAmB,EAAE,CAAC,EAAE,CAAC;QACzB,eAAe,EAAE,CAAC,KAAK,CAAC;AACxB,QAAA,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACzB,YAAA,mBAAmB,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACtD,YAAA,kBAAkB,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACrD,YAAA,kBAAkB,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AACtD,YAAA,sBAAsB,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACzD,YAAA,mBAAmB,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AACvD,YAAA,mBAAmB,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,kBAAkB,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAuB;SAC1D,CAAC;QACF,aAAa,EAAE,CAAC,IAAI;AACrB,KAAA,CAAC;;AAGF,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGlD,IAAA,aAAa,GAAG;AACd,QAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACtC,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,QAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;AAC5C,QAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACtC,QAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS;KAC5B;;IAGV,uBAAuB,GAAA;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;QACtB,MAAM,UAAU,GAAa,EAAE;QAE/B,MAAM,OAAO,GAAG,CAAC,IAAY,KAAK,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;QAE1E,IAAI,OAAO,CAAC,wCAAwC,CAAC;AAAE,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;QACjF,IAAI,OAAO,CAAC,uCAAuC,CAAC;AAAE,YAAA,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/E,IAAI,OAAO,CAAC,uCAAuC,CAAC;AAAE,YAAA,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/E,IAAI,OAAO,CAAC,2CAA2C,CAAC;AAAE,YAAA,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;QACvF,IAAI,OAAO,CAAC,wCAAwC,CAAC;AAAE,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;QACjF,IAAI,OAAO,CAAC,wCAAwC,CAAC;AAAE,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AAEjF,QAAA,OAAO,UAAU;;;AAInB,IAAA,qBAAqB,CAAC,MAAgB,EAAA;QACpC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,GAAY,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC;AAEvF,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC;QAChC,OAAO,CAAC,wCAAwC,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1E,OAAO,CAAC,uCAAuC,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxE,OAAO,CAAC,uCAAuC,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxE,OAAO,CAAC,2CAA2C,EAAE,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAChF,OAAO,CAAC,wCAAwC,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1E,OAAO,CAAC,wCAAwC,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;;;IAI5E,UAAU,GAAG,MAAM,CAA+B;AAChD,QAAA,EAAE,EAAE,iBAAiB;AACrB,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,eAAe;AACvB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,iBAAiB;AACtB,gBAAA,MAAM,EAAE,YAAY;AACpB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE;AACR,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,eAAe;AACpB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA;AACD,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,kBAAkB;AAC/B,YAAA,iBAAiB,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,iBAAiB,CAAC;AACjE,YAAA,UAAU,EAAE;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,SAAS,EAAE;AACZ,SAAA;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE;AACb,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGF,IAAA,cAAc,GAAG;QACf,MAAM,EAAE,CAAC,IAAe,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACjD,QAAQ,EAAE,CAAC,IAAe,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QACrD,cAAc,EAAE,CAAC,IAAe,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI;KACjE;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,EAAE;;AAG5B;;AAEG;IACK,mBAAmB,GAAA;;AAEzB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAG;AAC7E,YAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC;AACvC,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;AACnC,YAAA,MAAM,SAAS,GAAG,wBAAwB,CAAC,WAAW,CAAC;YAEvD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,IAAI,EAAE,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,IAAI,EAAE,CAAC;AAE/C,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBACjB,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,sBAAsB,EAAE;;iBACxB;AACL,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC;;AAEzC,SAAC,CAAC;;AAGJ;;AAEG;IACK,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAEpB,QAAA,MAAM,OAAO,GAAsB;AACjC,YAAA,iBAAiB,EAAE,IAAI,CAAC,MAAM;SAC/B;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO;AACnC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;oBACpC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;oBACxC,IAAI,CAAC,cAAc,EAAE;;qBAChB;oBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,uBAAuB,CAAC;;AAE7D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC;AAC7C,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC;AAC1D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;IACK,sBAAsB,GAAA;;QAE5B,IAAI,CAAC,SAAS,CAAC;AACZ,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAK;;AAEhB,SAAC,CAAC;;AAGN;;AAEG;IACK,cAAc,GAAA;QACpB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK;AAChC,YAAA,GAAG,MAAM;AACT,YAAA,IAAI,EAAE,IAAI,CAAC,MAAM;AAClB,SAAA,CAAC,CAAC;;AAGL;;AAEG;AAGH;;AAEG;IACH,oBAAoB,GAAA;QAClB,OAAO;AACL,YAAA,oBAAoB,EAAE,IAAI,CAAC,4BAA4B,EAAE;AACzD,YAAA,mBAAmB,EAAE,IAAI,CAAC,2BAA2B,EAAE;AACvD,YAAA,uBAAuB,EAAE,IAAI,CAAC,+BAA+B;SAC9D;;AAGH;;AAEG;AACH,IAAA,WAAW,CAAC,KAA2B,EAAA;AACrC,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,YAAY;gBACf,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,WAAW,IAAI,KAAK,CAAC,IAAI,IAAI,UAAU,IAAI,KAAK,CAAC,IAAI,EAAE;AACzG,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAW,CAAC;AACvD,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAW,CAAC;oBACnD,IAAI,CAAC,UAAU,EAAE;;gBAEnB;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAc,CAAC;AACzC,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,UAAU,EAAE;gBACjB;AACF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,UAAU,EAAE;gBACjB;AACF,YAAA,KAAK,QAAQ;;AAEX,gBAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;gBACnC;AACF,YAAA,KAAK,UAAU;;AAEb,gBAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC;gBACtC;AACF,YAAA,KAAK,MAAM;;AAET,gBAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC;gBACjC;AACF,YAAA,KAAK,QAAQ;;AAEX,gBAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;gBACnC;AACF,YAAA,KAAK,YAAY;;AAEf,gBAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC;gBACxC;;;AAIN;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACzB,IAAI,CAAC,iBAAiB,EAAE;YACxB;;QAGF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;AAC9C,QAAA,MAAM,QAAQ,GAAyC;YACrD,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,eAAe,EAAE,SAAS,CAAC,eAAe;YAC1C,kBAAkB,EAAE,SAAS,CAAC,kBAAkB;AAChD,YAAA,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE;YAChC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,kBAAkB,CAAC;YAC5D,cAAc,EAAE,SAAS,CAAC,cAAc;YACxC,mBAAmB,EAAE,SAAS,CAAC,mBAAmB,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;AACvF,YAAA,eAAe,EAAE,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC;AACnD,YAAA,WAAW,EAAE;AACX,gBAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;AAC1F,gBAAA,kBAAkB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE;AACxF,gBAAA,kBAAkB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE;AACxF,gBAAA,sBAAsB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE;AAChG,gBAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;AAC1F,gBAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;AAC1F,gBAAA,kBAAkB,EAAE,SAAS,CAAC,WAAW,CAAC;AAC3C,aAAA;YACD,aAAa,EAAE,SAAS,CAAC;SAC1B;AAED,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ;AACnC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,SAAS,EAAE;oBAChB,IAAI,CAAC,UAAU,EAAE;AACjB,oBAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;;qBACtC;oBACL,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,QAAQ,CAAC,OAAO,CAAC;;AAE9D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC;AAC7C,gBAAA,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC;AAC5D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;YACnD,IAAI,CAAC,iBAAiB,EAAE;YACxB;;QAGF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;AAC9C,QAAA,MAAM,YAAY,GAAyC;AACzD,YAAA,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE;YAChC,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,eAAe,EAAE,SAAS,CAAC,eAAe;YAC1C,kBAAkB,EAAE,SAAS,CAAC,kBAAkB;AAChD,YAAA,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE;YAChC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,kBAAkB,CAAC;YAC5D,cAAc,EAAE,SAAS,CAAC,cAAc;YACxC,mBAAmB,EAAE,SAAS,CAAC,mBAAmB,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;AACvF,YAAA,eAAe,EAAE,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC;AACnD,YAAA,WAAW,EAAE;AACX,gBAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;AAC1F,gBAAA,kBAAkB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE;AACxF,gBAAA,kBAAkB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE;AACxF,gBAAA,sBAAsB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE;AAChG,gBAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;AAC1F,gBAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;AAC1F,gBAAA,kBAAkB,EAAE,SAAS,CAAC,WAAW,CAAC;AAC3C,aAAA;YACD,aAAa,EAAE,SAAS,CAAC;SAC1B;AAED,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,YAAY;AACvC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,SAAS,EAAE;oBAChB,IAAI,CAAC,UAAU,EAAE;AACjB,oBAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;;qBACtC;oBACL,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,QAAQ,CAAC,OAAO,CAAC;;AAE9D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC;AAC7C,gBAAA,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC;AAC5D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;AACH,IAAA,SAAS,CAAC,KAAgB,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;AAC1C,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;AAE9B,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AACxB,YAAA,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;AAClC,YAAA,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;AAChC,YAAA,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE;AAC5C,YAAA,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,IAAI,EAAE;AAClD,YAAA,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,EAAE;AAC1C,YAAA,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3E,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;AACnF,YAAA,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,KAAK;AAC/C,YAAA,WAAW,EAAE;AACX,gBAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,mBAAmB,EAAE,MAAM,IAAI,IAAI,EAAE;AACvF,gBAAA,kBAAkB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,kBAAkB,EAAE,MAAM,IAAI,IAAI,EAAE;AACrF,gBAAA,kBAAkB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,kBAAkB,EAAE,MAAM,IAAI,KAAK,EAAE;AACtF,gBAAA,sBAAsB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,sBAAsB,EAAE,MAAM,IAAI,IAAI,EAAE;AAC7F,gBAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,mBAAmB,EAAE,MAAM,IAAI,KAAK,EAAE;AACxF,gBAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,mBAAmB,EAAE,MAAM,IAAI,KAAK,EAAE;AACxF,gBAAA,kBAAkB,EAAE,KAAK,CAAC,WAAW,EAAE,kBAAkB,IAAI;AAC9D,aAAA;AACD,YAAA,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI;AACvC,SAAA,CAAC;;AAGF,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;;AAE9B,QAAA,CAAC,KAAK,CAAC,WAAW,EAAE,kBAAkB,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,IAAG;YACxD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC3C,gBAAA,WAAW,EAAE,CAAC,EAAE,WAAW,IAAI,IAAI;AACnC,gBAAA,oBAAoB,EAAE,CAAC,EAAE,oBAAoB,IAAI;AAClD,aAAA,CAAC,CAAC;AACL,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;;AAGjC;;AAEG;AACH,IAAA,WAAW,CAAC,KAAgB,EAAA;QAC1B,IAAI,OAAO,CAAC,CAAA,2CAAA,EAA8C,KAAK,CAAC,UAAU,CAAA,EAAA,CAAI,CAAC,EAAE;AAC/E,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE;AAC1C,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;wBACpB,IAAI,CAAC,UAAU,EAAE;AACjB,wBAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;;yBACtC;wBACL,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,QAAQ,CAAC,OAAO,CAAC;;AAE9D,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;iBACxB;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,oBAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC;AAC7C,oBAAA,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC;AAC5D,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,aAAA,CAAC;;;AAIR;;AAEG;AACH,IAAA,iBAAiB,CAAC,KAAgB,EAAA;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE;AAClG,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,UAAU,EAAE;AACjB,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,QAAA,EAAW,KAAK,CAAC,aAAa,GAAG,aAAa,GAAG,WAAW,CAAA,aAAA,CAAe,CAAC;;qBACnF;oBACL,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,QAAQ,CAAC,OAAO,CAAC;;AAErE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC;AACpD,gBAAA,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC;AACnE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;IACH,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACrB,IAAI,CAAC,WAAW,EAAE;;aACb;YACL,IAAI,CAAC,WAAW,EAAE;;;AAItB;;AAEG;IACH,UAAU,GAAA;QACR,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,MAAM,EAAE;;AAGf;;AAEG;IACH,MAAM,GAAA;AACJ,QAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;;AAGtE,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAG;AAClD,YAAA,OAAO,CAAC,GAAG,CAAC,4CAA4C,EAAE,OAAO,CAAC;YAClE,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC;AAC5E,gBAAA,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;;AAEzB,SAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAG;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC;;AAEjE,YAAA,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;AACvB,SAAC,CAAC;;AAGJ;;AAEG;IACK,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACnB,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,kBAAkB,EAAE,EAAE;AACtB,YAAA,cAAc,EAAE,EAAE;AAClB,YAAA,kBAAkB,EAAE,IAAI;AACxB,YAAA,mBAAmB,EAAE,EAAE;AACvB,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,WAAW,EAAE;AACX,gBAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AACrC,gBAAA,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AACpC,gBAAA,kBAAkB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;AACrC,gBAAA,sBAAsB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;AACxC,gBAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;AACtC,gBAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;AACtC,gBAAA,kBAAkB,EAAE;AACrB,aAAA;AACD,YAAA,aAAa,EAAE;AAChB,SAAA,CAAC;;AAGF,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;;AAG9B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;AAC/B,QAAA,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE;;AAGlC;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YACvC,OAAO,EAAE,aAAa,EAAE;AAC1B,SAAC,CAAC;;AAGJ;;AAEG;AACH,IAAA,sBAAsB,CAAC,KAAgB,EAAA;QACrC,OAAO;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;gBACZ,KAAK,EAAE,KAAK,CAAC,aAAa,GAAG,YAAY,GAAG,UAAU;gBACtD,IAAI,EAAE,KAAK,CAAC,aAAa,GAAG,OAAO,GAAG,cAAc;AACpD,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,QAAQ,EAAE;AACX;SACF;;AAGH;;;AAGG;IACH,mBAAmB,CAAC,IAAkB,EAAE,GAAc,EAAA;QACpD,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,IAAI,EAAE,GAAG,CAAC;AAE7D,QAAA,QAAQ,IAAI,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,GAAG,CAAC;AAC9C,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;gBACnB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,GAAG,CAAC;AACtD,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;gBAC3B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,GAAG,CAAC;AAChD,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;gBACrB;AACF,YAAA;gBACE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,EAAE,CAAC;;;QAI9C,IAAI,CAAC,iBAAiB,EAAE;;AAG1B;;AAEG;IACK,iBAAiB,GAAA;;AAEvB,QAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxD,QAAA,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;;;AAI/B,IAAA,mBAAmB,GAAG;AACpB,QAAA,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;AAChD,QAAA,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc;KAC/C;AAED,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,gCAAgC,CAAoC;;AAGxF,IAAA,iBAAiB,CAAC,MAAiC,EAAA;AACzD,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACnB,YAAA,WAAW,EAAE,CAAC,MAAM,EAAE,WAAW,IAAI,IAAI,CAAC;AAC1C,YAAA,oBAAoB,EAAE,CAAC,MAAM,EAAE,oBAAoB,IAAI,cAAc;AACtE,SAAA,CAAyB;;IAG5B,SAAS,GAAA;QACP,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC/C,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;;AAG9B,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACjD,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;;;AAIhC;;AAEG;AACH,IAAA,gBAAgB,CAAC,KAAgB,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,eAAe;AAAE,YAAA,OAAO;QAE5C,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC;;QAG5F,IAAI,kBAAkB,EAAE;AACtB,YAAA,MAAM,cAAc,GAAyC;AAC3D,gBAAA,GAAG,EAAE,kBAAkB,CAAC,GAAG,IAAI,EAAE;AACjC,gBAAA,UAAU,EAAE,kBAAkB,CAAC,UAAU,IAAI,EAAE;AAC/C,gBAAA,SAAS,EAAE,kBAAkB,CAAC,SAAS,IAAI,EAAE;AAC7C,gBAAA,eAAe,EAAE,kBAAkB,CAAC,eAAe,IAAI,EAAE;AACzD,gBAAA,kBAAkB,EAAE,kBAAkB,CAAC,kBAAkB,IAAI,EAAE;AAC/D,gBAAA,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE;AAChC,gBAAA,kBAAkB,EAAE,kBAAkB,CAAC,kBAAkB,IAAI,EAAE;AAC/D,gBAAA,cAAc,EAAE,kBAAkB,CAAC,cAAc,IAAI,EAAE;gBACvD,mBAAmB,EAAE,kBAAkB,CAAC,mBAAmB,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;AAChG,gBAAA,eAAe,EAAE,KAAK;gBACtB,WAAW,EAAE,kBAAkB,CAAC,WAAW;AAC3C,gBAAA,aAAa,EAAE,kBAAkB,CAAC,aAAa,IAAI;aACpD;AACD,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAQ,EAAE,KAAK,EAAE,MAAK,GAAG,EAAE,CAAC;;;AAIxI,QAAA,MAAM,aAAa,GAAyC;AAC1D,YAAA,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE;AACpB,YAAA,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;AAClC,YAAA,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;AAChC,YAAA,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE;AAC5C,YAAA,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,IAAI,EAAE;AAClD,YAAA,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE;AAChC,YAAA,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,IAAI,EAAE;AAClD,YAAA,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,EAAE;YAC1C,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;AACnF,YAAA,eAAe,EAAE,IAAI;YACrB,WAAW,EAAE,KAAK,CAAC,WAAW;AAC9B,YAAA,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI;SACvC;AAED,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,aAAa;AACxC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,MAAK,EAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;AAC3D,YAAA,KAAK,EAAE,MAAK,EAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACxC,SAAA,CAAC;;;IAIN,yBAAyB,GAAA;QACvB,OAAO;AACL,YAAA,OAAO,EAAE,qBAAqB;AAC9B,YAAA,SAAS,EAAE,qBAAqB;AAChC,YAAA,aAAa,EAAE,qBAAqB;AACpC,YAAA,SAAS,EAAE,OAAO;YAClB,gBAAgB,EAAE,CAAC,MAAM,CAAC;AAC1B,YAAA,SAAS,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO;SACxC;;AAGH,IAAA,2BAA2B,CAAC,MAAc,EAAA;AACxC,QAAA,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,MAAM,CAAC;;AAE3D,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AACxB,YAAA,kBAAkB,EAAE;AACrB,SAAA,CAAC;;AAGJ,IAAA,yBAAyB,CAAC,KAAa,EAAA;AACrC,QAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;QACnD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,GAAG,KAAK,CAAC;;AAG5D,IAAA,4BAA4B,CAAC,QAAgB,EAAA;QAC3C,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,QAAQ,GAAG,GAAG,CAAC;;uGAzyBpD,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,6BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,6BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChCvC,yzkBA4Ve,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5UX,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,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,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,sBAAsB,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,kBAAkB,0bAClB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,0BAA0B,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,yBAAyB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKhB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBApBtC,SAAS;+BACE,sBAAsB,EAAA,UAAA,EACpB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,WAAW;wBACX,sBAAsB;wBACtB,kBAAkB;wBAClB,mBAAmB;wBACnB,qBAAqB;wBACrB,iBAAiB;wBACjB,wBAAwB;wBACxB,0BAA0B;wBAC1B,yBAAyB;wBACzB,yBAAyB;AAC5B,qBAAA,EAAA,QAAA,EAAA,yzkBAAA,EAAA;;;;;;;;MEIY,2BAA2B,CAAA;AAClB,IAAA,IAAA;AAApB,IAAA,WAAA,CAAoB,IAAgB,EAAA;QAAhB,IAAA,CAAA,IAAI,GAAJ,IAAI;AACtB,QAAA,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC;;AAGzE;;AAEG;AACH,IAAA,cAAc,CAAC,IAAmB,EAAA;AAChC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC;QAC5C,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAAiC,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AAClK,aAAA,IAAI,CACH,UAAU,CAAC,KAAK,IAAG;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC;AAC9D,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;SAC/B,CAAC,CACH;;AAGL;;AAEG;AACH,IAAA,aAAa,CAAC,OAAyC,EAAA;AACrD,QAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAAC;QAEzC,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QACpH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAA6C,GAAG,EAAE,OAAO;aAC3E,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,aAAa,CAAC,OAAyC,EAAA;AACrD,QAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAAC;QAEzC,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QACpH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAA6C,GAAG,EAAE,OAAO;aAC3E,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,cAAc,CAAC,EAAU,EAAA;AACvB,QAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,EAAE,CAAC;AACzC,QAAA,MAAM,OAAO,GAAgC,EAAE,OAAO,EAAE,EAAE,EAAE;AAC5D,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACnI,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAqC,GAAG;aACzD,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,mBAAmB,CAAC,MAAc,EAAA;AAChC,QAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,MAAM,CAAC;AACnD,QAAA,MAAM,OAAO,GAAiC,EAAE,iBAAiB,EAAE,MAAM,EAAE;AAC3E,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACrI,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAyC,GAAG;aAC7D,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,0BAA0B,CAAC,MAAc,EAAA;AACvC,QAAA,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,MAAM,CAAC;AAC3D,QAAA,MAAM,OAAO,GAAwC,EAAE,aAAa,EAAE,MAAM,EAAE;AAC9E,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC;AAClI,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgD,GAAG;aACpE,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,oBAAoB,CAAC,OAAgD,EAAA;AACnE,QAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,OAAO,CAAC;QAEjD,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;QAC3H,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAoD,GAAG,EAAE,OAAO;aAClF,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,oBAAoB,CAAC,EAAU,EAAA;AAC7B,QAAA,MAAM,OAAO,GAAsC,EAAE,QAAQ,EAAE,EAAE,EAAE;AACnE,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC;AAClI,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAA8C,GAAG;aACrE,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,aAAa,CAAC,EAAU,EAAA;AACtB,QAAA,MAAM,OAAO,GAA+B,EAAE,OAAO,EAAE,EAAE,EAAE;AAC3D,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AAC3H,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAuC,GAAG;aAC9D,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAGL;;AAEG;AACH,IAAA,mBAAmB,CAAC,OAAyC,EAAA;AAC3D,QAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,OAAO,CAAC;AAChD,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QAC3H,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA6C,GAAG,EAAE,EAAE;aACrE,IAAI,CACH,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B;;AAKL;;AAEG;AACK,IAAA,WAAW,CAAC,KAAc,EAAA;QAChC,IAAI,YAAY,GAAG,mBAAmB;AAEtC,QAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,YAAA,YAAY,GAAG,KAAK,CAAC,OAAO;;AACvB,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,YAAY,GAAG,KAAK;;AAGtB,QAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,YAAY,CAAC;QAC3D,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;;uGA1JvC,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cAF1B,MAAM,EAAA,CAAA;;2FAEP,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAHvC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCLY,6BAA6B,CAAA;;AAEhC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,eAAe,GAAG,MAAM,CAAC,2BAA2B,CAAC;AACrD,IAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACxC,IAAA,EAAE,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACnC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;;IAKtC,IAAI,GAAG,IAAI;;AAGX,IAAA,QAAQ,GAAG,MAAM,CAAc,EAAE,oDAAC;AAClC,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,aAAa,GAAG,MAAM,CAAW,EAAE,yDAAC;AACpC,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;;AAGvB,IAAA,MAAM,GAAG,MAAM,CAAS,EAAE,kDAAC;AAC3B,IAAA,SAAS,GAAG,MAAM,CAAS,EAAE,qDAAC;;AAG9B,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,gBAAgB,GAAG,MAAM,CAAgB,IAAI,4DAAC;AAC9C,IAAA,gBAAgB,GAAG,MAAM,CAAmB,IAAI,4DAAC;;AAGjD,IAAA,iBAAiB,GAAG,MAAM,CAAgB,IAAI,6DAAC;;AAG/C,IAAA,WAAW,GAAG,MAAM,CAAC,CAAC,uDAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,EAAE,oDAAC;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC;;AAGtB,IAAA,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QAC1B,QAAQ,EAAE,CAAC,EAAE,CAAC;QACd,UAAU,EAAE,CAAC,EAAE,CAAC;QAChB,eAAe,EAAE,CAAC,KAAK,CAAC;AACxB,QAAA,kBAAkB,EAAE,CAAC,KAAK,CAAC;QAC3B,+BAA+B,EAAE,CAAC,KAAK,CAAC;AACxC,QAAA,SAAS,EAAE,CAAC,EAAE,CAAC;QACf,eAAe,EAAE,CAAC,EAAE,CAAC;QACrB,gBAAgB,EAAE,CAAC,EAAE,CAAC;QACtB,eAAe,EAAE,CAAC,CAAC,CAAC;QACpB,eAAe,EAAE,CAAC,EAAE,CAAC;QACrB,UAAU,EAAE,CAAC,EAAE,CAAC;QAChB,aAAa,EAAE,CAAC,KAAK,CAAC;QACtB,aAAa,EAAE,CAAC,KAAK,CAAC;AACtB,QAAA,UAAU,EAAE,CAAC,EAAE,CAAC;AAChB,QAAA,WAAW,EAAE,CAAC,EAAE,CAAC;QACjB,oBAAoB,EAAE,CAAC,MAA8B,CAAC;QACtD,yBAAyB,EAAE,CAAC,KAAK,CAAC;QAClC,YAAY,EAAE,CAAC,EAA+B,CAAC;QAC/C,YAAY,EAAE,CAAC,EAAE,CAAC;AAClB,QAAA,SAAS,EAAE,CAAC,IAAiB,CAAC;QAC9B,iBAAiB,EAAE,CAAC,EAAE,CAAC;QACvB,aAAa,EAAE,CAAC,IAAI,CAAC;QACrB,mBAAmB,EAAE,CAAC,EAAE;AACzB,KAAA,CAAC;;AAGF,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IAIpD,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,EAAE;;AAG5B;;AAEG;IACK,mBAAmB,GAAA;;AAEzB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAG;AAC7E,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;AACnC,YAAA,MAAM,SAAS,GAAG,wBAAwB,CAAC,WAAW,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,IAAI,EAAE,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,IAAI,EAAE,CAAC;AAE/C,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBACjB,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,sBAAsB,EAAE;gBAC7B,IAAI,CAAC,uBAAuB,EAAE;;iBACzB;AACL,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC;;AAEzC,SAAC,CAAC;;AAGJ;;AAEG;IACK,uBAAuB,GAAA;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;QAClD,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AAC1B,gBAAA,mBAAmB,EAAE;AACtB,aAAA,CAAC;;YAEF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,OAAO,EAAE;;;AAI1D;;AAEG;IACK,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAEpB,QAAA,MAAM,OAAO,GAAkB;AAC7B,YAAA,iBAAiB,EAAE,IAAI,CAAC,MAAM;SAC/B;AAED,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO;AACxC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;oBACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;;qBACnC;oBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,yBAAyB,CAAC;;AAE/D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC;AAC/C,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC;AAC5D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;IACK,sBAAsB,GAAA;;QAE5B,IAAI,CAAC,WAAW,CAAC;AACd,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAK;;AAEhB,SAAC,CAAC;;AAKN;;AAEG;IACH,aAAa,GAAA;QAEX,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;AAElD,QAAA,MAAM,UAAU,GAAqC;AACnD,YAAA,GAAG,EAAE,EAAE;YACP,QAAQ,EAAE,SAAS,CAAC,QAAQ;AAC5B,YAAA,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE;YAChC,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,eAAe,EAAE,SAAS,CAAC,eAAe;YAC1C,kBAAkB,EAAE,SAAS,CAAC,kBAAkB;YAChD,+BAA+B,EAAE,SAAS,CAAC,+BAA+B;YAC1E,SAAS,EAAE,SAAS,CAAC,SAAwB;YAC7C,eAAe,EAAE,SAAS,CAAC,eAAe;YAC1C,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;YAC5C,eAAe,EAAE,SAAS,CAAC,eAAe;YAC1C,eAAe,EAAE,SAAS,CAAC,eAAe;YAC1C,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,oBAAoB,EAAE,SAAS,CAAC,oBAAoB;YACpD,yBAAyB,EAAE,SAAS,CAAC,yBAAyB;YAC9D,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,iBAAiB,EAAE,SAAS,CAAC,iBAAiB;YAC9C,aAAa,EAAE,SAAS,CAAC,aAAa;AACtC,YAAA,mBAAmB,EAAE,QAAQ,IAAI,SAAS,CAAC;SAC5C;AAED,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,UAAU;AAC1C,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,SAAS,EAAE;oBAChB,IAAI,CAAC,YAAY,EAAE;AACnB,oBAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;;qBACtC;oBACL,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,0BAA0B,CAAC;;AAE/D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC;AAC/C,gBAAA,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC;AAC5D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;IACH,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC5B;;QAGF,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;AAElD,QAAA,MAAM,cAAc,GAAqC;AACvD,YAAA,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAG;YAC7B,QAAQ,EAAE,SAAS,CAAC,QAAQ;AAC5B,YAAA,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE;YAChC,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,eAAe,EAAE,SAAS,CAAC,eAAe;AAC1C,YAAA,kBAAkB,EAAE,OAAO,CAAC,SAAS,CAAC,kBAAkB,CAAC;YACzD,+BAA+B,EAAE,SAAS,CAAC,+BAA+B;YAC1E,SAAS,EAAE,SAAS,CAAC,SAAwB;YAC7C,eAAe,EAAE,SAAS,CAAC,eAAe;YAC1C,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;YAC5C,eAAe,EAAE,SAAS,CAAC,eAAe;YAC1C,eAAe,EAAE,SAAS,CAAC,eAAe;YAC1C,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,oBAAoB,EAAE,SAAS,CAAC,oBAAoB;YACpD,yBAAyB,EAAE,SAAS,CAAC,yBAAyB;YAC9D,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,iBAAiB,EAAE,SAAS,CAAC,iBAAiB;YAC9C,aAAa,EAAE,SAAS,CAAC,aAAa;AACtC,YAAA,mBAAmB,EAAE,QAAQ,IAAI,SAAS,CAAC;SAC5C;AAED,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,cAAc;AAC9C,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,SAAS,EAAE;oBAChB,IAAI,CAAC,YAAY,EAAE;AACnB,oBAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;;qBACtC;oBACL,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,0BAA0B,CAAC;;AAE/D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC;AAC/C,gBAAA,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC;AAC5D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;AACH,IAAA,WAAW,CAAC,OAAkB,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC;AAC9C,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC;AAElC,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,GAAG,IAAI,GAAG,KAAK;YAC7D,+BAA+B,EAAE,OAAO,CAAC,+BAA+B;YACxE,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;YAChD,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE;YAClD,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;YAClD,yBAAyB,EAAE,OAAO,CAAC,yBAAyB;YAC5D,YAAY,EAAE,OAAO,CAAC,YAAyC;YAC/D,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,SAAS,EAAE,OAAO,CAAC,SAAsB;YACzC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,mBAAmB,IAAI,EAAE;AAC9D,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;;AAGnC;;AAEG;AACH,IAAA,aAAa,CAAC,OAAkB,EAAA;QAC9B,IAAI,OAAO,CAAC,CAAA,6CAAA,EAAgD,OAAO,CAAC,UAAU,CAAA,EAAA,CAAI,CAAC,EAAE;AACnF,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE;AACjD,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;wBACpB,IAAI,CAAC,YAAY,EAAE;AACnB,wBAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;;yBACtC;wBACL,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,0BAA0B,CAAC;;AAE/D,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;iBACxB;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,oBAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC;AAC/C,oBAAA,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC;AAC5D,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,aAAA,CAAC;;;AAIR;;AAEG;AACH,IAAA,mBAAmB,CAAC,OAAkB,EAAA;AACpC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE;AAC3G,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,YAAY,EAAE;AACnB,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,QAAA,EAAW,OAAO,CAAC,aAAa,GAAG,aAAa,GAAG,WAAW,CAAA,aAAA,CAAe,CAAC;;qBACrF;oBACL,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,iCAAiC,CAAC;;AAEtE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC;AACtD,gBAAA,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC;AACnE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACrB,IAAI,CAAC,aAAa,EAAE;;aACf;YACL,IAAI,CAAC,aAAa,EAAE;;;AAIxB;;AAEG;IACH,UAAU,GAAA;QACR,IAAI,CAAC,SAAS,EAAE;;AAGlB;;AAEG;IACH,MAAM,GAAA;QACJ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC;;AAGtC;;AAEG;IACK,SAAS,GAAA;QACf,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;AAElD,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACrB,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,kBAAkB,EAAE,KAAK;AACzB,YAAA,+BAA+B,EAAE,KAAK;AACtC,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,gBAAgB,EAAE,EAAE;AACpB,YAAA,eAAe,EAAE,CAAC;AAClB,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,oBAAoB,EAAE,UAAU;AAChC,YAAA,yBAAyB,EAAE,KAAK;AAChC,YAAA,YAAY,EAAE,EAA+B;AAC7C,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,iBAAiB,EAAE,EAAE;AACrB,YAAA,aAAa,EAAE,IAAI;YACnB,mBAAmB,EAAE,QAAQ,IAAI;AAClC,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;;AAGpC;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;YACnD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;YACzC,OAAO,EAAE,aAAa,EAAE;AAC1B,SAAC,CAAC;;AAGJ;;AAEG;AACH,IAAA,sBAAsB,CAAC,OAAkB,EAAA;QACvC,OAAO;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,IAAI,EAAE;AACP,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;gBACZ,KAAK,EAAE,OAAO,CAAC,aAAa,GAAG,YAAY,GAAG,UAAU;gBACxD,IAAI,EAAE,OAAO,CAAC,aAAa,GAAG,OAAO,GAAG;AACzC,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,IAAI,EAAE;AACP;SACF;;AAGH;;AAEG;IACH,mBAAmB,CAAC,IAAkB,EAAE,OAAkB,EAAA;AACxD,QAAA,QAAQ,IAAI,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;gBACzB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;gBACjC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;gBAC3B;;;AAIN;;AAEG;IACH,iBAAiB,GAAA;;;;AAKjB,IAAA,aAAa,CAAC,OAAkB,EAAA;QAC9B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC;AAC/C,QAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAAC;;IAG3C,gBAAgB,CAAC,KAAa,EAAE,OAAkB,EAAA;AAChD,QAAA,OAAO,OAAO,CAAC,GAAG,IAAI,EAAE;;uGAzef,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1B1C,4wjBAibC,EAAA,MAAA,EAAA,CAAA,klBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlaG,YAAY,mQACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,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,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,sBAAsB,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,IAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,mBAAmB,2ZACnB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKR,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAfzC,SAAS;+BACE,yBAAyB,EAAA,UAAA,EACvB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,WAAW;wBACX,sBAAsB;wBACtB,kBAAkB;wBAClB,mBAAmB;wBACnB;AACD,qBAAA,EAAA,QAAA,EAAA,4wjBAAA,EAAA,MAAA,EAAA,CAAA,klBAAA,CAAA,EAAA;;;;;;;;AEtBH;AAUA;;MCYa,yBAAyB,CAAA;AAC5B,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAEjC;;;;AAIG;AACH,IAAA,oBAAoB,CAAC,IAA8B,EAAA;AACjD,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,EAAE,MAAM;AACrB,YAAA,aAAa,EAAE;AAChB,SAAA,CAAC;;QAIF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;;AAGlC;;;AAGG;AACH,IAAA,iBAAiB,CAAC,OAAkC,EAAA;AAClD,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,EAAE,IAAI;YACnB,MAAM;YACN;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;;AAG3B;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,MAAc,EAAA;AAC7B,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,EAAE,IAAI;YACnB;AACD,SAAA,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,uDAAuD,EAAE,MAAM,CAAC;;AAG5E,QAAA,OAAO,IAAI,UAAU,CAAC,QAAQ,IAAG;YAC/B,UAAU,CAAC,MAAK;gBACd,QAAQ,CAAC,IAAI,CAAC;AACZ,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,OAAO,EAAE;AACV,iBAAA,CAAC;gBACF,QAAQ,CAAC,QAAQ,EAAE;aACpB,EAAE,GAAG,CAAC;AACT,SAAC,CAAC;;;;AAMJ;;;;AAIE;AACF,IAAA,WAAW,CAAC,OAA+B,EAAA;AACzC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,EAAE,IAAI;YACnB;AACD,SAAA,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE,GAAG,CAAC;AAC/D,QAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,OAAO,CAAC;QAExD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAoC,GAAG,CAAC;;AAG9D;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,MAAc,EAAA;AAC7B,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,EAAE,IAAI;YACnB,eAAe;YACf;AACD,SAAA,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,mDAAmD,EAAE,MAAM,CAAC;QAExE,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;;AAGjC;;;;AAIG;AACH,IAAA,UAAU,CAAC,MAAc,EAAA;AACvB,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,EAAE,IAAI;YACnB;AACD,SAAA,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,MAAM,CAAC;QAE9D,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;;uGA1HnB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFxB,MAAM,EAAA,CAAA;;2FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCbY,yBAAyB,CAAA;AAC5B,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAEjC;;;AAGG;IACH,cAAc,GAAA;AACZ,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;YACpB;AACD,SAAA,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE,GAAG,CAAC;;AAG/D,QAAA,OAAO,IAAI,UAAU,CAAC,QAAQ,IAAG;YAC/B,UAAU,CAAC,MAAK;gBACd,QAAQ,CAAC,IAAI,CAAC;AACZ,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,IAAI,EAAE;AACJ,wBAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE;AAC/C,wBAAA,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE;AAC3C,wBAAA,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE;AAC3C,wBAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE;AACvC,wBAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ;AACxC;AACF,iBAAA,CAAC;gBACF,QAAQ,CAAC,QAAQ,EAAE;aACpB,EAAE,GAAG,CAAC;AACT,SAAC,CAAC;;;;AAMJ;;;AAGG;IACH,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE;;uGA1CnB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFxB,MAAM,EAAA,CAAA;;2FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACPD;;MCuBa,uBAAuB,CAAA;AACjB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAE1C;;;;AAIG;AACH,IAAA,eAAe,CAAC,OAAkB,EAAA;AAChC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,CAAC,QAAQ;YACtB;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;;AAG3B;;;;AAIG;AACH,IAAA,eAAe,CAAC,OAAgC,EAAA;AAC9C,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,CAAC,QAAQ;YACtB,MAAM;YACN;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;;AAI3B;;;;AAIG;AACH,IAAA,kBAAkB,CAAC,IAAgC,EAAA;AACjD,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,CAAC;AACf,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;;AAIlC;;;;AAIG;AACH,IAAA,cAAc,CAAC,OAA+B,EAAA;AAC5C,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,CAAC,QAAQ;YACtB,QAAQ;YACR;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;;AAG9B;;;;AAIG;AACH,IAAA,oBAAoB,CAAC,OAAqC,EAAA;AACxD,QAAA,OAAO,CAAC,GAAG,CAAC,yDAAyD,EAAE,OAAO,CAAC;AAC/E,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,CAAC,QAAQ;YACtB;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC;;uGAvF3B,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA;;2FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACjBD;;;;AAIG;MAIU,+BAA+B,CAAA;AAClC,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAGjC;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,IAAsB,EAAA;AACrC,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,EAAE;AAChB,SAAA,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,4CAA4C,EAAE,GAAG,CAAC;AAC9D,QAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,IAAI,CAAC;QAErD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAA2B,GAAG,EAAE,IAAI,CAAC;;AAG5D;;;;AAIG;AACH,IAAA,aAAa,CAAC,QAAgB,EAAA;AAC5B,QAAA,MAAM,OAAO,GAAqB;AAChC,YAAA,OAAO,EAAE;SACV;AACD,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,EAAE,MAAM;YACrB;AACD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA2B,GAAG,CAAC;;AAGrD;;;;AAIG;AACH,IAAA,aAAa,CAAC,IAAa,EAAA;AACzB,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC;AAC5C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,CAAC,MAAM;YACpB;AACD,SAAA,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,GAAG,CAAC;AAC1D,QAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,IAAI,CAAC;QAEhD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAyC;;AAGnE;;;;AAIG;AACH,IAAA,YAAY,CAAC,QAAgB,EAAA;AAC3B,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,EAAE,MAAM;YACrB;AACD,SAAA,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,8CAA8C,EAAE,GAAG,CAAC;QAEhE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAA2B,GAAG,CAAC;;uGA7E7C,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,cAF9B,MAAM,EAAA,CAAA;;2FAEP,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAH3C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCgBY,kCAAkC,CAAA;;AAErC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,WAAW,GAAG,MAAM,CAAC,gCAAgC,CAAC;AACtD,IAAA,EAAE,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACnC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;;AAG/B,IAAA,2BAA2B,GAAG,SAAS,CAAC,QAAQ,CAA+B,6BAA6B,CAAC;AAC7G,IAAA,0BAA0B,GAAG,SAAS,CAAC,QAAQ,CAA+B,4BAA4B,CAAC;AAC3G,IAAA,+BAA+B,GAAG,SAAS,CAAC,QAAQ,CAA+B,iCAAiC,CAAC;;IAGrH,IAAI,GAAG,IAAI;;AAGX,IAAA,KAAK,GAAG,MAAM,CAAe,EAAE,iDAAC;AAChC,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,aAAa,GAAG,MAAM,CAAW,EAAE,yDAAC;AACpC,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;;AAIvB,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,aAAa,GAAG,MAAM,CAAgB,IAAI,yDAAC;AAC3C,IAAA,aAAa,GAAG,MAAM,CAAoB,IAAI,yDAAC;;AAG/C,IAAA,WAAW,GAAG,MAAM,CAAC,CAAC,uDAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,EAAE,oDAAC;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC;;AAGtB,IAAA,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QACvB,UAAU,EAAE,CAAC,EAAE,CAAC;QAChB,WAAW,EAAE,CAAC,EAAE,CAAC;QACjB,UAAU,EAAE,CAAC,EAAE,CAAC;QAChB,mBAAmB,EAAE,CAAC,IAAI,CAAC;QAC3B,cAAc,EAAE,CAAC,IAAI,CAAC;AACtB,QAAA,cAAc,EAAE,CAAC,EAAE,CAAC;AACrB,KAAA,CAAC;;AAIF,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;IAKjD,UAAU,GAAG,MAAM,CAAgC;AACjD,QAAA,EAAE,EAAE,gBAAgB;AACpB,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,cAAc;AACtB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,YAAY;AACjB,gBAAA,MAAM,EAAE,WAAW;AACnB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE;AACR,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,gBAAgB;AACrB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA;AACD,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,IAAI,EAAE;AACJ,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,gBAAgB;AAC5B,YAAA,UAAU,EAAE;AACb,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,iBAAiB;AAC9B,YAAA,iBAAiB,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC;AAC9D,YAAA,UAAU,EAAE;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,SAAS,EAAE;AACZ,SAAA;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,UAAU,EAAE;AACb,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGF,IAAA,cAAc,GAAG;QACf,MAAM,EAAE,CAAC,IAAgB,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACjD,QAAQ,EAAE,CAAC,IAAgB,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACrD,cAAc,EAAE,CAAC,IAAgB,KAAK,IAAI,CAAC,gBAAgB,CAAC,IAAI;KACjE;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,EAAE;;QAG1B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,IAAG;AAC3C,YAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,KAAK,CAAC;AAC9C,SAAC,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,IAAG;AAC7C,YAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC;AAChD,SAAC,CAAC;;AAGJ;;AAEG;IACK,mBAAmB,GAAA;QACzB,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,sBAAsB,EAAE;;AAG/B;;AAEG;IACH,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QAEpB,MAAM,OAAO,GAAG,EAAE;AAElB,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO;AACjC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;oBACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;oBACxC,IAAI,CAAC,cAAc,EAAE;;qBAChB;oBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,sBAAsB,CAAC;;AAE5D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC;AAC5C,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC;AACzD,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAKN;;AAEG;IACK,sBAAsB,GAAA;;QAE5B,IAAI,CAAC,QAAQ,CAAC;AACX,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAK;;AAEhB,SAAC,CAAC;;AAGN;;AAEG;IACK,cAAc,GAAA;QACpB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK;AAChC,YAAA,GAAG,MAAM;AACT,YAAA,IAAI,EAAE,IAAI,CAAC,KAAK;AACjB,SAAA,CAAC,CAAC;;;AAIL,IAAA,iBAAiB,GAAG,QAAQ,CAAC,OAAqD;AAChF,QAAA,mBAAmB,EAAE,IAAI,CAAC,2BAA2B,EAAE;AACvD,QAAA,kBAAkB,EAAE,IAAI,CAAC,0BAA0B,EAAE;AACrD,QAAA,uBAAuB,EAAE,IAAI,CAAC,+BAA+B;AAC9D,KAAA,CAAC,6DAAC;AAEH;;AAEG;AACH,IAAA,WAAW,CAAC,KAA4B,EAAA;AACtC,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,YAAY;gBACf,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,WAAW,IAAI,KAAK,CAAC,IAAI,IAAI,UAAU,IAAI,KAAK,CAAC,IAAI,EAAE;AACzG,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAW,CAAC;AACvD,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAW,CAAC;oBACnD,IAAI,CAAC,SAAS,EAAE;;gBAElB;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAc,CAAC;AACzC,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,SAAS,EAAE;gBAChB;AACF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,SAAS,EAAE;gBAChB;AACF,YAAA,KAAK,QAAQ;;AAEX,gBAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;gBACnC;AACF,YAAA,KAAK,UAAU;;AAEb,gBAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC;gBACtC;AACF,YAAA,KAAK,MAAM;;AAET,gBAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC;gBACjC;AACF,YAAA,KAAK,QAAQ;;AAEX,gBAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;gBACnC;AACF,YAAA,KAAK,YAAY;;AAEf,gBAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC;gBACxC;;;AAIN;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;YACxB,IAAI,CAAC,iBAAiB,EAAE;YACxB;;QAGF,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;AAC7C,QAAA,MAAM,OAAO,GAAe;YAC1B,GAAG,EAAE,EAAE;YACP,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC;YAC9D,cAAc,EAAE,SAAS,CAAC;SAC3B;AAED,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO;AAC9B,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,UAAU,EAAE;oBACjB,IAAI,CAAC,SAAS,EAAE;AAChB,oBAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;;qBACrC;oBACL,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,QAAQ,CAAC,OAAO,CAAC;;AAE7D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC;AAC5C,gBAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC;AAC3D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;AAEtD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;AACjD,YAAA,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC;YACzD,IAAI,CAAC,iBAAiB,EAAE;YACxB;;QAGF,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;AAC7C,QAAA,MAAM,WAAW,GAAe;AAC9B,YAAA,GAAG,EAAE,IAAI,CAAC,aAAa,EAAG;YAC1B,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,IAAI,IAAI,CAAC;YACtE,cAAc,EAAE,SAAS,CAAC;SAC3B;AAED,QAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,WAAW,CAAC;AAC9D,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW;AAClC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,QAAQ,CAAC;AAClD,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,UAAU,EAAE;oBACjB,IAAI,CAAC,SAAS,EAAE;AAChB,oBAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;;qBACrC;oBACL,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,QAAQ,CAAC,OAAO,CAAC;;AAE7D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC;AACrC,gBAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC;AAC3D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;AACH,IAAA,QAAQ,CAAC,IAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAE5B,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,YAAA,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;YACtE,cAAc,EAAE,IAAI,CAAC;AACtB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;;AAGhC;;AAEG;AACH,IAAA,UAAU,CAAC,IAAgB,EAAA;QACzB,IAAI,OAAO,CAAC,CAAA,0CAAA,EAA6C,IAAI,CAAC,WAAW,CAAA,EAAA,CAAI,CAAC,EAAE;AAC9E,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE;AACvC,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;wBACpB,IAAI,CAAC,SAAS,EAAE;AAChB,wBAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;;yBACrC;wBACL,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,QAAQ,CAAC,OAAO,CAAC;;AAE7D,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;iBACxB;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,oBAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC;AAC5C,oBAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC;AAC3D,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,aAAA,CAAC;;;AAIR;;AAEG;AACH,IAAA,gBAAgB,CAAC,IAAgB,EAAA;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE;AAC3D,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,SAAS,EAAE;AAChB,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,OAAA,EAAU,IAAI,CAAC,cAAc,GAAG,aAAa,GAAG,WAAW,CAAA,aAAA,CAAe,CAAC;;qBAClF;oBACL,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,QAAQ,CAAC,OAAO,CAAC;;AAEpE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;AACnD,gBAAA,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC;AAClE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;AACH,IAAA,uBAAuB,CAAC,IAAgB,EAAA;QACtC,MAAM,OAAO,GAAG,wBAAwB,CAAC;YACvC,QAAQ,EAAE,IAAI,CAAC,GAAG;YAClB,WAAW,EAAE,IAAI,CAAC;AACnB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,eAAe,EAAE,sBAAsB,EAAE,OAAO,CAAC,CAAC;;AAG1E;;AAEG;AACH,IAAA,QAAQ,CAAC,KAAY,EAAA;QACnB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC;QAC/C,IAAI,CAAC,QAAQ,EAAE;;AAGjB;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAClD,QAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAEtD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACrB,YAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;YACpC,IAAI,CAAC,UAAU,EAAE;;aACZ;AACL,YAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;YACpC,IAAI,CAAC,UAAU,EAAE;;;AAIrB;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAClB,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,cAAc,EAAE,IAAI;YACpB,cAAc,EAAE,EAAE;AACnB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;;AAGjC;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;YAChD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;YACtC,OAAO,EAAE,aAAa,EAAE;AAC1B,SAAC,CAAC;;AAGJ;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AACvB,YAAA,cAAc,EAAE;AACjB,SAAA,CAAC;AACF,QAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC;;AAGpD;;AAEG;IACH,iBAAiB,GAAA;QACf,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,IAAa,EAAE;;AAGjE;;AAEG;AACH,IAAA,sBAAsB,CAAC,IAAgB,EAAA;AACrC,QAAA,MAAM,KAAK,GAAG;AACZ,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,UAAU;AACd,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,gBAAgB;AACpB,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;gBACZ,KAAK,EAAE,IAAI,CAAC,cAAc,GAAG,YAAY,GAAG,UAAU;gBACtD,IAAI,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO,GAAG,cAAc;AACpD,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,QAAQ,EAAE;AACX;SACF;AAED,QAAA,OAAO,KAAK;;AAGd;;AAEG;IACH,oBAAoB,GAAA;AAClB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,KAAK;AAC3D,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,EAAE;AAExB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC;AAC7D,QAAA,OAAO,UAAU,IAAI,UAAU,CAAC,WAAW,IAAI,gBAAgB,IAAI,gBAAgB;;AAGrF;;AAEG;AACH,IAAA,UAAU,CAAC,UAAsB,EAAA;AAC/B,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,UAAU,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,UAAU,CAAC,WAAW,CAAC;;AAGvD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG5B,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AACvB,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,cAAc,EAAE,UAAU,CAAC,GAAG;AAC/B,SAAA,CAAC;;QAGF,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,UAAU,CAAC,WAAW,CAAC;;AAG/E;;AAEG;IACH,mBAAmB,CAAC,IAAkB,EAAE,GAAe,EAAA;QACrD,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,IAAI,EAAE,GAAG,CAAC;AAE7D,QAAA,QAAQ,IAAI,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,GAAG,CAAC;AAC7C,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAClB;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,GAAG,CAAC;AAC/C,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBACpB;AACF,YAAA,KAAK,gBAAgB;AACnB,gBAAA,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,GAAG,CAAC;AAC5D,gBAAA,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;gBACjC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,GAAG,CAAC;AACrD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;gBAC1B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,GAAG,CAAC;AAC/C,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBACpB;AACF,YAAA;gBACE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,EAAE,CAAC;;;QAI9C,IAAI,CAAC,iBAAiB,EAAE;;AAO1B;;AAEG;IACK,iBAAiB,GAAA;;AAEvB,QAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxD,QAAA,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;;uGA1nBpB,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlC,kCAAkC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,6BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,6BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,4BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,4BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5B/C,q0NAuJc,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzIV,YAAY,8BACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,wBAAwB,mRACxB,sBAAsB,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,IAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,qBAAqB,0UACrB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,0BAA0B,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKjB,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAlB9C,SAAS;+BACE,+BAA+B,EAAA,UAAA,EAC7B,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,WAAW;wBACX,wBAAwB;wBACxB,sBAAsB;wBACtB,kBAAkB;wBAClB,qBAAqB;wBACrB,iBAAiB;wBACjB,wBAAwB;wBACxB;AACD,qBAAA,EAAA,QAAA,EAAA,q0NAAA,EAAA;;;;;;;;AEZH;;;;;;;;;;AAUG;MAmBU,8BAA8B,CAAA;;AAEjC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,aAAa,GAAG,MAAM,CAAC,4BAA4B,CAAC;AACpD,IAAA,WAAW,GAAG,MAAM,CAAC,gCAAgC,CAAC;AACtD,IAAA,EAAE,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACnC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;;AAGhD,IAAA,6BAA6B,GAAG,SAAS,CAAC,QAAQ,CAA+B,+BAA+B,CAAC;AACjH,IAAA,4BAA4B,GAAG,SAAS,CAAC,QAAQ,CAA+B,8BAA8B,CAAC;AAC/G,IAAA,+BAA+B,GAAG,SAAS,CAAC,QAAQ,CAA+B,iCAAiC,CAAC;;IAGrH,IAAI,GAAG,IAAI;;AAGX,IAAA,OAAO,GAAG,MAAM,CAAe,EAAE,mDAAC;AAClC,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,aAAa,GAAG,MAAM,CAAW,EAAE,yDAAC;AACpC,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;AACvB,IAAA,oBAAoB,GAAG,MAAM,CAAS,EAAE,gEAAC;;AAGzC,IAAA,MAAM,GAAG,MAAM,CAAS,EAAE,kDAAC;AAC3B,IAAA,SAAS,GAAG,MAAM,CAAS,EAAE,qDAAC;AAC9B,IAAA,WAAW,GAAG,MAAM,CAAoB,IAAI,uDAAC;;AAG7C,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,eAAe,GAAG,MAAM,CAAgB,IAAI,2DAAC;AAC7C,IAAA,eAAe,GAAG,MAAM,CAAoB,IAAI,2DAAC;;AAGjD,IAAA,WAAW,GAAG,MAAM,CAAC,CAAC,uDAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,EAAE,oDAAC;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC;;AAGtB,IAAA,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACzB,QAAA,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AACjE,QAAA,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,QAAA,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,mBAAmB,EAAE,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClD,cAAc,EAAE,CAAC,EAAE,CAAC;QACpB,oBAAoB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QACzD,cAAc,EAAE,CAAC,IAAI;AACtB,KAAA,CAAC;;AAIF,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGnD,IAAA,mBAAmB,GAAG,MAAM,CAAqC,EAAE,+DAAC;;IAGpE,UAAU,GAAG,MAAM,CAAgC;AACjD,QAAA,EAAE,EAAE,kBAAkB;AACtB,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,gBAAgB;AACxB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,YAAY;AACjB,gBAAA,MAAM,EAAE,aAAa;AACrB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE;AACR,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,gBAAgB;AACrB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA;AACD,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,mBAAmB;AAChC,YAAA,iBAAiB,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC;AAC9D,YAAA,UAAU,EAAE;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,SAAS,EAAE;AACZ,SAAA;AACD,QAAA,IAAI,EAAE;AACJ,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,UAAU,EAAE,gBAAgB;AAC5B,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,cAAc,EAAE;AACjB,SAAA;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE;AACb,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGF,IAAA,cAAc,GAAG;QACf,MAAM,EAAE,CAAC,IAAgB,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACnD,QAAQ,EAAE,CAAC,IAAgB,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACvD,cAAc,EAAE,CAAC,IAAgB,KAAK,IAAI,CAAC,kBAAkB,CAAC,IAAI;KACnE;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,EAAE;;AAG5B;;AAEG;IACK,mBAAmB,GAAA;;QAEzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,IAAG;YACnC,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;AAE7C,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBACjB,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,uBAAuB,EAAE;gBAC9B,IAAI,CAAC,sBAAsB,EAAE;;iBACxB;AACL,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC;;AAEzC,SAAC,CAAC;;AAGJ;;AAEG;IACK,eAAe,GAAA;QACrB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE;AACvC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAkB,CAAC;;aAEpD;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;;AAEtD,SAAA,CAAC;;AAGN;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAEpB,QAAA,MAAM,OAAO,GAA8B;AACzC,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;;;SAGvD;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO;AACrC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;oBACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;oBACxC,IAAI,CAAC,cAAc,EAAE;;qBAChB;oBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,wBAAwB,CAAC;;AAE9D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;AAC9C,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC;AAC3D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;AACH,IAAA,mBAAmB,CAAC,QAAgB,EAAA;AAClC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAEpB,QAAA,MAAM,OAAO,GAA8B;AACzC,YAAA,oBAAoB,EAAE,QAAQ;AAC9B,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;SACvD;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO;AACrC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;oBACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;oBACxC,IAAI,CAAC,cAAc,EAAE;;qBAChB;oBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,wBAAwB,CAAC;;AAE9D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC;AACxD,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC;AAC3D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;IACK,uBAAuB,GAAA;AAC7B,QAAA,MAAM,OAAO,GAA8B;AACzC,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;SACvD;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO;AACrC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACpB,oBAAA,MAAM,OAAO,GAAG;AACd,wBAAA,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE;AAClD,wBAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,KAAK;AACtC,4BAAA,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE;AACvB,4BAAA,KAAK,EAAE,MAAM,CAAC,WAAW,IAAI;AAC9B,yBAAA,CAAC;qBACH;AACD,oBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC;;aAExC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC;;AAE/D,SAAA,CAAC;;AAGN;;AAEG;IACK,sBAAsB,GAAA;;QAE5B,IAAI,CAAC,UAAU,CAAC;AACb,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAK;;AAEhB,SAAC,CAAC;;AAGN;;AAEG;IACK,cAAc,GAAA;QACpB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK;AAChC,YAAA,GAAG,MAAM;AACT,YAAA,IAAI,EAAE,IAAI,CAAC,OAAO;AACnB,SAAA,CAAC,CAAC;;;AAML,IAAA,iBAAiB,GAAG,QAAQ,CAAC,OAAqD;AAChF,QAAA,qBAAqB,EAAE,IAAI,CAAC,6BAA6B,EAAE;AAC3D,QAAA,oBAAoB,EAAE,IAAI,CAAC,4BAA4B,EAAE;AACzD,QAAA,uBAAuB,EAAE,IAAI,CAAC,+BAA+B;AAC9D,KAAA,CAAC,6DAAC;AAEH;;AAEG;AACH,IAAA,WAAW,CAAC,KAA4B,EAAA;AACtC,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,YAAY;gBACf,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,WAAW,IAAI,KAAK,CAAC,IAAI,IAAI,UAAU,IAAI,KAAK,CAAC,IAAI,EAAE;AACzG,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAW,CAAC;AACvD,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAW,CAAC;oBACnD,IAAI,CAAC,WAAW,EAAE;;gBAEpB;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAc,CAAC;AACzC,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,WAAW,EAAE;gBAClB;AACF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,WAAW,EAAE;gBAClB;AACF,YAAA,KAAK,QAAQ;;AAEX,gBAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;gBACnC;AACF,YAAA,KAAK,UAAU;;AAEb,gBAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC;gBACtC;AACF,YAAA,KAAK,MAAM;;AAET,gBAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC;gBACjC;AACF,YAAA,KAAK,QAAQ;;AAEX,gBAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;gBACnC;AACF,YAAA,KAAK,YAAY;;AAEf,gBAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC;gBACxC;;;AAIN;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;YAC1B,IAAI,CAAC,iBAAiB,EAAE;YACxB;;QAGF,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;AAC/C,QAAA,MAAM,SAAS,GAAe;AAC5B,YAAA,GAAG,EAAE,EAAE;YACP,UAAU,EAAE,SAAS,CAAC,UAAU;AAChC,YAAA,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE;YAC7B,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC;AAC9D,YAAA,cAAc,EAAE,SAAS,CAAC,cAAc,IAAI,SAAS;YACrD,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,SAAS;YACpE,cAAc,EAAE,SAAS,CAAC;SAC3B;AAED,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS;AACtC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,SAAS,EAAE;oBAChB,IAAI,CAAC,WAAW,EAAE;oBAClB,IAAI,CAAC,uBAAuB,EAAE;AAC9B,oBAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC;;qBACvC;oBACL,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,QAAQ,CAAC,OAAO,CAAC;;AAE/D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;AAC9C,gBAAA,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC;AAC7D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;YACrD,IAAI,CAAC,iBAAiB,EAAE;YACxB;;QAGF,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;AAC/C,QAAA,MAAM,aAAa,GAAe;AAChC,YAAA,GAAG,EAAE,IAAI,CAAC,eAAe,EAAG;YAC5B,UAAU,EAAE,SAAS,CAAC,UAAU;AAChC,YAAA,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE;YAC7B,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC;AAC9D,YAAA,cAAc,EAAE,SAAS,CAAC,cAAc,IAAI,SAAS;YACrD,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,SAAS;YACpE,cAAc,EAAE,SAAS,CAAC;SAC3B;AAED,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAG,EAAE,aAAa;AACnE,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,SAAS,EAAE;oBAChB,IAAI,CAAC,WAAW,EAAE;oBAClB,IAAI,CAAC,uBAAuB,EAAE;AAC9B,oBAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC;;qBACvC;oBACL,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,QAAQ,CAAC,OAAO,CAAC;;AAE/D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;AAC9C,gBAAA,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC;AAC7D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;AACH,IAAA,UAAU,CAAC,MAAkB,EAAA;AAC3B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;AAC1C,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;AAEhC,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YACzB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;AAC7B,YAAA,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;AACxE,YAAA,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,EAAE;YAC3C,cAAc,EAAE,MAAM,CAAC;AACxB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;;AAGlC;;AAEG;AACH,IAAA,YAAY,CAAC,MAAkB,EAAA;QAC7B,IAAI,OAAO,CAAC,CAAA,4CAAA,EAA+C,MAAM,CAAC,WAAW,CAAA,EAAA,CAAI,CAAC,EAAE;AAClF,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE;AAC7C,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;wBACpB,IAAI,CAAC,WAAW,EAAE;wBAClB,IAAI,CAAC,uBAAuB,EAAE;AAC9B,wBAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC;;yBACvC;wBACL,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,QAAQ,CAAC,OAAO,CAAC;;AAE/D,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;iBACxB;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,oBAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;AAC9C,oBAAA,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC;AAC7D,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,aAAA,CAAC;;;AAIR;;AAEG;AACH,IAAA,kBAAkB,CAAC,MAAkB,EAAA;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE;AACnD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,WAAW,EAAE;AAClB,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,SAAA,EAAY,MAAM,CAAC,cAAc,GAAG,aAAa,GAAG,WAAW,CAAA,aAAA,CAAe,CAAC;;qBACtF;oBACL,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,QAAQ,CAAC,OAAO,CAAC;;AAEtE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;AACrD,gBAAA,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC;AACpE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;AACH,IAAA,aAAa,CAAC,MAAkB,EAAA;QAC9B,IAAI,OAAO,CAAC,CAAA,gCAAA,EAAmC,MAAM,CAAC,WAAW,CAAA,mBAAA,CAAqB,CAAC,EAAE;AACvF,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE;AAC7C,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;wBACpB,IAAI,CAAC,WAAW,EAAE;AAClB,wBAAA,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC;;yBAC/C;wBACL,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,QAAQ,CAAC,OAAO,CAAC;;AAE9D,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;iBACxB;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,oBAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC;AAC/C,oBAAA,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC;AAC5D,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,aAAA,CAAC;;;AAIR;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACrB,IAAI,CAAC,YAAY,EAAE;;aACd;YACL,IAAI,CAAC,YAAY,EAAE;;;AAIvB;;AAEG;IACH,UAAU,GAAA;QACR,IAAI,CAAC,SAAS,EAAE;;AAGlB;;AAEG;IACH,MAAM,GAAA;QACJ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,oCAAoC,CAAC,CAAC;;AAG9D;;AAEG;IACH,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACpB,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,cAAc,EAAE,EAAE;AAClB,YAAA,cAAc,EAAE;AACjB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE;;AAGnC;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YACxC,OAAO,EAAE,aAAa,EAAE;AAC1B,SAAC,CAAC;;AAGJ;;AAEG;IACH,iBAAiB,GAAA;AACf,QAAA,OAAO,EAAE;;AAGX;;AAEG;AACH,IAAA,sBAAsB,CAAC,MAAkB,EAAA;AACvC,QAAA,MAAM,KAAK,GAAmB;AAC5B,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,UAAU;AACd,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;gBACZ,KAAK,EAAE,MAAM,CAAC,cAAc,GAAG,YAAY,GAAG,UAAU;gBACxD,IAAI,EAAE,MAAM,CAAC,cAAc,GAAG,OAAO,GAAG,cAAc;AACtD,gBAAA,QAAQ,EAAE;AACX;SACF;;AAGD,QAAA,IAAI,MAAM,CAAC,oBAAoB,EAAE;YAC/B,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,EAAE,EAAE,OAAO;AACX,gBAAA,KAAK,EAAE,iBAAiB;AACxB,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA,CAAC;;QAGJ,KAAK,CAAC,IAAI,CAAC;AACT,YAAA,EAAE,EAAE,QAAQ;AACZ,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;AAEF,QAAA,OAAO,KAAK;;AAGd;;AAEG;IACH,mBAAmB,CAAC,IAAkB,EAAE,GAAe,EAAA;QACrD,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,IAAI,EAAE,GAAG,CAAC;AAE7D,QAAA,QAAQ,IAAI,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,GAAG,CAAC;AAC/C,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBACpB;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,GAAG,CAAC;AAC/C,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBACpB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,GAAG,CAAC;AACvD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;gBAC5B;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,GAAG,CAAC;AAClD,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;gBACvB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,GAAG,CAAC;AACjD,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;gBACtB;AACF,YAAA;gBACE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,EAAE,CAAC;;;QAI9C,IAAI,CAAC,iBAAiB,EAAE;;AAG1B;;AAEG;AACH,IAAA,UAAU,CAAC,YAAwB,EAAA;AACjC,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,YAAY,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,YAAY,CAAC,WAAW,CAAC;;AAGzD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG9B,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;AACzB,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,cAAc,EAAE,YAAY,CAAC,GAAG;AAChC,YAAA,cAAc,EAAE;AACjB,SAAA,CAAC;;QAGF,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,YAAY,CAAC,WAAW,CAAC;;AAGnF;;AAEG;IACH,sBAAsB,GAAA;AACpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,KAAK;AAC7D,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,gBAAgB;AAEtC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC;AAC3E,QAAA,OAAO,YAAY,EAAE,WAAW,IAAI,gBAAgB;;AAGtD;;AAEG;IACH,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;AACzB,YAAA,cAAc,EAAE;AACjB,SAAA,CAAC;;AAGJ;;AAEG;IACK,iBAAiB,GAAA;;AAEvB,QAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxD,QAAA,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;;uGA7uBpB,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,+BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,+BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzC3C,w5QAwNe,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED7LX,YAAY,8BACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,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,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,sBAAsB,kXACtB,wBAAwB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,IAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,qBAAqB,0UACrB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,0BAA0B,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKjB,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAlB1C,SAAS;+BACE,0BAA0B,EAAA,UAAA,EACxB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,WAAW;wBACX,sBAAsB;wBACtB,wBAAwB;wBACxB,kBAAkB;wBAClB,qBAAqB;wBACrB,iBAAiB;wBACjB,wBAAwB;wBACxB;AACD,qBAAA,EAAA,QAAA,EAAA,w5QAAA,EAAA;;;;;;;;AErCH;;ACKA;;;AAGG;MAIU,sBAAsB,CAAA;AACzB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAEjC;;;;AAIG;AACH,IAAA,cAAc,CAAC,IAAoB,EAAA;AACjC,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,EAAE;AAChB,SAAA,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,GAAG,CAAC;AAC5D,QAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC;QAElD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAgD;;AAGjF;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,OAAe,EAAA;AAC9B,QAAA,MAAM,OAAO,GAAmB;AAC9B,YAAA,aAAa,EAAE;SAChB;AACD,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;;AAGrC;;;AAGG;IACH,iBAAiB,GAAA;AACf,QAAA,MAAM,OAAO,GAAmB;YAC9B,aAAa,EAAE,EAAE;SAClB;AACD,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;;uGAzC1B,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA;;2FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACND;;;AAGG;MAIU,uBAAuB,CAAA;AAC1B,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAEjC;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,IAAwB,EAAA;AACvC,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC;AAC5C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,EAAE,QAAQ;YACvB;AACD,SAAA,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,GAAG,CAAC;AAC5D,QAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC;QAElD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAA+C;;uGApB9D,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA;;2FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACND;;;AAGG;MAIU,sBAAsB,CAAA;AACzB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAEjC;;;;AAIG;AACH,IAAA,eAAe,CAAC,IAAyB,EAAA;AACvC,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC;AAC9B,QAAA,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC;AAC5C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,CAAC,OAAO;YACrB;AACD,SAAA,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,GAAG,CAAC;AAC3D,QAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,IAAI,CAAC;QAEjD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;;AAG3B;;;AAGG;IACH,YAAY,GAAA;QACV,MAAM,cAAc,GAAwB,EAAE;AAC9C,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;;AAG7C;;;;AAIG;AACH,IAAA,eAAe,CAAC,OAA4B,EAAA;AAC1C,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;;AAGtC;;;;AAIG;AACH,IAAA,cAAc,CAAC,SAAiB,EAAA;AAC9B,QAAA,MAAM,OAAO,GAAwB;AACnC,YAAA,QAAQ,EAAE;SACX;AACD,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;;AAGtC;;;;AAIG;AACH,IAAA,oBAAoB,CAAC,MAAc,EAAA;AACjC,QAAA,MAAM,OAAO,GAAwB;;;AAG7B,SAAA,CAAC;AACT,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;;uGAhE3B,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA;;2FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCoCY,6BAA6B,CAAA;;AAExC,IAAA,UAAU;AAEV,IAAA,WAAW,GAAG,MAAM,CAAmB,EAAE,uDAAC;AAC1C,IAAA,UAAU,GAAG,MAAM,CAAmB,EAAE,sDAAC;AACzC,IAAA,KAAK,GAAG,MAAM,CAAmB,EAAE,iDAAC;AACpC,IAAA,WAAW,GAAG,MAAM,CAAmB,EAAE,uDAAC;AAC1C,IAAA,kBAAkB,GAAG,MAAM,CAAmB,EAAE,8DAAC;AACjD,IAAA,mBAAmB,GAAG,MAAM,CAAmB,EAAE,+DAAC;;AAG1C,IAAA,cAAc,GAAG,IAAI,GAAG,EAAuB;;AAG/C,IAAA,QAAQ;AAEhB,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,OAAO,GAAG,MAAM,CAAgB,IAAI,mDAAC;;AAGrC,IAAA,kBAAkB,GAAG,MAAM,CAAC,KAAK,8DAAC;AAClC,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,wDAAC;AAC5B,IAAA,0BAA0B,GAAG,MAAM,CAAC,KAAK,sEAAC;AAC1C,IAAA,yBAAyB,GAAG,MAAM,CAAC,KAAK,qEAAC;;AAGzC,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,QAAQ,GAAG,MAAM,CAAgB,IAAI,oDAAC;;AAGtC,IAAA,SAAS,GAAG,MAAM,CAAC,WAAW,qDAAC;IAC/B,UAAU,GAAG,MAAM,CAAY;QAC7B,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,UAAU,EAAE;QACjE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,eAAe,EAAE;QACtE,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,aAAa;AACrE,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGM,IAAA,aAAa,GAAG,MAAM,CAAC,+BAA+B,CAAC;AACvD,IAAA,4BAA4B,GAAG,MAAM,CAAC,4BAA4B,CAAC;AACnE,IAAA,cAAc,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC/C,IAAA,WAAW,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAC/C,IAAA,eAAe,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACjD,IAAA,cAAc,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC/C,IAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACxC,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,kBAAkB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAEtD,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AAC9B,IAAA,kBAAkB;AAClB,IAAA,sBAAsB;;AAGtB,IAAA,uBAAuB,GAAG,IAAI,OAAO,EAAoB;AACzD,IAAA,iBAAiB,GAAG,IAAI,OAAO,EAAoB;AACnD,IAAA,6BAA6B,GAAG,IAAI,OAAO,EAAoB;AAC/D,IAAA,8BAA8B,GAAG,IAAI,OAAO,EAAoB;AAExE,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;;YAE9B,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACtC,YAAA,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;YACvE,sBAAsB,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACnD,aAAa,EAAE,CAAC,EAAE,CAAC;YACnB,mBAAmB,EAAE,CAAC,EAAE,CAAC;YACzB,aAAa,EAAE,CAAC,IAAI,CAAC;;YAGrB,sBAAsB,EAAE,CAAC,EAAE,CAAC;YAC5B,yBAAyB,EAAE,CAAC,EAAE,CAAC;YAC/B,0BAA0B,EAAE,CAAC,EAAE,CAAC;YAChC,4BAA4B,EAAE,CAAC,EAAE,CAAC;YAClC,wBAAwB,EAAE,CAAC,EAAE,CAAC;;YAG9B,kCAAkC,EAAE,CAAC,EAAE,CAAC;YACxC,oBAAoB,EAAE,CAAC,EAAE,CAAC;YAC1B,wBAAwB,EAAE,CAAC,EAAE,CAAC;YAC9B,kBAAkB,EAAE,CAAC,EAAE,CAAC;YACxB,oBAAoB,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC9C,wBAAwB,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAClD,YAAA,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC1D,kBAAkB,EAAE,CAAC,EAAE,CAAC;;YAGxB,uBAAuB,EAAE,CAAC,EAAE,CAAC;YAC7B,0BAA0B,EAAE,CAAC,EAAE,CAAC;YAChC,2BAA2B,EAAE,CAAC,EAAE,CAAC;YACjC,6BAA6B,EAAE,CAAC,EAAE,CAAC;YACnC,yBAAyB,EAAE,CAAC,EAAE,CAAC;YAC/B,mCAAmC,EAAE,CAAC,EAAE,CAAC;YACzC,qBAAqB,EAAE,CAAC,EAAE,CAAC;YAC3B,qBAAqB,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC/C,kBAAkB,EAAE,CAAC,EAAE,CAAC;;YAGxB,iBAAiB,EAAE,CAAC,EAAE;AACvB,SAAA,CAAC;;QAGF,IAAI,CAAC,wBAAwB,EAAE;;QAG/B,IAAI,CAAC,oBAAoB,EAAE;;IAG7B,QAAQ,GAAA;;AAEN,QAAA,MAAM,YAAY,GAAG,CAAC,KAAiB,KAAI;YACzC,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC;AAChD,SAAC;AAED,QAAA,MAAM,gBAAgB,GAAG,CAAC,KAA4B,KAAI;YACxD,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,MAAM,CAAC;AAChE,SAAC;AAED,QAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC;AAC9C,QAAA,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,gBAAgB,CAAC;;AAG/D,QAAA,IAAI,CAAC,kBAAkB,GAAG,YAAY;AACtC,QAAA,IAAI,CAAC,sBAAsB,GAAG,gBAAgB;;QAG9C,IAAI,CAAC,gBAAgB,EAAE;QAEvB,IAAI,CAAC,aAAa,EAAE;;IAGtB,WAAW,GAAA;;AAET,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC;;AAE9D,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,MAAM,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,IAAI,CAAC,sBAAsB,CAAC;;;AAI/E,QAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE;AACvC,QAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE;AACjC,QAAA,IAAI,CAAC,6BAA6B,CAAC,QAAQ,EAAE;AAC7C,QAAA,IAAI,CAAC,8BAA8B,CAAC,QAAQ,EAAE;;AAG9C,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;;;IAIlB,gBAAgB,GAAA;QACtB,OAAO,CAAC,GAAG,CAAC,+CAA+C,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAC/E,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAG;AAClE,YAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC;;AAEvC,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;AACnC,YAAA,MAAM,SAAS,GAAG,wBAAwB,CAAC,WAAW,CAAC;;AAGvD,YAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO;YAClC,IAAI,QAAQ,EAAE;AACZ,gBAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,QAAQ,CAAC;AAC5D,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3B,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,gBAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;;iBACxB;AACL,gBAAA,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC;AAC1D,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;;AAE3B,SAAC,CAAC;;;AAII,IAAA,cAAc,CAAC,QAAgB,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAEpB,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,QAAQ,CAAC;AAEvD,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC7C,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC,SAAS,CAAC;AACV,YAAA,IAAI,EAAE,CAAC,QAAkC,KAAI;AAC3C,gBAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,QAAQ,CAAC;gBAE9C,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,EAAE,IAAI,EAAE;;oBAEvC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI;oBAClF,IAAI,UAAU,EAAE;AACd,wBAAA,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC;AAC3C,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC;;yBAC9C;AACL,wBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC;AACvC,wBAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,QAAQ,CAAC;;;qBAE5D;AACL,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC;AAC5C,oBAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,QAAQ,CAAC;;AAE5D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC;gBAEnD,IAAI,YAAY,GAAG,6BAA6B;AAEhD,gBAAA,IAAI,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE;AACvB,oBAAA,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO;;AAC3B,qBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;AACvB,oBAAA,YAAY,GAAG,GAAG,CAAC,OAAO;;AACrB,qBAAA,IAAI,GAAG,EAAE,MAAM,KAAK,GAAG,EAAE;oBAC9B,YAAY,GAAG,mBAAmB;;AAC7B,qBAAA,IAAI,GAAG,EAAE,MAAM,KAAK,GAAG,EAAE;oBAC9B,YAAY,GAAG,uCAAuC;;AAGxD,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;AAC5B,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;;AAII,IAAA,0BAA0B,CAAC,UAAwC,EAAA;AACzE,QAAA,IAAI;AACF,YAAA,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,UAAU,CAAC;;AAG/D,YAAA,MAAM,QAAQ,GAAG;;AAEf,gBAAA,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,EAAE;AACrC,gBAAA,gBAAgB,EAAE,UAAU,CAAC,gBAAgB,IAAI,EAAE;AACnD,gBAAA,sBAAsB,EAAE,UAAU,CAAC,sBAAsB,IAAI,EAAE;AAC/D,gBAAA,aAAa,EAAE,UAAU,CAAC,aAAa,KAAK,SAAS,GAAG,UAAU,CAAC,aAAa,GAAG,IAAI;;AAGvF,gBAAA,kCAAkC,EAAE,UAAU,CAAC,kCAAkC,IAAI,EAAE;AACvF,gBAAA,oBAAoB,EAAE,UAAU,CAAC,oBAAoB,IAAI,EAAE;AAC3D,gBAAA,oBAAoB,EAAE,UAAU,CAAC,oBAAoB,IAAI,EAAE;;AAG3D,gBAAA,aAAa,EAAE,UAAU,CAAC,aAAa,IAAI,EAAE;AAC7C,gBAAA,mBAAmB,EAAE,UAAU,CAAC,mBAAmB,IAAI,EAAE;AACzD,gBAAA,sBAAsB,EAAE,UAAU,CAAC,sBAAsB,IAAI,EAAE;AAC/D,gBAAA,yBAAyB,EAAE,UAAU,CAAC,yBAAyB,IAAI,EAAE;AACrE,gBAAA,0BAA0B,EAAE,UAAU,CAAC,0BAA0B,IAAI,EAAE;AACvE,gBAAA,4BAA4B,EAAE,UAAU,CAAC,4BAA4B,IAAI,EAAE;AAC3E,gBAAA,wBAAwB,EAAE,UAAU,CAAC,wBAAwB,IAAI,EAAE;AACnE,gBAAA,wBAAwB,EAAE,UAAU,CAAC,wBAAwB,IAAI,EAAE;AACnE,gBAAA,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,IAAI,EAAE;AACvD,gBAAA,wBAAwB,EAAE,UAAU,CAAC,wBAAwB,IAAI,EAAE;AACnE,gBAAA,YAAY,EAAE,UAAU,CAAC,YAAY,IAAI,EAAE;AAC3C,gBAAA,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,IAAI,EAAE;AACvD,gBAAA,uBAAuB,EAAE,UAAU,CAAC,uBAAuB,IAAI,EAAE;AACjE,gBAAA,0BAA0B,EAAE,UAAU,CAAC,0BAA0B,IAAI,EAAE;AACvE,gBAAA,2BAA2B,EAAE,UAAU,CAAC,2BAA2B,IAAI,EAAE;AACzE,gBAAA,6BAA6B,EAAE,UAAU,CAAC,6BAA6B,IAAI,EAAE;AAC7E,gBAAA,yBAAyB,EAAE,UAAU,CAAC,yBAAyB,IAAI,EAAE;AACrE,gBAAA,mCAAmC,EAAE,UAAU,CAAC,mCAAmC,IAAI,EAAE;AACzF,gBAAA,qBAAqB,EAAE,UAAU,CAAC,qBAAqB,IAAI,EAAE;AAC7D,gBAAA,qBAAqB,EAAE,UAAU,CAAC,qBAAqB,IAAI,EAAE;AAC7D,gBAAA,mBAAmB,EAAE,UAAU,CAAC,mBAAmB,IAAI,EAAE;AACzD,gBAAA,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,IAAI;aACtD;;AAGD,YAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAE1D,YAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC;;QAC5C,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC;AAClE,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC;;;;IAKjD,wBAAwB,GAAA;;AAE9B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,YAAY,CAAC,IAAI,CAChE,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,EACtB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC,SAAS,CAAC,SAAS,IAAG;YACtB,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,WAAW,CAAC;;AAE3D,SAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAAE,YAAY,CAAC,IAAI,CACjE,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,EACtB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC,SAAS,CAAC,SAAS,IAAG;YACtB,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,YAAY,CAAC;;AAE5D,SAAC,CAAC;;;IAII,0BAA0B,CAAC,SAAiB,EAAE,WAAuC,EAAA;QAC3F,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;AACtD,QAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,WAAW,CAAC;QAC7C,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,CAAC,IAAI,CAAC,mCAAmC,SAAS,CAAA,CAAE,CAAC;YAC5D;;AAGF,QAAA,MAAM,MAAM,GAAG,WAAW,KAAK,WAAW,GAAG,gBAAgB,GAAG,iBAAiB;;AAGjF,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YACzB,CAAC,CAAA,EAAG,MAAM,CAAA,WAAA,CAAa,GAAG,WAAW,CAAC,cAAc,IAAI,EAAE;YAC1D,CAAC,CAAA,EAAG,MAAM,CAAA,YAAA,CAAc,GAAG,WAAW,CAAC,gBAAgB,IAAI,EAAE;YAC7D,CAAC,CAAA,EAAG,MAAM,CAAA,cAAA,CAAgB,GAAG,WAAW,CAAC,sBAAsB,IAAI;AACpE,SAAA,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAExB,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,kBAAA,EAAqB,WAAW,yBAAyB,EAAE;YACrE,IAAI,EAAE,WAAW,CAAC,cAAc;YAChC,KAAK,EAAE,WAAW,CAAC,gBAAgB;YACnC,OAAO,EAAE,WAAW,CAAC;AACtB,SAAA,CAAC;;IAGJ,aAAa,GAAA;AACX,QAAA,IAAI;AACF,YAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;;YAGtC,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC;AACrJ,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,IAAI;AACF,wBAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,QAAQ,CAAC;wBACjD,MAAM,KAAK,GAAG,IAAI,CAAC,gCAAgC,CAAC,QAAQ,CAAC;AAC7D,wBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;wBAC3B,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC,MAAM,CAAC;;oBACpD,OAAO,KAAK,EAAE;AACd,wBAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC;AACxD,wBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;;iBAE3B;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,oBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC;AACpD,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;;AAE3B,aAAA,CAAC;;YAGF,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;AAClD,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,IAAI;AACF,wBAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,QAAQ,CAAC;wBAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC;AAC7D,wBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;wBAC/B,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,UAAU,CAAC,MAAM,CAAC;;oBACvD,OAAO,KAAK,EAAE;AACd,wBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC;AACtD,wBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;;iBAE1B;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,oBAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC;AAClD,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;;AAE1B,aAAA,CAAC;;YAGF,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;YACxD,IAAI,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,oBAAoB,EAAE,cAAc,EAAE,CAAC,CAAC,SAAS,CAAC;AAC/E,oBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,wBAAA,IAAI;AACF,4BAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,QAAQ,CAAC;4BAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC;AACpD,4BAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;4BACrB,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC,MAAM,CAAC;;wBAC7C,OAAO,KAAK,EAAE;AACd,4BAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;AACjD,4BAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;;qBAErB;AACD,oBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,wBAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC;AAC7C,wBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;;AAErB,iBAAA,CAAC;;iBACG;AACL,gBAAA,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC;AACnE,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;;;AAIpB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;;YAIxB,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;AAChD,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,IAAI;AACF,wBAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,QAAQ,CAAC;wBAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC;AAC3D,wBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;AACtC,wBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC;wBACvC,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,SAAS,CAAC,MAAM,CAAC;;oBACrD,OAAO,KAAK,EAAE;AACd,wBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;AACrD,wBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/B,wBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;;iBAEnC;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,oBAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC;AACjD,oBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/B,oBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;;AAEnC,aAAA,CAAC;;QACF,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;;;;AAK/C,IAAA,gCAAgC,CAAC,QAA6C,EAAA;QACpF,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE;AACzC,YAAA,OAAO,EAAE;;QAGX,IAAI,SAAS,GAAiB,EAAE;;QAGhC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAChC,YAAA,SAAS,GAAG,QAAQ,CAAC,IAAI;;QAG3B,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,IAAgB,EAAE,KAAa,KAAI;YACvD,OAAO;;gBAEL,KAAK,EAAG,IAA2B,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,CAAA,MAAA,EAAS,KAAK,CAAA,CAAE;gBACzE,KAAK,EAAG,IAA2B,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,IAAI;aAClE;AACH,SAAC,CAAC;;;AAII,IAAA,2BAA2B,CAAC,QAAwC,EAAA;QAC1E,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE;AACzC,YAAA,OAAO,EAAE;;AAGX,QAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,QAAQ,CAAC;;QAG9C,IAAI,SAAS,GAAgB,EAAE;QAE/B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAChC,YAAA,SAAS,GAAG,QAAQ,CAAC,IAAI;;AAG3B,QAAA,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,IAAe,KAAI;YACvC,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,GAAG;AACf,gBAAA,KAAK,EAAE,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,GAAA,EAAM,IAAI,CAAC,SAAS,CAAA,EAAA,EAAK,IAAI,CAAC,WAAW,CAAA,CAAA;aAClE;AACH,SAAC,CAAC;;;AAII,IAAA,uBAAuB,CAAC,QAA2C,EAAA;QACzE,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE;AACzC,YAAA,OAAO,EAAE;;QAGX,IAAI,SAAS,GAAU,EAAE;;QAGzB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAChC,YAAA,SAAS,GAAG,QAAQ,CAAC,IAAI;;aACpB,IAAI,QAAQ,CAAC,IAAI,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE;;AAE7D,YAAA,SAAS,GAAI,QAAQ,CAAC,IAAY,CAAC,IAAI,IAAK,QAAQ,CAAC,IAAY,CAAC,KAAK,IAAI,EAAE;;AAG/E,QAAA,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,IAAS,KAAI;YACjC,OAAO;AACL,gBAAA,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;gBACrB,KAAK,EAAE,IAAI,EAAE,aAAa,IAAI,CAAA,EAAG,IAAI,EAAE,cAAc,IAAI,EAAE,IAAI,IAAI,EAAE,aAAa,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI;aACtG;AACH,SAAC,CAAC;;;AAII,IAAA,0BAA0B,CAAC,QAAyC,EAAA;QAC1E,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE;AACzC,YAAA,OAAO,EAAE;;QAEX,IAAI,SAAS,GAAkB,EAAE;;AAGjC,QAAA,IAAI,eAAe,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE;AACnE,YAAA,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa;;;AAIzC,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAE3B,QAAA,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,IAAiB,KAAI;YACzC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;;YAElC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC;;YAGxC,OAAO;AACL,gBAAA,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,CAAA,EAAG,IAAI,CAAC,aAAa,CAAA,GAAA,EAAM,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAA;aAC/D;AACH,SAAC,CAAC;;;AAII,IAAA,0BAA0B,CAAC,QAAuC,EAAA;AACxE,QAAA,IAAI;YACF,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE;AACzC,gBAAA,OAAO,CAAC,IAAI,CAAC,8CAA8C,EAAE,QAAQ,CAAC;AACtE,gBAAA,OAAO,EAAE;;AAGX,YAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,QAAQ,CAAC;YAE7C,IAAI,SAAS,GAAiB,EAAE;;YAGhC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAChC,gBAAA,SAAS,GAAG,QAAQ,CAAC,IAAI;;AACpB,iBAAA,IAAI,QAAQ,CAAC,IAAI,EAAE;AACxB,gBAAA,SAAS,GAAG,QAAQ,CAAC,IAAI;;YAG3B,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,SAAS,CAAC,MAAM,CAAC;AAE9D,YAAA,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,IAAgB,KAAI;gBACxC,OAAO;AACL,oBAAA,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;AACrB,oBAAA,KAAK,EAAE,CAAA,EAAG,IAAI,CAAC,sBAAsB,IAAI,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,+BAA+B,IAAI,IAAI,CAAA,CAAA;iBAC7F;AACH,aAAC,CAAC;;QACF,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC;AACvD,YAAA,OAAO,EAAE;;;;AAKb,IAAA,UAAU,CAAC,WAAmB,EAAA;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC;;;IAIjC,oBAAoB,GAAA;;AAE1B,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAC/B,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,EAC/D,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC,SAAS,CAAC,KAAK,IAAG;AAClB,YAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;AACrC,SAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CACzB,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,EAC/D,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC,SAAS,CAAC,KAAK,IAAG;AAClB,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC/B,SAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CACrC,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,EAC/D,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC,SAAS,CAAC,KAAK,IAAG;AAClB,YAAA,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC;AAC3C,SAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,8BAA8B,CAAC,IAAI,CACtC,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,EAC/D,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC,SAAS,CAAC,KAAK,IAAG;AAClB,YAAA,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC;AAC5C,SAAC,CAAC;;;AAIJ,IAAA,kBAAkB,CAAC,KAAuB,EAAA;AACxC,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAIlC,IAAA,uBAAuB,CAAC,KAAuB,EAAA;AACrD,QAAA,IAAI;AACF,YAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,CAAC;;AAGlD,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;AAEjC,YAAA,MAAM,OAAO,GAAmB;AAC9B,gBAAA,aAAa,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;AAChC,gBAAA,QAAQ,EAAE,KAAK,CAAC,KAAe,IAAI;aACpC;AACD,YAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,OAAO,CAAC;AAE/C,YAAA,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,CAC9C,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC,SAAS,CAAC;AACV,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,QAAQ,CAAC;oBACtD,MAAM,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC;AAC7D,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;oBACjC,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,WAAW,CAAC,MAAM,CAAC;iBAClE;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,oBAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC;AACjD,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;iBACzB;gBACD,QAAQ,EAAE,MAAK;;AAEb,oBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;;AAErC,aAAA,CAAC;;QACF,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC;AACxD,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;;;;AAKtC,IAAA,YAAY,CAAC,KAAuB,EAAA;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAI5B,IAAA,iBAAiB,CAAC,KAAuB,EAAA;AAC/C,QAAA,IAAI;AACF,YAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,KAAK,CAAC;;AAG3C,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG3B,YAAA,MAAM,OAAO,GAAG;AACd,gBAAA,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE;AACzB,gBAAA,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;gBACvD,UAAU,EAAE,KAAK;aAClB;AACD,YAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,OAAO,CAAC;YAE/C,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AAC9C,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,QAAQ,CAAC;oBAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC;AACpD,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC,MAAM,CAAC;iBACrD;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,oBAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC;AAC1C,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;iBACnB;gBACD,QAAQ,EAAE,MAAK;;AAEb,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE/B,aAAA,CAAC;;QACF,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;AACjD,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;;;;AAKhC,IAAA,wBAAwB,CAAC,KAAuB,EAAA;AAC9C,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC;AACjC,QAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAIxC,IAAA,6BAA6B,CAAC,KAAuB,EAAA;AAC3D,QAAA,IAAI;AACF,YAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC;;AAG9C,YAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC;AAExC,YAAA,MAAM,OAAO,GAAwB;gBACnC,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,QAAQ,EAAE,KAAK,CAAC,KAAe;aAChC;AACD,YAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,OAAO,CAAC;YAElD,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AACrD,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,QAAQ,CAAC;oBAClD,MAAM,SAAS,GAAG,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC;AAC3D,oBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;oBACtC,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,SAAS,CAAC,MAAM,CAAC;iBAC7D;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,oBAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC;AAC7C,oBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;iBAChC;gBACD,QAAQ,EAAE,MAAK;;AAEb,oBAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE5C,aAAA,CAAC;;QACF,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC;AACpD,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/B,YAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC;;;AAI7C,IAAA,yBAAyB,CAAC,KAAuB,EAAA;AAC/C,QAAA,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAIzC,IAAA,8BAA8B,CAAC,KAAuB,EAAA;AAC5D,QAAA,IAAI;AACF,YAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC;;AAG9C,YAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC;AAEzC,YAAA,MAAM,OAAO,GAAwB;gBACnC,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,QAAQ,EAAE,KAAK,CAAC,KAAe;aAChC;AACD,YAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,OAAO,CAAC;YAElD,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AACrD,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,QAAQ,CAAC;oBAClD,MAAM,SAAS,GAAG,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC;AAC3D,oBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC;oBACvC,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,SAAS,CAAC,MAAM,CAAC;iBAC7D;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,oBAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC;AAC7C,oBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;iBACjC;gBACD,QAAQ,EAAE,MAAK;;AAEb,oBAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE7C,aAAA,CAAC;;QACF,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC;AACpD,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;AAChC,YAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC;;;;AAK9C,IAAA,qBAAqB,CAAC,KAAqB,EAAA;QACzC,IAAI,SAAS,GAAG,EAAE;AAClB,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,SAAS,GAAG,KAAK;;aACZ;AACL,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA2B;AAChD,YAAA,SAAS,GAAG,MAAM,EAAE,KAAK,IAAI,EAAE;;AAEjC,QAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,SAAS,CAAC;;;;;IAMpD,QAAQ,CAAC,WAAmB,EAAE,SAAkB,EAAA;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;AAC5C,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;QAE1B,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;;AAE1E,QAAA,OAAO,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;;;AAI9D,IAAA,eAAe,CAAC,WAAmB,EAAA;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;AAC5C,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;AAE1C,QAAA,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAE5G,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YAChC,OAAO,CAAA,EAAG,SAAS,CAAA,YAAA,CAAc;;AAEnC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YACjC,OAAO,CAAA,kBAAA,EAAqB,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,cAAc,CAAA,WAAA,CAAa;;AAErF,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC7B,YAAA,OAAO,oCAAoC;;AAE7C,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAC/B,YAAA,OAAO,4DAA4D;;AAErE,QAAA,OAAO,eAAe;;;IAIxB,wBAAwB,GAAA;QACtB,MAAM,MAAM,GAAa,EAAE;AAC3B,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;AACxC,YAAA,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;gBACpE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;;AAE1C,SAAC,CAAC;AACF,QAAA,OAAO,MAAM;;;AAIf,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK;;;AAI9B,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,GAAG,QAAQ;;;AAI9C,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;;;AAIxB,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACrB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK;YAC1D,OAAO,UAAU,GAAG,CAAA,aAAA,EAAgB,UAAU,CAAA,CAAE,GAAG,aAAa;;AAElE,QAAA,OAAO,mBAAmB;;;AAI5B,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACrB,YAAA,OAAO,qCAAqC;;AAE9C,QAAA,OAAO,yDAAyD;;AAGlE,IAAA,YAAY,CAAC,KAAsB,EAAA;QACjC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;aACpD;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,YAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;;;AAI5C,IAAA,WAAW,CAAC,GAAY,EAAA;QACtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;;IAG5B,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEtB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK;AACtC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AAChC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAEhC,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,UAAA,EAAa,MAAM,GAAG,QAAQ,GAAG,QAAQ,cAAc,EAAE,QAAQ,CAAC;;YAG9E,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,kBAAkB,EAAE,wBAAwB,CAAC;AAClF,YAAA,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAEtE,YAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,yBAAA,EAA4B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;AACtE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBACvB;;;AAIF,YAAA,IAAI,MAAM,IAAI,QAAQ,EAAE;AACtB,gBAAA,QAAQ,CAAC,GAAG,GAAG,QAAQ;;YAGzB,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC;YAEnE,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,SAAA,EAAY,MAAM,GAAG,QAAQ,GAAG,QAAQ,WAAW,EAAE,QAAQ,CAAC;AAE1E,oBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;wBACrB,MAAM,cAAc,GAAG;AACrB,8BAAE;8BACA,8BAA8B;AAClC,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;;AAGhC,wBAAA,IAAI,CAAC,MAAM,IAAI,QAAQ,EAAE,IAAI,EAAE;4BAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI;AAClF,4BAAA,IAAI,UAAU,EAAE,GAAG,EAAE;gCACnB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;AACjC,gCAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;;;;wBAK7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,4BAA4B,CAAC,CAAC;;yBAC/C;wBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAA,UAAA,EAAa,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA,0BAAA,CAA4B,CAAC;;AAE5G,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;iBACxB;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,oBAAA,OAAO,CAAC,KAAK,CAAC,CAAA,SAAA,EAAY,MAAM,GAAG,QAAQ,GAAG,QAAQ,SAAS,EAAE,GAAG,CAAC;AAErE,oBAAA,IAAI,YAAY,GAAG,CAAA,UAAA,EAAa,MAAM,GAAG,QAAQ,GAAG,MAAM,mBAAmB;AAE7E,oBAAA,IAAI,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE;AACvB,wBAAA,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO;;AAC3B,yBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;AACvB,wBAAA,YAAY,GAAG,GAAG,CAAC,OAAO;;AACrB,yBAAA,IAAI,GAAG,EAAE,MAAM,KAAK,GAAG,EAAE;wBAC9B,YAAY,GAAG,iDAAiD;;yBAC3D,IAAI,GAAG,EAAE,MAAM,KAAK,GAAG,IAAI,MAAM,EAAE;wBACxC,YAAY,GAAG,6CAA6C;;AACvD,yBAAA,IAAI,GAAG,EAAE,MAAM,KAAK,GAAG,EAAE;wBAC9B,YAAY,GAAG,oEAAoE;;AAC9E,yBAAA,IAAI,GAAG,EAAE,MAAM,KAAK,GAAG,EAAE;wBAC9B,YAAY,GAAG,uCAAuC;;AAGxD,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;AAC5B,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,aAAA,CAAC;;aACC;;AAEL,YAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE;AAElC,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,EAAE;AACxD,YAAA,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,gBAAgB,CAAC;AAE5D,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,iCAAA,EAAoC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;;;IAIrF,OAAO,GAAA;QACL,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;;AAExC,YAAA,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC;YACvE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAG,CAAC;;aAChC;;AAEL,YAAA,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC;;AAGrE,YAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;;AAGzB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACpB,gBAAA,SAAS,EAAE,EAAE;AACb,gBAAA,sBAAsB,EAAE,EAAE;AAC1B,gBAAA,gBAAgB,EAAE,EAAE;AACpB,gBAAA,aAAa,EAAE,EAAE;AACjB,gBAAA,mBAAmB,EAAE,EAAE;AACvB,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,sBAAsB,EAAE,EAAE;AAC1B,gBAAA,wBAAwB,EAAE,EAAE;AAC5B,gBAAA,yBAAyB,EAAE,EAAE;AAC7B,gBAAA,0BAA0B,EAAE,EAAE;AAC9B,gBAAA,4BAA4B,EAAE,EAAE;AAChC,gBAAA,kCAAkC,EAAE,EAAE;AACtC,gBAAA,oBAAoB,EAAE,EAAE;AACxB,gBAAA,wBAAwB,EAAE,EAAE;AAC5B,gBAAA,kBAAkB,EAAE,EAAE;AACtB,gBAAA,oBAAoB,EAAE,EAAE;AACxB,gBAAA,wBAAwB,EAAE,EAAE;AAC5B,gBAAA,YAAY,EAAE,EAAE;AAChB,gBAAA,kBAAkB,EAAE,EAAE;AACtB,gBAAA,uBAAuB,EAAE,EAAE;AAC3B,gBAAA,yBAAyB,EAAE,EAAE;AAC7B,gBAAA,0BAA0B,EAAE,EAAE;AAC9B,gBAAA,2BAA2B,EAAE,EAAE;AAC/B,gBAAA,6BAA6B,EAAE,EAAE;AACjC,gBAAA,mCAAmC,EAAE,EAAE;AACvC,gBAAA,qBAAqB,EAAE,EAAE;AACzB,gBAAA,mBAAmB,EAAE,EAAE;AACvB,gBAAA,qBAAqB,EAAE,EAAE;AACzB,gBAAA,kBAAkB,EAAE;AACrB,aAAA,CAAC;;AAGJ,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;;AAGxC,IAAA,oBAAoB,CAAC,UAAkB,EAAA;AACrC,QAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,UAAU,CAAC;;;AAInE,IAAA,kBAAkB,CAAC,KAAa,EAAA;AAC9B,QAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;;;AAIhD,IAAA,qBAAqB,CAAC,QAAgB,EAAA;;AAEpC,QAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC;;IAG3C,aAAa,GAAA;QACX,OAAO;AACL,YAAA,OAAO,EAAE,aAAa;YACtB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,GAAG,IAAI,EAAE;AACjD,YAAA,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;AAC9B,YAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;AACjC,YAAA,UAAU,EAAE,aAAa;SAC1B;;uGAnhCQ,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,mFC/C1C,g4XAwOM,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDrMF,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,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,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,IAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,qBAAqB,0UACrB,yBAAyB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,aAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,sBAAsB,kXACtB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKR,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAhBzC,SAAS;+BACE,yBAAyB,EAAA,UAAA,EACvB,IAAI,EAAA,OAAA,EACP;wBACP,mBAAmB;wBACnB,kBAAkB;wBAClB,mBAAmB;wBACnB,qBAAqB;wBACrB,yBAAyB;wBACzB,mBAAmB;wBACnB,sBAAsB;wBACtB;AACD,qBAAA,EAAA,QAAA,EAAA,g4XAAA,EAAA;;;;;;;;MEUU,2BAA2B,CAAA;;AAEtC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAChB,IAAA,aAAa,GAAG,MAAM,CAAC,+BAA+B,CAAC;;AAG/D,IAAA,aAAa,GAAG,SAAS,CAAyD,wBAAwB,yDAAC;;AAG3G,IAAA,qBAAqB,GAAG,SAAS,CAAC,QAAQ,CAA6D,uBAAuB,CAAC;AAC/H,IAAA,kBAAkB,GAAG,SAAS,CAAC,QAAQ,CAA6D,oBAAoB,CAAC;AACzH,IAAA,uBAAuB,GAAG,SAAS,CAAC,QAAQ,CAA6D,yBAAyB,CAAC;;AAGnI,IAAA,QAAQ,GAAG,MAAM,CAAiC,EAAE,oDAAC;AACrD,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,WAAW,GAAG,MAAM,CAAC,EAAE,uDAAC;AACxB,IAAA,WAAW,GAAG,MAAM,CAAC,CAAC,uDAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,EAAE,oDAAC;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC;AACtB,IAAA,kBAAkB,GAAG,MAAM,CAAC,EAAE,8DAAC;;AAG/B,IAAA,IAAI,uBAAuB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE;;IAGlC,IAAI,uBAAuB,CAAC,KAAa,EAAA;AACvC,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;;;AAIpC,IAAA,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC;AACtB,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,uDAAC;AAC3B,IAAA,eAAe,GAAG,MAAM,CAAC,KAAK,2DAAC;IAC/B,UAAU,GAAW,CAAC;IACtB,aAAa,GAAW,CAAC;;IAGzB,iBAAiB,GAAG,MAAM,CAAC;AACzB,QAAA,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE;AACxC,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,QAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACtC,QAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;AAC5C,QAAA,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW;AACzC,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;IAGF,UAAU,GAAG,MAAM,CAAkD;AACnE,QAAA,EAAE,EAAE,kBAAkB;AACtB,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,gBAAgB;AACxB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,eAAe;AACpB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,YAAY,EAAE;AACZ,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,WAAW,EAAE,QAAQ;AACrB,oBAAA,aAAa,EAAE,UAAU;AACzB,oBAAA,WAAW,EAAE,mCAAmC;AAChD,oBAAA,aAAa,EAAE;AAChB;AACF,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,wBAAwB;AAC7B,gBAAA,MAAM,EAAE,aAAa;AACrB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA;AACD,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,oBAAoB;AACjC,YAAA,iBAAiB,EAAE,CAAC,WAAW,EAAE,kBAAkB,EAAE,sBAAsB,CAAC;AAC5E,YAAA,UAAU,EAAE;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,UAAU,EAAE,kBAAkB;AAC9B,QAAA,SAAS,EAAE,iBAAiB;AAC5B,QAAA,IAAI,EAAE;AACJ,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,UAAU,EAAE,uBAAuB;AACnC,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,WAAW,EAAE,YAAY;AACzB,YAAA,cAAc,EAAE;AACjB;AACF,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGF,IAAA,iBAAiB,GAAG,QAAQ,CAAC,OAAmF;AAC9G,QAAA,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,EAAE;AACnD,QAAA,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC7C,QAAA,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;AACtD,KAAA,CAAC,6DAAC;;AAIH,IAAA,iBAAiB,CAAC,GAAiC,EAAA;AACjD,QAAA,MAAM,YAAY,GAAG,GAAG,CAAC,sBAAsB,IAAI,KAAK;QACxD,IAAI,cAAc,GAAG,EAAE;;QAGvB,MAAM,OAAO,GAAG,GAAU;AAC1B,QAAA,IAAI,OAAO,CAAC,mBAAmB,EAAE,WAAW,EAAE;AAC5C,YAAA,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC,WAAW;;AACnD,aAAA,IAAI,OAAO,CAAC,wBAAwB,EAAE,WAAW,EAAE;AACxD,YAAA,cAAc,GAAG,OAAO,CAAC,wBAAwB,CAAC,WAAW;;aACxD;;YAEL,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;;AAGzF,QAAA,OAAO,cAAc;;;AAIvB,IAAA,IAAI,GAAG,CAAC,KAAU,KAAU,KAAK;;IAGjC,iBAAiB,GAAA;AACf,QAAA,OAAO,EAAE;;;AAIX,IAAA,gBAAgB,CAAC,MAAoC,EAAA;QACnD,OAAO;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,UAAU;AACd,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;gBACZ,KAAK,EAAE,MAAM,CAAC,aAAa,GAAG,YAAY,GAAG,UAAU;AACvD,gBAAA,IAAI,EAAE,oBAAoB;AAC1B,gBAAA,SAAS,EAAE,oBAAoB;AAC/B,gBAAA,SAAS,EAAE,oBAAoB;AAC/B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,SAAS,EAAE,iBAAiB;AAC5B,gBAAA,SAAS,EAAE,iBAAiB;AAC5B,gBAAA,YAAY,EAAE;AACf;SACF;;IAGH,mBAAmB,CAAC,IAAkB,EAAE,MAAoC,EAAA;AAC1E,QAAA,QAAQ,IAAI,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBACvB;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;gBAC3B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;gBAC/B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBACzB;AACF,YAAA;gBACE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,EAAE,CAAC;;;AAIrC,IAAA,UAAU,CAAC,MAAoC,EAAA;QACnD,MAAM,KAAK,GAAW,wBAAwB,CAAC;YAC7C,OAAO,EAAE,MAAM,CAAC;AACnB,SAAA,CAAC;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,eAAe,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;;AAG3D,IAAA,cAAc,CAAC,MAAoC,EAAA;QACzD,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,MAAM,CAAC,SAAS,CAAC;;QAEzD,MAAM,KAAK,GAAW,wBAAwB,CAAC;YAC7C,qBAAqB,EAAE,MAAM,CAAC;AAC/B,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,eAAe,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;;AAGzD,IAAA,kBAAkB,CAAC,MAAoC,EAAA;QAC7D,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,MAAM,CAAC,SAAS,CAAC;AAC5D,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,GAAG,YAAY,GAAG,UAAU;AAC/D,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,IAAI,aAAa;QAEpD,IAAI,OAAO,CAAC,CAAA,yBAAA,EAA4B,MAAM,IAAI,UAAU,CAAA,CAAA,CAAG,CAAC,EAAE;;YAEhE,OAAO,CAAC,GAAG,CAAC,CAAA,EAAG,MAAM,CAAA,QAAA,CAAU,EAAE,MAAM,CAAC,GAAG,CAAC;;AAE5C,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;;;AAInB,IAAA,YAAY,CAAC,MAAoC,EAAA;AACrD,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,IAAI,aAAa;AACpD,QAAA,IAAI,OAAO,CAAC,CAAA,gCAAA,EAAmC,UAAU,CAAA,CAAA,CAAG,CAAC,EAAE;YAC7D,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;;;;IAKpD,cAAc,GAAG,EAAE;IAEnB,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC;QACrD,IAAI,CAAC,qBAAqB,EAAE;;AAG5B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;QAGvB,IAAI,CAAC,YAAY,EAAE;;;AAIrB,IAAA,WAAW,CAAC,KAA8C,EAAA;QACxD,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;AAErE,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAoC,CAAC;gBACjE;AACF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,eAAe,EAAE;gBACtB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAc,CAAC;gBACzC;AACF,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAc,CAAC;gBAC7C;AACF,YAAA;gBACE,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,KAAK,CAAC,IAAI,CAAC;;;;AAK9C,IAAA,gBAAgB,CAAC,MAAoC,EAAA;AAC3D,QAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC;AAC1C,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;IAGvD,eAAe,GAAA;AACrB,QAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;;AAGjB,IAAA,cAAc,CAAC,KAAa,EAAA;AAClC,QAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC;AACtC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;;;AAIrB,IAAA,kBAAkB,CAAC,IAAY,EAAA;AACrC,QAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC;AACrC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG1B,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAGlB,IAAA,uBAAuB,CAAC,QAAgB,EAAA;;AAE9C,QAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC;;AAEzC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;;;AAIjB,IAAA,cAAc,CAAC,QAAwC,EAAA;QAC7D,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;AAC9E,QAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC;;AAGhF,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;;QAG3B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK;AAChC,YAAA,GAAG,MAAM;AACT,YAAA,IAAI,EAAE;AACP,SAAA,CAAC,CAAC;;AAGH,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAGvB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;QACrC,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,sBAAsB,EAAE;;AAGnC,QAAA,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC;AAC/D,QAAA,OAAO,CAAC,GAAG,CAAC,2CAA2C,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;QACvF,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AAC7D,QAAA,OAAO,CAAC,GAAG,CAAC,iDAAiD,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;;IAG5G,YAAY,CAAC,YAAqB,KAAK,EAAA;QACrC,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC;;AAElD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;YACrC,IAAI,QAAQ,EAAE;AACZ,gBAAA,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;;;aAEzB;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,YAAA,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC;;AAE1D,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE;QAE/B,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;AAC7C,YAAA,IAAI,EAAE,CAAC,QAAkC,KAAI;AAC3C,gBAAA,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE,QAAQ,CAAC;;AAG9D,gBAAA,IAAI,QAAQ,EAAE,IAAI,EAAE;;oBAElB,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACnF,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC;AAExF,oBAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC3B,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AACpE,wBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;wBACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC;;yBACnC;AACL,wBAAA,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC;;;qBAEnE;AACL,oBAAA,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC;;gBAG5E,IAAI,CAAC,qBAAqB,EAAE;AAC5B,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAGvB,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;gBACrC,IAAI,QAAQ,EAAE;oBACZ,QAAQ,CAAC,sBAAsB,EAAE;;;AAInC,gBAAA,IAAI,SAAS,IAAI,QAAQ,EAAE;AACzB,oBAAA,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;;aAEhC;AACD,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC;AAC/C,gBAAA,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC;;AAG9E,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC;AAEvD,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAGvB,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;gBACrC,IAAI,QAAQ,EAAE;oBACZ,QAAQ,CAAC,sBAAsB,EAAE;;;AAInC,gBAAA,IAAI,SAAS,IAAI,QAAQ,EAAE;AACzB,oBAAA,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;;;AAGlC,SAAA,CAAC;;IAGI,qBAAqB,GAAA;AAC3B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC5D,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC;AAChD,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;;IAGlD,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE;;IAGrB,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE;;AAGrB,IAAA,YAAY,CAAC,IAAqB,EAAA;AAChC,QAAA,IAAI,QAAQ,CAAC,IAAc,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAc,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YAClF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAc,CAAC,CAAC;YAC9C,IAAI,CAAC,YAAY,EAAE;;;IAIvB,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE;;IAGrB,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;;IAG1B,WAAW,GAAA;;QAET,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,8BAA8B,CAAC,CAAC;;AAGxD,IAAA,YAAY,CAAC,MAAoC,EAAA;;QAE/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,8BAA8B,CAAC,EAAE;YACrD,WAAW,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM;AAC5C,SAAA,CAAC;AACF,QAAA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC;;AAGrC,IAAA,YAAY,CAAC,MAAoC,EAAA;;AAE/C,QAAA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC;;AAGrC,IAAA,cAAc,CAAC,MAAoC,EAAA;QACjD,IAAI,OAAO,CAAC,CAAA,iCAAA,EAAoC,MAAM,CAAC,SAAS,CAAA,EAAA,CAAI,CAAC,EAAE;;AAErE,YAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC;;;AAIzC,IAAA,cAAc,CAAC,QAAiB,EAAA;AAC9B,QAAA,OAAO;AACL,cAAE;cACA,+BAA+B;;AAGrC,IAAA,aAAa,CAAC,QAAiB,EAAA;QAC7B,OAAO,QAAQ,GAAG,QAAQ,GAAG,UAAU;;AAGzC,IAAA,UAAU,CAAC,IAA+B,EAAA;AACxC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK;QACvB,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE;;;IAI5C,cAAc,GAAA;AACZ,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;AAC/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;AAClC,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC;QAEhB,MAAM,KAAK,GAAa,EAAE;AAC1B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;AAC1C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC;AAE5C,QAAA,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;AACjC,YAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;;AAGf,QAAA,OAAO,KAAK;;IAGd,gBAAgB,GAAA;AACd,QAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AAC7E,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;AAE/B,QAAA,OAAO,GAAG,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,IAAA,EAAO,KAAK,EAAE;;IAGtC,eAAe,CAAC,KAAa,EAAE,MAAoC,EAAA;AACjE,QAAA,OAAO,MAAM,EAAE,GAAG,IAAI,EAAE;;;AAK1B;;AAEG;IACH,sBAAsB,GAAA;AACpB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;AAC/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;QAClC,MAAM,KAAK,GAAwB,EAAE;AAErC,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;;AAEd,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE;AAC/B,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;;;aAEV;;AAEL,YAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAEb,YAAA,IAAI,OAAO,IAAI,CAAC,EAAE;;AAEhB,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3B,oBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEf,gBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AACjB,gBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;;AACZ,iBAAA,IAAI,OAAO,IAAI,KAAK,GAAG,CAAC,EAAE;;AAE/B,gBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AACjB,gBAAA,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE;AACvC,oBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;;;iBAEV;;AAEL,gBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AACjB,gBAAA,KAAK,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC/C,oBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEf,gBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AACjB,gBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAIrB,QAAA,OAAO,KAAK;;AAGd;;AAEG;IACH,qBAAqB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;AAAE,YAAA,OAAO,CAAC;AACrC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC;;AAGnE;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AAChE,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;;;AAItC;;AAEG;IACH,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC;;AAGrE;;AAEG;IACH,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE;;AAG1B;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3C,QAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,mBAAmB,CAAC;;AAE3D,QAAA,KAAK,CAAC,CAAA,UAAA,EAAa,mBAAmB,CAAC,MAAM,CAAA,2BAAA,CAA6B,CAAC;;AAG7E;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;;QAErC,KAAK,CAAC,iBAAiB,IAAI,CAAC,UAAU,EAAE,CAAA,SAAA,CAAW,CAAC;;uGArnB3C,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,gIAM4C,wBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3D5G,kmJA6GA,EAAA,MAAA,EAAA,CAAA,EAAA,EAAA,+PAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED7FI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,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,EACX,iBAAiB,+FACjB,sBAAsB,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,wBAAwB,mRACxB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FA+Bf,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAzCvC,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,WAAW;wBACX,iBAAiB;wBACjB,sBAAsB;wBACtB,mBAAmB;wBACnB,wBAAwB;wBACxB;AACD,qBAAA,EAAA,QAAA,EAAA,kmJAAA,EAAA,MAAA,EAAA,CAAA,+PAAA,CAAA,EAAA;;;;;;;;AEvBH;;MC2Ea,2BAA2B,CAAA;;AAE9B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,IAAA,iBAAiB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AACrD,IAAA,aAAa,GAAG,MAAM,CAAC,+BAA+B,CAAC;AACvD,IAAA,kBAAkB,GAAG,MAAM,CAAC,oCAAoC,CAAC;AACjE,IAAA,iBAAiB,GAAG,MAAM,CAAC,mCAAmC,CAAC;AAC/D,IAAA,4BAA4B,GAAG,MAAM,CAAC,4BAA4B,CAAC;AACnE,IAAA,wBAAwB,GAAG,MAAM,CAAC,gCAAgC,CAAC;AACnE,IAAA,cAAc,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC/C,IAAA,cAAc,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC/C,IAAA,eAAe,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACjD,IAAA,WAAW,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC3C,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACxC,IAAA,qBAAqB,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAEpE,IAAA,cAAc;AACd,IAAA,SAAS,GAAG,MAAM,CAAC,OAAO,qDAAC;AAC3B,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,OAAO,GAAG,MAAM,CAAgB,IAAI,mDAAC;;AAGrC,IAAA,MAAM,GAAG,MAAM,CAAS,EAAE,kDAAC;AAC3B,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,kBAAkB,GAAG,MAAM,CAAC,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC;;AAGnC,IAAA,mBAAmB,GAAG,MAAM,CAAgB,IAAI,+DAAC;AAEjD,IAAA,gBAAgB,GAAG,MAAM,CAAqC,EAAE,4DAAC;AACjE,IAAA,SAAS,GAAG,MAAM,CAA8B,EAAE,qDAAC;AACnD,IAAA,aAAa,GAAG,MAAM,CAAkC,EAAE,yDAAC;AAC3D,IAAA,cAAc,GAAG,MAAM,CAA8B,EAAE,0DAAC;AACxD,IAAA,aAAa,GAAG,MAAM,CAA0C,EAAE,yDAAC;;AAGnE,IAAA,gBAAgB,GAAG,MAAM,CAAgB,IAAI,4DAAC;AAC9C,IAAA,WAAW,GAAG,MAAM,CAAe,EAAE,uDAAC;;IAGtC,MAAM,GAAG,MAAM;AAEf;;AAEG;AACH,IAAA,mBAAmB,CAAC,YAAoB,EAAA;AACtC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,6BAA6B,CAAC,EAAE,KAAK;QAChH,IAAI,aAAa,EAAE;AACjB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,KAAK,aAAa,CAAC;AAC1F,YAAA,OAAO,WAAW,EAAE,WAAW,IAAI,SAAS;;AAE9C,QAAA,OAAO,SAAS;;AAGlB;;AAEG;AACH,IAAA,mBAAmB,CAAC,YAAoB,EAAA;;;;AAKxC;;AAEG;AACH,IAAA,oBAAoB,CAAC,aAAqB,EAAA;AACxC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,8BAA8B,CAAC,EAAE,KAAK;QAC5G,IAAI,cAAc,EAAE;AAClB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,KAAK,cAAc,CAAC;AAC7F,YAAA,OAAO,YAAY,EAAE,WAAW,IAAI,UAAU;;AAEhD,QAAA,OAAO,UAAU;;AAGnB;;AAEG;AACH,IAAA,oBAAoB,CAAC,aAAqB,EAAA;;;;AAK1C;;AAEG;IACH,uBAAuB,CAAC,KAAY,EAAE,aAAqB,EAAA;AACzD,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;AAC/C,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;AAE1B,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;QAElC,OAAO,CAAC,GAAG,CAAC,CAAA,+BAAA,EAAkC,aAAa,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;;QAGtE,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,aAAa,CAAC;QACnE,IAAI,iBAAiB,EAAE;;;YAGrB,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;YAC1D,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YAClC,MAAM,QAAQ,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,QAAQ,CAAC;;AAG/C,YAAA,iBAAyB,CAAC,cAAc,GAAG,QAAQ;YAEpD,OAAO,CAAC,GAAG,CAAC,CAAA,4BAAA,EAA+B,aAAa,CAAA,CAAA,CAAG,EAAE,QAAQ,CAAC,MAAM,CAAC;;;AAIjF;;AAEG;AACH,IAAA,kBAAkB,CAAC,aAAqB,EAAA;QACtC,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,aAAa,CAAC;QACnE,OAAO,iBAAiB,EAAE,GAAG,CAAC,2BAA2B,CAAC,EAAE,KAAK,IAAI,EAAE;;AAGzE;;AAEG;AACH,IAAA,gBAAgB,CAAC,aAAqB,EAAA;;;AAGpC,QAAA,OAAO,EAAE;;AAGX;;AAEG;IACH,kBAAkB,CAAC,aAAqB,EAAE,QAAgB,EAAA;;;QAGxD,OAAO,CAAC,GAAG,CAAC,CAAA,qEAAA,EAAwE,aAAa,CAAA,QAAA,EAAW,QAAQ,CAAA,CAAE,CAAC;;AAGzH,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;;AAElC,YAAA,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACvB,YAAA,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;YACxB,eAAe,EAAE,CAAC,EAAE,CAAC;AACrB,YAAA,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACvB,YAAA,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;YACvB,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACtC,YAAA,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;YACvB,aAAa,EAAE,CAAC,EAAE,CAAC;YACnB,qBAAqB,EAAE,CAAC,EAAE,CAAC;YAC3B,kBAAkB,EAAE,CAAC,EAAE,CAAC;YACxB,0BAA0B,EAAE,CAAC,KAAK,CAAC;YACnC,aAAa,EAAE,CAAC,IAAI,CAAC;;YAGrB,mBAAmB,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;;YAGtC,2BAA2B,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;;YAG9C,mBAAmB,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;;YAGtC,wBAAwB,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;AAC3C,SAAA,CAAC;;QAGF,IAAI,CAAC,6BAA6B,EAAE;;;AAItC,IAAA,IAAI,uBAAuB,GAAA;QACzB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,qBAAqB,CAAc;;;AAIpE,IAAA,IAAI,yBAAyB,GAAA;QAC3B,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,6BAA6B,CAAc;;;AAI5E,IAAA,IAAI,kBAAkB,GAAA;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,qBAAqB,CAAc;;;AAIpE,IAAA,IAAI,sBAAsB,GAAA;QACxB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,0BAA0B,CAAc;;;AAIzE,IAAA,iBAAiB,GAAG,MAAM,CAA2C,EAAE,6DAAC;AACxE,IAAA,iBAAiB,GAAG,MAAM,CAAqC,EAAE,6DAAC;;IAG1D,oBAAoB,GAAsC,EAAE;;IAG5D,4BAA4B,GAAA;AAClC,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpD,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACnB,GAAG,EAAE,CAAC,EAAE,CAAC;AACT,YAAA,oBAAoB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;YAC9B,qBAAqB,EAAE,CAAC,EAAE,CAAC;YAC3B,0BAA0B,EAAE,CAAC,EAAE,CAAC;YAChC,0BAA0B,EAAE,CAAC,EAAE,CAAC;AAChC,YAAA,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;YAC7B,gBAAgB,EAAE,CAAC,EAAE,CAAC;YACtB,eAAe,EAAE,CAAC,KAAK,CAAC;YACxB,cAAc,EAAE,CAAC,IAAI,CAAC;YACtB,gBAAgB,EAAE,CAAC,IAAI,CAAC;YACxB,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AAC9B,SAAA,CAAC;;;IAII,6BAA6B,GAAA;AACnC,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACnB,GAAG,EAAE,CAAC,EAAE,CAAC;YACT,yBAAyB,EAAE,CAAC,EAAE,CAAC;YAC/B,2BAA2B,EAAE,CAAC,EAAE,CAAC;YACjC,qBAAqB,EAAE,CAAC,EAAE,CAAC;YAC3B,uBAAuB,EAAE,CAAC,EAAE,CAAC;YAC7B,wBAAwB,EAAE,CAAC,EAAE,CAAC;YAC9B,yBAAyB,EAAE,CAAC,EAAE,CAAC;YAC/B,2BAA2B,EAAE,CAAC,EAAE,CAAC;YACjC,mBAAmB,EAAE,CAAC,EAAE,CAAC;YACzB,uBAAuB,EAAE,CAAC,EAAE,CAAC;YAC7B,iBAAiB,EAAE,CAAC,EAAE,CAAC;YACvB,mBAAmB,EAAE,CAAC,EAAE,CAAC;YACzB,uBAAuB,EAAE,CAAC,EAAE;AAC7B,SAAA,CAAC;;;IAII,uBAAuB,GAAA;AAC7B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YAC9B,GAAG,EAAE,CAAC,EAAE,CAAC;YACT,kBAAkB,EAAE,CAAC,EAAE,CAAC;YACxB,4BAA4B,EAAE,CAAC,EAAE,CAAC;YAClC,gBAAgB,EAAE,CAAC,EAAE,CAAC;YACtB,yBAAyB,EAAE,CAAC,EAAE,CAAC;YAC/B,oBAAoB,EAAE,CAAC,EAAE,CAAC;YAC1B,qBAAqB,EAAE,CAAC,EAAE,CAAC;YAC3B,yBAAyB,EAAE,CAAC,EAAE,CAAC;YAC/B,sCAAsC,EAAE,CAAC,EAAE,CAAC;YAC5C,6BAA6B,EAAE,CAAC,EAAE,CAAC;YACnC,cAAc,EAAE,CAAC,IAAI;AACtB,SAAA,CAAC;;AAGD,QAAA,SAAiB,CAAC,cAAc,GAAG,EAAE;AAEtC,QAAA,OAAO,SAAS;;;IAIV,2BAA2B,GAAA;AACjC,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACnB,GAAG,EAAE,CAAC,EAAE,CAAC;YACT,wBAAwB,EAAE,CAAC,EAAE,CAAC;YAC9B,2BAA2B,EAAE,CAAC,EAAE,CAAC;YACjC,uBAAuB,EAAE,CAAC,EAAE,CAAC;YAC7B,2BAA2B,EAAE,CAAC,EAAE,CAAC;YACjC,uBAAuB,EAAE,CAAC,EAAE,CAAC;YAC7B,mBAAmB,EAAE,CAAC,EAAE,CAAC;YACzB,sBAAsB,EAAE,CAAC,EAAE,CAAC;YAC5B,mBAAmB,EAAE,CAAC,EAAE,CAAC;YACzB,oBAAoB,EAAE,CAAC,EAAE,CAAC;YAC1B,cAAc,EAAE,CAAC,IAAI;AACtB,SAAA,CAAC;;IAGJ,QAAQ,GAAA;QACN,OAAO;YACL,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE;YACtD,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE;YACzD,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,sBAAsB,EAAE;YAC3E,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,aAAa,EAAE;YACpE,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE;YAC5D,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,iBAAiB;SACjE;;;AAIH,IAAA,WAAW,CAAC,KAAA,GAAgB,EAAE,EAAE,cAAsB,CAAC,EAAA;;QAErD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,KAAK;AACxC,YAAA,GAAG,OAAO;YACV,CAAC,WAAW,GAAG;AAChB,SAAA,CAAC,CAAC;;AAGH,QAAA,MAAM,aAAa,GAAG;AACpB,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,GAAG;YACb,KAAK,EAAE,KAAK,IAAI,EAAE;YAClB,UAAU,EAAE,KAAK;AACjB,YAAA,IAAI,EAAE;AACJ,gBAAA,KAAK,EAAE,KAAc;AACrB,gBAAA,GAAG,EAAE;AACN;SACF;QAED,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC;AAC1D,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;AACrB,oBAAA,MAAM,QAAQ,GAAG,QAAQ,EAAE,IAAI,IAAI,EAAE;oBACrC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,KAAK;AACxC,wBAAA,GAAG,OAAO;wBACV,CAAC,WAAW,GAAG;AAChB,qBAAA,CAAC,CAAC;;qBACE;oBACL,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,KAAK;AACxC,wBAAA,GAAG,OAAO;wBACV,CAAC,WAAW,GAAG;AAChB,qBAAA,CAAC,CAAC;;aAEN;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;gBAC9C,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,KAAK;AACxC,oBAAA,GAAG,OAAO;oBACV,CAAC,WAAW,GAAG;AAChB,iBAAA,CAAC,CAAC;aACJ;YACD,QAAQ,EAAE,MAAK;gBACb,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,KAAK;AACxC,oBAAA,GAAG,OAAO;oBACV,CAAC,WAAW,GAAG;AAChB,iBAAA,CAAC,CAAC;;AAEN,SAAA,CAAC;;;IAIJ,WAAW,CAAC,cAAsB,CAAC,EAAA;QACjC,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE;;;IAIpD,kBAAkB,CAAC,WAA6B,EAAE,WAAmB,EAAA;AACnE,QAAA,MAAM,KAAK,GAAG,WAAW,EAAE,KAAK;;AAGhC,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE;YAC1C,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;;;QAItD,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC,MAAK;YACvD,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC;;iBAC/B;;AAEL,gBAAA,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC;;SAEpC,EAAE,GAAG,CAAC;;;IAIT,gBAAgB,GAAA;;AAEd,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM;AACtD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;;;;IAK3B,qBAAqB,CAAC,KAAkB,EAAE,WAAmB,EAAA;AAC3D,QAAA,MAAM,cAAc,GAAG,KAAK,EAAE,GAAG;QACjC,IAAI,cAAc,EAAE;;YAElB,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE;AAC/D,YAAA,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,GAAG,KAAK,cAAc,CAAC;YACjF,IAAI,YAAY,EAAE;;gBAEhB,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,WAAW,CAAC;gBAC/D,WAAW,CAAC,UAAU,CAAC;oBACrB,wBAAwB,EAAE,YAAY,CAAC,aAAa,IAAI,YAAY,CAAC,aAAa,IAAI;AACvF,iBAAA,CAAC;;;;AAKR,IAAA,aAAa,GAAG,MAAM,CAAiC,EAAE,yDAAC;AAC1D,IAAA,WAAW,GAAG,MAAM,CAAiD,EAAE,uDAAC;AACxE,IAAA,kBAAkB,GAAG,MAAM,CAAuC,EAAE,8DAAC;AACrE,IAAA,iBAAiB,GAAG,MAAM,CAAwC,EAAE,6DAAC;AACrE,IAAA,WAAW,GAAG,MAAM,CAAc,EAAE,uDAAC;;IAGrC,yBAAyB,GAAG,MAAM,CAAyB;AACzD,QAAA,EAAE,EAAE,gBAAgB;AACpB,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,WAAW;AACnB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,WAAW;AAChB,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,WAAW;AAChB,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE;AACR,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,eAAe;AACpB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,YAAY,EAAE;AACZ,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,WAAW,EAAE,QAAQ;AACrB,oBAAA,aAAa,EAAE,UAAU;AACzB,oBAAA,WAAW,EAAE,mCAAmC;AAChD,oBAAA,aAAa,EAAE;AAChB;AACF,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,2BAA2B;AAChC,gBAAA,MAAM,EAAE,aAAa;AACrB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA;AACD,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,sBAAsB;AACnC,YAAA,iBAAiB,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC;AAC3D,YAAA,UAAU,EAAE;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,SAAS,EAAE;AACZ,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,eAAe;AAC3B,YAAA,SAAS,EAAE,6BAA6B;AACxC,YAAA,SAAS,EAAE;AACZ,SAAA;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE,0CAA0C;AACtD,QAAA,SAAS,EAAE,mBAAmB;AAC9B,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,IAAI,EAAE;AACJ,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,UAAU,EAAE,cAAc;AAC1B,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,WAAW,EAAE,YAAY;AACzB,YAAA,cAAc,EAAE;AACjB;AACF,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,2BAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACF,IAAA,cAAc,GAAG,MAAM,CAAgB,IAAI,0DAAC;AAC5C,IAAA,mBAAmB,GAAG,MAAM,CAAgB,IAAI,+DAAC;;AAGjD,IAAA,2BAA2B,GAAG,SAAS,CAA+B,6BAA6B,uEAAC;AACpG,IAAA,mCAAmC,GAAG,SAAS,CAA+B,qCAAqC,+EAAC;AACpH,IAAA,wBAAwB,GAAG,SAAS,CAA+B,0BAA0B,oEAAC;AAC9F,IAAA,qCAAqC,GAAG,SAAS,CAA+B,uCAAuC,iFAAC;AACxH,IAAA,2BAA2B,GAAG,SAAS,CAA+B,6BAA6B,uEAAC;AACpG,IAAA,kBAAkB,GAAG,MAAM,CAAe,EAAE,8DAAC;;AAG7C,IAAA,mBAAmB,GAAG,MAAM,CAAe,EAAE,+DAAC;AAC9C,IAAA,iBAAiB,GAAG,MAAM,CAAQ,EAAE,6DAAC;AACrC,IAAA,iCAAiC,GAAG,MAAM,CAAe,EAAE,6EAAC;AAC5D,IAAA,wBAAwB,GAAG,MAAM,CAAe,EAAE,oEAAC;AACnD,IAAA,iBAAiB,GAAG,MAAM,CAAe,EAAE,6DAAC;AAC5C,IAAA,uBAAuB,GAAG,MAAM,CAAe,EAAE,mEAAC;;AAGlD,IAAA,kBAAkB,GAAG,MAAM,CAA0D,EAAE,8DAAC;AACxF,IAAA,gBAAgB,GAAG,MAAM,CAA2C,EAAE,4DAAC;AACvE,IAAA,yBAAyB,GAAG,MAAM,CAAsC,EAAE,qEAAC;AAC3E,IAAA,uBAAuB,GAAG,MAAM,CAAsC,EAAE,mEAAC;AACzE,IAAA,mBAAmB,GAAG,MAAM,CAA0D,EAAE,+DAAC;IAEzF,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,EAAE;;AAG5B;;AAEG;IACK,mBAAmB,GAAA;;AAEzB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAG;AAC7E,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;AACnC,YAAA,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC;YAEvC,IAAI,WAAW,EAAE;;AAEf,gBAAA,MAAM,SAAS,GAAG,wBAAwB,CAAC,WAAW,CAAC;AACvD,gBAAA,IAAI,SAAS,EAAE,OAAO,EAAE;oBACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;AAClC,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;oBACzB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACnC,oBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC;;;iBAEjC;;AAEL,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;;;YAInC,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,uBAAuB,EAAE;;YAG9B,IAAI,CAAC,qBAAqB,EAAE;;YAG5B,IAAI,CAAC,gBAAgB,EAAE;AACzB,SAAC,CAAC;;AAGJ;;AAEG;IACK,qBAAqB,GAAA;;QAE3B,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;AAClD,QAAA,MAAM,aAAa,GAAG,WAAW,EAAE,GAAG,IAAI,cAAc;AACxD,QAAA,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,aAAa,CAAC;AAC1D,QAAA,OAAO,CAAC,GAAG,CAAC,uDAAuD,EAAE,aAAa,CAAC;;AAGrF;;AAEG;IACK,sBAAsB,GAAA;;QAE5B,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC;QAChE,MAAM,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,uBAAuB,CAAC;AAE/E,QAAA,IAAI,eAAe,IAAI,sBAAsB,EAAE;;AAE7C,YAAA,eAAe,CAAC;AACb,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;iBACxC,SAAS,CAAC,MAAK;gBACd,sBAAsB,CAAC,sBAAsB,EAAE;AACjD,aAAC,CAAC;;;QAIN,IAAI,CAAC,cAAc,CAAC;AACjB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAK;;AAEhB,SAAC,CAAC;;AAGN;;AAEG;IACK,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;YAClD,IAAI,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;;AAElD,gBAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC;;;;QAI1C,IAAI,CAAC,wBAAwB,EAAE;;AAGjC;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC;;AAG1E,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,KAAK,IAAG;YACvD,IAAI,KAAK,EAAE;gBACT,YAAY,CAAC,KAAK,CAAC;;AAEvB,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;AAE9B,QAAA,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC;;AAG3E;;AAEG;IACK,wBAAwB,GAAA;QAC9B,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC;QAChE,MAAM,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,uBAAuB,CAAC;AAE/E,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;;AAErB,YAAA,eAAe,EAAE,aAAa,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,YAAA,sBAAsB,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;aAC1E;;AAEL,YAAA,eAAe,EAAE,aAAa,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,YAAA,sBAAsB,EAAE,aAAa,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;QAGtG,eAAe,EAAE,sBAAsB,EAAE;QACzC,sBAAsB,EAAE,sBAAsB,EAAE;;AAGlD;;AAEG;AACK,IAAA,sBAAsB,CAAC,OAAwB,EAAA;AACrD,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,OAAO,IAAI,CAAC;;QAGd,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC;AAChE,QAAA,MAAM,QAAQ,GAAG,eAAe,EAAE,KAAK;AACvC,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK;;QAGrC,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,eAAe,EAAE;AACtD,YAAA,OAAO,IAAI;;;AAIb,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC,eAAe,CAAC,EAAE;AACzD,YAAA,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE;;;QAInC,IAAI,QAAQ,IAAI,eAAe,IAAI,QAAQ,KAAK,eAAe,EAAE;AAC/D,YAAA,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE;;AAGnC,QAAA,OAAO,IAAI;;AAGb;;AAEG;IACH,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACtB,OAAO,KAAK,CAAC;;;AAIf,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE;;AAGlC;;AAEG;AACK,IAAA,uBAAuB,CAAC,QAAgB,EAAA;;AAE9C,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,4BAA4B,EAAE;QAC/D,mBAAmB,CAAC,UAAU,CAAC;AAC7B,YAAA,oBAAoB,EAAE,QAAQ;AAC9B,YAAA,eAAe,EAAE;AAClB,SAAA,CAAC;;AAGF,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,mBAAmB,CAAC;;AAGtD,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,GAAG,QAAQ,EAAE;AACnD,gBAAA,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE;AAC5B,gBAAA,eAAe,EAAE,EAAE;gBACnB,oBAAoB,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;gBACtD,qBAAqB,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;gBACpD,0BAA0B,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;gBACvD,0BAA0B,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;AACxD,gBAAA,gBAAgB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxD,gBAAA,gBAAgB,EAAE,EAAE;AACpB,gBAAA,eAAe,EAAE,IAAI;AACrB,gBAAA,cAAc,EAAE,IAAI;AACpB,gBAAA,gBAAgB,EAAE;AACnB,aAAA,CAAC,CAAC;;AAGL;;AAEG;AACK,IAAA,YAAY,CAAC,MAAc,EAAA;AACjC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGpB,QAAA,MAAM,UAAU,GAAG,IAAI,yBAAyB,CAAC;AAC/C,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB;AACtD,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,UAAU;AAChD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAA8C,KAAI;AACvD,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC;gBACjC,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;AACrC,oBAAA,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,IAAI,CAAC;;qBACvC;oBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,0BAA0B,CAAC;;AAEhE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;AAChD,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC;AAC7D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;AACK,IAAA,wBAAwB,CAAC,IAA4B,EAAA;AAC3D,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;;YAEtB,MAAM,EAAE,aAAa,EAAE,GAAG,uBAAuB,EAAE,GAAG,IAAI,CAAC,aAAa;AACxE,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,uBAAuB,CAAC;;AAGvD,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;AAC7B,gBAAA,aAAa,EAAE,EAAE;AACjB,gBAAA,qBAAqB,EAAE;AACxB,aAAA,CAAC;;AAGF,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE;gBACzC,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC;;;gBAGxF,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC;;;;AAKvE,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC;YACjD,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC,OAAkC,EAAE,KAAa,KAAI;AACnF,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC;AACnC,gBAAA,IAAI,OAAO,EAAE,0BAA0B,EAAE;AACvC,oBAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,0BAA0B,CAAC;;AAGhE,aAAC,CAAC;;AAEF,YAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,uBAAuB;YAC3D,sBAAsB,CAAC,KAAK,EAAE;YAC9B,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,OAAkC,KAAI;AACtE,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,4BAA4B,EAAE;gBACxD,IAAI,mBAAmB,GAAsB,EAAE;AAC/C,gBAAA,mBAAmB,GAAG;AACpB,oBAAA,GAAG,OAAO;AACV,oBAAA,oBAAoB,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG;AACxD,oBAAA,0BAA0B,EAAE,OAAO,EAAE,0BAA0B,EAAE,GAAG;AACpE,oBAAA,qBAAqB,EAAE,OAAO,EAAE,qBAAqB,EAAE,GAAG;AAC1D,oBAAA,0BAA0B,EAAE,OAAO,EAAE,0BAA0B,EAAE;iBAClE;AACD,gBAAA,YAAY,CAAC,UAAU,CAAC,mBAAmB,CAAC;gBAC5C,YAAY,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE;AACnD,gBAAA,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC;AAC3C,aAAC,CAAC;;YAGF,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,OAAkC,EAAE,KAAa,KAAI;AACrF,gBAAA,IAAI,OAAO,CAAC,qBAAqB,EAAE;AACjC,oBAAA,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,qBAAqB,KAAK;AACtD,0BAAE,OAAO,CAAC,qBAAqB,CAAC;AAChC,0BAAE,OAAO,CAAC,qBAAqB;oBAEjC,IAAI,MAAM,EAAE;wBACV,OAAO,CAAC,GAAG,CAAC,CAAA,wCAAA,EAA2C,KAAK,CAAA,WAAA,EAAc,MAAM,CAAA,CAAE,CAAC;AACnF,wBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC;;;AAG7C,aAAC,CAAC;;;AAIJ,QAAA,IAAI,IAAI,CAAC,yBAAyB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,EAAE;YACnF,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,IAAI,CAAC,yBAAyB,CAAC;;YAGnF,MAAM,mBAAmB,GAAgE,EAAE;YAE3F,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,SAAwC,KAAI;;AAElF,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,iCAAiC,CAAC,SAAS,CAAC,oCAAoC,IAAI,EAAE,CAAC;AACjH,gBAAA,IAAI,YAAY,KAAK,IAAI,EAAE;oBACzB,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,EAAE;wBACjD,mBAAmB,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE;;oBAEnD,mBAAmB,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;;AAEhE,aAAC,CAAC;;YAGF,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,eAAe,IAAG;AACzD,gBAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC;gBAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC;gBACnD,IAAI,OAAO,EAAE;AACV,oBAAA,OAA0F,CAAC,UAAU,GAAG,mBAAmB,CAAC,eAAe,CAAC;;AAEjJ,aAAC,CAAC;;AAGJ,QAAA,IAAI,IAAI,CAAC,2BAA2B,EAAE;YACpC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC;;AAE3D,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB;YACvD,gBAAgB,CAAC,KAAK,EAAE;YACxB,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC,OAAyC,KAAI;AACrF,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,6BAA6B,EAAE;AACzD,gBAAA,IAAI,2BAA2B,GAA6B;AAC1D,oBAAA,GAAG,OAAO;AACV,oBAAA,2BAA2B,EAAE,OAAO,EAAE,2BAA2B,EAAE,GAAG,IAAI,EAAE;AAC5E,oBAAA,0BAA0B,EAAE,OAAO,EAAE,0BAA0B,EAAE,GAAG,IAAI,EAAE;AAC1E,oBAAA,uBAAuB,EAAE,OAAO,EAAE,uBAAuB,EAAE,GAAG,IAAI,EAAE;AACpE,oBAAA,2BAA2B,EAAE,OAAO,EAAE,2BAA2B,EAAE,GAAG,IAAI;iBAC3E;AACD,gBAAA,YAAY,CAAC,UAAU,CAAC,2BAA2B,CAAC;AACpD,gBAAA,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC;AACrC,aAAC,CAAC;;YAGF,IAAI,CAAC,oCAAoC,EAAE;;;AAI7C,QAAA,IAAI,IAAI,CAAC,mBAAmB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE;AACvE,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;;YAGjC,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;;;AAIrC,YAAA,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AACjC,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,EAAE;gBACpD,aAAa,CAAC,UAAU,CAAC;AACvB,oBAAA,GAAG,EAAE,QAAQ,CAAC,GAAG,IAAI,EAAE;oBACvB,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE;AACnD,oBAAA,4BAA4B,EAAE,QAAQ,CAAC,4BAA4B,EAAE,GAAG,IAAI,EAAE;AAC9E,oBAAA,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,IAAI,EAAE;AACjD,oBAAA,yBAAyB,EAAE,QAAQ,CAAC,yBAAyB,IAAI,EAAE;AACnE,oBAAA,yBAAyB,EAAE,QAAQ,CAAC,yBAAyB,IAAI,EAAE;AACnE,oBAAA,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB,IAAI,EAAE;AACzD,oBAAA,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB,IAAI,EAAE;AAC3D,oBAAA,sCAAsC,EAAE,QAAQ,CAAC,sCAAsC,EAAE,GAAG,IAAI,EAAE;AAClG,oBAAA,6BAA6B,EAAE,QAAQ,CAAC,6BAA6B,EAAE,GAAG,IAAI,EAAE;AAChF,oBAAA,cAAc,EAAE,QAAQ,CAAC,cAAc,IAAI;AAC5C,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;AAC7C,aAAC,CAAC;;;AAIJ,QAAA,IAAI,IAAI,CAAC,wBAAwB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE;AACjF,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,wBAAwB;AAChD,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC;;YAGlC,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/C,gBAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC;;;AAIzC,YAAA,UAAU,CAAC,OAAO,CAAC,CAAC,YAAiB,KAAI;AACvC,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,2BAA2B,EAAE;gBACtD,WAAW,CAAC,UAAU,CAAC;AACrB,oBAAA,GAAG,EAAE,YAAY,CAAC,GAAG,IAAI,EAAE;AAC3B,oBAAA,wBAAwB,EAAE,YAAY,CAAC,wBAAwB,IAAI,EAAE;AACrE,oBAAA,2BAA2B,EAAE,YAAY,CAAC,2BAA2B,EAAE,GAAG,IAAI,EAAE;AAChF,oBAAA,uBAAuB,EAAE,YAAY,CAAC,uBAAuB,IAAI,EAAE;AACnE,oBAAA,2BAA2B,EAAE,YAAY,CAAC,2BAA2B,EAAE,GAAG,IAAI,EAAE;AAChF,oBAAA,uBAAuB,EAAE,YAAY,CAAC,uBAAuB,EAAE,GAAG,IAAI,EAAE;AACxE,oBAAA,mBAAmB,EAAE,YAAY,CAAC,mBAAmB,IAAI,EAAE;AAC3D,oBAAA,sBAAsB,EAAE,YAAY,CAAC,sBAAsB,IAAI,EAAE;AACjE,oBAAA,mBAAmB,EAAE,YAAY,CAAC,mBAAmB,IAAI,EAAE;AAC3D,oBAAA,oBAAoB,EAAE,YAAY,CAAC,oBAAoB,IAAI,EAAE;AAC7D,oBAAA,cAAc,EAAE,YAAY,CAAC,cAAc,IAAI;AAChD,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/C,aAAC,CAAC;;;QAIJ,IAAI,CAAC,wBAAwB,EAAE;;IAGzB,mBAAmB,GAAA;;QAEzB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;AAC7C,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;oBACrB,OAAO,CAAC,GAAG,CAAC,CAAA,YAAA,CAAc,EAAE,QAAQ,CAAC,IAAI,CAAC;oBAC1C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;;aAE9C;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK;AACjE,SAAA,CAAC;;;QAKF,IAAI,CAAC,gBAAgB,EAAE;;QAGvB,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,8BAA8B,EAAE;QACrC,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,uBAAuB,EAAE;;QAG9B,IAAI,CAAC,eAAe,EAAE;;IAMxB,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,uBAAuB,EAAE;;AAGvC,IAAA,WAAW,CAAC,GAAY,EAAA;QACtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;;;IAI5B,gBAAgB,GAAA;;AAEd,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,4BAA4B,EAAE;;AAG/D,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,mBAAmB,CAAC;;AAGtD,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,GAAG,QAAQ,EAAE;AACnD,gBAAA,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE;AAC5B,gBAAA,eAAe,EAAE,EAAE;gBACnB,oBAAoB,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;gBAChD,qBAAqB,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;gBACpD,0BAA0B,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;gBACvD,0BAA0B,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;AACxD,gBAAA,gBAAgB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxD,gBAAA,gBAAgB,EAAE,EAAE;AACpB,gBAAA,eAAe,EAAE,KAAK;AACtB,gBAAA,cAAc,EAAE,IAAI;AACpB,gBAAA,gBAAgB,EAAE;AACnB,aAAA,CAAC,CAAC;;AAGL,IAAA,mBAAmB,CAAC,KAAa,EAAA;;AAE/B,QAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;;QAGrC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC;;;;;;;AAQ5C,QAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,KAAK,CAAC;;QAG5C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;;QAG9E,IAAI,CAAC,2BAA2B,EAAE;;IAKpC,cAAc,CAAC,YAAoB,EAAE,KAAgC,EAAA;;QAEnE,OAAO,CAAC,GAAG,CAAC,CAAA,8BAAA,EAAiC,YAAY,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;;AAGpE,QAAA,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC;;AAG5C,QAAA,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC;;AAG5C,QAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;;QAGtC,IAAI,KAAK,EAAE;YACT,MAAM,QAAQ,GAAG,KAAK,EAAE,oBAAoB,EAAE,GAAG,IAAI,EAAE;AACvD,YAAA,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,QAAQ,CAAC;;YAGrD,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,QAAQ,CAAC;;;;QAKnD,IAAI,CAAC,2BAA2B,EAAE;;QAGlC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC;QACnD,IAAI,OAAO,EAAE,oBAAoB,IAAI,OAAO,EAAE,qBAAqB,EAAE;AACnE,YAAA,OAAO,CAAC,GAAG,CAAC,2CAA2C,YAAY,CAAA,CAAE,CAAC;AACtE,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;;;;;AAOrC;;AAEG;IACK,2BAA2B,GAAA;;AAEjC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK;AACvD,QAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,YAAY,CAAC;;AAGrD,IAAA,kBAAkB,CAAC,KAAkB,EAAA;AACnC,QAAA,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;YACf;;QAEF,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;YACzC;;;AAGF,QAAA,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC;AACzC,YAAA,yBAAyB,EAAE,KAAK,EAAE,GAAG,IAAI;SAC1C,CAAC,CAAC,SAAS,CAAC;AACX,YAAA,IAAI,EAAE,CAAC,QAAuC,KAAI;AAChD,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,sBAAsB,CAAC;;gBAE7C,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,KAAK;AACrC,oBAAA,GAAG,GAAG;oBACN,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,IAAI;AACtC,iBAAA,CAAC,CAAC;aACJ;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;;AAEtD,SAAA,CAAC;;AAKJ,IAAA,uBAAuB,CAAC,YAAoB,EAAA;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC;AACnD,QAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,OAAO,CAAC;AACnD,QAAA,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,EAAE;AACvC,YAAA,OAAO,EAAE;;QAGX,MAAM,QAAQ,GAAG,OAAO,EAAE,oBAAoB,EAAE,GAAG,IAAI,EAAE;QACzD,OAAO,CAAC,GAAG,CAAC,CAAA,SAAA,CAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;QAE1C,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,KAAK;;;AAId,QAAA,OAAO,EAAE;;AAGX;;;;AAIG;AACH,IAAA,wBAAwB,CAAC,mBAA2B,EAAA;AAClD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE;QACxC,MAAM,eAAe,GAAwB,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE;;QAGvF,MAAM,iBAAiB,GAAG;AACvB,aAAA,GAAG,CAAC,CAAC,OAA0B,EAAE,KAAa,KAAI;YACjD,IAAI,KAAK,KAAK,mBAAmB,IAAI,OAAO,CAAC,oBAAoB,EAAE;;AAEjE,gBAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB;AAC7C,gBAAA,OAAO,QAAQ;;AAEjB,YAAA,OAAO,IAAI;AACb,SAAC;AACA,aAAA,MAAM,CAAC,CAAC,EAAiB,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;AAE1D,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,kCAAA,EAAqC,mBAAmB,GAAG,EAAE;YACvE,aAAa,EAAE,WAAW,CAAC,MAAM;YACjC,iBAAiB;AACjB,YAAA,iBAAiB,EAAE,WAAW,CAAC,MAAM,GAAG,iBAAiB,CAAC;AAC3D,SAAA,CAAC;AACF,QAAA,OAAO,CAAC,GAAG,CAAC,gDAAgD,EAAE,iBAAiB,CAAC;;AAEhF,QAAA,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,MAAoC,KAAI;AAC9D,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG;YAC3B,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,QAAkB,CAAC;YAEjE,IAAI,UAAU,EAAE;gBACd,OAAO,CAAC,GAAG,CAAC,CAAA,WAAA,EAAc,MAAM,CAAC,SAAS,CAAA,GAAA,EAAM,QAAQ,CAAA,8DAAA,CAAgE,CAAC;;YAG3H,OAAO;AACL,gBAAA,GAAG,MAAM;AACT,gBAAA,QAAQ,EAAE;aACX;AACH,SAAC,CAAC;;AAGJ;;;;AAIG;AACH,IAAA,qBAAqB,CAAC,mBAA2B,EAAA;AAC/C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE;AACxC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK;;QAG1D,MAAM,iBAAiB,GAAG;AACvB,aAAA,GAAG,CAAC,CAAC,OAAY,EAAE,KAAa,KAAI;YACnC,IAAI,KAAK,KAAK,mBAAmB,IAAI,OAAO,CAAC,oBAAoB,EAAE;AACjE,gBAAA,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,oBAAoB,KAAK;AACvD,sBAAE,OAAO,CAAC,oBAAoB,CAAC;AAC/B,sBAAE,OAAO,CAAC,oBAAoB;AAChC,gBAAA,OAAO,QAAQ;;AAEjB,YAAA,OAAO,IAAI;AACb,SAAC;AACA,aAAA,MAAM,CAAC,CAAC,EAAiB,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;;AAG1D,QAAA,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM;;AAGjF;;;AAGG;IACH,mBAAmB,GAAA;AACjB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE;AACxC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK;;QAG1D,MAAM,iBAAiB,GAAG;AACvB,aAAA,GAAG,CAAC,CAAC,OAAY,KAAI;AACpB,YAAA,IAAI,OAAO,CAAC,oBAAoB,EAAE;AAChC,gBAAA,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,oBAAoB,KAAK;AACvD,sBAAE,OAAO,CAAC,oBAAoB,CAAC;AAC/B,sBAAE,OAAO,CAAC,oBAAoB;AAChC,gBAAA,OAAO,QAAQ;;AAEjB,YAAA,OAAO,IAAI;AACb,SAAC;AACA,aAAA,MAAM,CAAC,CAAC,EAAiB,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;;AAG1D,QAAA,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM;;AAGjF;;AAEG;AACK,IAAA,yBAAyB,CAAC,YAAoB,EAAA;AACpD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA,oBAAA,EAAuB,YAAY,CAAA,2BAAA,CAA6B,CAAC;QAC7G,IAAI,WAAW,EAAE;AACf,YAAA,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;;;AAI5B;;AAEG;AACK,IAAA,mBAAmB,CAAC,YAAoB,EAAA;AAC9C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA,oBAAA,EAAuB,YAAY,CAAA,sBAAA,CAAwB,CAAC;QACxG,IAAI,WAAW,EAAE;AACf,YAAA,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;;;AAI5B;;AAEG;IACK,wBAAwB,CAAC,YAAoB,EAAE,QAAgB,EAAA;AACrE,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,kCAAA,EAAqC,QAAQ,CAAA,YAAA,EAAe,YAAY,CAAA,CAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;;QAGjH,MAAM,mBAAmB,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QAC9D,IAAI,mBAAmB,EAAE;YACvB,OAAO,CAAC,GAAG,CAAC,CAAA,uCAAA,EAA0C,QAAQ,CAAA,CAAA,CAAG,EAAE,mBAAmB,CAAC;YACvF;;;AAIF,QAAA,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;AACvC,YAAA,qBAAqB,EAAE;SACxB,CAAC,CAAC,SAAS,CAAC;AACX,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;oBACrB,OAAO,CAAC,GAAG,CAAC,CAAA,iCAAA,EAAoC,QAAQ,CAAA,CAAA,CAAG,EAAE,QAAQ,CAAC,IAAI,CAAC;;oBAG3E,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,KAAK;AACpC,wBAAA,GAAG,GAAG;AACN,wBAAA,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,IAAI;AAC9B,qBAAA,CAAC,CAAC;oBACH,OAAO,CAAC,GAAG,CAAC,CAAA,eAAA,CAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;;qBACnD;oBACL,OAAO,CAAC,KAAK,CAAC,CAAA,wCAAA,EAA2C,QAAQ,CAAA,CAAA,CAAG,EAAE,QAAQ,CAAC;;aAElF;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;gBACf,OAAO,CAAC,KAAK,CAAC,CAAA,uCAAA,EAA0C,QAAQ,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;;AAE9E,SAAA,CAAC;;AAGJ;;AAEG;IACK,kBAAkB,CAAC,YAAoB,EAAE,QAAgB,EAAA;AAC/D,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,4BAAA,EAA+B,QAAQ,CAAA,YAAA,EAAe,YAAY,CAAA,CAAE,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;;QAGrG,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;QAClD,IAAI,aAAa,EAAE;YACjB,OAAO,CAAC,GAAG,CAAC,CAAA,iCAAA,EAAoC,QAAQ,CAAA,CAAA,CAAG,EAAE,aAAa,CAAC;YAC3E;;;AAIF,QAAA,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC;AACnC,YAAA,2BAA2B,EAAE;SAC9B,CAAC,CAAC,SAAS,CAAC;AACX,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;oBACrB,OAAO,CAAC,GAAG,CAAC,CAAA,2BAAA,EAA8B,QAAQ,CAAA,CAAA,CAAG,EAAE,QAAQ,CAAC,IAAI,CAAC;;oBAGrE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,KAAK;AAC9B,wBAAA,GAAG,GAAG;AACN,wBAAA,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,IAAI;AAC9B,qBAAA,CAAC,CAAC;oBACH,OAAO,CAAC,GAAG,CAAC,CAAA,SAAA,CAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;;qBACvC;oBACL,OAAO,CAAC,KAAK,CAAC,CAAA,kCAAA,EAAqC,QAAQ,CAAA,CAAA,CAAG,EAAE,QAAQ,CAAC;;aAE5E;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;gBACf,OAAO,CAAC,KAAK,CAAC,CAAA,iCAAA,EAAoC,QAAQ,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;;AAExE,SAAA,CAAC;;AAGJ;;AAEG;AACH,IAAA,6BAA6B,CAAC,YAAoB,EAAA;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC;AACnD,QAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,OAAO,CAAC;AACzD,QAAA,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,EAAE;AACvC,YAAA,OAAO,EAAE;;QAGX,MAAM,QAAQ,GAAG,OAAO,EAAE,oBAAoB,EAAE,GAAG,IAAI,EAAE;QACzD,OAAO,CAAC,GAAG,CAAC,CAAA,eAAA,CAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QAEtD,IAAI,WAAW,EAAE;AACf,YAAA,OAAO,WAAW;;AAEpB,QAAA,OAAO,EAAE;;AAGX,IAAA,8BAA8B,CAAC,YAAoB,EAAA;AACjD,QAAA,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,WAAW,EAA0B,EAAC,YAAY,CAAC;AAClG,QAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO,EAAE,0BAA0B,EAAE;AACxC,YAAA,OAAO,EAAE;;AAEX,QAAA,MAAM,YAAY,GAAG,OAAO,EAAE,0BAA0B,IAAI,EAAE;QAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,YAAY,CAAC;QAC5D,IAAI,YAAY,EAAE;AAChB,YAAA,OAAO,YAAY;;AAGrB,QAAA,OAAO,EAAE;;AAGX;;AAEG;IACK,6BAA6B,GAAA;AACnC,QAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;AACjC,YAAA,EAAE,EAAE,gBAAgB;AACpB,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,OAAO,EAAE;AACP,gBAAA;AACE,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,MAAM,EAAE,WAAW;AACnB,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,QAAQ,EAAE;AACX,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,WAAW;AAChB,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,QAAQ,EAAE;AACX,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,WAAW;AAChB,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,KAAK,EAAE;AACR,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,eAAe;AACpB,oBAAA,MAAM,EAAE,QAAQ;AAChB,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,YAAY,EAAE;AACZ,wBAAA,WAAW,EAAE,IAAI;AACjB,wBAAA,WAAW,EAAE,QAAQ;AACrB,wBAAA,aAAa,EAAE,UAAU;AACzB,wBAAA,WAAW,EAAE,mCAAmC;AAChD,wBAAA,aAAa,EAAE;AAChB;AACF,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,2BAA2B;AAChC,oBAAA,MAAM,EAAE,aAAa;AACrB,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,QAAQ,EAAE;AACX,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,QAAQ,EAAE;AACX;AACF,aAAA;AACD,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,UAAU,EAAE;AACV,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,QAAQ,EAAE,EAAE;gBACZ,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,WAAW,EAAE;AACd,aAAA;AACD,YAAA,MAAM,EAAE;AACN,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,WAAW,EAAE,sBAAsB;AACnC,gBAAA,iBAAiB,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC;AAC3D,gBAAA,UAAU,EAAE;AACb,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,YAAY,EAAE,CAAC;AACf,gBAAA,WAAW,EAAE;AACd,aAAA;AACD,YAAA,MAAM,EAAE;AACN,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,SAAS,EAAE,EAAE;AACb,gBAAA,SAAS,EAAE,EAAE;AACb,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,SAAS,EAAE;AACZ,aAAA;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,UAAU,EAAE,eAAe;AAC3B,gBAAA,SAAS,EAAE,6BAA6B;AACxC,gBAAA,SAAS,EAAE;AACZ,aAAA;AACD,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,UAAU,EAAE,0CAA0C;AACtD,YAAA,SAAS,EAAE,mBAAmB;AAC9B,YAAA,YAAY,EAAE,cAAc;AAC5B,YAAA,IAAI,EAAE;AACJ,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,UAAU,EAAE,cAAc;AAC1B,gBAAA,WAAW,EAAE,UAAU;AACvB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,WAAW,EAAE,YAAY;AACzB,gBAAA,cAAc,EAAE;AACjB;AACF,SAAA,CAAC;;AAGJ;;AAEG;IACH,YAAY,CAAC,YAAoB,EAAE,MAAc,EAAA;QAC/C,OAAO,CAAC,GAAG,CAAC,CAAA,4BAAA,EAA+B,YAAY,CAAA,CAAA,CAAG,EAAE,MAAM,CAAC;QAEnE,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,CAAC,oBAAoB,EAAE;YAC3B;;AAGF,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC;AAC1C,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;;AAG/B,QAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAAC;;QAG9C,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC;QACnD,IAAI,OAAO,EAAE,oBAAoB,IAAI,OAAO,EAAE,qBAAqB,EAAE;AACnE,YAAA,OAAO,CAAC,GAAG,CAAC,2CAA2C,YAAY,CAAA,CAAE,CAAC;AACtE,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;;YAGjC,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;aACzB,EAAE,GAAG,CAAC;;;AAIX;;AAEG;IACK,mBAAmB,CAAC,MAAc,EAAE,YAAoB,EAAA;AAC9D,QAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,MAAM,CAAC;AAEvD,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGtB,QAAA,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC;AACrE,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,OAAO,CAAC,GAAG,CAAC,CAAA,uBAAA,CAAyB,EAAE,QAAQ,CAAC,IAAI,CAAC;;oBAGrD,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;;qBACjD;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,QAAQ,CAAC;AACzD,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC;;AAEnD,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;AACrD,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC;AAChD,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGJ;;AAEG;IACH,0BAA0B,CAAC,YAAoB,EAAE,MAAc,EAAA;AAC7D,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,IAAG;AAC9B,YAAA,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE;YACzB,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;YAExD,MAAM,iBAAiB,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,IAAG;AAC9C,gBAAA,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM,EAAE;;oBAEvB,MAAM,gBAAgB,GAAsE,EAAE;AAE9F,oBAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE;AAClC,wBAAA,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,YAAY,IAAG;4BACpD,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC;4BACvD,IAAI,UAAU,EAAE;gCACd,gBAAgB,CAAC,YAAY,CAAC,GAAG;oCAC/B,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,YAAY,CAAC;AACrD,oCAAA,UAAU,EAAE;iCACb;;AAEL,yBAAC,CAAC;;oBAGJ,OAAO;AACL,wBAAA,GAAG,IAAI;AACP,wBAAA,iBAAiB,EAAE;qBACpB;;AAEH,gBAAA,OAAO,IAAI;AACb,aAAC,CAAC;YAEF,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,GAAG,iBAAiB;AACnD,YAAA,OAAO,MAAM;AACf,SAAC,CAAC;;AAGJ;;AAEG;IACK,oBAAoB,CAAC,QAAoC,EAAE,YAAoB,EAAA;QACrF,OAAO,CAAC,GAAG,CAAC,CAAA,wCAAA,EAA2C,YAAY,CAAA,CAAA,CAAG,EAAE,QAAQ,CAAC;;AAGjF,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,qBAAqB;QAEjD,IAAI,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;;YAE3C,MAAM,qBAAqB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAiC,KAAI;AACjF,gBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,iCAAiC;gBAC1D,OAAO;oBACL,GAAG,EAAE,UAAU,EAAE,GAAa;oBAC9B,WAAW,EAAE,UAAU,EAAE,WAAqB;AAC9C,oBAAA,OAAO,EAAE,KAAK,CAAC,oBAAoB,EAAE;iBACtC;AACH,aAAC,CAAC,CAAC,MAAM,CAAC,CAAC,UAAgD,KAAK,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC;;AAGzG,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,IAAG;AAClC,gBAAA,MAAM,UAAU,GAAG,EAAE,GAAG,OAAO,EAAE;gBACjC,MAAM,iBAAiB,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;;gBAGnE,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,IAAG;AACrD,oBAAA,IAAI,IAAI,CAAC,GAAG,EAAE;wBACZ,MAAM,uBAAuB,GAAG;6BAC7B,MAAM,CAAC,UAAU;;wBAEhB,IAAI,CAAC,yBAAyB,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;;AAExD,4BAAA,UAAU,CAAC,OAAO,KAAK,IAAI,CAAC,GAAG,CAChC;wBAEH,OAAO;AACb,4BAAA,GAAG,IAAI;AACC,4BAAA,gBAAgB,EAAE;yBACnB;;AAEH,oBAAA,OAAO,IAAI;AACb,iBAAC,CAAC;gBAEF,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,GAAG,iBAAiB;AACvD,gBAAA,OAAO,UAAU;AACnB,aAAC,CAAC;;AAGF,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;AACtE,YAAA,UAAU,CAAC,OAAO,CAAC,IAAI,IAAG;AACxB,gBAAA,IAAI,IAAI,CAAC,GAAG,EAAE;oBACZ,IAAI,CAAC,0BAA0B,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC;;AAE3D,aAAC,CAAC;YAEF,OAAO,CAAC,GAAG,CAAC,CAAA,8CAAA,EAAiD,YAAY,CAAA,CAAA,CAAG,EAAE,qBAAqB,CAAC;;aAC/F;AACL,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,yCAAA,CAA2C,CAAC;;;AAI5D;;AAEG;IACK,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGpC;;AAEG;AACK,IAAA,iCAAiC,CAAC,eAAuB,EAAA;AAC/D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE;AACtC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,eAAe,EAAE;AACvC,gBAAA,OAAO,CAAC;;;AAGZ,QAAA,OAAO,IAAI;;AAGb;;AAEG;AACH,IAAA,0BAA0B,CAAC,KAAgB,EAAA;AACzC,QAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,KAAK,CAAC;AAErD,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,QAAQ;;gBAEX;AACF,YAAA,KAAK,UAAU;;gBAEb;AACF,YAAA;gBACE;;;AAIN;;AAEG;AACH,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO;AACL,YAAA,mBAAmB,EAAE,IAAI,CAAC,2BAA2B,EAAE;AACvD,YAAA,2BAA2B,EAAE,IAAI,CAAC,mCAAmC,EAAE;AACvE,YAAA,gBAAgB,EAAE,IAAI,CAAC,wBAAwB;SAChD;;AAGH;;AAEG;AACH,IAAA,iBAAiB,CAAC,YAAoB,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,GAAG,KAAK,YAAY,CAAC;;AAG/E;;AAEG;AACH,IAAA,kBAAkB,CAAC,YAAoB,EAAE,YAAoB,EAAE,MAAe,EAAA;QAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC;AACnD,QAAA,MAAM,MAAM,GAAG,OAAO,EAAE,qBAAqB;AAE7C,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,uBAAA,EAA0B,YAAY,CAAA,UAAA,CAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;AAExF,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;AACtB,YAAA,OAAO,CAAC,GAAG,CAAC,8CAA8C,YAAY,CAAA,CAAE,CAAC;AACzE,YAAA,OAAO,KAAK;;;AAId,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;AACtE,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC;AAEnD,QAAA,IAAI,IAAI,IAAK,IAAY,CAAC,gBAAgB,EAAE;AAC1C,YAAA,MAAM,eAAe,GAAI,IAAY,CAAC,gBAAgB;YACtD,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,UAAe,KAAK,UAAU,CAAC,GAAG,KAAK,YAAY,IAAI,UAAU,CAAC,OAAO,KAAK,MAAM,CAAC;YAC5H,OAAO,CAAC,GAAG,CAAC,CAAA,cAAA,EAAiB,YAAY,CAAA,kBAAA,EAAqB,MAAM,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAE,CAAC;AACpF,YAAA,OAAO,QAAQ;;QAGjB,OAAO,CAAC,GAAG,CAAC,CAAA,yCAAA,EAA4C,YAAY,CAAA,OAAA,EAAU,MAAM,CAAA,CAAE,CAAC;AACvF,QAAA,OAAO,KAAK;;AAGd;;AAEG;IACH,mBAAmB,CAAC,GAAc,EAAE,YAAoB,EAAA;AACtD,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,8CAAA,EAAiD,YAAY,CAAA,WAAA,EAAc,GAAG,CAAC,UAAU,CAAA,CAAE,EAAE,GAAG,CAAC;QAC7G,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC;QACvD,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,YAAY,CAAA,CAAE,CAAC;AAC9D,YAAA,OAAO,KAAK;;;AAId,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,EAAE;AAClD,QAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACzB,YAAA,OAAO,CAAC,GAAG,CAAC,CAAA,iCAAA,CAAmC,CAAC;AAChD,YAAA,OAAO,KAAK;;;AAId,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC;AACrF,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,cAAA,EAAiB,UAAU,CAAC,WAAW,CAAA,UAAA,EAAa,GAAG,CAAC,UAAU,CAAA,qBAAA,EAAwB,gBAAgB,CAAA,CAAE,CAAC;QAEzH,IAAI,gBAAgB,EAAE;;YAEpB,OAAO,CAAC,GAAG,CAAC,CAAA,uCAAA,EAA0C,UAAU,CAAC,WAAW,CAAA,CAAE,CAAC;AAC/E,YAAA,OAAO,IAAI;;aACN;;YAEL,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC;AACnD,YAAA,MAAM,UAAU,GAAI,OAAkG,CAAC,UAAU,IAAI,EAAE;AACvI,YAAA,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,KAC5C,SAAS,CAAC,oBAAoB,KAAK,GAAG,CAAC,GAAG;AAC1C,gBAAA,SAAS,CAAC,iCAAiC,KAAK,YAAY,CAC7D;YACD,OAAO,CAAC,GAAG,CAAC,CAAA,cAAA,EAAiB,UAAU,CAAC,WAAW,CAAA,eAAA,EAAkB,WAAW,CAAA,CAAE,CAAC;AACnF,YAAA,OAAO,WAAW;;;AAKtB;;AAEG;AACH,IAAA,sBAAsB,CAAC,OAAY,EAAE,GAAc,EAAE,YAAoB,EAAA;AACvE,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC;;AAG9D;;AAEG;AACH,IAAA,kBAAkB,CAAC,OAAgB,EAAE,GAAc,EAAE,YAAoB,EAAA;QACvE,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC;AACvD,QAAA,IAAI,CAAC,UAAU;YAAE;;AAGjB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,EAAE;QAClD,IAAI,YAAY,KAAK,IAAI;YAAE;;AAG3B,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC;QAErF,IAAI,gBAAgB,EAAE;;AAEpB,YAAA,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE;gBACnD,IAAI,EAAE,GAAG,CAAC,UAAU;gBACpB,UAAU,EAAE,UAAU,CAAC,WAAW;AAClC,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC;;aACG;;YAEL,IAAI,OAAO,EAAE;;AAEX,gBAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,YAAY,CAAC;;iBAC3D;;AAEL,gBAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,YAAY,CAAC;;AAGrE,YAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE;gBAC9C,IAAI,EAAE,GAAG,CAAC,UAAU;gBACpB,UAAU,EAAE,UAAU,CAAC,WAAW;AAClC,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC;;;QAIJ,IAAI,CAAC,0BAA0B,CAAC,YAAY,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;;AAG9D;;AAEG;AACH,IAAA,4BAA4B,CAAC,OAAgB,EAAE,GAAQ,EAAE,YAAoB,EAAE,YAAoB,EAAA;QACjG,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC;AACvD,QAAA,IAAI,CAAC,UAAU;YAAE;AAEjB,QAAA,MAAM,WAAW,GAAG,CAAA,oBAAA,EAAuB,YAAY,CAAA,aAAA,EAAgB,GAAG,CAAC,GAAG,CAAA,CAAA,EAAI,UAAU,CAAC,WAAW,EAAE;AAC1G,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;AAEvD,QAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE;YAChD,YAAY;YACZ,IAAI,EAAE,GAAG,CAAC,UAAU;YACpB,UAAU,EAAE,UAAU,CAAC,WAAW;AAClC,YAAA,OAAO,EAAE,OAAO;YAChB;AACD,SAAA,CAAC;;AAGJ;;AAEG;IACK,sBAAsB,GAAA;;AAE5B,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAC5C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA,oBAAA,EAAuB,CAAC,CAAA,qBAAA,CAAuB,CAAC,EAAE,KAAK;AAChG,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA,oBAAA,EAAuB,CAAC,CAAA,sBAAA,CAAwB,CAAC,EAAE,KAAK;AAE/F,YAAA,IAAI,QAAQ,IAAI,MAAM,EAAE;AACtB,gBAAA,OAAO,CAAC;;;AAGZ,QAAA,OAAO,IAAI;;AAGb;;AAEG;AACH,IAAA,gBAAgB,CAAC,YAAoB,EAAE,MAAc,EAAE,YAAoB,EAAA;QACzE,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC;AAEvD,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU;YAAE;;AAG7B,QAAA,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,qBAAqB,KAAK;AACtD,cAAG,OAAO,CAAC,qBAA0C,EAAE,GAAG,IAAI;AAC9D,cAAG,OAAO,CAAC,qBAA4C,IAAI,EAAE;;AAG/D,QAAA,MAAM,SAAS,GAAuC;AACpD,YAAA,oCAAoC,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE;YACvD,uBAAuB,EAAE,MAAM;AAC/B,YAAA,iCAAiC,EAAE,YAAY;AAC/C,YAAA,oBAAoB,EAAE,MAAM;AAC5B,YAAA,gBAAgB,EAAE,IAAI;YACtB,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,OAAgB;SAC9B;;AAGD,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,IAAG;AACpC,YAAA,MAAM,eAAe,GAAG,CAAC,GAAG,QAAQ,CAAC;AACrC,YAAA,MAAM,qBAAqB,GAAG,eAAe,CAAC,YAAY,CAA2F;AACrJ,YAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE;AACrC,gBAAA,qBAAqB,CAAC,UAAU,GAAG,EAAE;;;AAIvC,YAAA,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAChE,EAAE,CAAC,oBAAoB,KAAK,MAAM;AAClC,gBAAA,EAAE,CAAC,iCAAiC,KAAK,YAAY,CACtD;YAED,IAAI,CAAC,iBAAiB,EAAE;AACtB,gBAAA,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AAChD,gBAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,SAAS,CAAC;;iBACnD;;AAEL,gBAAA,IAAK,iBAAwD,CAAC,cAAc,EAAE;AAC3E,oBAAA,iBAAwD,CAAC,cAAc,GAAG,KAAK;AAC/E,oBAAA,iBAAwD,CAAC,YAAY,GAAG,IAAI;AAC5E,oBAAA,iBAAwD,CAAC,WAAW,GAAG,OAAO;AAC/E,oBAAA,iBAAiB,CAAC,gBAAgB,GAAG,IAAI;AACzC,oBAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,iBAAiB,CAAC;;qBAC3D;AACL,oBAAA,OAAO,CAAC,GAAG,CAAC,uDAAuD,EAAE,iBAAiB,CAAC;;;AAI3F,YAAA,OAAO,eAAe;AACxB,SAAC,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,SAAS,CAAC;;AAGpD;;AAEG;AACH,IAAA,mBAAmB,CAAC,YAAoB,EAAE,MAAc,EAAE,YAAoB,EAAA;AAC5E,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,IAAG;AACpC,YAAA,MAAM,eAAe,GAAG,CAAC,GAAG,QAAQ,CAAC;AACrC,YAAA,MAAM,OAAO,GAAG,eAAe,CAAC,YAAY,CAA2F;AACvI,YAAA,IAAI,OAAO,CAAC,UAAU,EAAE;;AAEtB,gBAAA,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,KAAI;AACxD,oBAAA,IAAI,SAAS,CAAC,oBAAoB,KAAK,MAAM,IAAI,SAAS,CAAC,iCAAiC,KAAK,YAAY,EAAE;wBAC7G,OAAO;AACL,4BAAA,GAAG,SAAS;AACZ,4BAAA,cAAc,EAAE,IAAI;AACpB,4BAAA,WAAW,EAAE,SAAkB;AAC/B,4BAAA,gBAAgB,EAAE;yBACnB;;AAEH,oBAAA,OAAO,SAAS;AAClB,iBAAC,CAAC;;AAEJ,YAAA,OAAO,eAAe;AACxB,SAAC,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;;AAG7F;;AAEG;IACH,qBAAqB,GAAA;QAQnB,MAAM,UAAU,GAOX,EAAE;AACP,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;QAE5C,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,YAAY,KAAI;;YAE/C,MAAM,qBAAqB,GAAG,OAAiG;AAC/H,YAAA,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,UAAU,IAAI,EAAE;;AAGhE,YAAA,iBAAiB,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;;gBAEtC,IAAI,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,cAAc,EAAE;;oBAEtD,MAAM,MAAM,GAAI,OAAO,CAAC,qBAA0C,EAAE,GAAG,IAAI,EAAE;;oBAG7E,MAAM,YAAY,GAAG,CAAA,EAAG,OAAO,CAAC,GAAG,IAAI,QAAQ,YAAY,CAAA,CAAE,IAAI,MAAM,CAAA,CAAA,EAAI,SAAS,CAAC,iCAAiC,IAAI,SAAS,CAAC,oBAAoB,CAAA,CAAE;;oBAG1J,MAAM,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,IAC1C,EAAE,CAAC,oCAAoC,MAAM,OAAO,CAAC,GAAG,IAAI,CAAA,KAAA,EAAQ,YAAY,CAAA,CAAE,CAAC;wBACnF,EAAE,CAAC,uBAAuB,KAAK,MAAM;AACrC,wBAAA,EAAE,CAAC,iCAAiC,KAAK,SAAS,CAAC,iCAAiC;AACpF,wBAAA,EAAE,CAAC,oBAAoB,KAAK,SAAS,CAAC,oBAAoB,CAC3D;oBAED,IAAI,CAAC,iBAAiB,EAAE;wBACtB,UAAU,CAAC,IAAI,CAAC;AACd,4BAAA,oCAAoC,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA,KAAA,EAAQ,YAAY,CAAA,CAAE;AAC3E,4BAAA,uBAAuB,EAAE,MAAM;AAC/B,4BAAA,iCAAiC,EAAE,SAAS,CAAC,iCAAiC,IAAI,EAAE;AACpF,4BAAA,oBAAoB,EAAE,SAAS,CAAC,oBAAoB,IAAI,EAAE;AAC1D,4BAAA,gBAAgB,EAAE,SAAS,CAAC,gBAAgB,IAAI,KAAK;AACrD,4BAAA,WAAW,EAAE,SAAS,CAAC,WAAW,IAAI;AACvC,yBAAA,CAAC;;yBACG;AACL,wBAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,YAAY,CAAC;;;AAGpE,aAAC,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE,UAAU,CAAC;AAChE,QAAA,OAAO,UAAU;;AAInB;;AAEG;IACH,oBAAoB,CAAC,MAAc,EAAE,YAAoB,EAAA;AACvD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,EAAE;QAClD,IAAI,YAAY,KAAK,IAAI;AAAE,YAAA,OAAO,KAAK;QAEvC,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC;;AAGpE;;AAEG;AACH,IAAA,0BAA0B,CAAC,MAAc,EAAE,YAAoB,EAAE,UAAmB,EAAA;;QAElF,OAAO,CAAC,GAAG,CAAC,CAAA,2CAAA,EAA8C,MAAM,CAAA,GAAA,EAAM,YAAY,CAAA,GAAA,EAAM,UAAU,CAAA,CAAE,CAAC;;AAGvG;;AAEG;AACH,IAAA,4BAA4B,CAAC,MAAc,EAAA;;;AAGzC,QAAA,OAAO,KAAK;;AAGd;;AAEG;AACH,IAAA,wBAAwB,CAAC,YAAoB,EAAA;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC;AAC7D,QAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,UAAU,CAAC;;AAG7D,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,IAAG;AAC9B,YAAA,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE;YACzB,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,GAAG,UAAU;AAC5C,YAAA,OAAO,MAAM;AACf,SAAC,CAAC;;AAGJ;;AAEG;AACH,IAAA,uBAAuB,CAAC,YAAoB,EAAA;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC;AAE7D,QAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,YAAY,CAAA,CAAA,CAAG,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,CAAA,qBAAA,CAAuB,EAAE,UAAU,CAAC,MAAM,CAAC;AACvD,QAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,UAAU,CAAC;QAE/C,OAAO;YACL,EAAE,EAAE,CAAA,iBAAA,EAAoB,YAAY,CAAA,CAAE;AACtC,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,OAAO,EAAE;AACP,gBAAA;AACE,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,MAAM,EAAE,WAAW;AACnB,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,QAAQ,EAAE;AACX,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,WAAW;AAChB,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,QAAQ,EAAE;AACX,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,WAAW;AAChB,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,KAAK,EAAE;AACR,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,eAAe;AACpB,oBAAA,MAAM,EAAE,QAAQ;AAChB,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,YAAY,EAAE;AACZ,wBAAA,WAAW,EAAE,IAAI;AACjB,wBAAA,WAAW,EAAE,QAAQ;AACrB,wBAAA,aAAa,EAAE,UAAU;AACzB,wBAAA,WAAW,EAAE,mCAAmC;AAChD,wBAAA,aAAa,EAAE;AAChB;AACF,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,2BAA2B;AAChC,oBAAA,MAAM,EAAE,aAAa;AACrB,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,QAAQ,EAAE;AACX;AACF,aAAA;AACD,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,UAAU,EAAE;AACV,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,QAAQ,EAAE,EAAE;gBACZ,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,WAAW,EAAE;AACd,aAAA;AACD,YAAA,MAAM,EAAE;AACN,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,WAAW,EAAE,sBAAsB;AACnC,gBAAA,iBAAiB,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC;AAC3D,gBAAA,UAAU,EAAE;AACb,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,YAAY,EAAE,CAAC;AACf,gBAAA,WAAW,EAAE;AACd,aAAA;AACD,YAAA,MAAM,EAAE;AACN,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,SAAS,EAAE,EAAE;AACb,gBAAA,SAAS,EAAE,EAAE;AACb,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,SAAS,EAAE;AACZ,aAAA;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,UAAU,EAAE,eAAe;AAC3B,gBAAA,SAAS,EAAE,6BAA6B;AACxC,gBAAA,SAAS,EAAE;AACZ,aAAA;AACD,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,UAAU,EAAE,0CAA0C;AACtD,YAAA,SAAS,EAAE,mBAAmB;AAC9B,YAAA,YAAY,EAAE,cAAc;AAC5B,YAAA,IAAI,EAAE;AACJ,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,UAAU,EAAE,cAAc;AAC1B,gBAAA,WAAW,EAAE,UAAU;AACvB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,WAAW,EAAE,YAAY;AACzB,gBAAA,cAAc,EAAE;AACjB;SACF;;AAGH;;AAEG;AACH,IAAA,8BAA8B,CAAC,YAAoB,EAAA;QACjD,OAAO;AACL,YAAA,mBAAmB,EAAE,IAAI,CAAC,2BAA2B,EAAE;AACvD,YAAA,gBAAgB,EAAE,IAAI,CAAC,wBAAwB,EAAE;AACjD,YAAA,mBAAmB,EAAE,IAAI,CAAC,2BAA2B;SACtD;;AAGH;;AAEG;IACH,qBAAqB,CAAC,KAAgB,EAAE,YAAoB,EAAA;QAC1D,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,CAAC;AAE9E,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,QAAQ;;gBAEX;AACF,YAAA,KAAK,UAAU;;gBAEb;AACF,YAAA;gBACE;;;;AAQN,IAAA,sBAAsB,CAAC,YAAoB,EAAA;AACzC,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,oBAAoB,EAAE,EAAE;AACxB,YAAA,iCAAiC,EAAE,EAAE;AACrC,YAAA,gBAAgB,EAAE;SACnB;;AAGD,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,IAAG;AACpC,YAAA,MAAM,eAAe,GAAG,CAAC,GAAG,QAAQ,CAAC;;;;;AAKrC,YAAA,OAAO,eAAe;AACxB,SAAC,CAAC;;QAGF,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC;;;;;;IAQ5D,yBAAyB,CAAC,YAAoB,EAAE,cAAsB,EAAA;;AAEpE,QAAA,IAAI,CAAC,iCAAiC,CAAC,YAAY,EAAE,cAAc,CAAC;;AAGpE,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,IAAG;AACpC,YAAA,MAAM,eAAe,GAAG,CAAC,GAAG,QAAQ,CAAC;;AAErC,YAAA,OAAO,eAAe;AACxB,SAAC,CAAC;;IAGI,iCAAiC,CAAC,YAAoB,EAAE,cAAsB,EAAA;QACpF,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA,oBAAA,EAAuB,YAAY,CAAA,YAAA,EAAe,cAAc,CAAA,qBAAA,CAAuB,CAAC;QAC1H,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA,oBAAA,EAAuB,YAAY,CAAA,YAAA,EAAe,cAAc,CAAA,kCAAA,CAAoC,CAAC;QACvI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA,oBAAA,EAAuB,YAAY,CAAA,YAAA,EAAe,cAAc,CAAA,iBAAA,CAAmB,CAAC;;AAGxH,IAAA,uBAAuB,CAAC,YAAoB,EAAA;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC;;AAEnD,QAAA,OAAO,EAAE;;;AAIX,IAAA,uBAAuB,CAAC,YAAoB,EAAA;AAC1C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;QACvC,OAAO,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;;AAGlD,IAAA,cAAc,CAAC,YAAoB,EAAA;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,oBAAoB,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE;AACnE,YAAA,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC;YAC3E;;AAGF,QAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,YAAY,CAAC;AAChE,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGpB,QAAA,MAAM,WAAW,GAAqB;AACpC,YAAA,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe;SAC3C;AAED,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,WAAW,CAAC;AAE1D,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW;AACrC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,QAAQ,CAAC;AACzD,gBAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC;gBACzE,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,EAAE,IAAI,CAAC;gBAClD,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,EAAE,IAAI,EAAE;;oBAEvC,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAe,KAAI;;wBAEvD,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,IAC5D,IAAI,CAAC,yBAAyB,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,EAAE,CAAC,CAC/D;;wBAGD,MAAM,gBAAgB,GAAsE,EAAE;AAE9F,wBAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE;AAClC,4BAAA,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,YAAY,IAAG;gCACpD,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC;gCACvD,IAAI,UAAU,EAAE;oCACd,gBAAgB,CAAC,YAAY,CAAC,GAAG;wCAC/B,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,YAAY,CAAC;AACrD,wCAAA,UAAU,EAAE;qCACb;;AAEL,6BAAC,CAAC;;wBAGJ,OAAO;AACL,4BAAA,GAAG,IAAI;4BACP,WAAW,EAAE,iBAAiB;AAC9B,4BAAA,UAAU,EAAE,EAAE;4BACd,iBAAiB,EAAE,gBAAgB;yBACpC;AACH,qBAAC,CAAC;;AAGF,oBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,IAAG;AAC9B,wBAAA,MAAM,MAAM,GAAG;AACvB,4BAAA,GAAG,GAAG;AACI,4BAAA,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG;yBAC5B;AACD,wBAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,MAAM,CAAC;AACnD,wBAAA,OAAO,MAAM;AACf,qBAAC,CAAC;oBAEF,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,UAAU,CAAC,MAAM,CAAC;AACjE,oBAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,UAAU,CAAC;;AAG/C,oBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,IAAG;AACpC,wBAAA,MAAM,eAAe,GAAG,CAAC,GAAG,QAAQ,CAAC;wBACrC,IAAI,CAAE,eAAe,CAAC,YAAY,CAAS,CAAC,UAAU,EAAE;AACrD,4BAAA,eAAe,CAAC,YAAY,CAAS,CAAC,UAAU,GAAG,EAAE;;AAExD,wBAAA,OAAO,eAAe;AACxB,qBAAC,CAAC;AAEF,oBAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,YAAY,CAAC;;oBAG7D,UAAU,CAAC,MAAK;AACd,wBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;;AAExB,wBAAA,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC;qBAC5C,EAAE,GAAG,CAAC;;qBACF;AACL,oBAAA,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC;AACjD,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC;;AAErD,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC;AACpD,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC;AAC5C,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN,IAAA,iBAAiB,CAAC,YAAoB,EAAA;AACpC,QAAA,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC;AAC5C,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;;AAGnC,IAAA,yBAAyB,CAAC,YAAoB,EAAA;;AAE5C,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,IAAG;AACpC,YAAA,MAAM,eAAe,GAAG,CAAC,GAAG,QAAQ,CAAC;AACpC,YAAA,eAAe,CAAC,YAAY,CAAS,CAAC,UAAU,GAAG,EAAE;AACtD,YAAA,OAAO,eAAe;AACxB,SAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,IAAG;AAC9B,YAAA,MAAM,UAAU,GAAG,EAAE,GAAG,GAAG,EAAE;AAC7B,YAAA,OAAO,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;AAC1C,YAAA,OAAO,UAAU;AACnB,SAAC,CAAC;;AAGJ;;AAEG;IACK,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC;AACxC,YAAA,UAAU,EAAE;SACb;AACE,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;AACtC,oBAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAC5C,IAAI,CAAC,UAAU,KAAK,aAAa,IAAI,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAC7F;oBACD,IAAI,cAAc,EAAE;wBAClB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,IAAI,IAAI,CAAC;wBACrD,IAAI,CAAC,eAAe,EAAE;;yBACjB;AACL,wBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC;;;aAGzE;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC;;AAEpD,SAAA,CAAC;;AAGN;;AAEG;IACK,eAAe,GAAA;AACrB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACtC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kGAAkG,CAAC;YAClH;;AAGF,QAAA,MAAM,OAAO,GAA8B,EAAE,cAAc,EAAE,MAAM,EAAE;AACrE,QAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC,OAAO;AACpD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACnC,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE;AACzC,wBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;;;qBAEjB;AACL,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACxB,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mFAAmF,CAAC;;aAEtG;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACxB,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kFAAkF,CAAC;;AAEvG,SAAA,CAAC;;IAGJ,YAAY,CAAC,SAAc,EAAE,UAAkB,EAAA;QAC7C,OAAO,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;;IAGnD,gBAAgB,CAAC,SAAc,EAAE,UAAkB,EAAA;;;AAGjD,QAAA,OAAO,IAAI;;IAGb,mBAAmB,CAAC,YAAoB,EAAE,MAAc,EAAA;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC;AAC7D,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,oBAAoB,KAAK,MAAM,CAAC;;;IAIlE,qBAAqB,CAAC,YAAoB,EAAE,KAAU,EAAA;AACpD,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,uBAAuB,CAAC;AAC3C,QAAA,MAAM,SAAS,GAAG,KAAK,EAAE,MAAM,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,IAAI,KAAK;QACnE,IAAI,SAAS,EAAE;;AAEb,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,IAAG;gBACpC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,KAAI;AACrC,oBAAA,IAAI,KAAK,KAAK,YAAY,EAAE;wBAC1B,OAAO,EAAE,GAAG,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE;;yBACvC;wBACL,OAAO,EAAE,GAAG,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;;AAEjD,iBAAC,CAAC;AACJ,aAAC,CAAC;;AAGF,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAc;gBACjE,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;gBACvD,IAAI,cAAc,EAAE;AAClB,oBAAA,cAAc,CAAC,QAAQ,CAAC,CAAC,KAAK,YAAY,CAAC;;;AAI/C,YAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,YAAY,CAAA,kCAAA,CAAoC,CAAC;;;IAInF,oBAAoB,GAAA;AAClB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;QACrF,IAAI,cAAc,EAAE;YAClB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,cAAc,CAAC,oBAAoB,CAAC;AAChG,YAAA,OAAO,MAAM,EAAE,SAAS,IAAI,EAAE;;AAEhC,QAAA,OAAO,EAAE;;IAGX,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;;;IAIvE,eAAe,GAAA;AACb,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,KAAK,IAAI,EAAE;AACxE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,KAAK,IAAI,EAAE;AAC1E,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,KAAK,IAAI,EAAE;AAEtE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,KAAK;QAChE,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,QAAQ;;;QAIjB,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3E,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;;;IAIxB,gBAAgB,GAAA;AACd,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,KAAK,IAAI,EAAE;AACxE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,KAAK,IAAI,EAAE;AAC1E,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,KAAK,IAAI,EAAE;;QAGtE,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACnF,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;;AAGzC,QAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;QACtD,IAAI,iBAAiB,EAAE;AACrB,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC;;;;IAKzE,iBAAiB,GAAA;QACf,IAAI,CAAC,gBAAgB,EAAE;;IAGzB,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,KAAK,IAAI,EAAE;;IAG9D,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,EAAE;;IAG7D,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,KAAK,IAAI,EAAE;;IAG9D,mBAAmB,GAAA;;AAEjB,QAAA,OAAO,oBAAoB;;IAG7B,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,KAAK,IAAI,KAAK;;IAGjE,YAAY,GAAA;;AAEV,QAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE;;IAGnC,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM;;AAGrC;;AAEG;AACH,IAAA,2BAA2B,CAAC,MAAc,EAAA;AACxC,QAAA,OAAO,CAAC,GAAG,CAAC,gDAAgD,EAAE,MAAM,CAAC;;;AAIvE;;AAEG;AACH,IAAA,yBAAyB,CAAC,KAAa,EAAA;AACrC,QAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC;;;AAIxD;;AAEG;AACH,IAAA,4BAA4B,CAAC,QAAgB,EAAA;;AAE3C,QAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,QAAQ,CAAC;;AAG5D;;AAEG;IACH,yBAAyB,GAAA;QACvB,OAAO;AACL,YAAA,OAAO,EAAE,oBAAoB;YAC7B,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,GAAG,IAAI,EAAE;AACjD,YAAA,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;YAC9B,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC;AAC5C,YAAA,UAAU,EAAE,oBAAoB;SACjC;;AAGH;;AAEG;AACH,IAAA,qBAAqB,CAAC,aAAqB,EAAA;QACzC,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,aAAa,CAAC;QACnE,MAAM,YAAY,GAAG,iBAAiB,EAAE,GAAG,CAAC,2BAA2B,CAAC,EAAE,KAAK;QAC/E,MAAM,YAAY,GAAG,iBAAiB,EAAE,GAAG,CAAC,8BAA8B,CAAC,EAAE,KAAK;QAClF,MAAM,cAAc,GAAG,iBAAiB,EAAE,GAAG,CAAC,kBAAkB,CAAC,EAAE,KAAK;;QAGxE,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,YAAY,CAAC,EAAE,WAAW,IAAI,UAAU;QAEpH,OAAO;AACL,YAAA,OAAO,EAAE,CAAA,EAAG,gBAAgB,MAAM,cAAc,IAAI,UAAU,CAAA,CAAE;YAChE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,GAAG,IAAI,EAAE;YACjD,OAAO,EAAE,YAAY;AACrB,YAAA,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;AAC9B,YAAA,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,gBAAgB,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC;AAClE,YAAA,UAAU,EAAE,eAAe;AAC3B,YAAA,aAAa,EAAE,aAAa;AAC5B,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,cAAc,EAAE;SACjB;;AAGH;;;AAGG;IACH,uBAAuB,CAAC,OAAe,EAAE,aAAqB,EAAA;QAC5D,OAAO,CAAC,GAAG,CAAC,CAAA,wCAAA,EAA2C,aAAa,CAAA,eAAA,CAAiB,EAAE,OAAO,CAAC;;QAG/F,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,aAAa,CAAC;AACnE,QAAA,IAAI,iBAAiB,IAAI,OAAO,EAAE;YAChC,iBAAiB,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,CAAA,uCAAA,EAA0C,aAAa,CAAA,CAAA,CAAG,EAAE,OAAO,CAAC;;;;;AAMjF,QAAA,iBAAyB,CAAC,cAAc,GAAG,EAAE;;AAGhD;;AAEG;IACH,qBAAqB,CAAC,KAAU,EAAE,aAAqB,EAAA;QACrD,OAAO,CAAC,KAAK,CAAC,CAAA,qCAAA,EAAwC,aAAa,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;AAC9E,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,gCAAA,EAAmC,KAAK,EAAE,OAAO,IAAI,eAAe,CAAA,CAAE,CAAC;;AAGxF;;AAEG;IACH,wBAAwB,CAAC,QAAgB,EAAE,aAAqB,EAAA;QAC9D,OAAO,CAAC,GAAG,CAAC,CAAA,yCAAA,EAA4C,aAAa,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAA,CAAG,CAAC;;;AAIxF;;AAEG;AACK,IAAA,uBAAuB,CAAC,MAAc,EAAA;;;AAG5C,QAAA,OAAO,CAAC,GAAG,CAAC,yEAAyE,EAAE,MAAM,CAAC;;IAGhG,iBAAiB,GAAA;AACf,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,yBAAyB,EAAE,EAAE;AAC7B,YAAA,2BAA2B,EAAE;AAC3B,gBAAA,GAAG,EAAE,EAAE;AACP,gBAAA,UAAU,EAAE;AACb,aAAA;AACD,YAAA,0BAA0B,EAAE;AAC1B,gBAAA,GAAG,EAAE,EAAE;AACP,gBAAA,gBAAgB,EAAE;AACnB,aAAA;AACD,YAAA,uBAAuB,EAAE;AACvB,gBAAA,GAAG,EAAE,EAAE;AACP,gBAAA,aAAa,EAAE;AAChB,aAAA;AACD,YAAA,2BAA2B,EAAE;AAC3B,gBAAA,GAAG,EAAE,EAAE;AACP,gBAAA,sBAAsB,EAAE;AACzB,aAAA;AACD,YAAA,qBAAqB,EAAE,EAAE;AACzB,YAAA,wBAAwB,EAAE,EAAE;AAC5B,YAAA,yBAAyB,EAAE,EAAE;AAC7B,YAAA,mBAAmB,EAAE,SAAS;AAC9B,YAAA,uBAAuB,EAAE,SAAS;AAClC,YAAA,iBAAiB,EAAE,EAAE;AACrB,YAAA,mBAAmB,EAAE,EAAE;AACvB,YAAA,uBAAuB,EAAE;SAC1B;;AAGD,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,GAAG,SAAS,EAAE,UAAU,CAAC,CAAC;;AAGrE,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,6BAA6B,EAAE;AAC7D,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,gBAAgB,CAAC;;QAGrD,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,GAAG,CAAC;;QAG1D,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,eAAe,GAAG,EAAE,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,eAAe,GAAG,EAAE,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,eAAe,GAAG,KAAK,EAAE,CAAC,CAAC;QAC5F,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,eAAe,GAAG,KAAK,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,eAAe,GAAG,EAAE,EAAE,CAAC,CAAC;;AAGnF,QAAA,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC;;AAG/C,IAAA,oBAAoB,CAAC,KAAa,EAAA;;AAEhC,QAAA,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,KAAK,CAAC;;QAG9C,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;;AAGlF,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,IAAG;AACvC,YAAA,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE;AAC9B,YAAA,OAAO,OAAO,CAAC,KAAK,CAAC;AACrB,YAAA,OAAO,OAAO;AAChB,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,IAAG;AACrC,YAAA,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE;AAC9B,YAAA,OAAO,OAAO,CAAC,KAAK,CAAC;AACrB,YAAA,OAAO,OAAO;AAChB,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,OAAO,IAAG;AAC9C,YAAA,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE;AAC9B,YAAA,OAAO,OAAO,CAAC,KAAK,CAAC;AACrB,YAAA,OAAO,OAAO;AAChB,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,OAAO,IAAG;AAC5C,YAAA,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE;AAC9B,YAAA,OAAO,OAAO,CAAC,KAAK,CAAC;AACrB,YAAA,OAAO,OAAO;AAChB,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,IAAG;AACxC,YAAA,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE;AAC9B,YAAA,OAAO,OAAO,CAAC,KAAK,CAAC;AACrB,YAAA,OAAO,OAAO;AAChB,SAAC,CAAC;;IAGJ,WAAW,GAAA;;AAET,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,EAAE;;AAGvD,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC;;AAG9C,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;;AAGlE,IAAA,cAAc,CAAC,KAAa,EAAA;;QAE1B,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,KAAK,CAAC;QAC3D,IAAI,iBAAiB,EAAE;AACpB,YAAA,iBAAyB,CAAC,cAAc,GAAG,EAAE;;;AAIhD,QAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC;;QAGvC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;;IAGnE,eAAe,GAAA;;AAEb,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,2BAA2B,EAAE;;AAGzD,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,cAAc,CAAC;;AAGhD,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,GAAG,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;;QAG1E,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC;AACvD,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC;;AAGhC,IAAA,kBAAkB,CAAC,KAAa,EAAA;;AAE9B,QAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC;;QAG3C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;;AAG7E,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,IAAG;AACtC,YAAA,MAAM,UAAU,GAAG,EAAE,GAAG,OAAO,EAAE;AACjC,YAAA,OAAO,UAAU,CAAC,KAAK,CAAC;AACxB,YAAA,OAAO,UAAU;AACnB,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,IAAG;AACtC,YAAA,MAAM,UAAU,GAAG,EAAE,GAAG,OAAO,EAAE;AACjC,YAAA,OAAO,UAAU,CAAC,KAAK,CAAC;AACxB,YAAA,OAAO,UAAU;AACnB,SAAC,CAAC;;IAKJ,QAAQ,GAAA;;QAEN,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,YAAA,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC;YACxE;;;AAIF,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC5B,YAAA,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC;YAClE;;AAGF,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC7B,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGtB,YAAA,MAAM,EACJ,mBAAmB,EACnB,2BAA2B,EAC3B,mBAAmB,EACnB,wBAAwB,EACxB,GAAG,aAAa,EACjB,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK;;AAG7B,YAAA,MAAM,yBAAyB,GAAG,IAAI,CAAC,qBAAqB,EAAE;AAE9D,YAAA,MAAM,QAAQ,GAA6B;AACzC,gBAAA,aAAa,EAAE,aAAa;gBAC5B,mBAAmB,EAAE,mBAAmB,IAAI,EAAE;AAC9C,gBAAA,yBAAyB,EAAE,yBAAyB;gBACpD,2BAA2B,EAAE,2BAA2B,IAAI,EAAE;gBAC9D,mBAAmB,EAAE,mBAAmB,IAAI,EAAE;gBAC9C,wBAAwB,EAAE,wBAAwB,IAAI,EAAE;AACxD,gBAAA,oBAAoB,EAAE;aACvB;AAED,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBACjB,QAAQ,CAAC,aAAa,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;;;AAG5C,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;;AAErB,gBAAA,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE;;AAEpC,oBAAA,MAAM,EAAE,aAAa,EAAE,qBAAqB,EAAE,GAAG,oBAAoB,EAAE,GAAG,QAAQ,EAAE,aAAmE;AACvJ,oBAAA,QAAQ,CAAC,aAAa,GAAG,oBAAoB;;qBACxC;;oBAEL,MAAM,EAAE,qBAAqB,EAAE,GAAG,gBAAgB,EAAE,GAAG,QAAQ,EAAE,aAAmE;AACpI,oBAAA,IAAI,gBAAgB,CAAC,aAAa,EAAE;AAClC,wBAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC;AACtD,wBAAA,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,aAAa;wBACvD,gBAAgB,CAAC,aAAa,GAAG,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC;wBAE9E,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,aAAa,EAAE,CAAC;;AAE5M,oBAAA,QAAQ,CAAC,aAAa,GAAG,gBAAgB;;;iBAEtC;;gBAEL,MAAM,EAAE,qBAAqB,EAAE,GAAG,gBAAgB,EAAE,GAAG,QAAQ,EAAE,aAAmE;AACpI,gBAAA,IAAI,gBAAgB,CAAC,aAAa,EAAE;AAClC,oBAAA,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC;AACxD,oBAAA,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,aAAa;oBACvD,gBAAgB,CAAC,aAAa,GAAG,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC;AAC9E,oBAAA,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;;AAEpJ,gBAAA,QAAQ,CAAC,aAAa,GAAG,gBAAgB;;;AAI3C,YAAA,MAAM,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE;AAC/B,YAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,OAAO,CAAC;;AAGvD,YAAA,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,OAAO;AAChD,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,QAAQ,CAAC;AAC1D,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;oBACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAErB,oBAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;;AAErB,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC;AAC3E,wBAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;;AAExC,wBAAA,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;;yBACzC;;AAEL,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC;;AAE/E,wBAAA,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;wBAC9C,IAAI,CAAC,SAAS,EAAE;;iBAEnB;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,oBAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;AACnD,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC;AACxD,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,aAAA,CAAC;;aACC;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC;;;IAIxE,SAAS,GAAA;;QAEP,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,KAAK,CAAC,EAAE;AAClD,YAAA,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC;;;QAI5C,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3C,YAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;;;QAIrC,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC;;;QAIzC,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAAE;AAChD,YAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC;;AAG1C,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AAC3B,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;;AAG5B;;AAEG;IACH,gBAAgB,GAAA;QACd,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,4BAA4B,CAAC,CAAC;;AAGtD;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACrB,IAAI,CAAC,gBAAgB,EAAE;;aAClB;YACL,IAAI,CAAC,SAAS,EAAE;;;AAIpB;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,GAAG,iBAAiB;;AAG5D;;AAEG;IACH,wBAAwB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE;;AAGlC;;AAEG;IACH,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,GAAG,4CAA4C,GAAG,UAAU;;AAGtF;;AAEG;IACH,uBAAuB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,GAAG,sBAAsB,GAAG,kBAAkB;;AAGxE;;AAEG;IACH,gBAAgB,GAAA;QACd,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC;QAChE,IAAI,eAAe,EAAE,OAAO,IAAI,eAAe,EAAE,OAAO,EAAE;YACxD,IAAI,eAAe,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE;AACxC,gBAAA,OAAO,sBAAsB;;YAE/B,IAAI,eAAe,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE;AACzC,gBAAA,OAAO,6CAA6C;;;AAGxD,QAAA,OAAO,IAAI;;AAGb;;AAEG;IACH,uBAAuB,GAAA;QACrB,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,uBAAuB,CAAC;QACvE,IAAI,cAAc,EAAE,OAAO,IAAI,cAAc,EAAE,OAAO,EAAE;YACtD,IAAI,cAAc,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE;AACvC,gBAAA,OAAO,mCAAmC;;YAE5C,IAAI,cAAc,CAAC,MAAM,GAAG,kBAAkB,CAAC,EAAE;AAC/C,gBAAA,OAAO,mCAAmC;;YAE5C,IAAI,cAAc,CAAC,MAAM,GAAG,kBAAkB,CAAC,EAAE;AAC/C,gBAAA,OAAO,wBAAwB;;;AAGnC,QAAA,OAAO,IAAI;;AAGb;;AAEG;IACH,gBAAgB,GAAA;QACd,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC;QAChE,OAAO,CAAC,EAAE,eAAe,EAAE,OAAO,IAAI,eAAe,EAAE,OAAO,CAAC;;AAGjE;;AAEG;IACH,uBAAuB,GAAA;QACrB,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,uBAAuB,CAAC;QACvE,OAAO,CAAC,EAAE,cAAc,EAAE,OAAO,IAAI,cAAc,EAAE,OAAO,CAAC;;AAG/D;;AAEG;IACH,gBAAgB,GAAA;QACd,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC;QAChE,MAAM,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,uBAAuB,CAAC;AAE/E,QAAA,OAAO,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,sBAAsB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;;AAGpF;;AAEG;IACH,qBAAqB,GAAA;;QAEnB,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC;QAChE,MAAM,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAE/E,MAAM,gBAAgB,GAAG,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE;QACvD,MAAM,uBAAuB,GAAG,sBAAsB,EAAE,KAAK,EAAE,IAAI,EAAE;AAErE,QAAA,IAAI,gBAAgB,IAAI,uBAAuB,EAAE;;AAE/C,YAAA,MAAM,YAAY,GAAG,OAAO,CAC1B,2FAA2F,CAC5F;YAED,IAAI,YAAY,EAAE;;AAEhB,gBAAA,eAAe,EAAE,QAAQ,CAAC,EAAE,CAAC;AAC7B,gBAAA,sBAAsB,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACpC,eAAe,EAAE,eAAe,EAAE;gBAClC,sBAAsB,EAAE,eAAe,EAAE;;;;AAK7C,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;;QAGjC,IAAI,CAAC,wBAAwB,EAAE;;QAG/B,UAAU,CAAC,MAAK;YACd,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC;YAC9D,aAAa,EAAE,KAAK,EAAE;SACvB,EAAE,GAAG,CAAC;;AAGT;;AAEG;IACH,oBAAoB,GAAA;;QAElB,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC;QAChE,MAAM,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,uBAAuB,CAAC;AAE/E,QAAA,eAAe,EAAE,QAAQ,CAAC,EAAE,CAAC;AAC7B,QAAA,sBAAsB,EAAE,QAAQ,CAAC,EAAE,CAAC;QACpC,eAAe,EAAE,eAAe,EAAE;QAClC,sBAAsB,EAAE,eAAe,EAAE;;AAGzC,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;;QAGlC,IAAI,CAAC,wBAAwB,EAAE;;;AAKjC;;AAEG;AACH,IAAA,uBAAuB,CAAC,YAAoB,EAAA;QAC1C,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,YAAY,GAAG,IAAI,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;AAChD,YAAA,IAAI,EAAE,CAAC,QAAuC,KAAI;AAChD,gBAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,QAAQ,CAAC;AAC9C,gBAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE;gBACrC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,YAAY,GAAG,SAAS,EAAE,CAAC,CAAC;AACpF,gBAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC;aACpF;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;gBACrD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,YAAY,GAAG,EAAE,EAAE,CAAC,CAAC;aAC9E;YACD,QAAQ,EAAE,MAAK;gBACb,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,YAAY,GAAG,KAAK,EAAE,CAAC,CAAC;;AAE1F,SAAA,CAAC;;AAGJ;;AAEG;IACH,eAAe,CAAC,KAAU,EAAE,YAAoB,EAAA;AAC9C,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE;AACzB,YAAA,QAAQ,EAAE,KAAK,EAAE,KAAK,IAAI;SAC3B;QAED,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,YAAY,GAAG,IAAI,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AACrD,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE;gBACrC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,YAAY,GAAG,SAAS,EAAE,CAAC,CAAC;AACpF,gBAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC;aAC3F;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;gBACrD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,YAAY,GAAG,EAAE,EAAE,CAAC,CAAC;aAC9E;YACD,QAAQ,EAAE,MAAK;gBACb,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,YAAY,GAAG,KAAK,EAAE,CAAC,CAAC;;AAE1F,SAAA,CAAC;;AAGJ;;AAEG;IACH,kBAAkB,CAAC,KAAU,EAAE,YAAoB,EAAA;AACjD,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,aAAa,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE;AACjC,YAAA,QAAQ,EAAE,KAAK,EAAE,KAAK,IAAI;SAC3B;QAED,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,YAAY,GAAG,IAAI,EAAE,CAAC,CAAC;AACxF,QAAA,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,CAC9C,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CACpC,CAAC,SAAS,CAAC;AACV,YAAA,IAAI,EAAE,CAAC,QAAyC,KAAI;AAClD,gBAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,QAAQ,CAAC;gBAClD,MAAM,cAAc,GAAG,QAAQ,EAAE,IAAI,EAAE,aAAa,IAAI,EAAE;;gBAG1D,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,YAAY,GAAG,cAAc,EAAE,CAAC,CAAC;;gBAG3F,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,YAAY,GAAG,cAAc,EAAE,CAAC,CAAC;aAC7F;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC;gBACxD,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,YAAY,GAAG,EAAE,EAAE,CAAC,CAAC;aAChF;YACD,QAAQ,EAAE,MAAK;gBACb,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,YAAY,GAAG,KAAK,EAAE,CAAC,CAAC;;AAE5F,SAAA,CAAC;;AAGJ;;AAEG;IACH,qBAAqB,CAAC,KAAgC,EAAE,YAAoB,EAAA;QAC1E,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,KAAK,EAAE,YAAY,CAAC;AACnE,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG;AAC3B,QAAA,IAAI,CAAC,SAAS;YAAE;;QAGhB,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE;AACxE,QAAA,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAA6B,KAAK,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC;QAC3G,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,SAAS,CAAC;;QAE1F,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,YAAY,CAAc;QACrF,IAAI,gBAAgB,EAAE;YACpB,gBAAgB,CAAC,UAAU,CAAC;AAC1B,gBAAA,uBAAuB,EAAE,SAAS;AAClC,gBAAA,wBAAwB,EAAE,kBAAkB,EAAE,cAAc,IAAI,EAAE;AAClE,gBAAA,yBAAyB,EAAE,kBAAkB,EAAE,gBAAgB,IAAI,EAAE;AACrE,gBAAA,2BAA2B,EAAE,kBAAkB,EAAE,sBAAsB,IAAI;AAC5E,aAAA,CAAC;;AAGF,YAAA,IAAI,kBAAkB,EAAE,sBAAsB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,YAAY,CAAC,EAAE;gBACpI,IAAI,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,YAAY,CAAC;;;;AAK5F;;AAEG;IACK,mBAAmB,CAAC,SAAiB,EAAE,YAAoB,EAAA;QACjE,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE;AACpE,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC;;AAGpE;;AAEG;IACK,wBAAwB,CAAC,SAAiB,EAAE,YAAoB,EAAA;AACtE,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,QAAQ,EAAE;SACX;QAED,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AACrD,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE;AACrC,gBAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;;oBAExB,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE;oBACpE,MAAM,gBAAgB,GAAG,CAAC,GAAG,gBAAgB,EAAE,GAAG,SAAS,CAAC;oBAC5D,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,YAAY,GAAG,gBAAgB,EAAE,CAAC,CAAC;;aAE9F;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC;;AAEpE,SAAA,CAAC;;AAGJ;;AAEG;IACK,6BAA6B,CAAC,SAAiB,EAAE,YAAoB,EAAA;;QAE3E,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,YAAY,CAAC;AAC/D,QAAA,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,IAAI;;QAGhC,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC;;AAGlG;;AAEG;IACK,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAC9C,YAAA,UAAU,EAAE,mBAAmB;AAC/B,YAAA,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB;SACtD,CAAC,CAAC,SAAS,CAAC;AACX,YAAA,IAAI,EAAE,CAAC,QAA6C,KAAI;gBACtD,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,QAAQ,CAAC,IAAI,CAAC;oBACtD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;;qBACrC;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC;AAC/C,oBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;;aAElC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC;AACtD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;;AAElC,SAAA,CAAC;;AAGJ;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAC9C,YAAA,UAAU,EAAE,oBAAoB;AAChC,YAAA,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB;SACtD,CAAC,CAAC,SAAS,CAAC;AACX,YAAA,IAAI,EAAE,CAAC,QAA6C,KAAI;gBACtD,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,QAAQ,CAAC,IAAI,CAAC;oBACvD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;;qBACtC;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC;AAChD,oBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;;aAEnC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC;AACvD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;;AAEnC,SAAA,CAAC;;AAGJ;;AAEG;IACK,8BAA8B,GAAA;AACpC,QAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAC9C,YAAA,UAAU,EAAE,8BAA8B;AAC1C,YAAA,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB;SACtD,CAAC,CAAC,SAAS,CAAC;AACX,YAAA,IAAI,EAAE,CAAC,QAA6C,KAAI;gBACtD,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,QAAQ,CAAC,IAAI,CAAC;oBACpE,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;;qBACpD;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC;AAC9D,oBAAA,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,EAAE,CAAC;;aAEjD;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC;AACrE,gBAAA,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,EAAE,CAAC;;AAEjD,SAAA,CAAC;;AAGJ;;AAEG;IACK,qBAAqB,GAAA;AAC3B,QAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAC9C,YAAA,UAAU,EAAE,qBAAqB;AACjC,YAAA,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB;SACtD,CAAC,CAAC,SAAS,CAAC;AACX,YAAA,IAAI,EAAE,CAAC,QAA6C,KAAI;gBACtD,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,QAAQ,CAAC,IAAI,CAAC;oBAC5D,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;;qBAC3C;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC;AACrD,oBAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC;;aAExC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC;AAC5D,gBAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC;;AAExC,SAAA,CAAC;;AAGJ;;AAEG;IACK,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAC9C,YAAA,UAAU,EAAE,aAAa;AACzB,YAAA,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB;SACtD,CAAC,CAAC,SAAS,CAAC;AACX,YAAA,IAAI,EAAE,CAAC,QAA6C,KAAI;gBACtD,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,QAAQ,CAAC,IAAI,CAAC;oBACrD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;;qBACpC;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC;AAC9C,oBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;;aAEjC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;AACrD,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;;AAEjC,SAAA,CAAC;;AAGJ;;AAEG;IACK,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAC9C,YAAA,UAAU,EAAE,qBAAqB;AACjC,YAAA,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB;SACtD,CAAC,CAAC,SAAS,CAAC;AACX,YAAA,IAAI,EAAE,CAAC,QAA6C,KAAI;gBACtD,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,QAAQ,CAAC,IAAI,CAAC;oBACtE,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;;qBAC1C;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC;AACtD,oBAAA,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC;;aAEvC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC;AAC7D,gBAAA,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC;;AAEvC,SAAA,CAAC;;AAGJ;;AAEG;IACK,eAAe,GAAA;AACrB,QAAA,MAAM,WAAW,GAAqB;AACpC,YAAA,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,IAAI,EAAE;AACJ,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,GAAG,EAAE;AACN;SACF;QAED,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC;AAClD,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;oBACrB,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,QAAQ,CAAC,IAAI,CAAC;oBACrD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;;qBACpC;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,QAAQ,CAAC;AACzD,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;;aAE3B;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;AACrD,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;;AAE3B,SAAA,CAAC;;AAGJ;;AAEG;IACK,oCAAoC,GAAA;AAC1C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACzC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,KAAI;;YAE7B,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC;YACtE,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;YAClF,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;YAChF,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC;;AAGzE,YAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;AACrC,SAAC,CAAC;;uGAj5GO,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,6BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,6BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,qCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,qCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,0BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,uCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,uCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,6BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,6BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3ExC,y2jDA48Bc,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDl5BV,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,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,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,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,EACX,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,IAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,sBAAsB,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,aAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,yBAAyB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,wBAAwB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,qCAAqC,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAK5B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBArBvC,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,WAAW;wBACX,kBAAkB;wBAClB,mBAAmB;wBACnB,qBAAqB;wBACrB,sBAAsB;wBACtB,mBAAmB;wBACnB,yBAAyB;wBACzB,yBAAyB;wBACzB,iBAAiB;wBACjB,wBAAwB;wBACxB;AACD,qBAAA,EAAA,QAAA,EAAA,y2jDAAA,EAAA;;;;;;;;AElDH;MAyBa,yBAAyB,CAAA;;AAEpC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,iBAAiB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AACrD,IAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;;AAGH,IAAA,aAAa;;AAGF,IAAA,eAAe;AACX,IAAA,mBAAmB;AACnB,IAAA,mBAAmB;AAClB,IAAA,oBAAoB;AACxB,IAAA,gBAAgB;AAClB,IAAA,cAAc;;AAG7D,IAAA,KAAK,GAAG,MAAM,CAAQ,EAAE,iDAAC;AACzB,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;;AAGnC,IAAA,WAAW,GAAG,MAAM,CAAC,CAAC,uDAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,EAAE,oDAAC;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC;AACtB,IAAA,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC;;AAGtB,IAAA,WAAW,GAAG,MAAM,CAAC,EAAE,uDAAC;;AAGxB,IAAA,UAAU,GAAG,MAAM,CAAC,eAAe,sDAAC;AACpC,IAAA,aAAa,GAAG,MAAM,CAAiB,KAAK,yDAAC;;AAG7C,IAAA,oBAAoB,GAAG,MAAM,CAAC,EAAE,gEAAC;;AAGjC,IAAA,IAAI,yBAAyB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE;;IAGpC,IAAI,yBAAyB,CAAC,KAAa,EAAA;AACzC,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;;;IAItC,mBAAmB,GAAG,MAAM,CAAC;AAC3B,QAAA,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;AAClC,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE;AAC1C,QAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB;AAC7C,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;IAGF,UAAU,GAAG,MAAM,CAAyB;AAC1C,QAAA,EAAE,EAAE,uBAAuB;AAC3B,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,GAAG,EAAE,eAAe;AACpB,gBAAA,MAAM,EAAE,eAAe;AACvB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,cAAc;AACnB,gBAAA,MAAM,EAAE,iBAAiB;AACzB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,iBAAiB;AACtB,gBAAA,MAAM,EAAE,iBAAiB;AACzB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,eAAe;AACpB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA;AACD,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,OAAO,EAAE,KAAK;;AAEd,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE;AACd,SAAA;;AAED,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,qDAAqD;YAClE,iBAAiB,EAAE,CAAC,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,CAAC;AACtF,YAAA,UAAU,EAAE;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,UAAU,EAAE,gBAAgB;AAC5B,QAAA,SAAS,EAAE;AACZ,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;IAGF,iBAAiB,GAAqC,EAAE;IAExD,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC;AAC1D,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,mBAAmB,EAAE,CAAC;;IAG7B,eAAe,GAAA;;QAEb,IAAI,CAAC,iBAAiB,GAAG;YACvB,qBAAqB,EAAE,IAAI,CAAC,mBAAmB;YAC/C,qBAAqB,EAAE,IAAI,CAAC,mBAAmB;YAC/C,kBAAkB,EAAE,IAAI,CAAC,gBAAgB;YACzC,gBAAgB,EAAE,IAAI,CAAC,cAAc;YACrC,iBAAiB,EAAE,IAAI,CAAC;SACzB;;QAGD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK;AAChC,YAAA,GAAG,MAAM;YACT,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAG;AAChC,gBAAA,IAAI,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACxD,oBAAA,OAAO,EAAE,GAAG,GAAG,EAAE;;AAEnB,gBAAA,OAAO,GAAG;AACZ,aAAC;AACF,SAAA,CAAC,CAAC;;;AAIL,IAAA,WAAW,CAAC,KAAqB,EAAA;QAC/B,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;AAErE,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAc,CAAC;gBAC3C;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAc,CAAC;gBACvC;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAgE,CAAC;gBACvF;AACF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,aAAa,EAAE;gBACpB;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAW,CAAC;gBACtC;;;;AAKN,IAAA,cAAc,CAAC,IAAS,EAAA;AACtB,QAAA,MAAM,SAAS,GAAG,wBAAwB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,iCAAiC,EAAE,SAAS,CAAC,CAAC;;IAGtE,aAAa,GAAA;AACX,QAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC;AACtD,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;;AAGhC,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,KAAK,CAAC;AACxD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,mBAAmB,EAAE;;AAG5B,IAAA,gBAAgB,CAAC,IAAY,EAAA;AAC3B,QAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,IAAI,CAAC;AACrD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,mBAAmB,EAAE;;AAG5B,IAAA,gBAAgB,CAAC,QAAgB,EAAA;AAC/B,QAAA,OAAO,CAAC,GAAG,CAAC,4CAA4C,EAAE,QAAQ,CAAC;AACnE,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,mBAAmB,EAAE;;AAG5B,IAAA,UAAU,CAAC,QAAuD,EAAA;AAChE,QAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,QAAQ,CAAC;QACzD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,mBAAmB,EAAE;;AAG5B,IAAA,qBAAqB,CAAC,MAAc,EAAA;AAClC,QAAA,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,MAAM,CAAC;;;AAG3D,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;;;AAIxB,IAAA,cAAc,CAAC,KAAY,EAAA;QACjC,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC;AAExE,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QAErB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK;AAChC,YAAA,GAAG,MAAM;AACT,YAAA,IAAI,EAAE;AACP,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAEvB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE;;;;IAK/C,mBAAmB,CAAC,YAAqB,KAAK,EAAA;AAC5C,QAAA,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC;QAE7D,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC;AACpD,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,gBAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC;;;aAEnC;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGxB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGpB,QAAA,MAAM,cAAc,GAAG,IAAI,sBAAsB,CAAC;AAChD,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE;AACxB,YAAA,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE;AAC7B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE;AACzB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,IAAI,EAAE;AACJ,gBAAA,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE;AAC3B,gBAAA,GAAG,EAAE,IAAI,CAAC,UAAU;AACrB,aAAA;YACD,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;AACxD,SAAA,CAAC;;AAGF,QAAA,MAAM,gBAAgB,GAAG,cAAc,CAAC,QAAQ,IAAI;AACpD,QAAA,IAAI,gBAAgB,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAChE,YAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,gBAAgB,CAAC;AAC/D,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC;AAC5C,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YACvB;;AAGF,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,cAAc,CAAC;;AAGzD,QAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,cAAc;AAC9C,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,QAAQ,CAAC;AACpD,gBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;AACrB,oBAAA,MAAM,QAAQ,GAAG,QAAQ,EAAE,IAAI,IAAI,EAAE;AACrC,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;oBACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;oBACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;;AAGvE,oBAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;oBAE7B,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;oBACjD,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;oBACnD,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,QAAQ,CAAC,MAAM,CAAC;;qBACpD;AACL,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC;;aAErD;AACD,YAAA,KAAK,EAAE,CAAC,KAAS,KAAI;AACnB,gBAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;AAC9C,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC;aACnD;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAEvB,gBAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,oBAAA,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE;oBAC3C,IAAI,SAAS,EAAE;AACb,wBAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC;;;;AAI9C,SAAA,CAAC;;;AAIN,IAAA,UAAU,CAAC,IAAS,EAAA;AAClB,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,CAAC;AAC/C,QAAA,MAAM,SAAS,GAAG,wBAAwB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,iCAAiC,EAAE,SAAS,CAAC,CAAC;;AAGtE,IAAA,UAAU,CAAC,IAAS,EAAA;AAClB,QAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC;AAC9C,QAAA,MAAM,SAAS,GAAG,wBAAwB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,iCAAiC,EAAE,SAAS,CAAC,CAAC;;AAGtE,IAAA,iBAAiB,CAAC,IAAS,EAAA;AACzB,QAAA,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,IAAI,CAAC;AAC7D,QAAA,MAAM,SAAS,GAAG,wBAAwB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,sCAAsC,EAAE,SAAS,CAAC,CAAC;;AAG3E,IAAA,iBAAiB,CAAC,IAAS,EAAA;AACzB,QAAA,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,IAAI,CAAC;AAC7D,QAAA,MAAM,SAAS,GAAG,wBAAwB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,sCAAsC,EAAE,SAAS,CAAC,CAAC;;AAG3E,IAAA,cAAc,CAAC,IAAS,EAAA;AACtB,QAAA,OAAO,CAAC,GAAG,CAAC,gDAAgD,EAAE,IAAI,CAAC;AACnE,QAAA,MAAM,SAAS,GAAG,wBAAwB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,mCAAmC,EAAE,SAAS,CAAC,CAAC;;AAGxE,IAAA,eAAe,CAAC,IAAS,EAAA;AACvB,QAAA,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,IAAI,CAAC;QAC7D,IAAI,OAAO,CAAC,CAAA,4CAAA,EAA+C,IAAI,CAAC,aAAa,CAAA,CAAA,CAAG,CAAC,EAAE;YACjF,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,IAAI,CAAC,GAAG,CAAC;;;;AAK/D,IAAA,kBAAkB,CAAC,IAAS,EAAA;AAC1B,QAAA,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE,IAAI,CAAC;AAC1D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,GAAG,YAAY,GAAG,UAAU;QAC7D,IAAI,OAAO,CAAC,CAAA,yBAAA,EAA4B,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,aAAa,CAAA,CAAA,CAAG,CAAC,EAAE;YACxE,OAAO,CAAC,GAAG,CAAC,CAAA,sCAAA,CAAwC,EAAE,IAAI,CAAC,GAAG,CAAC;;AAE/D,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;;;AAIlC,IAAA,YAAY,CAAC,IAAS,EAAA;AACpB,QAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,IAAI,CAAC;QAChD,IAAI,OAAO,CAAC,CAAA,gCAAA,EAAmC,IAAI,CAAC,aAAa,CAAA,+BAAA,CAAiC,CAAC,EAAE;AACnG,YAAA,IAAI,OAAO,CAAC,yFAAyF,CAAC,EAAE;AACtG,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC;;;;IAK1C,SAAS,GAAA;AACP,QAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,mCAAmC,CAAC,CAAC;;IAG7D,cAAc,GAAA;QACZ,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,IAAI,CAAC,yBAAyB,CAAC;QACnF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,mBAAmB,EAAE;;;AAI5B,IAAA,UAAU,CAAC,UAA8B,EAAA;AACvC,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,SAAS;AACjC,QAAA,IAAI;YACF,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,kBAAkB,EAAE;;AAChD,QAAA,MAAM;AACN,YAAA,OAAO,cAAc;;;AAIzB,IAAA,aAAa,CAAC,UAA8B,EAAA;AAC1C,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK;AAC7B,QAAA,IAAI;YACF,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,EAAE;;AACxC,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;;;AAIhB,IAAA,kBAAkB,CAAC,UAA8B,EAAA;AAC/C,QAAA,OAAO,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,UAAU;;IAG9D,eAAe,CAAC,SAAiB,EAAE,QAAgB,EAAA;QACjD,MAAM,YAAY,GAAG,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE;QAC/C,MAAM,WAAW,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE;QAC7C,OAAO,CAAC,YAAY,GAAG,WAAW,EAAE,WAAW,EAAE,IAAI,GAAG;;AAG1D,IAAA,qBAAqB,CAAC,cAAuB,EAAA;QAC3C,OAAO,cAAc,GAAG,UAAU,GAAG,cAAc;;;AAIrD,IAAA,gBAAgB,CAAC,IAAiB,EAAA;AAChC,QAAA,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,IAAI,CAAC;AACzD,QAAA,MAAM,KAAK,GAAG;AACZ,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,UAAU;AACd,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,OAAO,EAAE;AACV,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,WAAW;AACf,gBAAA,KAAK,EAAE,kBAAkB;AACzB,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,WAAW;AACf,gBAAA,KAAK,EAAE,kBAAkB;AACzB,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,UAAU;AACd,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,OAAO,EAAE;AACV,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,gBAAgB;AACpB,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,eAAe;gBACnB,KAAK,EAAE,IAAI,CAAC,aAAa,GAAG,iBAAiB,GAAG,eAAe;gBAC/D,IAAI,EAAE,IAAI,CAAC,aAAa,GAAG,OAAO,GAAG,cAAc;AACnD,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,UAAU;AACd,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,OAAO,EAAE;AACV,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,SAAS,EAAE,iBAAiB;AAC5B,gBAAA,SAAS,EAAE,iBAAiB;AAC5B,gBAAA,YAAY,EAAE;AACf;SACF;AACD,QAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,CAAC;AAClD,QAAA,OAAO,KAAK;;;IAId,mBAAmB,CAAC,IAAkB,EAAE,IAAiB,EAAA;QACvD,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;AAEvD,QAAA,QAAQ,IAAI,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACrB;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACrB;AACF,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;gBAC5B;AACF,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;gBAC5B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;gBACzB;AACF,YAAA,KAAK,gBAAgB;AACnB,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC1B;AACF,YAAA,KAAK,eAAe;AAClB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;gBAC7B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACvB;;;uGAriBK,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,8HAOzB,wBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrDrC,o1OAgKc,EAAA,MAAA,EAAA,CAAA,qHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDrIV,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,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,EACX,iBAAiB,+FACjB,sBAAsB,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,wBAAwB,mRACxB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAaf,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAvBrC,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,WAAW;wBACX,iBAAiB;wBACjB,sBAAsB;wBACtB,mBAAmB;wBACnB,wBAAwB;wBACxB;AACD,qBAAA,EAAA,QAAA,EAAA,o1OAAA,EAAA,MAAA,EAAA,CAAA,qHAAA,CAAA,EAAA;8BAmBoC,aAAa,EAAA,CAAA;sBAAjD,SAAS;uBAAC,wBAAwB;gBAGa,eAAe,EAAA,CAAA;sBAA9D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACM,mBAAmB,EAAA,CAAA;sBAAtE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,qBAAqB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACE,mBAAmB,EAAA,CAAA;sBAAtE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,qBAAqB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACG,oBAAoB,EAAA,CAAA;sBAAxE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,sBAAsB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACF,gBAAgB,EAAA,CAAA;sBAAhE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACA,cAAc,EAAA,CAAA;sBAA5D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;;;;;;MEiFlC,+BAA+B,CAAA;AAClC,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;;AAG/B,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,wDAAC;;AAG5B,IAAA,aAAa;IAEb,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,aAAa,EAAE;;IAGd,cAAc,GAAA;QACpB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACjC,mBAAmB,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAChD,qBAAqB,EAAE,CAAC,EAAE,CAAC;YAC3B,eAAe,EAAE,CAAC,EAAE,CAAC;YACrB,4BAA4B,EAAE,CAAC,EAAE,CAAC;AAClC,YAAA,kBAAkB,EAAE,CAAC,EAAE,CAAC;AACzB,SAAA,CAAC;;IAGI,aAAa,GAAA;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QACjD,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;;;AAIlB,IAAA,aAAa,CAAC,EAAU,EAAA;;AAE9B,QAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC;;IAGvC,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAE3B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK;AACzC,YAAA,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC;;YAGnC,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC5B,IAAI,CAAC,MAAM,EAAE;aACd,EAAE,IAAI,CAAC;;aACH;YACL,IAAI,CAAC,oBAAoB,EAAE;;;IAIvB,oBAAoB,GAAA;AAC1B,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;YACrD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;YAC3C,OAAO,EAAE,aAAa,EAAE;AAC1B,SAAC,CAAC;;IAGJ,MAAM,GAAA;QACJ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,CAAC;;uGAjEnC,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArIhC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmIT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EApIS,YAAY,8BAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,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,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAsIhC,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAzI3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,CAAC;AAC5C,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmIT,EAAA;AACF,iBAAA;;;MCmHY,qCAAqC,CAAA;AACxC,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;;AAG/B,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,wDAAC;;AAG5B,IAAA,kBAAkB;IAElB,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,aAAa,EAAE;;IAGd,cAAc,GAAA;QACpB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACtC,yBAAyB,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACtD,2BAA2B,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACxD,yBAAyB,EAAE,CAAC,EAAE,CAAC;YAC/B,qBAAqB,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAClD,uBAAuB,EAAE,CAAC,EAAE,CAAC;YAC7B,wBAAwB,EAAE,CAAC,EAAE,CAAC;YAC9B,yBAAyB,EAAE,CAAC,EAAE,CAAC;YAC/B,2BAA2B,EAAE,CAAC,EAAE,CAAC;YACjC,mBAAmB,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAChD,uBAAuB,EAAE,CAAC,EAAE,CAAC;YAC7B,iBAAiB,EAAE,CAAC,EAAE,CAAC;YACvB,mBAAmB,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC7C,yBAAyB,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;AACnD,SAAA,CAAC;;IAGI,aAAa,GAAA;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QACjD,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;;;AAIvB,IAAA,kBAAkB,CAAC,EAAU,EAAA;;AAEnC,QAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,CAAC;;IAG7C,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE;AACjC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAE3B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK;AAC9C,YAAA,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC;;YAGnC,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC5B,IAAI,CAAC,MAAM,EAAE;aACd,EAAE,IAAI,CAAC;;aACH;YACL,IAAI,CAAC,oBAAoB,EAAE;;;IAIvB,oBAAoB,GAAA;AAC1B,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;YAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC;YAChD,OAAO,EAAE,aAAa,EAAE;AAC1B,SAAC,CAAC;;IAGJ,MAAM,GAAA;QACJ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,CAAC;;uGAzEnC,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qCAAqC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvPtC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqPT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAtPS,YAAY,8BAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,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,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAwPhC,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBA3PjD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kCAAkC;AAC5C,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,CAAC;AAC5C,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqPT,EAAA;AACF,iBAAA;;;MC/CY,8BAA8B,CAAA;AACjC,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;;AAG/B,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,wDAAC;;AAG5B,IAAA,YAAY;IAEZ,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,aAAa,EAAE;;IAGd,cAAc,GAAA;QACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YAChC,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC7C,2BAA2B,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACxD,yBAAyB,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACtD,oBAAoB,EAAE,CAAC,EAAE,CAAC;YAC1B,qBAAqB,EAAE,CAAC,EAAE,CAAC;YAC3B,yBAAyB,EAAE,CAAC,EAAE,CAAC;YAC/B,sCAAsC,EAAE,CAAC,EAAE,CAAC;YAC5C,6BAA6B,EAAE,CAAC,EAAE,CAAC;YACnC,cAAc,EAAE,CAAC,IAAI;AACtB,SAAA,CAAC;;IAGI,aAAa,GAAA;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QACjD,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;;;AAIjB,IAAA,YAAY,CAAC,EAAU,EAAA;;AAE7B,QAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC;;IAGtC,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAE3B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AACxC,YAAA,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC;;YAGnC,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC5B,IAAI,CAAC,MAAM,EAAE;aACd,EAAE,IAAI,CAAC;;aACH;YACL,IAAI,CAAC,oBAAoB,EAAE;;;IAIvB,oBAAoB,GAAA;AAC1B,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;YACpD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;YAC1C,OAAO,EAAE,aAAa,EAAE;AAC1B,SAAC,CAAC;;IAGJ,MAAM,GAAA;QACJ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,CAAC;;uGArEnC,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvM/B,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqMT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAtMS,YAAY,8BAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,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,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAwMhC,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBA3M1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,CAAC;AAC5C,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqMT,EAAA;AACF,iBAAA;;;MCjCY,iCAAiC,CAAA;AACpC,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;;AAG/B,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,wDAAC;;AAG5B,IAAA,UAAU;IAEV,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,aAAa,EAAE;;IAGd,cAAc,GAAA;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YAC9B,oBAAoB,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACjD,sBAAsB,EAAE,CAAC,EAAE,CAAC;YAC5B,qBAAqB,EAAE,CAAC,EAAE,CAAC;YAC3B,cAAc,EAAE,CAAC,IAAI,CAAC;YACtB,QAAQ,EAAE,CAAC,KAAK,CAAC;YACjB,QAAQ,EAAE,CAAC,IAAI,CAAC;AAChB,YAAA,kBAAkB,EAAE,CAAC,EAAE,CAAC;AACzB,SAAA,CAAC;;IAGI,aAAa,GAAA;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QACjD,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;;;AAIf,IAAA,UAAU,CAAC,EAAU,EAAA;;AAE3B,QAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC;;IAGpC,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACzB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAE3B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK;;AAGtC,YAAA,MAAM,eAAe,GAAG;AACtB,gBAAA,GAAG,QAAQ;AACX,gBAAA,qBAAqB,EAAE;AACrB,oBAAA,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE;AACvC,oBAAA,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ;AACtC;aACF;;YAGD,OAAO,eAAe,CAAC,QAAQ;YAC/B,OAAO,eAAe,CAAC,QAAQ;AAE/B,YAAA,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC;;YAG1C,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC5B,IAAI,CAAC,MAAM,EAAE;aACd,EAAE,IAAI,CAAC;;aACH;YACL,IAAI,CAAC,oBAAoB,EAAE;;;IAIvB,oBAAoB,GAAA;AAC1B,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YACxC,OAAO,EAAE,aAAa,EAAE;AAC1B,SAAC,CAAC;;IAGJ,MAAM,GAAA;QACJ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,CAAC;;uGAjFnC,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArKlC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmKT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EApKS,YAAY,8BAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,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,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAsKhC,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAzK7C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,8BAA8B;AACxC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,CAAC;AAC5C,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmKT,EAAA;AACF,iBAAA;;;MCUY,kCAAkC,CAAA;AACrC,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;;AAG/B,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,wDAAC;;AAG5B,IAAA,UAAU;IAEV,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,aAAa,EAAE;;IAGd,cAAc,GAAA;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YAC9B,wBAAwB,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACrD,2BAA2B,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACxD,uBAAuB,EAAE,CAAC,EAAE,CAAC;YAC7B,oBAAoB,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACjD,uBAAuB,EAAE,CAAC,EAAE,CAAC;YAC7B,2BAA2B,EAAE,CAAC,EAAE,CAAC;AACjC,YAAA,kBAAkB,EAAE,CAAC,EAAE,CAAC;AACzB,SAAA,CAAC;;IAGI,aAAa,GAAA;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QACjD,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;;;AAIrB,IAAA,gBAAgB,CAAC,EAAU,EAAA;;AAEjC,QAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,EAAE,CAAC;;IAG3C,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACzB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAE3B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK;AACtC,YAAA,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC;;YAGnC,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC5B,IAAI,CAAC,MAAM,EAAE;aACd,EAAE,IAAI,CAAC;;aACH;YACL,IAAI,CAAC,oBAAoB,EAAE;;;IAIvB,oBAAoB,GAAA;AAC1B,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YACxC,OAAO,EAAE,aAAa,EAAE;AAC1B,SAAC,CAAC;;IAGJ,MAAM,GAAA;QACJ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,CAAC;;uGAnEnC,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kCAAkC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA9KnC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4KT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA7KS,YAAY,8BAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,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,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FA+KhC,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAlL9C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,CAAC;AAC5C,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4KT,EAAA;AACF,iBAAA;;;ACtLD;AAEA;;MCkCa,6BAA6B,CAAA;;AAEvB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,eAAe,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACjD,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACxC,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;;AAGlE,IAAA,+BAA+B,GAAG,SAAS,CAAC,QAAQ,CAA+B,iCAAiC,CAAC;AACrH,IAAA,sBAAsB,GAAG,SAAS,CAAC,QAAQ,CAA+B,wBAAwB,CAAC;AACnG,IAAA,sBAAsB,GAAG,SAAS,CAAC,QAAQ,CAA+B,wBAAwB,CAAC;AACnG,IAAA,+BAA+B,GAAG,SAAS,CAAC,QAAQ,CAA+B,iCAAiC,CAAC;;AAGrH,IAAA,SAAS,GAAG,MAAM,CAAa,EAAE,qDAAC;AAClC,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;;AAGnC,IAAA,WAAW,GAAG,MAAM,CAAC,CAAC,uDAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,EAAE,oDAAC;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC;AACtB,IAAA,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC;;AAGtB,IAAA,WAAW,GAAG,MAAM,CAAC,EAAE,uDAAC;;AAGxB,IAAA,UAAU,GAAG,MAAM,CAAC,mBAAmB,sDAAC;AACxC,IAAA,aAAa,GAAG,MAAM,CAAiB,KAAK,yDAAC;;AAG7C,IAAA,oBAAoB,GAAG,MAAM,CAAC,EAAE,gEAAC;;AAGjC,IAAA,IAAI,yBAAyB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE;;IAGpC,IAAI,yBAAyB,CAAC,KAAa,EAAA;AACzC,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;;;IAItC,mBAAmB,GAAG,MAAM,CAAC;AAC3B,QAAA,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;AAClC,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE;AAC1C,QAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE;AAC9C,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc;AACzC,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;IAGF,UAAU,GAAG,MAAM,CAA8B;AAC/C,QAAA,EAAE,EAAE,qBAAqB;AACzB,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,cAAc;AACtB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,kBAAkB;AACvB,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA;AACD,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,sBAAsB;AACnC,YAAA,iBAAiB,EAAE,CAAC,mBAAmB,EAAE,0BAA0B,CAAC;AACpE,YAAA,UAAU,EAAE;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,SAAS,EAAE;AACZ,SAAA;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE;AACb,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IAEF,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC;QACtD,IAAI,CAAC,aAAa,EAAE;;IAGtB,WAAW,GAAA;AACT,QAAA,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC;;AAGtD;;AAEG;IACH,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAEpB,QAAA,MAAM,OAAO,GAAc;YACzB,2BAA2B,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,GAAG,IAAI,EAAE;AACpE,YAAA,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE;AAC7B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;AAC/B,YAAA,IAAI,EAAE;AACJ,gBAAA,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE;AACtB,gBAAA,KAAK,EAAE,IAAI,CAAC,aAAa;AAC1B;SACF;AAED,QAAA,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,OAAO;AACzC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;oBACzC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACtE,IAAI,CAAC,cAAc,EAAE;AACrB,oBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,OAAA,EAAU,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAA,2BAAA,CAA6B,CAAC;;qBACxF;AACL,oBAAA,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC;AAC7C,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AACtB,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACtB,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACtB,oBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,sBAAsB,CAAC;;AAE1D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;AACnD,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC;AAC9D,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AACtB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACtB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,8CAA8C,CAAC;;AAEjF,SAAA,CAAC;;AAGN;;AAEG;IACK,cAAc,GAAA;QACpB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK;AAChC,YAAA,GAAG,MAAM;AACT,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS;AACrB,SAAA,CAAC,CAAC;;;AAIL,IAAA,iBAAiB,GAAG,QAAQ,CAAC,OAAqD;AAChF,QAAA,uBAAuB,EAAE,IAAI,CAAC,+BAA+B,EAAE;AAC/D,QAAA,cAAc,EAAE,IAAI,CAAC,sBAAsB,EAAE;AAC7C,QAAA,cAAc,EAAE,IAAI,CAAC,sBAAsB,EAAE;AAC7C,QAAA,uBAAuB,EAAE,IAAI,CAAC,+BAA+B;AAC9D,KAAA,CAAC,6DAAC;AAEH;;AAEG;AACH,IAAA,WAAW,CAAC,KAA0B,EAAA;AACpC,QAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,YAAA,KAAK,YAAY;gBACf,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,WAAW,IAAI,KAAK,CAAC,IAAI,IAAI,UAAU,IAAI,KAAK,CAAC,IAAI,EAAE;AACzG,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAW,CAAC;AACvD,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAW,CAAC;oBACnD,IAAI,CAAC,aAAa,EAAE;;gBAEtB;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAc,CAAC;AAC1C,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,aAAa,EAAE;gBACpB;AACF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,aAAa,EAAE;gBACpB;AACF,YAAA,KAAK,QAAQ;;AAEX,gBAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;gBACnC;AACF,YAAA,KAAK,UAAU;;AAEb,gBAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC;gBACtC;AACF,YAAA,KAAK,MAAM;;AAET,gBAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC;gBACjC;AACF,YAAA,KAAK,QAAQ;;AAEX,gBAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;gBACnC;AACF,YAAA;gBACE,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC,IAAI,CAAC;;;;IAKzD,oBAAoB,GAAA;QAClB,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACrE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,aAAa,EAAE;;IAGtB,YAAY,GAAA;AACV,QAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAClC,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,aAAa,EAAE;;;IAItB,cAAc,GAAA;AACZ,QAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC;AAC/C,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,kCAAkC,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,iCAAiC,CAAC,CAAC;;AAG3D,IAAA,YAAY,CAAC,QAAkB,EAAA;AAC7B,QAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,QAAQ,CAAC;QAC/C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA,mBAAA,EAAsB,QAAQ,CAAC,iBAAiB,CAAA,cAAA,CAAgB,CAAC;AAC/F,QAAA,MAAM,WAAW,GAAG,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC1E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,+BAA+B,EAAE,WAAW,CAAC,CAAC;;AAGtE,IAAA,YAAY,CAAC,QAAkB,EAAA;AAC7B,QAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,QAAQ,CAAC;QAE9C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA,mBAAA,EAAsB,QAAQ,CAAC,iBAAiB,CAAA,cAAA,CAAgB,CAAC;AAC/F,QAAA,MAAM,WAAW,GAAG,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC1E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,+BAA+B,EAAE,WAAW,CAAC,CAAC;;AAGtE,IAAA,cAAc,CAAC,QAAkB,EAAA;AAC/B,QAAA,OAAO,CAAC,GAAG,CAAC,gDAAgD,EAAE,QAAQ,CAAC;;AAGvE,QAAA,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC;AACxD,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;AAC3B,YAAA,KAAK,EAAE,kBAAkB;AACzB,YAAA,OAAO,EAAE,CAAA,+CAAA,EAAkD,QAAQ,CAAC,iBAAiB,CAAA,mFAAA,CAAqF;AAC1K,YAAA,WAAW,EAAE,QAAQ;AACrB,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,IAAI,EAAE;AACP,SAAA,CAAC,CAAC,IAAI,CAAC,CAAC,SAAkB,KAAI;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,SAAS,CAAC;YACxD,IAAI,SAAS,EAAE;gBACb,OAAO,CAAC,GAAG,CAAC,kDAAkD,EAAE,QAAQ,CAAC,GAAG,CAAC;AAC7E,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAErB,gBAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,GAAG,IAAI,EAAE,EAA4B,CAAC,CAAC,SAAS,CAAC;AAC3G,oBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,wBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;AACrB,4BAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC;4BAC/C,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,WAAA,EAAc,QAAQ,CAAC,iBAAiB,CAAA,gCAAA,CAAkC,CAAC;AAC5G,4BAAA,IAAI,CAAC,aAAa,EAAE,CAAC;;6BAChB;AACL,4BAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC;4BAC7C,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,IAAI,4BAA4B,CAAC;AACjF,4BAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;qBAE1B;AACD,oBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,wBAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;AACnD,wBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,+CAA+C,CAAC;AAC/E,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,iBAAA,CAAC;;AAEN,SAAC,CAAC;;AAGJ,IAAA,oBAAoB,CAAC,QAAkB,EAAA;AACrC,QAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,QAAQ,CAAC;AAEtD,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,GAAG,YAAY,GAAG,UAAU;AACpE,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,GAAG,YAAY,GAAG,UAAU;;AAGxE,QAAA,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC;AAC/D,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;YAC3B,KAAK,EAAE,CAAA,EAAG,UAAU,CAAA,UAAA,CAAY;AAChC,YAAA,OAAO,EAAE,CAAA,yBAAA,EAA4B,MAAM,mBAAmB,QAAQ,CAAC,iBAAiB,CAAA,EAAA,CAAI;AAC5F,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,IAAI,EAAE;AACP,SAAA,CAAC,CAAC,IAAI,CAAC,CAAC,SAAkB,KAAI;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,SAAS,CAAC;YACxD,IAAI,SAAS,EAAE;gBACb,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,QAAQ,CAAC,GAAG,CAAC;AACpE,gBAAA,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,GAAG,IAAI,EAAE,EAAkC,CAAC,CAAC,SAAS,CAAC;AACvH,oBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,wBAAA,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,QAAQ,CAAC;AAC7D,wBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;AACrB,4BAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC;AACtD,4BAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,WAAA,EAAc,QAAQ,CAAC,iBAAiB,CAAA,WAAA,EAAc,MAAM,CAAA,eAAA,CAAiB,CAAC;4BAC/G,IAAI,CAAC,aAAa,EAAE;;6BACf;AACL,4BAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC;4BACpD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,IAAI,mCAAmC,CAAC;AACxF,4BAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;qBAE1B;AACD,oBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,wBAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC;AAC1D,wBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,sDAAsD,CAAC;AACtF,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,iBAAA,CAAC;;AAEN,SAAC,CAAC;;AAGJ;;AAEG;IACH,iBAAiB,GAAA;QACf,OAAO;AACL,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,YAAY,EAAE,OAAO;AACrB,YAAA,aAAa,EAAE,QAAQ;AACvB,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,SAAS,EAAE;SACZ;;AAGH;;AAEG;AACH,IAAA,sBAAsB,CAAC,QAAkB,EAAA;QACvC,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,QAAQ,CAAC,iBAAiB,CAAC;AAC5E,QAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE;YAChC,QAAQ,EAAE,QAAQ,CAAC;AACpB,SAAA,CAAC;AAEF,QAAA,MAAM,KAAK,GAAmB;AAC5B,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,eAAe;gBACnB,KAAK,EAAE,QAAQ,CAAC,gBAAgB,GAAG,YAAY,GAAG,UAAU;gBAC5D,IAAI,EAAE,QAAQ,CAAC,gBAAgB,GAAG,YAAY,GAAG,WAAW;AAC5D,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,SAAS,EAAE,kBAAkB;AAC7B,gBAAA,YAAY,EAAE;AACf,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,SAAS,EAAE,iBAAiB;AAC5B,gBAAA,SAAS,EAAE,iBAAiB;AAC5B,gBAAA,YAAY,EAAE,oBAAoB;AAClC,gBAAA,OAAO,EAAE;AACV;SACF;AACD,QAAA,OAAO,KAAK;;AAGd;;AAEG;IACH,mBAAmB,CAAC,IAAkB,EAAE,QAAkB,EAAA;AACxD,QAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,iBAAiB,CAAC;AAE/F,QAAA,QAAQ,IAAI,CAAC,EAAE;AACb,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;gBAC3B;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;gBAC3B;AACF,YAAA,KAAK,eAAe;AAClB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;gBACnC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;gBAC7B;AACF,YAAA;gBACE,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,IAAI,CAAC,EAAE,CAAC;;;;AAKtD,IAAA,YAAY,CAAC,MAAc,EAAA;AACjC,QAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAA,CAAE,CAAC;;;;;AAMrD,IAAA,UAAU,CAAC,IAAmB,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,GAAG;QACrB,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE;;AAG5C,IAAA,mBAAmB,CAAC,QAAkB,EAAA;QACpC,IAAI,QAAQ,CAAC,gBAAgB;AAAE,YAAA,OAAO,mCAAmC;AACzE,QAAA,OAAO,qCAAqC;;AAG9C,IAAA,aAAa,CAAC,QAAkB,EAAA;QAC9B,IAAI,QAAQ,CAAC,gBAAgB;AAAE,YAAA,OAAO,QAAQ;AAC9C,QAAA,OAAO,UAAU;;AAGnB,IAAA,aAAa,CAAC,MAAW,EAAA;QACvB,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,EAAE,SAAS,EAAE;YACnD,OAAO,MAAM,CAAC,SAAS;;QAEzB,OAAO,MAAM,IAAI,KAAK;;uGA7db,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpC1C,0kHA0FA,EAAA,MAAA,EAAA,CAAA,mHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxEI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,sBAAsB,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,wBAAwB,mRACxB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAaf,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAtBzC,SAAS;+BACE,0BAA0B,EAAA,UAAA,EACxB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,WAAW;wBACX,iBAAiB;wBACjB,sBAAsB;wBACtB,wBAAwB;wBACxB;AACD,qBAAA,EAAA,QAAA,EAAA,0kHAAA,EAAA,MAAA,EAAA,CAAA,mHAAA,CAAA,EAAA;;;;;;;;MEeU,6BAA6B,CAAA;;AAEvB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,eAAe,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACjD,IAAA,WAAW,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC3C,IAAA,oBAAoB,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAC3D,IAAA,wBAAwB,GAAG,MAAM,CAAC,gCAAgC,CAAC;AACnE,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACxC,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACxC,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;;AAGtC,IAAA,YAAY;AACZ,IAAA,cAAc;AACd,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,UAAU,GAAG,MAAM,CAAgB,IAAI,sDAAC;;AAGxC,IAAA,QAAQ,GAAG,MAAM,CAAW,EAAE,oDAAC;AAC/B,IAAA,KAAK,GAAG,MAAM,CAAS,EAAE,iDAAC;AAC1B,IAAA,WAAW,GAAG,MAAM,CAAe,EAAE,uDAAC;AACtC,IAAA,cAAc,GAAG,MAAM,CAAkB,EAAE,0DAAC;AAC5C,IAAA,gBAAgB,GAAG,MAAM,CAAgB,IAAI,4DAAC;;AAG9C,IAAA,2BAA2B,GAAG,SAAS,CAA+B,6BAA6B,uEAAC;AACpG,IAAA,mCAAmC,GAAG,SAAS,CAA+B,qCAAqC,+EAAC;;AAGpH,IAAA,IAAI,SAAS,GAAA;QACX,IAAI,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,gBAAgB;QAC9C,IAAI,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,gBAAgB;AAC9C,QAAA,OAAO,kBAAkB;;AAG3B,IAAA,IAAI,gBAAgB,GAAA;QAClB,IAAI,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,OAAO;QACrC,IAAI,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,kBAAkB;AAChD,QAAA,OAAO,kBAAkB;;;IAI3B,oBAAoB,GAAG,MAAM,CAAmC;AAC9D,QAAA,EAAE,EAAE,gBAAgB;AACpB,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,MAAM,EAAE,WAAW;AACnB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,WAAW;AAChB,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,2BAA2B;AAChC,gBAAA,MAAM,EAAE,uBAAuB;AAC/B,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE;AACX;AACF,SAAA;AACD,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,sBAAsB;AACnC,YAAA,iBAAiB,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC;AAC3D,YAAA,UAAU,EAAE;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,SAAS,EAAE;AACZ,SAAA;AAED,QAAA,QAAQ,EAAE;AACR,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,UAAU,EAAE,eAAe;AAC3B,YAAA,SAAS,EAAE,6BAA6B;AACxC,YAAA,SAAS,EAAE;AACZ,SAAA;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE,0CAA0C;AACtD,QAAA,IAAI,EAAE;AACJ,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,UAAU,EAAE,cAAc;AAC1B,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,WAAW,EAAE,YAAY;AACzB,YAAA,cAAc,EAAE;AACjB;AACF,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGF,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAmD;QAC9E,MAAM,SAAS,GAAiD,EAAE;AAElE,QAAA,IAAI,IAAI,CAAC,2BAA2B,EAAE,EAAE;YACtC,SAAS,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC,2BAA2B,EAAG;;AAExE,QAAA,IAAI,IAAI,CAAC,mCAAmC,EAAE,EAAE;YAC9C,SAAS,CAAC,6BAA6B,CAAC,GAAG,IAAI,CAAC,mCAAmC,EAAG;;AAGxF,QAAA,OAAO,SAAS;AAClB,KAAC,6DAAC;IAEF,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC;QACtD,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,kBAAkB,EAAE;;IAG3B,WAAW,GAAA;AACT,QAAA,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC;;AAGpD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;;AAG1B;;AAEG;IACK,cAAc,GAAA;;QAEpB,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,GAAG;;QAGzD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AAChC,YAAA,iBAAiB,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AAC5C,YAAA,wBAAwB,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;YACnD,2BAA2B,EAAE,CAAC,eAAe,EAAE,UAAU,CAAC,QAAQ,CAAC;YACnE,gBAAgB,EAAE,CAAC,IAAI;AACxB,SAAA,CAAC;;QAGF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YAClC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;AAC7B,SAAA,CAAC;;;AAKJ;;AAEG;IACK,kBAAkB,GAAA;QACxB,OAAO,CAAC,GAAG,CAAC,kDAAkD,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAClF,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAG;AAClE,YAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC;AAEzC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;AACzB,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;AACnC,YAAA,MAAM,SAAS,GAAG,wBAAwB,CAAC,WAAW,CAAC;;AAGvD,YAAA,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU;YAEvC,IAAI,UAAU,EAAE;AACd,gBAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,UAAU,CAAC;AACjE,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;;AAGnC,gBAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC1B,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,oBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC;;AACtC,qBAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC7B,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC;;qBACnC;;AAEL,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9B,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC;;;iBAEvC;AACH,gBAAA,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC;AAChE,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;;AAE7B,SAAC,CAAC;;AAGJ;;AAEG;IACK,cAAc,GAAA;AACpB,QAAA,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC;;QAG3D,IAAI,CAAC,gBAAgB,EAAE;;QAGvB,IAAI,CAAC,oBAAoB,EAAE;;AAI7B;;AAEG;IACK,gBAAgB,GAAA;AACtB,QAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;AAE3C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC;YAC/C;;AAGF,QAAA,MAAM,WAAW,GAAqB;AACpC,YAAA,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe;SAC3C;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW;AACrC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,QAAQ,CAAC;gBACjD,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;;oBAEtC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,KAAK;AAC1C,wBAAA,GAAG,MAAM;wBACT,IAAI,EAAE,QAAQ,CAAC;AAChB,qBAAA,CAAC,CAAC;;AAGH,oBAAA,IAAI,CAAC,+BAA+B,CAAC,QAAQ,CAAC,IAAI,CAAC;;qBAC9C;AACL,oBAAA,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC;oBACjD,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,KAAK;AAC1C,wBAAA,GAAG,MAAM;AACT,wBAAA,IAAI,EAAE;AACP,qBAAA,CAAC,CAAC;;aAEN;AACD,YAAA,KAAK,EAAE,CAAC,KAAU,KAAI;AACpB,gBAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC;gBACvD,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,KAAK;AAC1C,oBAAA,GAAG,MAAM;AACT,oBAAA,IAAI,EAAE;AACP,iBAAA,CAAC,CAAC;;AAEN,SAAA,CAAC;;AAGN;;AAEG;IACK,oBAAoB,GAAA;AAC1B,QAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC;AAEhD,QAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE;AACzC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;;AAEtC,oBAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAC5C,IAAI,CAAC,UAAU,KAAK,aAAa,IAAI,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAC7F;oBAED,IAAI,cAAc,EAAE;AAClB,wBAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,cAAc,CAAC;wBACxD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,IAAI,IAAI,CAAC;wBACrD,IAAI,CAAC,eAAe,EAAE;;yBACjB;AACL,wBAAA,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC;AAC7C,wBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC;;;aAGzE;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC;AACvD,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC;;AAEpD,SAAA,CAAC;;AAGN;;AAEG;IACK,eAAe,GAAA;AACrB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACtC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,CAAC,IAAI,CAAC,2DAA2D,CAAC;YACzE;;AAGF,QAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,MAAM,CAAC;AAE1D,QAAA,MAAM,OAAO,GAA8B;AACzC,YAAA,cAAc,EAAE;SACjB;AAED,QAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,OAAO;AAC5C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACtC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,QAAQ,CAAC,IAAI,CAAC;;AAEnD,oBAAA,MAAM,WAAW,GAAiB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK;wBAC3D,GAAG,EAAE,IAAI,CAAC,GAAG;wBACb,UAAU,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,IAAI,SAAS;AAC5D,wBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;AACjC,wBAAA,iBAAiB,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;AACxC,wBAAA,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI;AACxC,qBAAA,CAAC,CAAC;AACH,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;;qBAC5B;AACL,oBAAA,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC;AAC/C,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;;aAE3B;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC;AAClD,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;;AAE3B,SAAA,CAAC;;AAIN;;AAEG;IACK,gBAAgB,CAAC,UAAkB,EAAE,UAAmB,EAAA;AAC9D,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QAEpB,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE;AAC5D,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,OAAO,QAAQ,KAAI;gBACvB,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;AACtC,oBAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc;;AAGjD,oBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;wBAC3B,iBAAiB,EAAE,YAAY,CAAC,iBAAiB;wBACjD,wBAAwB,EAAE,YAAY,CAAC,wBAAwB;wBAC/D,2BAA2B,EAAE,YAAY,CAAC,2BAA2B;wBACrE,gBAAgB,EAAE,YAAY,CAAC;AAChC,qBAAA,CAAC;;oBAGF,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,qBAAqB,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,MAAM,KAAI;wBACjG,OAAO;AACL,4BAAA,GAAG,MAAM;AACT,4BAAA,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,EAAE,GAAG;AACtD,4BAAA,iCAAiC,EAAE,MAAM,CAAC,iCAAiC,EAAE,GAAG;yBACjF;qBACF,CAAC,CAAC;AACH,oBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC;;AAGnC,oBAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC;;oBAGnC,IAAI,UAAU,EAAE;AACd,wBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;;AAG7B,oBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,qCAAqC,CAAC;AACvE,oBAAA,UAAU,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;;qBACxC;AACL,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC;AAChD,oBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,gCAAgC,CAAC;AAChE,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;;AAE1B,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC;AACvD,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kDAAkD,CAAC;AAClE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,kDAAkD,CAAC;AAClF,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;;AAE3B,SAAA,CAAC;;AAGN;;AAEG;AACK,IAAA,kBAAkB,CAAC,MAAuB,EAAA;QAChD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAc;QACtE,WAAW,CAAC,KAAK,EAAE;AAEnB,QAAA,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;YACrB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;AACxD,SAAC,CAAC;;AAGJ;;AAEG;AACK,IAAA,wBAAwB,CAAC,KAAqB,EAAA;AACpD,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACnB,YAAA,GAAG,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC;AACvB,YAAA,MAAM,EAAE,CAAC,KAAK,EAAE,oBAAoB,IAAI,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;YAChE,oBAAoB,EAAE,CAAC,KAAK,EAAE,oBAAoB,IAAI,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;YAC9E,iCAAiC,EAAE,CAAC,KAAK,EAAE,iCAAiC,IAAI,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACxG,YAAA,gBAAgB,EAAE,CAAC,KAAK,EAAE,gBAAgB,IAAI,IAAI;AACnD,SAAA,CAAC;;AAGJ;;AAEG;AACH,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAc;;AAG3D;;AAEG;IACH,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AAEvB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe;QACxC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC;;AAGnD;;AAEG;AACH,IAAA,eAAe,CAAC,KAAa,EAAA;QAC3B,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;AAEvB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe;AACxC,QAAA,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAG7B;;AAEG;AACH,IAAA,aAAa,CAAC,QAAgB,EAAA;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC;AAC5D,QAAA,OAAO,MAAM,EAAE,SAAS,IAAI,KAAK;;AAGnC;;AAEG;AACH,IAAA,WAAW,CAAC,MAAc,EAAA;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC;QACrD,OAAO,IAAI,EAAE,UAAU,IAAI,IAAI,EAAE,cAAc,IAAI,KAAK;;AAG1D;;AAEG;AACH,IAAA,iBAAiB,CAAC,YAAoB,EAAA;AACpC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,CAAC;AACvE,QAAA,OAAO,UAAU,EAAE,UAAU,IAAI,KAAK;;AAGxC;;AAEG;AACH,IAAA,kBAAkB,CAAC,aAAuB,EAAA;QACxC,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AAChD,YAAA,OAAO,gBAAgB;;QAGzB,MAAM,eAAe,GAAG;aACrB,GAAG,CAAC,EAAE,IAAG;AACR,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC;AAC7D,YAAA,OAAO,UAAU,EAAE,UAAU,IAAI,SAAS;AAC5C,SAAC;aACA,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC;AAErC,QAAA,OAAO,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,sBAAsB;;AAKzF;;AAEG;AACH,IAAA,aAAa,CAAC,KAAa,EAAA;;AAEzB,QAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,CAAC;;;AAIjD;;AAEG;AACH,IAAA,qBAAqB,CAAC,KAAa,EAAA;QACjC,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;QAEvB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,CAAC;QAC9C,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,KAAK;QAC5D,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,QAAQ,CAAC,CAAC,aAAa,CAAC;;AAG3D;;AAEG;AACH,IAAA,qBAAqB,CAAC,KAA+B,EAAA;AACnD,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,KAAK,CAAC;;AAGhD,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,CAAC,IAAI,CAAC;;;QAIhD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;YAChH,OAAO,CAAC,GAAG,CAAC,8DAA8D,EAAE,KAAK,CAAC,IAAI,CAAC;YACvF;;;;AAMJ;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACrB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,0BAA0B,CAAC,CAAC;YAClD;;QAEF,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC;AAC9C,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC7B,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,+CAA+C,CAAC;AAC/E,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;YACxB;;AAGF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;AAC5C,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK;;AAGhD,QAAA,MAAM,yBAAyB,GAAG,cAAc,CAAC;aAC9C,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,iCAAiC,CAAC;AAC/D,aAAA,GAAG,CAAC,CAAC,KAAU,MAAM;AACpB,YAAA,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,SAAS;YAC3B,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;AAChD,YAAA,iCAAiC,EAAE,KAAK,CAAC,iCAAiC;YAC1E,gBAAgB,EAAE,KAAK,CAAC;AACzB,SAAA,CAAC,CAAC;AAEL,QAAA,MAAM,OAAO,GAA+B;AAC1C,YAAA,cAAc,EAAE;AACd,gBAAA,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,SAAS;gBACnC,iBAAiB,EAAE,YAAY,CAAC,iBAAiB;gBACjD,wBAAwB,EAAE,YAAY,CAAC,wBAAwB;gBAC/D,2BAA2B,EAAE,YAAY,CAAC,2BAA2B;gBACrE,gBAAgB,EAAE,YAAY,CAAC;AAChC,aAAA;AACD,YAAA,qBAAqB,EAAE,yBAAyB;AAChD,YAAA,4BAA4B,EAAE,IAAI,CAAC,mBAAmB;SACvD;QAED,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,yBAAyB,CAAC,MAAM,EAAE,aAAa,CAAC;AAExF,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;;AAG5B;;AAEG;IACK,mBAAmB,GAAA;AACzB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK;AAChD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAE5C,QAAA,OAAO;aACJ,MAAM,CAAC,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAY,KAAK,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC;aACtF,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,GAAI;AACvB,aAAA,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC;;AAGrB;;AAEG;AACK,IAAA,YAAY,CAAC,OAAmC,EAAA;AACtD,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAEtB,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,OAAO,CAAC;QAEtE;AACG,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;AACrB,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,SAAS,GAAG,SAAS;oBACxD,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,mBAAA,EAAsB,MAAM,CAAA,cAAA,CAAgB,CAAC;AAC9E,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;oBACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,0BAA0B,CAAC,CAAC;;qBAC7C;oBACL,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,IAAI,2BAA2B,CAAC;AAChF,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;;AAE1B,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;AACjD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,6CAA6C,CAAC;AAC7E,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;AAGN;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;AACjD,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;AAC3B,gBAAA,KAAK,EAAE,iBAAiB;AACxB,gBAAA,OAAO,EAAE,kEAAkE;AAC3E,gBAAA,WAAW,EAAE,SAAS;AACtB,gBAAA,UAAU,EAAE,cAAc;AAC1B,gBAAA,IAAI,EAAE;AACP,aAAA,CAAC,CAAC,IAAI,CAAC,CAAC,SAAkB,KAAI;gBAC7B,IAAI,SAAS,EAAE;oBACb,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,0BAA0B,CAAC,CAAC;;AAEtD,aAAC,CAAC;;aACG;YACL,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,0BAA0B,CAAC,CAAC;;;AAItD;;AAEG;AACH,IAAA,0BAA0B,CAAC,MAAc,EAAE,YAAoB,EAAE,SAAc,EAAA;AAC7E,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACrB,YAAA,OAAO;;;QAIT,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC9C,YAAA,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC;YACpE;;;AAIF,QAAA,MAAM,OAAO,GAAG,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,CAAC;QAE7E,IAAI,OAAO,EAAE;;AAEX,YAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,YAAY,CAAC;;aAC/C;;AAEL,YAAA,IAAI,CAAC,4BAA4B,CAAC,MAAM,EAAE,YAAY,CAAC;;;AAIzD,QAAA,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE;AAC1C,QAAA,IAAI,CAAC,cAAc,CAAC,sBAAsB,EAAE;;AAG5C,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;;AAG1B;;AAEG;IACK,yBAAyB,CAAC,MAAc,EAAE,YAAoB,EAAA;;AAEpE,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,IAAG;AACtE,YAAA,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,KAAK;YAC9F,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,EAAE,KAAK;AAC/E,YAAA,OAAO,WAAW,KAAK,MAAM,IAAI,eAAe,KAAK,YAAY;AACnE,SAAC,CAAC;AAEF,QAAA,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;;AAExB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC;AACjD,gBAAA,oBAAoB,EAAE,MAAM;AAC5B,gBAAA,iCAAiC,EAAE,YAAY;AAC/C,gBAAA,gBAAgB,EAAE;AACnB,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;;;AAI3C;;AAEG;IACK,4BAA4B,CAAC,MAAc,EAAE,YAAoB,EAAA;AACvE,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,IAAG;AACtE,YAAA,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,KAAK;YAC9F,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,EAAE,KAAK;AAC/E,YAAA,OAAO,WAAW,KAAK,MAAM,IAAI,eAAe,KAAK,YAAY;AACnE,SAAC,CAAC;AAEF,QAAA,IAAI,aAAa,IAAI,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,aAAa,CAAC;;;AAIhD;;AAEG;IACH,oBAAoB,CAAC,MAAc,EAAE,YAAoB,EAAA;;QAEvD,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACjD,YAAA,OAAO,KAAK;;;AAId,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAG;AAC7D,YAAA,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,KAAK;YAC9F,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,EAAE,KAAK;AAC/E,YAAA,OAAO,WAAW,KAAK,MAAM,IAAI,eAAe,KAAK,YAAY;AACnE,SAAC,CAAC;QAEF,OAAO,CAAC,CAAC,SAAS;;AAGpB;;AAEG;AACH,IAAA,iBAAiB,CAAC,YAAoB,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,CAAC;;AAG7D;;AAEG;AACH,IAAA,6BAA6B,CAAC,MAAc,EAAA;AAC1C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAG;YAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK;YAChD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,KAAK;AAChE,YAAA,OAAO,WAAW,KAAK,MAAM,IAAI,aAAa,KAAK,MAAM;AAC3D,SAAC,CAAC;QAEF,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,KAAK,IAAI,EAAE;YAC7D,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM;;AAGzC,QAAA,OAAO,MAAM;;AAGf;;;AAGG;AACK,IAAA,+BAA+B,CAAC,SAAgB,EAAA;QACtD,OAAO,CAAC,GAAG,CAAC,4CAA4C,EAAE,SAAS,CAAC,MAAM,CAAC;AAC3E,QAAA,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC;;;;AAOzF;;AAEG;IACH,+BAA+B,GAAA;;QAE7B,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;;AAGjD;;AAEG;AACH,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC,+BAA+B,EAAE;;AAG1E;;AAEG;AACH,IAAA,4BAA4B,CAAC,YAAoB,EAAA;AAC/C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ;;AAGhD,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,IAAG;AAC/B,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,KAAK;YACzF,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,EAAE,KAAK;;AAG5E,YAAA,OAAO,MAAM,IAAI,YAAY,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAAC;AACjF,SAAC,CAAC;;AAGJ;;AAEG;AACK,IAAA,gBAAgB,CAAC,OAAe,EAAE,IAAA,GAAiD,MAAM,EAAA;QAC/F,QAAQ,IAAI;AACV,YAAA,KAAK,SAAS;AACZ,gBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC;gBACzC;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC;gBACvC;AACF,YAAA,KAAK,SAAS;AACZ,gBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC;gBACzC;AACF,YAAA;AACE,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;;;AAI1C,QAAA,UAAU,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;;AAG/C;;AAEG;IACK,mBAAmB,CAAC,MAAc,EAAE,YAAoB,EAAA;;;QAG9D,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC;QAC3F,OAAO,CAAC,EAAE,QAAQ,IAAK,QAAgB,CAAC,cAAc,KAAK,YAAY,CAAC;;uGAh2B/D,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,6YCvC1C,4qPA6Lc,EAAA,MAAA,EAAA,CAAA,0DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDvKV,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,8wCACnB,WAAW,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,EACX,sBAAsB,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,iBAAiB,+FACjB,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,IAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,KAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,qBAAqB,0UACrB,wBAAwB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FASf,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBArBzC,SAAS;+BACE,0BAA0B,EAAA,UAAA,EACxB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,WAAW;wBACX,sBAAsB;wBACtB,iBAAiB;wBACjB,kBAAkB;wBAClB,mBAAmB;wBACnB,qBAAqB;wBACrB;AACD,qBAAA,EAAA,QAAA,EAAA,4qPAAA,EAAA,MAAA,EAAA,CAAA,0DAAA,CAAA,EAAA;;;;;;;;AEyDH;AACA;AAEA;;AC3FA;;ACAA;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"cloud-ide-core.mjs","sources":["../../../projects/cloud-ide-core/src/lib/cloud-ide-core.routes.ts","../../../projects/cloud-ide-core/src/lib/cloud-ide-core.service.ts","../../../projects/cloud-ide-core/src/lib/cloud-ide-core.component.ts","../../../projects/cloud-ide-core/src/public-api.ts","../../../projects/cloud-ide-core/src/cloud-ide-core.ts"],"sourcesContent":["import { Route } from '@angular/router';\nimport { authGuard } from 'cloud-ide-auth';\n\nexport const coreRoutes: Route[] = [\n // {\n // path: 'menu-management',\n // loadComponent: () => import('./core/menu-management/components/menu-list/menu-list.component').then(c => c.MenuListComponent),\n // title: 'Menu Management',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_menu_list\"\n // }\n // }, \n // {\n // path: 'department',\n // loadComponent: () => import('./core/department-management/components/department-list/department-list.component').then(c => c.CideCoreDepartmentListComponent),\n // title: 'Department Management',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_department_list\"\n // }\n // },\n // {\n // path: 'designation',\n // loadComponent: () => import('./core/designation-management/components/designation-list/designation-list.component').then(c => c.CideCoreDesignationListComponent),\n // title: 'Designation Management',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_designation_list\"\n // }\n // },\n // {\n // path: 'grade-level',\n // loadComponent: () => import('./core/grade-level-management/components/grade-level-list/grade-level-list.component').then(c => c.CideCoreGradeLevelListComponent),\n // title: 'Grade Level Management',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_grade_level_list\"\n // }\n // },\n // {\n // path: 'page',\n // loadComponent: () => import('./core/page-management/components/page-list/page-list.component').then(c => c.CideCorePageListComponent),\n // title: 'Page Management',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_page_management\"\n // }\n // },\n // {\n // path: 'page-form',\n // loadComponent: () => import('./core/page-management/components/page-form/page-form.component').then(c => c.CideCorePageFormComponent),\n // title: 'Page Form',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_page_management\"\n // }\n // },\n // {\n // path: 'page-form/:query',\n // loadComponent: () => import('./core/page-management/components/page-form/page-form.component').then(c => c.CideCorePageFormComponent),\n // title: 'Page Form',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_page_management\"\n // }\n // },\n // {\n // path: 'page-theme',\n // loadComponent: () => import('./core/page-management/components/page-theme/page-theme.component').then(c => c.CideCorePageThemeComponent),\n // title: 'Page Theme Management',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_page_theme\"\n // }\n // },\n // {\n // path: 'page-theme/:query',\n // loadComponent: () => import('./core/page-management/components/page-theme/page-theme.component').then(c => c.CideCorePageThemeComponent),\n // title: 'Page Theme Management',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_page_theme\"\n // }\n // },\n // {\n // path: 'page-controls',\n // loadComponent: () => import('./core/page-management/components/page-controls/page-controls.component').then(c => c.CideCorePageControlsComponent),\n // title: 'Page Controls Management',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_page_controls\"\n // }\n // },\n // {\n // path: 'page-controls/:query',\n // loadComponent: () => import('./core/page-management/components/page-controls/page-controls.component').then(c => c.CideCorePageControlsComponent),\n // title: 'Page Controls Management',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_page_controls\"\n // }\n // },\n // {\n // path: 'general_master_entry',\n // loadComponent: () => import('./core/general-master-management/components/general-master/general-master.component').then(c => c.CideCoreGeneralMasterComponent),\n // title: 'General Master Entry',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_general_master\"\n // }\n // },\n // {\n // path: 'general_master_entry/:query',\n // loadComponent: () => import('./core/general-master-management/components/general-master/general-master.component').then(c => c.CideCoreGeneralMasterComponent),\n // title: 'General Master Entry',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_general_master\"\n // }\n // },\n // {\n // path: 'general_type_entry',\n // loadComponent: () => import('./core/general-master-management/components/general-master-type/general-master-type.component').then(c => c.CideCoreGeneralMasterTypeComponent),\n // title: 'General Type Entry',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_general_master_type\"\n // }\n // },\n // {\n // path: 'general_type_entry/:query',\n // loadComponent: () => import('./core/general-master-management/components/general-master-type/general-master-type.component').then(c => c.CideCoreGeneralMasterTypeComponent),\n // title: 'General Type Entry',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_general_master_type\"\n // }\n // },\n // User Management Routes\n // {\n // path: 'user-master',\n // loadComponent: () => import('./core/user-management/components/user-list/user-list.component').then(c => c.CideCoreUserListComponent),\n // title: 'User Management',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"auth_user_mst\"\n // }\n // },\n // {\n // path: 'user-master/create',\n // loadComponent: () => import('./core/user-management/components/user-create/user-create.component').then(c => c.CideCoreUserCreateComponent),\n // title: 'Create User',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_management_create\"\n // }\n // },\n // {\n // path: 'user-master/edit/:query',\n // loadComponent: () => import('./core/user-management/components/user-create/user-create.component').then(c => c.CideCoreUserCreateComponent),\n // title: 'Edit User',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_management_create\"\n // }\n // },\n // {\n // path: 'user-master/view/:query',\n // loadComponent: () => import('./core/user-management/components/user-create/user-create.component').then(c => c.CideCoreUserCreateComponent),\n // title: 'View User',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_management_create\"\n // }\n // },\n // {\n // path: \"entity-list\",\n // loadComponent: () => import('./core/entity-management/components/entity-list/entity-list.component').then(c => c.CideCoreEntityListComponent),\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"admin_entity_list\"\n // }\n // },\n // {\n // path: \"entity-create\",\n // loadComponent: () => import('./core/entity-management/components/entity-create/entity-create.component').then(c => c.CideCoreEntityCreateComponent),\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_entity_form\"\n // }\n // },\n // {\n // path: \"entity-create/:query\",\n // loadComponent: () => import('./core/entity-management/components/entity-create/entity-create.component').then(c => c.CideCoreEntityCreateComponent),\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_entity_form\"\n // }\n // },\n // {\n // path: \"org-structure\",\n // loadComponent: () => import('./core/entity-management/components/org-structure/org-structure.component').then(c => c.CideCoreOrgStructureComponent),\n // title: 'Organization Structure',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_org_structure\"\n // }\n // },\n // User Role Management Routes\n // {\n // path: 'user-role',\n // loadComponent: () => import('./core/user-role-management/components/user-role-list/user-role-list.component').then(c => c.CideCoreUserRoleListComponent),\n // title: 'User Role Management',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_role\"\n // }\n // },\n // {\n // path: 'user-role/create',\n // loadComponent: () => import('./core/user-role-management/components/user-role-form/user-role-form.component').then(c => c.CideCoreUserRoleFormComponent),\n // title: 'Create User Role',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_role\"\n // }\n // },\n // {\n // path: 'user-role/edit/:query',\n // loadComponent: () => import('./core/user-role-management/components/user-role-form/user-role-form.component').then(c => c.CideCoreUserRoleFormComponent),\n // title: 'Edit User Role',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_role\"\n // }\n // },\n // {\n // path: 'user-role/view/:query',\n // loadComponent: () => import('./core/user-role-management/components/user-role-form/user-role-form.component').then(c => c.CideCoreUserRoleFormComponent),\n // title: 'View User Role',\n // canActivate: [authGuard],\n // data: {\n // reuseTab: true,\n // sypg_page_code: \"core_user_role_view\"\n // }\n // }\n];\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CloudIdeCoreService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'cide-core',\r\n standalone: true,\r\n imports: [],\r\n template: `\r\n <p>\r\n cloud-ide-core works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class CloudIdeCoreComponent {\r\n\r\n}\r\n","/*\n * Public API Surface of cloud-ide-core\n */\nexport * from './lib/cloud-ide-core.routes';\nexport * from './lib/cloud-ide-core.service';\nexport * from './lib/cloud-ide-core.component';\n\n// // Menu Management Module\n// export * from './lib/core/menu-management';\n\n// // Department Management Module\n// export * from './lib/core/department-management';\n\n// // Designation Management Module\n// export * from './lib/core/designation-management';\n\n// // Grade Level Management Module\n// export * from './lib/core/grade-level-management';\n\n// // Page Management Components\n// export * from './lib/core/page-management';\n\n// // User Management Module\n// export * from './lib/core/user-management';\n\n// // User Role Management Module\n// export * from './lib/core/user-role-management';\n\n// // Entity Management Module\n// export * from './lib/core/entity-management';\n\n// // General Master Management Module\n// export * from './lib/core/general-master-management';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;AAGO,MAAM,UAAU,GAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;MC3QS,mBAAmB,CAAA;AAE9B,IAAA,WAAA,GAAA;uGAFW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA;;2FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCSY,qBAAqB,CAAA;uGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAPtB,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGU,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAXjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,UAAA,EACT,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EACD,CAAA;;;;AAIT,EAAA,CAAA,EAAA;;;ACVH;;AAEG;AAKH;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;;AChCA;;AAEG;;;;"}
|