@sunbird-cb/access-settings 0.0.1-ang-17-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.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sunbird-cb-access-settings.mjs","sources":["../../../../library/sunbird-cb/access-settings/src/lib/access-settings.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/components/snackbar/snackbar.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/components/snackbar/snackbar.component.html","../../../../library/sunbird-cb/access-settings/src/lib/access-settings.module.ts","../../../../library/sunbird-cb/access-settings/src/lib/_directives/drag-drop.directive.ts","../../../../library/sunbird-cb/access-settings/src/lib/_models/access-control.model.ts","../../../../library/sunbird-cb/access-settings/src/lib/_services/access-control.service.ts","../../../../library/sunbird-cb/access-settings/src/lib/_common/pagination/pagination.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/_common/pagination/pagination.component.html","../../../../library/sunbird-cb/access-settings/src/lib/components/list-table/list-table.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/components/list-table/list-table.component.html","../../../../library/sunbird-cb/access-settings/src/lib/components/bulk-upload-karmayogi/bulk-upload-karmayogi.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/components/bulk-upload-karmayogi/bulk-upload-karmayogi.component.html","../../../../library/sunbird-cb/access-settings/src/lib/_common/dialogs/invite-users/invite-users.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/_common/dialogs/invite-users/invite-users.component.html","../../../../library/sunbird-cb/access-settings/src/lib/_constants/app.constants.ts","../../../../library/sunbird-cb/access-settings/src/lib/_services/cadre-mapping.service.ts","../../../../library/sunbird-cb/access-settings/src/lib/_common/dialogs/entity-selections/entity-selections.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/_common/dialogs/entity-selections/entity-selections.component.html","../../../../library/sunbird-cb/access-settings/src/lib/_common/dialogs/confirm-dialog/confirm-dialog.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/_common/dialogs/confirm-dialog/confirm-dialog.component.html","../../../../library/sunbird-cb/access-settings/src/lib/_common/dialogs/access-control-guide/access-control-guide.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/_common/dialogs/access-control-guide/access-control-guide.component.html","../../../../library/sunbird-cb/access-settings/src/lib/_common/access-control/access-control.component.ts","../../../../library/sunbird-cb/access-settings/src/lib/_common/access-control/access-control.component.html","../../../../library/sunbird-cb/access-settings/src/lib/_common/access-control/access-control.module.ts","../../../../library/sunbird-cb/access-settings/src/public-api.ts","../../../../library/sunbird-cb/access-settings/src/sunbird-cb-access-settings.ts"],"sourcesContent":["import { Component, OnInit } from \"@angular/core\";\n\n@Component({\n selector: \"sb-uic-access-settings\",\n template: ` <p>access settings works!</p> `,\n styles: [\n `\n ::ng-deep .mdc-tooltip {\n --mat-tooltip-container-color: #616161;\n --mat-tooltip-supporting-text-color: #ffffff;\n --mat-tooltip-container-shape: 4px;\n --mat-tooltip-container-size: 340px;\n --mat-tooltip-supporting-text-padding: 8px;\n }\n `\n ],\n standalone: false\n})\nexport class AccessSettingsComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","import { ChangeDetectionStrategy, Component, inject } from \"@angular/core\";\nimport { MAT_SNACK_BAR_DATA, MatSnackBarRef } from \"@angular/material/snack-bar\";\n\n@Component({\n selector: \"sb-uic-snackbar\",\n templateUrl: \"./snackbar.component.html\",\n styleUrls: [\"./snackbar.component.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class SnackbarComponent {\n public readonly data = inject<{ message: string; type: \"success | error\" }>(MAT_SNACK_BAR_DATA);\n\n constructor(public snackBarRef: MatSnackBarRef<SnackbarComponent>) {}\n}\n","<div class=\"snackbar-wrapper\">\n <div class=\"flex items-center justify-between\">\n <div class=\"message flex items-center gap-4\">\n <ng-container *ngIf=\"data?.type === 'success'\">\n <mat-icon class=\"text-white\">check</mat-icon>\n </ng-container>\n\n <ng-container *ngIf=\"data?.type === 'error'\">\n <img src=\"/assets/icons/error-icon.svg\" alt=\"error\" width=\"24\" height=\"24\" style=\"filter: brightness(0) invert(1)\" />\n </ng-container>\n\n <span class=\"text-white\">{{ data?.message }}</span>\n </div>\n\n <div class=\"close\">\n <mat-icon class=\"cursor-pointer text-white\" (click)=\"snackBarRef.dismiss()\"> close </mat-icon>\n </div>\n </div>\n</div>\n","import { NgModule } from \"@angular/core\";\nimport { AccessSettingsComponent } from \"./access-settings.component\";\nimport { SnackbarComponent } from \"./components/snackbar/snackbar.component\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { CommonModule } from \"@angular/common\";\n@NgModule({\n declarations: [AccessSettingsComponent, SnackbarComponent],\n imports: [MatIconModule, CommonModule],\n exports: [AccessSettingsComponent]\n})\nexport class AccessSettingsModule {}\nexport * from \"./access-settings.component\";\n","import {\n Directive,\n Output,\n EventEmitter,\n HostListener,\n HostBinding,\n} from \"@angular/core\";\n\n@Directive({\n selector: \"[wsAuthDragDrop]\",\n standalone: false\n})\nexport class DragDropDirective {\n @Output() fileDropped = new EventEmitter<any>();\n @HostBinding(\"style.opacity\") public opacity = \"1\";\n\n // Dragover listener\n @HostListener(\"dragover\", [\"$event\"]) onDragOver(evt: Event) {\n evt.preventDefault();\n evt.stopPropagation();\n this.opacity = \"0.4\";\n }\n // Dragleave listener\n @HostListener(\"dragleave\", [\"$event\"]) public onDragLeave(evt: Event) {\n evt.preventDefault();\n evt.stopPropagation();\n this.opacity = \"1.0\";\n }\n // Drop listener\n @HostListener(\"drop\", [\"$event\"]) public ondrop(evt: any) {\n evt.preventDefault();\n evt.stopPropagation();\n const files = evt.dataTransfer.files[0];\n this.opacity = \"1.0\";\n\n if (files) {\n this.fileDropped.emit(files);\n }\n }\n}\n","export namespace NsAccessControlConfig {\n export interface IAccessControlConfig {\n accessControlCriteriaSelection: IAccessControlCriteriaSelection;\n usersTableConfig: ITableConfig;\n bulkUploadKarmayogi: IBulkUploadKarmayogi;\n accessControlGuide: IAccessControlGuide;\n visiblilityOnOff: IVisiblilityOnOff;\n userConfig: { [key: string]: any; userRoles: any; org?: any };\n content: any;\n application: string;\n mdoContent: any\n }\n export interface IAccessControlCriteriaSelection {\n optionsEntity: IOptionsEntity[];\n optionsConditions: IOptionsCondition[];\n organizationRadioSelection: ISelectionOption[];\n designationRadioSelection: ISelectionOption[];\n servicesRadioSelection: ISelectionOption[];\n cadreRadioSelection: ISelectionOption[];\n batchRadioSelection: ISelectionOption[];\n groupsOptions: string[];\n verificationStatus: ISelectionOption[];\n accessTypes: { name: string; value: string; tooltip: string; disabled: boolean }[];\n readOnly: boolean;\n canShowAccessTypeRadio: boolean;\n shouldShowVisibilityToggle: boolean;\n allowCustomsField: boolean;\n centralDeputation?: ISelectionOption[];\n paginationLimit: number\n }\n\n export interface IOptionsEntity {\n value: string;\n label: string;\n disabled: boolean;\n isCustomField?: boolean;\n }\n\n export interface IOptionsCondition {\n value: string;\n label: string;\n }\n\n export interface ITableConfig {\n allLearners: ITableParameters;\n selectedUsers: ITableParameters;\n bulkUploadTable: ITableParameters;\n }\n\n export interface ITableParameters {\n displayedColumns: string[];\n type: string;\n initialPaginationSize: number;\n initialPaginationSizeOptions: number[];\n canShowPagination: boolean;\n canShowMasterSelect: boolean;\n canShowRefreshBtn: boolean;\n canShowDeleteBtn: boolean;\n canShowSelectedItems: boolean;\n canSortColumn: boolean;\n }\n export type IUserTableType = \"allLearners\" | \"selectedUsers\" | \"bulkUploadTable\";\n\n export type IManageSelectionType = \"add_karmayogis\" | \"bulk_upload_karmayogis\";\n\n export interface IBulkUploadKarmayogi {\n uploadInstructions: string[];\n downloadSampleFile: {\n path: string;\n fileName: string;\n };\n bulkUploadTable: ITableParameters;\n }\n\n export enum SelectionType {\n Users = \"user\",\n Organizations = \"rootOrgId\",\n Group = \"group\",\n Designation = \"designation\",\n VerificationStatus = \"profilestatus\",\n Cadre = \"Cadre\",\n Service = \"service\",\n Batch = \"batch\",\n CustomField = \"customeField\",\n CentralDeputation = \"isOnCentralDeputation\",\n }\n\n export interface ISelectionOption {\n value: string;\n label: string;\n }\n\n export enum IActions {\n Confirm = \"confirm\",\n Reject = \"reject\",\n }\n\n export enum IAccessTypes {\n Public = \"public\",\n Custom = \"custom\",\n }\n\n export type ITypeAccessType = \"public\" | \"custom\";\n export interface IAccessControlGuide {\n summaryText: string;\n canShowSummaryTab: boolean;\n canShowTranscriptTab: boolean;\n instructionVideoPath: string;\n }\n\n export enum IAccessSetting {\n ALL_USERS = \"allUsers\",\n MDO_SPECIFIC = \"mdoSpecific\",\n CUSTOME_USER = \"customeUser\",\n }\n\n export enum Application {\n MDO = \"mdo_portal\",\n Creation_Portal = \"cbp_portal\",\n }\n}\n\nexport interface IUserGroupRequest {\n contentId: string;\n accessControl: {\n version: number;\n userGroups: {\n userGroupId: string;\n userGroupName: string;\n userGroupCriteriaList: {\n userGroupKey: string;\n userGroupValue: string[];\n }[];\n }[];\n };\n}\n\nexport interface IVisiblilityOnOff {\n label: string;\n disabled: boolean;\n on: string;\n off: string;\n default: string;\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { Injectable, signal, WritableSignal } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\nimport { IUserGroupRequest, NsAccessControlConfig } from \"../_models/access-control.model\";\nimport { toNumber } from \"lodash\";\n\nconst PAGINATION_LIMIT = 100;\nconst ENDPOINTS = {\n SEARCH_USER_WITH_ADMIN: (query: string) => `/apis/proxies/v8/user/v1/autocomplete/${query}`,\n SEARCH_USER: `/apis/proxies/v8/user/v1/admin/search`,\n SEARCH_ORG: \"/apis/proxies/v8/org/v1/admin/search\",\n VALIDATE_USER: \"/apis/proxies/v8/user/v1/search\",\n GROUPS: \"/apis/proxies/v8/user/v1/groups\",\n CADRE_CONFIG: \"/apis/proxies/v8/data/v2/system/settings/get/cadreConfig\",\n DESIGNATION_LIST: \"/apis/proxies/v8/designation/search\",\n SEARCH_V4: \"/apis/proxies/v8/sunbirdigot/v4/search\",\n CREATE_USERGROUPS_CONTROL: \"/apis/proxies/v8/accessSettings/v1/upsert\",\n GET_ACCESS_CONTROL: (id: string) => `/apis/proxies/v8/accessSettings/read/${id}`,\n ACTION_CONTENT_V3: `apis/proxies/v8/action/content/v3/`,\n PRIVATE_CONTENT_V4: `apis/proxies/v8/private/content/v4/`,\n\n CUSTOMES_FIELD_SEARCH: \"apis/proxies/v8/customFields/v1/search\",\n};\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class AccessControlService {\n accessControlConfig: WritableSignal<NsAccessControlConfig.IAccessControlConfig>;\n holdServiceCadrebatch: WritableSignal<{\n service: { id: string; name: string }[];\n batch: number[];\n cadre: { id: string; name: string }[];\n }>;\n customesFieldData: WritableSignal<any[]> = signal([]);\n constructor(private readonly http: HttpClient) {\n this.accessControlConfig = signal<NsAccessControlConfig.IAccessControlConfig>(null);\n this.holdServiceCadrebatch = signal({\n service: [],\n batch: [],\n cadre: [],\n });\n }\n\n fetchUserListWithAdmin(queryString: string): Observable<any> {\n return this.http.get<any>(ENDPOINTS.SEARCH_USER_WITH_ADMIN(queryString));\n }\n\n fetchUserList(query: string, pagination: { limit: number; offset: number }, userIds?: string[], filters?: any, sorting?: any): Observable<any> {\n let request: any = {\n filters: {\n status: 1,\n },\n limit: pagination.limit || 5,\n offset: pagination.offset || 0,\n query: query,\n sort_by: {},\n fields: [\"userId\", \"firstName\", \"maskedEmail\", \"rootOrgName\", \"phone\"],\n };\n if (userIds?.length) {\n request.filters = { ...request.filters, userId: userIds };\n }\n if (filters) {\n request.filters = { ...request.filters, ...filters };\n }\n if (sorting) {\n request.sort_by = sorting;\n }\n return this.http.post<any>(ENDPOINTS.SEARCH_USER, { request: request });\n }\n\n fetchOrgList(query: string, pagination: { limit: number; offset: number }, selectedData?: string[], characterSearch?: string): Observable<any> {\n let request: any = {\n request: {\n filters: {\n status: 1,\n isMdo: true,\n },\n // sort_by: {\n // channel: \"asc\", \n // },\n fields: [\"channel\", \"identifier\", \"iscca\"],\n query: query,\n limit: pagination.limit,\n offset: pagination.offset,\n },\n };\n if (selectedData?.length) {\n request.request.filters.identifier = selectedData;\n characterSearch = \"\";\n }\n\n if (characterSearch && characterSearch !== '#' && !query) {\n request.request.filters.channel = { startsWith: characterSearch };\n }\n return this.http.post<any>(ENDPOINTS.SEARCH_ORG, request);\n }\n\n validateUser(request: any): Observable<any> {\n return this.http.post<any>(ENDPOINTS.VALIDATE_USER, request);\n }\n\n fetchGroupsList(): Observable<any> {\n return this.http.get<any>(ENDPOINTS.GROUPS);\n }\n\n fetchCadreConfig(): Promise<any> {\n return this.http.get<any>(ENDPOINTS.CADRE_CONFIG).toPromise();\n }\n\n fetchDesignation(query: string, pagination: { pageSize: number; pageNumber: number }, selectedData?: string[], characterSearch?: string): Observable<any> {\n let payload: any = {\n filterCriteriaMap: {\n status: \"Active\",\n },\n requestedFields: [\"designation\", \"id\"],\n pageSize: pagination.pageSize || this.accessControlConfig()?.accessControlCriteriaSelection?.paginationLimit || PAGINATION_LIMIT,\n pageNumber: pagination.pageNumber || 0,\n // orderDirection: \"ASC\",\n };\n if (selectedData?.length) {\n payload.filterCriteriaMap.designation = selectedData;\n characterSearch = \"\";\n }\n if (query) {\n payload.searchString = query;\n }\n if (characterSearch && characterSearch !== '#' && !query) {\n payload.startsWith = characterSearch;\n }\n if (!query) {\n payload.orderBy = \"designation\";\n }\n return this.http.post<any>(ENDPOINTS.DESIGNATION_LIST, payload);\n }\n\n fetchDesignationsWithOrg(paginationOffset: number, categories: string[], query: string, selectedData?: string[], characterSearch?: string): Observable<any> {\n let payload: any = {\n request: {\n filters: {\n status: \"Live\",\n category: \"designation\",\n categories: categories,\n objectType: \"Term\",\n },\n fields: [\"identifier\", \"name\"],\n query: query,\n sort_by: { name: \"asc\" },\n facets: [],\n limit: this.accessControlConfig()?.accessControlCriteriaSelection?.paginationLimit || PAGINATION_LIMIT,\n offset: paginationOffset,\n },\n };\n if (selectedData?.length) {\n payload.request.filters.name = selectedData;\n }\n if (characterSearch && characterSearch !== '#' && !query) {\n if (!payload.request.filters.name || typeof payload.request.filters.name !== \"object\") {\n payload.request.filters.name = {};\n }\n payload.request.filters.name.startsWith = characterSearch;\n }\n return this.http.post<any>(ENDPOINTS.SEARCH_V4, payload);\n }\n\n applyUserGroupAccessControl(request: IUserGroupRequest): Observable<any> {\n return this.http.put<any>(ENDPOINTS.CREATE_USERGROUPS_CONTROL, request);\n }\n\n fetchUserGroupAccessControl(id: string): Observable<any> {\n return this.http.get<any>(ENDPOINTS.GET_ACCESS_CONTROL(id));\n }\n\n updateContentV3(meta: any, id: string): Observable<any> {\n return this.http.patch<any>(`${ENDPOINTS.ACTION_CONTENT_V3}update/${id}`, meta);\n }\n\n updateContentV4(meta: any, id: string): Observable<any> {\n return this.http.patch<any>(`${ENDPOINTS.PRIVATE_CONTENT_V4}update/${id}`, meta);\n }\n\n downloadFile(data: any, filename = \"data\") {\n const csvData = this.convertToCSV(data, [\"email\", \"status\", \"mobile\", \"message\"]);\n const blob = new Blob([`\\ufeff${csvData}`], { type: \"text/csv;charset=utf-8;\" });\n const dwldLink = document.createElement(\"a\");\n const url = URL.createObjectURL(blob);\n const isSafariBrowser = navigator.userAgent.indexOf(\"Safari\") !== -1 && navigator.userAgent.indexOf(\"Chrome\") === -1;\n if (isSafariBrowser) {\n // if Safari open in new window to save file with random filename.\n dwldLink.setAttribute(\"target\", \"_blank\");\n }\n dwldLink.setAttribute(\"href\", url);\n dwldLink.setAttribute(\"download\", `${filename}.csv`);\n dwldLink.style.visibility = \"hidden\";\n document.body.appendChild(dwldLink);\n dwldLink.click();\n document.body.removeChild(dwldLink);\n }\n\n convertToCSV(objArray: any, headerList: any) {\n const array = typeof objArray !== \"object\" ? JSON.parse(objArray) : objArray;\n let str = \"\";\n let row = \"S.No,\";\n\n for (const index in headerList) {\n if (headerList[index]) {\n row += `${headerList[index]} ,`;\n }\n }\n row = row.slice(0, -1);\n str += `${row}\\r\\n`;\n // for (let i = 0; i < array.length; i += 1) {\n for (const iIndex in array) {\n if (array[iIndex]) {\n let line = `${toNumber(iIndex) + 1} `;\n for (const index in headerList) {\n if (headerList[index]) {\n const head = headerList[index];\n\n line += `, ${array[iIndex][head]}`;\n }\n }\n str += `${line}\\r\\n`;\n }\n }\n return str;\n }\n\n createRequestContent(apiResponse: any, accessSettingsEnabled: boolean) {\n return {\n request: {\n content: {\n versionKey: apiResponse.versionKey || \"\",\n accessSettingsEnabled: accessSettingsEnabled || false,\n },\n },\n };\n }\n\n createRequesForMDOContent(apiResponse: any, accessSettingsEnabled: boolean, secureSettings: any) {\n return {\n request: {\n content: {\n versionKey: apiResponse.versionKey || \"\",\n accessSettingsEnabled: accessSettingsEnabled || false,\n secureSettings: secureSettings || null,\n },\n },\n };\n }\n\n fetchCustomsField(filterCriteria: any): Observable<any> {\n const requestPayload = {\n filterCriteriaMap: filterCriteria,\n requestedFields: [\"name\", \"isActive\", \"createdBy\", \"createdOn\", \"isEnabled\", \"isMandatory\", \"customFieldData\", \"originalCustomFieldData\", \"attributeName\", \"type\", \"reversedOrderCustomFieldData\"],\n pageNumber: 0,\n pageSize: this.accessControlConfig()?.accessControlCriteriaSelection?.paginationLimit || PAGINATION_LIMIT,\n orderDirection: \"DESC\",\n orderBy: \"createdOn\",\n facets: [],\n };\n return this.http.post<any>(ENDPOINTS.CUSTOMES_FIELD_SEARCH, requestPayload);\n }\n\n enableDeputation(value: boolean) {\n const config = this.accessControlConfig();\n if (config) {\n const centralDeputationOption = { disabled: false, value: NsAccessControlConfig.SelectionType.CentralDeputation, label: \"Central Deputation\" };\n const centralDeputationCriteria = [\n { value: \"yes\", label: \"Yes\" },\n { value: \"no\", label: \"No\" },\n ];\n // Add if true, remove if false\n if (value) {\n // Add to optionsEntity if not present\n if (!config.accessControlCriteriaSelection.optionsEntity.some((o: any) => o.value === NsAccessControlConfig.SelectionType.CentralDeputation)) {\n config.accessControlCriteriaSelection.optionsEntity.push(centralDeputationOption);\n }\n // Add to accessControlCriteriaSelection if not present\n if (!config.accessControlCriteriaSelection.centralDeputation) {\n config.accessControlCriteriaSelection.centralDeputation = centralDeputationCriteria;\n }\n } else {\n // Remove from optionsEntity\n config.accessControlCriteriaSelection.optionsEntity = config.accessControlCriteriaSelection.optionsEntity.filter((o: any) => o.value !== NsAccessControlConfig.SelectionType.CentralDeputation);\n // Remove from accessControlCriteriaSelection\n if (config.accessControlCriteriaSelection.centralDeputation) {\n delete config.accessControlCriteriaSelection.centralDeputation;\n }\n }\n // Update Signal Value\n this.accessControlConfig.set({ ...config });\n }\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from \"@angular/core\";\nimport { PageChangeEmitter } from \"../../_models/pagination.model\";\n@Component({\n selector: \"sb-uic-pagination\",\n templateUrl: \"./pagination.component.html\",\n styleUrls: [\"./pagination.component.scss\"],\n standalone: false\n})\nexport class PaginationComponent implements OnInit, OnChanges {\n private _currentPage: number = 1;\n\n @Input() defaultPaginationSize: number = 10;\n @Input() defaultPaginationSizeOptions: number[] = [];\n @Input() totalItemsCount: number = 0;\n @Input()\n set currentPage(value: number) {\n if (this._currentPage !== value) {\n this._currentPage = value;\n this.paginationInListing();\n }\n }\n get currentPage(): number {\n return this._currentPage;\n }\n\n @Output() pageChange: EventEmitter<PageChangeEmitter> = new EventEmitter();\n\n pagination: any = [];\n rangeWithDots: any;\n showingArray: any[] = [];\n lastPage = 0;\n firstPage = 0;\n previousPage = 0;\n\n ngOnInit(): void {\n this.paginationInListing();\n }\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes.totalItemsCount &&\n changes.totalItemsCount.previousValue &&\n changes.totalItemsCount.currentValue !==\n changes.totalItemsCount.previousValue\n ) {\n this.paginationInListing();\n }\n\n if (changes?.currentPage) {\n this.currentPage = changes.currentPage.currentValue;\n this.previousPage = changes.currentPage.previousValue || 0;\n this.paginationInListing();\n }\n }\n\n paginationInListing() {\n let lower = 0;\n let upper = 0;\n let limit = this.defaultPaginationSize;\n let items = this.totalItemsCount;\n this.showingArray = [];\n\n for (let i = 0; i < items; i++) {\n if (upper !== items && upper < items) {\n lower = upper;\n if (upper != items && (upper = lower + limit) <= items) {\n upper = lower + limit;\n } else {\n upper = items;\n }\n this.showingArray.push([lower, upper]);\n }\n }\n\n let dividedPagination = Math.ceil(this.totalItemsCount / limit);\n let paginationLength = this.paginationDup(\n this.currentPage,\n dividedPagination\n );\n\n let currentIndex = this.showingArray[this.currentPage - 1];\n let lowerPagination = this.totalItemsCount ? currentIndex[0] + 1 : \"\";\n let upperPagination = this.totalItemsCount ? currentIndex[1] : \"\";\n\n this.lastPage = paginationLength[paginationLength.length - 1];\n this.firstPage = paginationLength[0];\n\n this.pagination = {\n dividedPagination: dividedPagination,\n paginationLength: paginationLength,\n lower: lowerPagination,\n upper: upperPagination,\n };\n }\n\n paginationDup(c: any, m: any) {\n let current = c;\n let last = m;\n let delta = 5;\n let left = current - delta;\n let right = current + delta + 1;\n let range: any = [];\n let l;\n this.rangeWithDots = [];\n\n for (let i = 1; i <= last; i++) {\n if (i == 1 || i == last || (i >= left && i < right)) {\n range.push(i);\n }\n }\n\n for (let i of range) {\n if (l) {\n if (i - l === 2) {\n this.rangeWithDots.push(l + 1);\n } else if (i - l !== 1) {\n this.rangeWithDots.push(\"...\");\n }\n }\n this.rangeWithDots.push(i);\n l = i;\n }\n return this.rangeWithDots;\n }\n\n goToPage(page: number) {\n this.currentPage = page;\n this.pageChange.emit({\n currentPage: this.currentPage,\n previousPage: this.previousPage,\n limit: this.defaultPaginationSize,\n });\n this.paginationInListing();\n }\n\n // TODO: May need to implement in future\n navigateToLastPage(page: number) {\n if (page != this.currentPage) {\n this.goToPage(page);\n }\n }\n\n // TODO: May need to implement in future\n navigateToFirstPage(page: number) {\n if (page != this.currentPage) {\n this.goToPage(page);\n }\n }\n\n navigateToNextPage(page: number) {\n if (\n page <=\n (this.pagination.paginationLength &&\n this.pagination.paginationLength[\n this.pagination.paginationLength.length - 1\n ])\n ) {\n this.currentPage = this.currentPage + 1;\n this.previousPage = page;\n this.goToPage(this.currentPage);\n }\n }\n\n navigateToPrevPage(page: number) {\n if (\n page <=\n (this.pagination.paginationLength &&\n this.pagination.paginationLength[\n this.pagination.paginationLength.length - 1\n ])\n ) {\n this.currentPage = this.currentPage - 1;\n this.previousPage = page;\n this.goToPage(this.currentPage);\n }\n }\n\n onChangePageSize(event: any) {\n this.defaultPaginationSize = event.value;\n this.currentPage = 1;\n this.previousPage = 0;\n this.paginationInListing();\n this.pageChange.emit({\n currentPage: this.currentPage,\n previousPage: this.previousPage,\n limit: this.defaultPaginationSize,\n });\n }\n}\n","<div class=\"ws-pagination-wrapper px-4 mt-3\">\n <div class=\"pagination-size-select mat-full-radius-select flex items-center gap-2\">\n <span class=\"text-xs font-normal hidden md:block\">Show Entries</span>\n <mat-form-field appearance=\"outline\">\n <mat-select [(value)]=\"defaultPaginationSize\" (selectionChange)=\"onChangePageSize($event)\">\n <ng-container *ngFor=\"let option of defaultPaginationSizeOptions\">\n <mat-option [value]=\"option\">{{option}}</mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n <ul class=\"pagination\">\n <div class=\"pagination-listing flex items-center\">\n <ng-container\n *ngFor=\"let count of pagination?.paginationLength; let last = last; let first = first; let i = index\">\n <li class=\"page-item\" *ngIf=\"first\" (click)=\"navigateToPrevPage(currentPage)\"\n [ngClass]=\"{disabled: currentPage === firstPage}\">\n <a class=\"page-link\" aria-label=\"Previous\">\n <span aria-hidden=\"true\"><mat-icon>keyboard_arrow_left</mat-icon></span>\n </a>\n </li>\n <li class=\"page-item flex items-center justify-center\" [ngClass]=\"count == currentPage ? 'active' : '' \"\n (click)=\"goToPage(count)\">\n <a class=\"page-link\">{{count}}</a>\n </li>\n <li class=\"page-item\" *ngIf=\"last\" (click)=\"navigateToNextPage(currentPage)\"\n [ngClass]=\"{disabled: currentPage === lastPage}\">\n <a class=\" page-link\" aria-label=\"Next\">\n <span aria-hidden=\"true\"><mat-icon>keyboard_arrow_right</mat-icon></span>\n </a>\n </li>\n\n </ng-container>\n </div>\n </ul>\n</div>","import { SelectionModel } from \"@angular/cdk/collections\";\nimport { AfterViewInit, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from \"@angular/core\";\nimport { MatTableDataSource } from \"@angular/material/table\";\nimport { PageChangeEmitter } from \"../../_models/pagination.model\";\nimport { MatSort, Sort } from \"@angular/material/sort\";\nimport { LiveAnnouncer } from \"@angular/cdk/a11y\";\nimport * as _ from \"lodash\";\n\n@Component({\n selector: \"sb-uic-list-table\",\n templateUrl: \"./list-table.component.html\",\n styleUrls: [\"./list-table.component.scss\"],\n standalone: false\n})\nexport class ListTableComponent implements OnInit, OnChanges, AfterViewInit {\n @Input() data: any[] = [];\n @Input() count: number = 0;\n @Input() initialPaginationSize: number = 5;\n @Input() initialPaginationSizeOptions: number[] = [5, 10, 25, 100];\n @Input() tableConfig: any;\n @Input() selected: any;\n @Input() bulkUploadEntriesCount: any;\n @Input() currentPage: number = 1;\n @Input() isDisabled: boolean = false;\n\n @Output() selectedDataChange: EventEmitter<any> = new EventEmitter();\n @Output() pageChange: EventEmitter<PageChangeEmitter> = new EventEmitter();\n @Output() removeSelectedData: EventEmitter<any> = new EventEmitter();\n @Output() sortChange: EventEmitter<any> = new EventEmitter();\n\n @ViewChild(MatSort) sort: MatSort;\n\n dataSource = new MatTableDataSource<any>(this.data);\n selection = new SelectionModel<any>(true, []);\n selectedTablerow: any[] = [];\n\n constructor(private _liveAnnouncer: LiveAnnouncer) {}\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n // Handle data input change\n if (changes[\"data\"]?.currentValue?.length) {\n const mappedUsers = changes[\"data\"].currentValue.map((user: any) => ({\n firstName: user?.firstName || user?.firstname || user?.fullName || \"\",\n mobile: user?.mobile || user?.phone || \"\",\n email: user?.email || user?.maskedEmail || \"\",\n ministry: user?.ministry || user?.rootOrgName || \"\",\n invited_on: user?.invited_on || \"\",\n status: user?.status || \"\",\n userId: user?.userId || user?.id || \"\"\n }));\n this.data = mappedUsers;\n this.dataSource = new MatTableDataSource<any>(mappedUsers);\n this.dataSource.sort = this.sort;\n }\n\n if (changes[\"count\"]?.currentValue !== undefined) {\n this.count = changes[\"count\"].currentValue;\n }\n\n if (changes[\"selected\"]?.currentValue) {\n this.selection.clear();\n\n if (changes[\"selected\"].currentValue.length > 0) {\n this.dataSource.data.forEach(row => {\n if (changes[\"selected\"].currentValue.some((sel: any) => sel.userId === row.userId)) {\n this.selection.select(row);\n }\n });\n }\n\n this.selectedTablerow = changes[\"selected\"]?.currentValue || [];\n }\n\n if (changes[\"currentPage\"]?.currentValue) {\n this.currentPage = changes[\"currentPage\"]?.currentValue;\n }\n }\n\n ngAfterViewInit() {\n if (this.tableConfig?.canSortColumn) {\n this.dataSource.sort = this.sort;\n }\n }\n\n setPaginatedUsers(page: number) {\n const startIndex = (page - 1) * this.initialPaginationSize;\n const endIndex = startIndex + this.initialPaginationSize;\n const paginatedUsers = this.data.slice(startIndex, endIndex);\n this.dataSource = new MatTableDataSource<any>(paginatedUsers);\n this.dataSource.sort = this.sort;\n }\n\n isAllSelected() {\n const numSelected = this.selection.selected.length;\n const numRows = this.dataSource.data.length;\n return numSelected === numRows;\n }\n\n masterToggle() {\n const isAll = this.isAllSelected();\n if (isAll) {\n const previouslySelected = this.dataSource.data.filter(row => this.selectedTablerow.some(sel => sel.userId === row.userId));\n this.dataSource.data.forEach(row => this.selection.deselect(row));\n this.selectedTablerow = this.selectedTablerow.filter(sel => !this.dataSource.data.some(row => row.userId === sel.userId));\n this.selectedDataChange.emit({\n selectedRows: this.selectedTablerow,\n toggledRows: previouslySelected,\n action: \"unselectedAll\"\n });\n } else {\n const newlySelected = this.dataSource.data.filter(row => !this.selectedTablerow.some(sel => sel.userId === row.userId));\n this.dataSource.data.forEach(row => this.selection.select(row));\n this.selectedTablerow = [...this.selectedTablerow, ...newlySelected];\n this.selectedDataChange.emit({\n selectedRows: this.selectedTablerow,\n toggledRows: newlySelected,\n action: \"selectedAll\"\n });\n }\n }\n\n toggleSelection(row: any): void {\n const rowId = row.userId;\n const isSelected = this.selectedTablerow.some(r => r.userId === rowId);\n\n if (isSelected) {\n this.selectedTablerow = this.selectedTablerow.filter(r => r.userId !== rowId);\n this.selection.deselect(row);\n } else {\n this.selectedTablerow.push(row);\n this.selection.select(row);\n }\n\n this.selectedDataChange.emit({\n selectedRows: _.cloneDeep(this.selectedTablerow),\n toggledRow: row,\n action: isSelected ? \"unselected\" : \"selected\"\n });\n }\n\n onPageChange(event: PageChangeEmitter) {\n this.currentPage = event?.currentPage;\n this.pageChange.emit(event);\n }\n\n removeUserFromSelected(): void {\n if (!this.selectedTablerow.length) {\n return;\n }\n const removedList = [...this.selectedTablerow];\n const remainingList = this.data.filter(user => !this.selectedTablerow.some(selected => selected.userId === user.userId));\n this.data = remainingList;\n this.count = remainingList.length;\n this.selectedTablerow = [];\n this.selection.clear();\n this.dataSource = new MatTableDataSource<any>(remainingList);\n this.dataSource.sort = this.sort;\n if (this.tableConfig?.type === \"selectedUsers\") {\n this.removeSelectedData.emit({\n remainingList,\n removedList\n });\n }\n }\n\n onSortChange(sortState: Sort): void {\n if (sortState.direction) {\n if (sortState.active === \"ministry\") sortState.active = \"rootOrgName\";\n if (sortState.active === \"mobile\") sortState.active = \"phone\";\n if (this.tableConfig?.type === \"selectedUsers\") {\n this._liveAnnouncer.announce(`Sorted ${sortState.direction}ending`);\n } else {\n this.sortChange.emit({ [sortState.active]: sortState.direction });\n }\n } else {\n if (this.tableConfig?.type === \"selectedUsers\") {\n this._liveAnnouncer.announce(\"Sorting cleared\");\n } else {\n this.sortChange.emit({});\n }\n }\n }\n\n refreshSelected(): void {\n this.selection.clear();\n }\n}\n","<div class=\"wrapper-user-table\" id=\"user-table-select\">\n <div class=\"selections-meta\">\n <div class=\"flex items-center justify-between p-2\">\n <div class=\"flex items-center gap-2 selection-count\" *ngIf=\"tableConfig?.canShowSelectedItems || false\">\n <span class=\"\">{{selectedTablerow?.length}}</span>\n <span class=\"text-sm font-normal\">Items Selected</span>\n </div>\n <div class=\"flex items-center gap-2 actions-selections ml-auto\">\n <button mat-button color=\"primary\" class=\"text-sm font-normal action-refresh-btn\" (click)=\"refreshSelected()\"\n *ngIf=\"tableConfig?.canShowRefreshBtn || false\">\n <mat-icon>refresh</mat-icon>\n Refresh\n </button>\n\n <button mat-button color=\"warn\" class=\"text-sm font-bold action-delete-btn\"\n (click)=\"removeUserFromSelected()\" *ngIf=\"tableConfig?.canShowDeleteBtn || false\">\n <mat-icon>delete</mat-icon>\n Delete\n </button>\n </div>\n </div>\n </div>\n\n <table mat-table [dataSource]=\"dataSource\" matSort (matSortChange)=\"onSortChange($event)\">\n <!-- Checkbox Column -->\n <ng-container matColumnDef=\"select\">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container *ngIf=\"tableConfig?.canShowMasterSelect\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [disabled]=\"isDisabled\"\n [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </ng-container>\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"toggleSelection(row)\" [disabled]=\"isDisabled\"\n [checked]=\"selection.isSelected(row)\">\n </mat-checkbox>\n </td>\n </ng-container>\n\n <!-- first_name Column -->\n <ng-container matColumnDef=\"firstName\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Full Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element?.firstName}} </td>\n </ng-container>\n\n <!-- Email Column -->\n <ng-container matColumnDef=\"email\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Email </th>\n <td mat-cell *matCellDef=\"let element\"> {{element?.email}} </td>\n </ng-container>\n\n <!-- ministry Column -->\n <ng-container matColumnDef=\"ministry\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Ministry </th>\n <td mat-cell *matCellDef=\"let element\">\n <span class=\"truncated-text \">\n {{element?.ministry}}\n </span>\n </td>\n </ng-container>\n\n <!-- mobile_no Column -->\n <ng-container matColumnDef=\"mobile\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Mobile No </th>\n <td mat-cell *matCellDef=\"let element\">\n {{element?.mobile}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"invited_on\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Invited On </th>\n <td mat-cell *matCellDef=\"let element\">\n {{element?.invited_on}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"status\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Status </th>\n <td mat-cell *matCellDef=\"let element\">\n <!-- {{element?.status}} -->\n <div class=\"success-status flex items-center justify-center\">Success</div>\n <!-- <div class=\"rejected-status flex items-center justify-center\">Rejected</div> -->\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"tableConfig?.displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: tableConfig?.displayedColumns;\" (click)=\"toggleSelection(row);\">\n </tr>\n </table>\n <div *ngIf=\"!dataSource.data.length\" class=\"no-data-center\">\n <div class=\"no-data p-4 flex flex-column items-center justify-center\">\n <img src=\"/assets/icons/no-events.png\" alt=\"no-data\">\n <span class=\"font-bold\">No information to display yet</span>\n </div>\n </div>\n <ng-container *ngIf=\"count && tableConfig?.canShowPagination\">\n <div class=\"pagination-users\">\n <sb-uic-pagination [defaultPaginationSize]=\"initialPaginationSize\"\n [defaultPaginationSizeOptions]=\"initialPaginationSizeOptions\" [totalItemsCount]=\"count\"\n [currentPage]=\"currentPage\" (pageChange)=\"onPageChange($event)\">\n </sb-uic-pagination>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"bulkUploadEntriesCount\">\n <div class=\"text-xs text-[#666666] p-4 border-t border-black/15\">\n {{bulkUploadEntriesCount?.success}}/{{bulkUploadEntriesCount?.totalCount}} entries uploaded successfully\n </div>\n </ng-container>\n\n\n</div>","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { AccessControlService } from \"../../_services/access-control.service\";\nimport { NsAccessControlConfig } from \"../../_models/access-control.model\";\nimport { SnackbarComponent } from \"../snackbar/snackbar.component\";\nimport { MatSnackBar } from \"@angular/material/snack-bar\";\n\nconst MAX_FILE_SIZE = 100 * 1024 * 1024; // 100 MB\n@Component({\n selector: \"sb-uic-bulk-upload-karmayogi\",\n templateUrl: \"./bulk-upload-karmayogi.component.html\",\n styleUrls: [\"./bulk-upload-karmayogi.component.scss\"],\n standalone: false\n})\nexport class BulkUploadKarmayogiComponent {\n @Output() appliedUser: EventEmitter<any> = new EventEmitter();\n @Input() isDisabled: boolean = false;\n\n bulkUploadConfig: NsAccessControlConfig.IBulkUploadKarmayogi;\n file!: File | null;\n\n currrentFilterType = \"success\";\n csvContent: any;\n contacts: any = [];\n properties: any = \"\";\n flag = false;\n fileUploading = false;\n isSuccessUserlist: any = [];\n isErrorUserlist: any = [];\n fileName: string = \"\";\n currentDate = new Date();\n\n holdSelectedUsers: any[] = [];\n finalSelectedUsers: any[] = [];\n isCCA = false;\n\n constructor(private accessControlService: AccessControlService, private snackBar: MatSnackBar) {\n this.bulkUploadConfig = this.accessControlService.accessControlConfig().bulkUploadKarmayogi;\n this.isCCA = this.accessControlService.accessControlConfig()?.userConfig?.org?.isCCA ?? false;\n }\n\n downloadSample() {\n const sampleFilePath = this.bulkUploadConfig.downloadSampleFile;\n if (sampleFilePath) {\n const link = document.createElement(\"a\");\n link.href = sampleFilePath.path;\n link.download = sampleFilePath.fileName || \"sample.csv\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n }\n\n onDrop(input: HTMLInputElement) {\n this.fileUploading = true;\n const files: any = [input];\n const fileTypes = [\"csv\"]; // acceptable file types\n\n if (files && files.length) {\n const extension = files[0].name.split(\".\").pop().toLowerCase(); // file extension from input file\n const isSuccess = fileTypes.indexOf(extension) > -1; // is extension in acceptable types\n if (files[0].size > MAX_FILE_SIZE) {\n this.fileUploading = false;\n this.snackBar.openFromComponent(SnackbarComponent, {\n data: {\n message: \"The file has exceeded the 100 MB upload size limit.\",\n type: \"error\"\n },\n duration: 3000,\n panelClass: \"course-error-snackbar\"\n });\n return;\n }\n\n if (isSuccess) {\n this.fileName = files[0].name;\n const fileToRead = files[0];\n const fileReader = new FileReader();\n fileReader.onload = (event: any) => {\n this.onFileLoad(event);\n };\n fileReader.readAsText(fileToRead, \"UTF-8\");\n } else {\n this.fileUploading = false;\n this.snackBar.openFromComponent(SnackbarComponent, {\n data: {\n message: \"Unsupported File Format. Please upload a CSV file.\",\n type: \"error\"\n },\n duration: 3000,\n panelClass: \"course-error-snackbar\"\n });\n return;\n }\n } else {\n this.fileUploading = false;\n this.snackBar.openFromComponent(SnackbarComponent, {\n data: {\n message: \"Unsupported File Format. Please upload a CSV file.\",\n type: \"error\"\n },\n duration: 3000,\n panelClass: \"course-error-snackbar\"\n });\n return;\n }\n }\n\n async onFileLoad(fileLoadedEvent: any) {\n this.isSuccessUserlist = [];\n this.isErrorUserlist = [];\n const textFromFileLoaded = fileLoadedEvent.target.result;\n this.csvContent = textFromFileLoaded;\n\n // Flag is for extracting first line\n let flag = false;\n // Main Data\n const objarray: any = [];\n // Properties\n const prop: any = [];\n // Total Length\n let size: any = 0;\n\n for (const line of this.csvContent.split(/[\\r\\n]+/)) {\n if (flag) {\n const obj: any = {};\n for (let k = 0; k < size; k += 1) {\n // Dynamic Object Properties\n obj[prop[k]] = line.split(\",\")[k];\n }\n objarray.push(obj);\n } else {\n // First Line of CSV will be having Properties\n for (let k = 0; k < line.split(\",\").length; k += 1) {\n size = line.split(\",\").length;\n // Removing all the spaces to make them usefull, also removing any \" characters\n prop.push(line.split(\",\")[k].replace(/ /g, \"\").replace(/\"/g, \"\"));\n }\n flag = true;\n }\n }\n this.contacts = objarray;\n if (this.contacts && this.contacts.length > 0) {\n const headerValues = Object.keys(this.contacts[0]);\n if (headerValues.length < 0 || headerValues.length > 2) {\n // NOSONAR\n this.fileUploading = false;\n this.snackBar.openFromComponent(SnackbarComponent, {\n data: {\n message: \"Field Mismatch. Please ensure your uploaded file matches the sample template provided.\",\n type: \"error\"\n },\n duration: 3000,\n panelClass: \"course-error-snackbar\"\n });\n return;\n }\n if (!headerValues.includes(\"Emailid\") || !headerValues.includes(\"Mobilenumber\")) {\n this.fileUploading = false;\n this.snackBar.openFromComponent(SnackbarComponent, {\n data: {\n message: \"Field Mismatch. Please ensure your uploaded file matches the sample template provided.\",\n type: \"error\"\n },\n duration: 3000,\n panelClass: \"course-error-snackbar\"\n });\n return;\n }\n }\n this.properties = [];\n\n this.properties = prop;\n // console.log(this.properties)\n const emailIds: any = [];\n const mobileNumbers: any = [];\n const bothEmailAndMobile: any = {};\n this.contacts = this.contacts.filter((ele: any) => ele.Emailid || ele.Mobilenumber);\n if (this.contacts.length > 50000) {\n this.snackBar.openFromComponent(SnackbarComponent, {\n data: { message: \"More than 50000 users are not allowed\", type: \"error\" },\n duration: 3000,\n panelClass: \"course-error-snackbar\"\n });\n this.fileUploading = false;\n } else {\n await this.contacts.forEach((element: any) => {\n const emailPattern = new RegExp(`^[\\\\w\\-\\\\.]+@([\\\\w-]+\\\\.)+[\\\\w-]{2,4}$`);\n const mobilePattern = new RegExp(/^(6|7|8|9)\\d{9}$/);\n const emailTest = element.Emailid ? emailPattern.test(element.Emailid) : true;\n const mobileTest = element.Mobilenumber ? mobilePattern.test(element.Mobilenumber) : true;\n element[\"email\"] = element.Emailid;\n element[\"mobile\"] = element.Mobilenumber;\n if (mobileTest && element.Mobilenumber) {\n mobileNumbers.push(element.Mobilenumber);\n }\n if (emailTest && element.Emailid) {\n emailIds.push(element.Emailid.toLowerCase());\n }\n if (emailTest && mobileTest) {\n element[\"status\"] = \"Success\";\n element[\"userStatus\"] = true;\n bothEmailAndMobile[element.Emailid.toLowerCase()] = element;\n } else {\n if (emailTest || mobileTest) {\n element[\"status\"] = \"Success\";\n element[\"userStatus\"] = true;\n if ((!emailTest && element.Mobilenumber !== \"\") || (!emailTest && element.Mobilenumber === \"\")) {\n element[\"status\"] = \"Error\";\n element[\"userStatus\"] = false;\n element[\"message\"] = emailPattern.test(element.Emailid) ? \"\" : \"Invalid Email id\";\n }\n if ((!mobileTest && element.Emailid !== \"\") || (!mobileTest && element.Emailid === \"\")) {\n element[\"status\"] = \"Error\";\n element[\"userStatus\"] = false;\n element[\"message\"] = mobilePattern.test(element.Mobilenumber) ? \"\" : \"Invalid Mobile number\";\n }\n } else {\n if (!emailTest && !mobileTest) {\n element[\"status\"] = \"Error\";\n element[\"userStatus\"] = false;\n element[\"message\"] = \"Invalid Email id and Mobile number\";\n } else {\n element[\"status\"] = \"Error\";\n element[\"userStatus\"] = false;\n element[\"message\"] = emailPattern.test(element.Emailid) ? \"\" : \"Invalid Email id\";\n element[\"message\"] = mobilePattern.test(element.Mobilenumber) ? \"\" : \"Invalid Mobile number\";\n }\n }\n }\n });\n\n // Check for duplicate email IDs\n const duplicateEmails = emailIds.filter((item: any, index: number) => emailIds.indexOf(item) !== index);\n if (duplicateEmails.length > 0) {\n this.fileUploading = false;\n this.snackBar.openFromComponent(SnackbarComponent, {\n data: {\n message: \"Duplicate email IDs found in the uploaded file. Please remove duplicates and try again.\",\n type: \"error\"\n },\n duration: 3000,\n panelClass: \"course-error-snackbar\"\n });\n return;\n }\n\n // Check for duplicate mobile numbers\n const duplicateMobiles = mobileNumbers.filter((item: any, index: number) => mobileNumbers.indexOf(item) !== index);\n if (duplicateMobiles.length > 0) {\n this.fileUploading = false;\n this.snackBar.openFromComponent(SnackbarComponent, {\n data: {\n message: \"Duplicate mobile numbers found in the uploaded file. Please remove duplicates and try again.\",\n type: \"error\"\n },\n duration: 3000,\n panelClass: \"course-error-snackbar\"\n });\n return;\n }\n \n this.flag = true;\n const emailResponseData = await this.callUserCheckApi(emailIds, \"primaryEmail\");\n const mobileResponseData = await this.callUserCheckApi(mobileNumbers, \"mobile\");\n if (emailResponseData && mobileResponseData) {\n this.manageData(emailResponseData, mobileResponseData);\n } else {\n this.fileUploading = false;\n this.snackBar.openFromComponent(SnackbarComponent, {\n data: {\n message: \"Something went wrong! Please try again\",\n type: \"error\"\n },\n duration: 3000,\n panelClass: \"course-error-snackbar\"\n });\n }\n }\n }\n async callUserCheckApi(userData: any, key: any) {\n const request: any = {\n request: {\n filters: {},\n fields: [\"userId\", \"email\", \"firstName\", \"lastName\", \"phone\", \"rootOrgId\", \"channel\", \"roles\", \"profileDetails\", \"rootOrgName\"]\n }\n };\n if (key === \"primaryEmail\") {\n request.request.filters = {\n ...request.request.filters,\n email: userData\n };\n } else {\n request.request.filters = {\n ...request.request.filters,\n phone: userData\n };\n }\n\n if (this.accessControlService.accessControlConfig()?.application === NsAccessControlConfig.Application.MDO) {\n if (!this.isCCA) {\n request.request.filters.rootOrgId = this.accessControlService.accessControlConfig().userConfig.org?.rootOrgId ? [this.accessControlService.accessControlConfig().userConfig.org?.rootOrgId] : [];\n }\n }\n return this.accessControlService\n .validateUser(request)\n .toPromise()\n .then(async (res: any) => {\n if (res.result.response) {\n return await res.result.response;\n }\n })\n .catch((_err: any) => {})\n .finally(() => Promise.resolve());\n }\n\n manageData(userEmailData: any, userMobileData: any) {\n this.isSuccessUserlist = [];\n this.isErrorUserlist = [];\n const userEmailMap: any = {};\n const userEmailMapUserId: any = {};\n const userMobileMap: any = {};\n if (userEmailData.count) {\n userEmailData.content.forEach(async (e: any) => {\n if (e.profileDetails) {\n userEmailMap[e.profileDetails.personalDetails.primaryEmail.toLowerCase()] = e;\n userEmailMapUserId[e.userId] = e;\n }\n });\n }\n if (userMobileData.count) {\n userMobileData.content.forEach(async (e: any) => {\n if (e.profileDetails) {\n userMobileMap[e.profileDetails.personalDetails.mobile] = e;\n }\n });\n }\n this.contacts.forEach(async (e: any) => {\n if (e.userStatus) {\n if (e.email && e.mobile) {\n const userData = userEmailMap[e.email.toLowerCase()];\n if (userData && userData.profileDetails.personalDetails && userData.profileDetails.personalDetails.mobile) {\n if (String(userData.profileDetails.personalDetails.mobile) === String(e.mobile)) {\n e[\"userId\"] = userData.userId;\n e[\"ministry\"] = userData.rootOrgName;\n e[\"fullName\"] = userData.firstName || userData.firstname;\n e[\"mobile\"] = userData?.phone;\n e[\"email\"] = userData?.email;\n } else {\n e[\"status\"] = \"Error\";\n e[\"userStatus\"] = false;\n e[\"message\"] = \"Given credentials are not matching\";\n }\n } else {\n e[\"status\"] = \"Error\";\n e[\"userStatus\"] = false;\n e[\"message\"] = \"Given credentials are not matching\";\n }\n } else if (e.email && userEmailMap[e.email.toLowerCase()]) {\n const userData = userEmailMap[e.email.toLowerCase()];\n e[\"mobile\"] = userData?.phone;\n\n e[\"userId\"] = userData.userId;\n e[\"ministry\"] = userData.rootOrgName;\n e[\"fullName\"] = userData.firstName || userData.firstname;\n } else if (e.mobile && userMobileMap[e.mobile]) {\n const userData = userMobileMap[e.mobile];\n e[\"email\"] = userData?.email;\n e[\"userId\"] = userData.userId;\n e[\"ministry\"] = userData.rootOrgName;\n e[\"fullName\"] = userData.firstName || userData.firstname;\n } else {\n e[\"status\"] = \"Error\";\n e[\"userStatus\"] = false;\n e[\"message\"] = \"Given credentials are not matching\";\n }\n }\n });\n this.fileUploading = false;\n this.isSuccessUserlist = this.contacts.filter((ele: any) => ele.userStatus);\n this.isErrorUserlist = this.contacts.filter((ele: any) => !ele.userStatus);\n\n // this.successUserData.emit(this.isSuccessUserlist);\n this.currrentFilterType = this.isSuccessUserlist.length ? \"success\" : \"error\";\n if (this.currrentFilterType === \"success\") {\n // this.displayedColumns = [\n // \"fullName\",\n // \"email\",\n // \"ministry\",\n // \"status\",\n // \"mobile\",\n // ];\n // this.dataSource = new MatTableDataSource<IUserElement>(\n // this.isSuccessUserlist\n // );\n this.holdSelectedUsers = this.isSuccessUserlist;\n this.appliedUser.emit(this.holdSelectedUsers);\n\n // document.getElementById(\"user-table-select\")?.scrollIntoView({ behavior: \"smooth\" });\n } else if (this.currrentFilterType === \"error\") {\n // this.displayedColumns = [\"email\", \"status\", \"mobile\", \"message\"];\n // this.dataSource = new MatTableDataSource<IUserElement>(\n // this.isErrorUserlist\n // );\n }\n }\n\n onFilterChange(type: string) {\n this.currrentFilterType = type;\n }\n\n downloadErrorFile() {\n this.accessControlService.downloadFile(this.isErrorUserlist, \"userErrordata\");\n }\n\n onSelectingUser(event: any): void {\n this.holdSelectedUsers = [...event.selectedRows];\n this.appliedUser.emit(this.holdSelectedUsers);\n }\n\n // applySelections() {\n // this.appliedUser.emit(this.holdSelectedUsers);\n // }\n}\n","<div class=\"bulk-upload-wrapper\">\n <div class=\"flex gap-4 py-4 px-5 wrapper-border\">\n <div class=\"instructions-download py-4 px-5 border-dotted flex-1\">\n <div class=\"mb-6 text-style\">Open & follow these instruction</div>\n <div class=\"instructions-list\">\n <ul class=\"numbered-list\">\n <ng-container *ngFor=\"let item of bulkUploadConfig?.uploadInstructions\">\n <li>{{ item }}</li>\n </ng-container>\n </ul>\n </div>\n <div class=\"download-sample mt-6\">\n <button mat-flat-button (click)=\"downloadSample()\" class=\"rounded-full px-4 py-2 font-bold text-sm mat-btn-outline cursor-pointer\">\n Download Sample File\n </button>\n </div>\n </div>\n\n <div class=\"bulk-upload-select py-4 px-5 border-dotted flex-1\">\n <div class=\"right_upload_inner flex flex-col items-center justify-center\" wsAuthDragDrop (fileDropped)=\"onDrop($event)\">\n <div class=\"flex flex-row items-center justify-center margin-bottom-s\">\n <mat-icon class=\"svg-ico\" svgIcon=\"excel-sheet\"></mat-icon>\n </div>\n <div class=\"items-center justify-center flex flex-col\">\n <a class=\"new-color cursor-pointer text-sm font-bold mb-1 mt-7\" (click)=\"fileInput.click()\">Browse files</a>\n <p class=\"mt-2 text-sm\">Or</p>\n <p class=\"mt-2 ws-mat-black60-text text-base\">Drag file to upload</p>\n <p class=\"text-xs ws-mat-black87-text margin-remove\">Max size: 100 MB</p>\n <p class=\"text-xs ws-mat-black60-text margin-remove\">Supported file types: CSV</p>\n </div>\n <input type=\"file\" #fileInput class=\"inputfile\" accept=\".csv\" (change)=\"onDrop($event.target.files[0]); fileInput.value = null\" />\n <div *ngIf=\"file\" class=\"flex flex-middle justify-center flex-column position-relative pt-5 px-5\">\n <mat-icon class=\"ws-mat-primary-text\" svgIcon=\"excel-sheet\"> </mat-icon>\n <p class=\"margin-left-xs mat-h3 font-weight-500 margin-remove-bottom break\">\n <ng-container *ngIf=\"file; else elseBlock\">\n <span class=\"flex-wrap\"> {{ file?.name }}</span>\n </ng-container>\n <ng-template #elseBlock>\n <span i18n>No file uploaded</span>\n </ng-template>\n </p>\n </div>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"fileName\">\n <div class=\"filter-by-select my-4\">\n <div class=\"flex gap-4 items-center\">\n <div class=\"text-title\">Filter By</div>\n <div class=\"flex gap-2\">\n <button\n mat-flat-button\n (click)=\"onFilterChange('success')\"\n [ngClass]=\"currrentFilterType === 'success' ? 'new-bg-color text-white mat-btn-flat' : 'mat-btn-outline'\"\n class=\"rounded-full px-4 py-2 font-bold text-sm cursor-pointer\">\n Success\n </button>\n <button\n (click)=\"onFilterChange('error')\"\n mat-flat-button\n [ngClass]=\"currrentFilterType === 'error' ? 'new-bg-color text-white mat-btn-flat' : 'mat-btn-outline'\"\n class=\"rounded-full px-4 py-2 font-bold text-sm cursor-pointer\">\n Error\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"list-table-bulk-upload\">\n <ng-container *ngIf=\"currrentFilterType === 'success'\">\n <div class=\"flex items-center gap-2 selection-count mb-4 p-2\">\n <span class=\"\">{{ holdSelectedUsers?.length }}</span>\n <span class=\"text-sm font-normal\">Items Selected</span>\n </div>\n <sb-uic-list-table\n [data]=\"isSuccessUserlist\"\n [count]=\"1\"\n [initialPaginationSize]=\"bulkUploadConfig['bulkUploadTable']?.initialPaginationSize\"\n [tableConfig]=\"bulkUploadConfig['bulkUploadTable']\"\n (selectedDataChange)=\"onSelectingUser($event)\"\n [selected]=\"holdSelectedUsers\"\n [isDisabled]=\"isDisabled\"\n [bulkUploadEntriesCount]=\"{ totalCount: isSuccessUserlist?.length + isErrorUserlist?.length, success: isSuccessUserlist?.length }\">\n </sb-uic-list-table>\n\n <!-- <ng-container *ngIf=\"isSuccessUserlist?.length && holdSelectedUsers?.length\">\n <div class=\"w-full mt-4\">\n <button\n mat-flat-button\n (click)=\"applySelections()\"\n class=\"flex items-center justify-center rounded-full new-bg-color font-bold text-sm text-white mt-2 w-full\">\n Apply\n </button>\n </div>\n </ng-container> -->\n </ng-container>\n\n <ng-container *ngIf=\"currrentFilterType === 'error'\">\n <div class=\"wrapper-border rounded-sm p-4\">\n <div class=\"log-history-text\">Log History</div>\n </div>\n <div class=\"information-list py-4 px-6\">\n <!-- <ng-container *ngFor=\"let item of isErrorUserlist\"> -->\n <ng-container *ngIf=\"isErrorUserlist?.length > 0; else noErrorList\">\n <div class=\"rounded-lg wrapper-border py-5 px-4 mb-4\">\n <div class=\"flex items-center justify-between\">\n <div class=\"error-log-title flex gap-2 items-center\">\n <span class=\"text-title text-dark\">File Information</span>\n <img src=\"/assets/icons/icon-wrapper.svg\" alt=\"tooltip-icon\" />\n </div>\n <button mat-flat-button (click)=\"downloadErrorFile()\" class=\"rounded-full px-4 py-2 font-bold text-sm mat-btn-outline cursor-pointer\">\n <mat-icon class=\"new-color\">file_download</mat-icon>\n Download error log\n </button>\n </div>\n <div class=\"my-4 meta-info\">\n <div class=\"flex gap-2 items-center\">\n <span class=\"text-title text-dark\">{{ fileName }}</span>\n <img src=\"/assets/icons/error-icon.svg\" alt=\"error-icon\" />\n </div>\n <div class=\"text-style text-dark\">There's an error occurred while uploading this file.</div>\n </div>\n <div class=\"flex gap-x-6 gap-y-4 falied-records-info\">\n <div class=\"flex flex-column gap-4 flex-grow-1\">\n <div>\n <p class=\"text-sm text-gray-500\">Name</p>\n <p class=\"font-medium break-all text-dark\">\n {{ fileName }}\n </p>\n </div>\n <div>\n <p class=\"text-sm text-gray-500\">Total Records</p>\n <p class=\"font-medium text-dark\">{{ isSuccessUserlist?.length + isErrorUserlist?.length }}</p>\n </div>\n <div>\n <p class=\"text-sm text-gray-500 mt-2\">Failed Records</p>\n <p class=\"font-medium text-dark\">{{ isErrorUserlist?.length }}</p>\n </div>\n </div>\n <div class=\"flex flex-column gap-4 flex-grow-1\">\n <div>\n <p class=\"text-sm text-gray-500\">Status</p>\n <p class=\"text-red-600 font-normal\">FAILED</p>\n </div>\n <div>\n <p class=\"text-sm text-gray-500\">Created On</p>\n <p class=\"font-medium text-dark\">{{ currentDate | date : \"medium\" }}</p>\n </div>\n <div>\n <p class=\"text-sm text-gray-500 mt-2\">Updated On</p>\n <p class=\"font-medium text-dark\">{{ currentDate | date : \"medium\" }}</p>\n </div>\n </div>\n <div class=\"flex flex-column gap-4 flex-grow-1\">\n <div>\n <p class=\"text-sm text-gray-500\">Success Records</p>\n <p class=\"font-medium text-dark\">{{ isSuccessUserlist?.length }}</p>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-template #noErrorList>\n <div class=\"wrapper-border rounded-lg py-5 px-4 mb-4\">\n <div class=\"no-data p-4 flex flex-column items-center justify-center\">\n <img src=\"/assets/icons/no-events.png\" alt=\"no-data\" />\n <span class=\"font-bold\">No information to display yet</span>\n </div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </div>\n </ng-container>\n</div>\n","import { Component, inject, OnDestroy, OnInit } from \"@angular/core\";\nimport { FormControl } from \"@angular/forms\";\nimport { MAT_DIALOG_DATA, MatDialogRef } from \"@angular/material/dialog\";\nimport { AccessControlService } from \"../../../_services/access-control.service\";\nimport { MatSnackBar } from \"@angular/material/snack-bar\";\nimport { PageChangeEmitter } from \"../../../_models/pagination.model\";\nimport { NsAccessControlConfig } from \"../../../_models/access-control.model\";\nimport { SnackbarComponent } from \"../../../components/snackbar/snackbar.component\";\nimport { Subject } from \"rxjs\";\nimport { first, takeUntil } from \"rxjs/operators\";\n\n@Component({\n selector: \"sb-uic-invite-users\",\n templateUrl: \"./invite-users.component.html\",\n styleUrls: [\"./invite-users.component.scss\"],\n standalone: false\n})\nexport class InviteUsersComponent implements OnInit, OnDestroy {\n public readonly data = inject<any>(MAT_DIALOG_DATA);\n private destroy$ = new Subject<void>();\n\n searchControl = new FormControl(\"\");\n filterValue: NsAccessControlConfig.IManageSelectionType = \"add_karmayogis\";\n\n usersList: any[] = [];\n totalUsers: number = 0;\n\n holdSelectedUsers: any[] = [];\n finalSelectedUsers: any[] = [];\n usersFinalList: any[] = [];\n bulkUploadUserList: any[] = [];\n\n usersTableConfig!: NsAccessControlConfig.ITableConfig;\n usersLoading = false;\n activeTab = 0;\n sortState: any = {};\n pagination: { limit: number; offset: number } = {\n limit: 5,\n offset: 0,\n };\n\n filters: any = {};\n currentPage = 1;\n isCCA = false;\n constructor(public dialogRef: MatDialogRef<InviteUsersComponent>, private accessControlService: AccessControlService, private snackbar: MatSnackBar) {}\n\n ngOnInit(): void {\n this.usersTableConfig = this.accessControlService.accessControlConfig().usersTableConfig;\n this.isCCA = this.accessControlService.accessControlConfig()?.userConfig?.org?.isCCA ?? false;\n if (this.data && this.data.selected && this.data.selected.length) {\n if (!this.isArrayOfObjects(this.data?.selected)) {\n this.getUsersList(\"\", this.data?.selected?.length, this.pagination.offset, this.data?.selected);\n } else {\n this.usersFinalList = [...this.data.selected];\n this.holdSelectedUsers = [...this.usersFinalList];\n this.finalSelectedUsers = [...this.usersFinalList];\n this.activeTab = 1;\n }\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n onClose(): void {\n this.dialogRef.close();\n }\n\n search(): void {\n let reducedData: any = {};\n this.resetPagination();\n this.sortState = {};\n\n const pickEntity = [\n NsAccessControlConfig.SelectionType.Organizations,\n NsAccessControlConfig.SelectionType.VerificationStatus,\n NsAccessControlConfig.SelectionType.Designation,\n NsAccessControlConfig.SelectionType.Group,\n NsAccessControlConfig.SelectionType.Cadre,\n NsAccessControlConfig.SelectionType.Service,\n NsAccessControlConfig.SelectionType.Batch,\n ];\n\n if (this.accessControlService.accessControlConfig()?.application === NsAccessControlConfig.Application.MDO) {\n if (!this.isCCA) {\n reducedData.rootOrgId = this.accessControlService.accessControlConfig().userConfig.org?.rootOrgId ? [this.accessControlService.accessControlConfig().userConfig.org?.rootOrgId] : [];\n }\n }\n\n if (this.data?.rule?.conditions.length) {\n reducedData = this.data?.rule?.conditions.reduce((acc: any, curr: any) => {\n if (pickEntity.includes(curr.entity)) {\n acc[curr.entity] = curr.selections;\n }\n return acc;\n }, { ...reducedData });\n }\n\n if (Object.keys(reducedData)?.length) {\n this.filters = {\n rootOrgId: reducedData?.rootOrgId,\n \"profileDetails.profileStatus\": reducedData.profilestatus,\n \"profileDetails.professionalDetails.designation\": reducedData.designation,\n \"profileDetails.professionalDetails.group\": reducedData.group,\n \"profileDetails.cadreDetails.cadreName\": reducedData.Cadre,\n \"profileDetails.cadreDetails.civilServiceName\": reducedData.service,\n \"profileDetails.cadreDetails.cadreBatch\": reducedData.batch,\n status: 1,\n };\n }\n\n this.getUsersList(this.searchControl.value, this.pagination.limit, this.pagination.offset, [], this.filters, this.sortState);\n }\n\n onFilterChange(event: any): void {\n if (event?.value === \"bulk_upload_karmayogis\") this.bulkUploadUserList = [];\n this.filterValue = event.value;\n }\n\n getUsersList(query: string, limit?: number, offset?: number, userIds?: string[], filters?: any, sorting?: any): void {\n this.usersLoading = true;\n this.accessControlService\n .fetchUserList(query, { limit: limit, offset: offset }, userIds, filters, sorting)\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (response) => {\n if (response?.result && response?.result?.response?.content) {\n this.usersList = response?.result?.response?.content;\n this.totalUsers = response?.result?.response?.count;\n if (userIds?.length) {\n this.finalSelectedUsers = response.result.response.content;\n this.holdSelectedUsers = this.finalSelectedUsers;\n this.activeTab = 1;\n }\n if (this.holdSelectedUsers?.length) {\n this.usersFinalList = [...this.holdSelectedUsers];\n }\n } else {\n this.usersList = [];\n this.totalUsers = 0;\n }\n this.usersLoading = false;\n },\n complete: () => {\n this.usersLoading = false;\n },\n });\n }\n\n onSelectingUser(event: any): void {\n this.holdSelectedUsers = [...event.selectedRows];\n }\n\n selectUsers(): void {\n this.finalSelectedUsers = this.holdSelectedUsers;\n this.usersFinalList = [...this.finalSelectedUsers];\n this.snackbar.openFromComponent(SnackbarComponent, {\n data: { message: `Users added to Selected tab`, type: \"success\" },\n duration: 3000,\n panelClass: \"course-success-snackbar\",\n });\n this.activeTab = 1;\n }\n\n onPageChange(event: PageChangeEmitter): void {\n this.currentPage = event.currentPage;\n this.pagination.limit = event.limit;\n this.pagination.offset = (event.currentPage - 1) * this.pagination.limit;\n this.getUsersList(this.searchControl.value, this.pagination.limit, this.pagination.offset, [], this.filters, this.sortState);\n }\n\n removedUserData(event: any): void {\n this.finalSelectedUsers = [...event.remainingList];\n this.holdSelectedUsers = this.finalSelectedUsers;\n }\n\n onSelectingUserToApply(event: any): void {\n this.usersFinalList = [...event.selectedRows];\n this.holdSelectedUsers = [...event.selectedRows];\n }\n\n applySelections(): void {\n this.dialogRef.close({ rule: this.data.rule, condition: this.data.condition, selected: this.usersFinalList });\n }\n\n isArrayOfObjects(arr: any): boolean {\n return Array.isArray(arr) && arr.every((item) => typeof item === \"object\" && item !== null && !Array.isArray(item));\n }\n\n onSortChange(sortState: any): void {\n this.sortState = sortState;\n this.getUsersList(this.searchControl.value, this.pagination.limit, this.pagination.offset, [], this.filters, sortState);\n }\n\n resetPagination(): void {\n this.currentPage = 1;\n this.pagination.limit = 5;\n this.pagination.offset = 0;\n }\n\n onApplyingUserBulkUpload(event: any) {\n this.bulkUploadUserList = event;\n }\n\n applySelectionsBulk(): void {\n this.dialogRef.close({ rule: this.data.rule, condition: this.data.condition, selected: this.bulkUploadUserList });\n }\n}\n","<div class=\"flex justify-between dialog-heading items-center\">\n <h2 mat-dialog-title class=\"mb-0\">Users</h2>\n <button mat-icon-button class=\"close-button\" (click)=\"onClose()\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n\n<div mat-dialog-content class=\"user-dialog-body\">\n <div class=\"\">\n <!-- Filter Options -->\n <div class=\"filter-options\">\n <mat-radio-group [(ngModel)]=\"filterValue\" aria-label=\"Filter options\" (change)=\"onFilterChange($event)\">\n <mat-radio-button class=\"text-dark\" value=\"add_karmayogis\">Add Karmayogis</mat-radio-button>\n <mat-radio-button class=\"text-dark\" value=\"bulk_upload_karmayogis\">Bulk Upload Karmayogis</mat-radio-button>\n </mat-radio-group>\n </div>\n </div>\n\n <ng-container *ngIf=\"filterValue === 'add_karmayogis'\">\n <!-- Search Box -->\n <div class=\"search-container flex items-center gap-4 mb-4\">\n <div class=\"mat-full-radius flex-grow\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-icon matPrefix>search</mat-icon>\n <input matInput placeholder=\"Search by Name, Email and Phone Number\" [formControl]=\"searchControl\" (keyup.enter)=\"search()\" />\n </mat-form-field>\n </div>\n <button mat-flat-button class=\"flex items-center rounded-full new-bg-color font-bold text-sm text-white search-button\" (click)=\"search()\">\n Search\n </button>\n </div>\n\n <div class=\"contents-wrapper\">\n <ng-container>\n <mat-tab-group mat-stretch-tabs=\"false\" mat-align-tabs=\"start\" [(selectedIndex)]=\"activeTab\" dynamicHeight>\n <mat-tab label=\"All Learners\" class=\"mb-3\">\n <ng-container *ngIf=\"usersLoading\">\n <div class=\"spinner-loader flex items-center justify-center\">\n <mat-spinner></mat-spinner>\n </div>\n </ng-container>\n <div [ngClass]=\"{ hidden: usersLoading }\">\n <ng-container *ngIf=\"usersList && usersList.length > 0; else noData\">\n <sb-uic-list-table\n [data]=\"usersList\"\n [count]=\"totalUsers\"\n [initialPaginationSize]=\"pagination.limit\"\n [tableConfig]=\"usersTableConfig['allLearners']\"\n (selectedDataChange)=\"onSelectingUser($event)\"\n (pageChange)=\"onPageChange($event)\"\n (sortChange)=\"onSortChange($event)\"\n [selected]=\"usersFinalList\"\n [isDisabled]=\"data?.disabled\"\n [currentPage]=\"currentPage\"></sb-uic-list-table>\n </ng-container>\n </div>\n </mat-tab>\n <mat-tab label=\" Selected Users\" class=\"mb-3\">\n <ng-container *ngIf=\"usersLoading\">\n <div class=\"spinner-loader flex items-center justify-center\">\n <mat-spinner></mat-spinner>\n </div>\n </ng-container>\n <div [ngClass]=\"{ hidden: usersLoading }\">\n <ng-container *ngIf=\"finalSelectedUsers && finalSelectedUsers.length > 0; else noData\">\n <sb-uic-list-table\n [data]=\"finalSelectedUsers\"\n [count]=\"finalSelectedUsers.length || 0\"\n [initialPaginationSize]=\"pagination.limit\"\n [tableConfig]=\"usersTableConfig['selectedUsers']\"\n (selectedDataChange)=\"onSelectingUserToApply($event)\"\n (removeSelectedData)=\"removedUserData($event)\"\n [isDisabled]=\"data?.disabled\"\n [selected]=\"usersFinalList\"></sb-uic-list-table>\n </ng-container>\n </div>\n </mat-tab>\n </mat-tab-group>\n </ng-container>\n\n <ng-template #noData>\n <div class=\"no-data p-4 flex flex-column items-center justify-center\">\n <img src=\"/assets/icons/no-events.png\" alt=\"no-data\" />\n <span class=\"font-bold\">No information to display yet</span>\n </div>\n </ng-template>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"filterValue === 'bulk_upload_karmayogis'\">\n <sb-uic-bulk-upload-karmayogi (appliedUser)=\"onApplyingUserBulkUpload($event)\" [isDisabled]=\"data?.disabled\"></sb-uic-bulk-upload-karmayogi>\n </ng-container>\n</div>\n\n<mat-dialog-actions>\n <ng-container *ngIf=\"filterValue === 'add_karmayogis'\">\n <ng-container *ngIf=\"activeTab === 0 && usersList.length\">\n <button\n mat-flat-button\n (click)=\"selectUsers()\"\n class=\"flex items-center justify-center rounded-full new-bg-color font-bold text-sm text-white w-full mt-2\"\n [disabled]=\"holdSelectedUsers?.length === 0 || data?.disabled\">\n Select Users\n </button>\n </ng-container>\n <ng-container *ngIf=\"activeTab === 1 && usersFinalList.length && finalSelectedUsers.length\">\n <button\n [disabled]=\"data?.disabled\"\n mat-flat-button\n (click)=\"applySelections()\"\n class=\"flex items-center justify-center rounded-full new-bg-color font-bold text-sm text-white w-full mt-2\">\n Apply\n </button>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"filterValue === 'bulk_upload_karmayogis'\">\n <ng-container *ngIf=\"bulkUploadUserList?.length\">\n <button\n [disabled]=\"data?.disabled\"\n mat-flat-button\n (click)=\"applySelectionsBulk()\"\n class=\"flex items-center justify-center rounded-full new-bg-color font-bold text-sm text-white w-full mt-2\">\n Apply\n </button>\n </ng-container>\n </ng-container>\n</mat-dialog-actions>\n","export const BATCH_RANGES = [\n { label: \"1960-1990\", start: 1960, end: 1990 },\n { label: \"1991-2020\", start: 1991, end: 2020 },\n { label: \"2021-2025\", start: 2021, end: 2025 },\n];\n\nexport const CHECKBOX_OPTIONS = [\n { label: \"Select All\", value: \"selectAll\" },\n // { label: \"Cadre Controlling Authority\", value: \"isCCA\" },\n];\n","import { Injectable } from \"@angular/core\";\ninterface CivilServiceData {\n civilServiceType: {\n civilServiceTypeList: Array<{\n id: string;\n name: string;\n serviceList: Array<{\n id: string;\n name: string;\n commonBatchStartYear: number;\n commonBatchEndYear: number;\n cadreList?: Array<{\n id: string;\n name: string;\n startBatchYear: number;\n endBatchYear: number;\n }>;\n }>;\n }>;\n };\n}\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class CadreMappingService {\n private allCadres = new Map<string, any>();\n private allServices = new Map<string, any>();\n private cadreToServiceMap = new Map<string, Set<string>>();\n private serviceToCadresMap = new Map<string, Set<string>>();\n private batchYearToCadresMap = new Map<number, Set<string>>();\n private batchYearToServicesMap = new Map<number, Set<string>>();\n\n private cadreConfigData: CivilServiceData | null = null;\n\n private addToMapSet(map: Map<any, Set<any>>, key: any, value: any) {\n if (!map.has(key)) {\n map.set(key, new Set());\n }\n map.get(key)?.add(value);\n }\n\n initialize(data: CivilServiceData) {\n // Clear existing data\n this.allCadres.clear();\n this.allServices.clear();\n this.cadreToServiceMap.clear();\n this.serviceToCadresMap.clear();\n this.batchYearToCadresMap.clear();\n this.batchYearToServicesMap.clear();\n\n // Build lookups\n data?.civilServiceType?.civilServiceTypeList.forEach(cst => {\n if (cst) {\n cst.serviceList.forEach(service => {\n const { id: serviceId, commonBatchStartYear, commonBatchEndYear } = service;\n this.allServices.set(serviceId, service);\n\n // Add years to service-batch map\n for (let y = commonBatchStartYear; y <= commonBatchEndYear; y++) {\n this.addToMapSet(this.batchYearToServicesMap, y, serviceId);\n }\n\n service.cadreList?.forEach(cadre => {\n const { id: cadreId, startBatchYear, endBatchYear } = cadre;\n this.allCadres.set(cadreId, cadre);\n\n // Map cadre <-> service\n this.addToMapSet(this.cadreToServiceMap, cadreId, serviceId);\n this.addToMapSet(this.serviceToCadresMap, serviceId, cadreId);\n\n // Add years to cadre-batch map\n for (let y = startBatchYear; y <= endBatchYear; y++) {\n this.addToMapSet(this.batchYearToCadresMap, y, cadreId);\n }\n });\n });\n }\n });\n }\n\n getAllBatchYears(): number[] {\n return Array.from(this.batchYearToCadresMap.keys()).sort((a, b) => a - b);\n }\n\n getAllCadres(): Array<{ id: string; name: string }> {\n return Array.from(this.allCadres.values()).map(c => ({\n id: c.id,\n name: c.name\n }));\n }\n\n getAllServices(): Array<{ id: string; name: string }> {\n return Array.from(this.allServices.values()).map(s => ({\n id: s.id,\n name: s.name\n }));\n }\n\n getServicesByCadres(cadreIds: string[]): Array<{ id: string; name: string }> {\n const serviceIdsSet = new Set<string>();\n cadreIds.forEach(cadreId => {\n const services = this.cadreToServiceMap.get(cadreId) || new Set();\n services.forEach(serviceId => serviceIdsSet.add(serviceId));\n });\n\n return Array.from(serviceIdsSet).map(id => {\n const s = this.allServices.get(id);\n return { id: s.id, name: s.name };\n });\n }\n\n getCadresByServices(serviceIds: string[]): Array<{ id: string; name: string }> {\n const cadreIdsSet = new Set<string>();\n serviceIds.forEach(serviceId => {\n const cadres = this.serviceToCadresMap.get(serviceId) || new Set();\n cadres.forEach(cadreId => cadreIdsSet.add(cadreId));\n });\n\n return Array.from(cadreIdsSet).map(id => {\n const c = this.allCadres.get(id);\n return { id: c.id, name: c.name };\n });\n }\n\n getCadresByBatchYears(years: number[]): Array<{ id: string; name: string }> {\n const cadreIdsSet = new Set<string>();\n years.forEach(year => {\n const cadres = this.batchYearToCadresMap.get(year) || new Set();\n cadres.forEach(cadreId => cadreIdsSet.add(cadreId));\n });\n\n return Array.from(cadreIdsSet).map(id => {\n const c = this.allCadres.get(id);\n return { id: c.id, name: c.name };\n });\n }\n\n getServicesByBatchYears(years: number[]): Array<{ id: string; name: string }> {\n const serviceIdsSet = new Set<string>();\n years.forEach(year => {\n const services = this.batchYearToServicesMap.get(year) || new Set();\n services.forEach(serviceId => serviceIdsSet.add(serviceId));\n });\n\n return Array.from(serviceIdsSet).map(id => {\n const s = this.allServices.get(id);\n return { id: s.id, name: s.name };\n });\n }\n\n getServicesByCadresAndBatch(cadreIds: string[], years: number[]): Array<{ id: string; name: string }> {\n const services = this.getServicesByCadres(cadreIds);\n if (!Array.isArray(years)) {\n years = [years];\n }\n return services.filter(service => {\n const fullService = this.allServices.get(service.id);\n // Return true if any year is within the service's batch year range\n return years.some(year => year >= fullService.commonBatchStartYear && year <= fullService.commonBatchEndYear);\n });\n}\n\n getCadresByServicesAndBatch(serviceIds: string[], years: number[]): Array<{ id: string; name: string }> {\n const cadres = this.getCadresByServices(serviceIds);\n if (!Array.isArray(years)) {\n years = [years];\n }\n return cadres.filter(cadre => {\n const fullCadre = this.allCadres.get(cadre.id);\n // Return true if any year is within the cadre's batch year range\n return years.some(year => year >= fullCadre.startBatchYear && year <= fullCadre.endBatchYear);\n });\n }\n\n getBatchYearsByCadres(cadreIds: string[]): number[] {\n const batchYearsSet = new Set<number>();\n cadreIds.forEach(cadreId => {\n const cadre = this.allCadres.get(cadreId);\n if (cadre) {\n for (let y = cadre.startBatchYear; y <= cadre.endBatchYear; y++) {\n batchYearsSet.add(y);\n }\n }\n });\n return Array.from(batchYearsSet).sort((a, b) => a - b);\n }\n\n getBatchYearsByServices(serviceIds: string[]): number[] {\n const batchYearsSet = new Set<number>();\n serviceIds.forEach(serviceId => {\n const service = this.allServices.get(serviceId);\n if (service) {\n for (let y = service.commonBatchStartYear; y <= service.commonBatchEndYear; y++) {\n batchYearsSet.add(y);\n }\n }\n });\n return Array.from(batchYearsSet).sort((a, b) => a - b);\n }\n\n getBatchYearsByServicesAndCadres(serviceIds: string[], cadreIds: string[]): number[] {\n const serviceYears = this.getBatchYearsByServices(serviceIds);\n const cadreYears = this.getBatchYearsByCadres(cadreIds);\n\n // Find intersection of years\n const commonYears = serviceYears.filter(year => cadreYears.includes(year));\n return commonYears.sort((a, b) => a - b);\n }\n\n getCadreIdsByName(names: string[]) {\n if (!Array.isArray(names)) names = [names];\n const lowerNames = names.map(n => n.toLowerCase());\n return Array.from(this.allCadres.values())\n .filter(cadre => lowerNames.includes(cadre.name.toLowerCase()))\n .map(cadre => cadre.id);\n }\n\n getServiceIdsByName(names: string[]) {\n if (!Array.isArray(names)) names = [names];\n const lowerNames = names.map((n) => n.toLowerCase());\n return Array.from(this.allServices.values())\n .filter((service) => lowerNames.includes(service.name.toLowerCase()))\n .map((service) => service.id);\n }\n\n setCadreConfigData(data: CivilServiceData) {\n this.cadreConfigData = data;\n }\n\n getCadreConfigData(): CivilServiceData | null {\n return this.cadreConfigData;\n }\n\n getServicesByNames(names: string[]): Array<{ id: string; name: string }> {\n if (!Array.isArray(names)) names = [names];\n const lowerNames = names.map((n) => n.toLowerCase());\n const uniqueMap = new Map<string, { id: string; name: string }>();\n const cadreConfig = this.getCadreConfigData();\n if (cadreConfig) {\n cadreConfig.civilServiceType.civilServiceTypeList.forEach((cst) => {\n cst.serviceList.forEach((service) => {\n if (lowerNames.includes(service.name.toLowerCase())) {\n if (!uniqueMap.has(cst.id)) {\n uniqueMap.set(cst.id, { id: cst.id, name: cst.name });\n }\n }\n });\n });\n }\n return Array.from(uniqueMap.values());\n }\n}\n","import { Component, Inject, OnInit, OnDestroy, ElementRef, ViewChild, inject } from \"@angular/core\";\nimport { AccessControlService } from \"../../../_services/access-control.service\";\nimport { MAT_DIALOG_DATA, MatDialogRef } from \"@angular/material/dialog\";\nimport { FormControl } from \"@angular/forms\";\nimport { BATCH_RANGES, CHECKBOX_OPTIONS } from \"../../../_constants/app.constants\";\nimport { NsAccessControlConfig } from \"../../../_models/access-control.model\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { MatTabChangeEvent } from \"@angular/material/tabs\";\nimport { MatRadioChange } from \"@angular/material/radio\";\nimport * as _ from \"lodash\";\nimport { MatCheckboxChange } from \"@angular/material/checkbox\";\nimport { CadreMappingService } from \"../../../_services/cadre-mapping.service\";\n\n@Component({\n selector: \"sb-uic-entity-selections\",\n templateUrl: \"./entity-selections.component.html\",\n styleUrls: [\"./entity-selections.component.scss\"],\n standalone: false\n})\nexport class EntitySelectionsComponent implements OnInit, OnDestroy {\n @ViewChild(\"tabGroup\", { read: ElementRef }) tabGroupRef!: ElementRef;\n private destroy$ = new Subject<void>();\n isLoading = false;\n searchControl = new FormControl(\"\");\n filterValue: \"all\" | \"selected\" | \"notSelected\" = \"all\";\n alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ#\".split(\"\");\n\n dataList: any[] = [];\n dataListDup: any[] = [];\n\n selectedCentralDeputation: boolean = false;\n\n selectedData: any[] = [];\n selectedDataTemp: any[] = [];\n\n groupedEntityData: { [key: string]: any[] } = {};\n selectionType: any;\n selectionTypeEnum = NsAccessControlConfig.SelectionType;\n radioSelections: { value: string; label: string }[] = [];\n batchRanges: any;\n selectedCharacterRange: string;\n accessControlCriteriaSelection!: NsAccessControlConfig.IAccessControlCriteriaSelection;\n activeTab = 0;\n userProfile: any;\n content: any;\n searchedOrganisationFlagWithQuery: boolean = false;\n\n public readonly data = inject<{ rule: any; condition: any; selected: any[]; activeTabSelected: number; disabled: boolean }>(MAT_DIALOG_DATA);\n searchedDesignationFlagWithQuery: any;\n orgSelectionIds = [];\n\n paginationOffset = 0;\n totalItemsCount = 0;\n paginationLImit = 100\n isFetchingMore = false;\n\n application = \"\";\n APPLICATION_ENUM = NsAccessControlConfig.Application;\n rawCadreconfigData: any;\n accessControlConfig: NsAccessControlConfig.IAccessControlConfig | null = null;\n\n serviceSelectionTypes = [\"All Services\"];\n selectedServiceType = \"All Services\";\n customeFieldValues: any;\n isEntityCustomField: boolean;\n\n entityFilterOptions = CHECKBOX_OPTIONS;\n isCCA = false;\n environment: any\n ODCSMasterFramework: any\n applyNewServiceSelections = true\n canLoadMasterDesignation = false\n constructor(\n public dialogRef: MatDialogRef<EntitySelectionsComponent>,\n private accessControlService: AccessControlService,\n private cadreMappingService: CadreMappingService,\n @Inject(\"environment\") environment: any\n ) {\n this.environment = environment;\n }\n\n ngOnInit(): void {\n // If data was passed to the dialog, initialize selections\n if (this.environment.ODCSMasterFramework) {\n this.ODCSMasterFramework = this.environment.ODCSMasterFramework\n }\n this.accessControlConfig = this.accessControlService.accessControlConfig();\n\n this.accessControlCriteriaSelection = this.accessControlConfig?.accessControlCriteriaSelection;\n this.userProfile = this.accessControlConfig?.userConfig;\n this.content = this.accessControlConfig?.content;\n this.application = this.accessControlConfig?.application || \"\";\n this.isCCA = this.accessControlConfig?.userConfig?.org?.isCCA ?? false;\n \n // if(this.content && this.content?.externalId) {\n // this.applyNewServiceSelections = true\n // }\n \n if (this.data) {\n this.selectionType = this.data?.condition?.entity;\n }\n\n this.isEntityCustomField = this.checkIfCustomeField(this.data.condition);\n if (this.isEntityCustomField) {\n this.customeFieldValues = this.accessControlService.customesFieldData().find((ele: any) => ele?.value === this.data.condition.entity);\n this.selectionType = NsAccessControlConfig.SelectionType.CustomField;\n }\n\n if (this.data && this.data.selected && this.data.selected.length) {\n if (this.selectionType === NsAccessControlConfig.SelectionType.Batch) {\n this.selectedData = [...this.data.selected.map((ele: any) => _.toNumber(ele))];\n this.selectedDataTemp = [...this.selectedData];\n } else if (this.selectionType === NsAccessControlConfig.SelectionType.CentralDeputation) {\n this.selectedCentralDeputation = this.data.selected[0] === 'true' || this.data.selected[0] === true;\n } else {\n this.selectedData = [...this.data.selected];\n this.selectedDataTemp = [...this.selectedData];\n }\n\n if (this.application === NsAccessControlConfig.Application.MDO) {\n this.selectedServiceType = \"All Services\";\n }\n\n this.activeTab = this.data?.activeTabSelected || 0;\n this.filterValue = this.data?.activeTabSelected > 0 ? \"selected\" : \"all\";\n }\n\n if (this.selectionType === NsAccessControlConfig.SelectionType.CentralDeputation) {\n this.selectedDataTemp = [this.selectedCentralDeputation];\n }\n\n // Subscribe to search control changes\n this.searchControl.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((query: string) => {\n if (this.selectionType) {\n switch (this.selectionType) {\n case this.selectionTypeEnum.Service:\n this.getServicesList(query);\n break;\n case this.selectionTypeEnum.Cadre:\n this.getCadreList(query);\n break;\n case this.selectionTypeEnum.Batch:\n this.getBatchList(query);\n break;\n }\n }\n });\n\n this.initializeDisplay();\n }\n\n initializeDisplay(): void {\n switch (this.selectionType) {\n case NsAccessControlConfig.SelectionType.Organizations:\n if (this.activeTab === 0) {\n this.selectedCharacterRange = \"A\";\n this.getOrganisationsList(\"\", [], this.selectedCharacterRange);\n } else {\n this.getOrganisationsList(\"\", this.selectedData, undefined);\n this.alphabet = [];\n }\n this.radioSelections = this.accessControlCriteriaSelection.organizationRadioSelection;\n break;\n case NsAccessControlConfig.SelectionType.Designation:\n \n // For isCCA = false , fetch designations within their orgs only\n if (!this.isCCA && this.application === NsAccessControlConfig.Application.MDO) {\n this.orgSelectionIds = this.accessControlConfig.userConfig.org?.rootOrgId ? [this.accessControlConfig.userConfig.org?.rootOrgId] : [];\n } else {\n this.orgSelectionIds = this.data?.rule?.conditions?.find(\n (c: any) => c.entity === NsAccessControlConfig.SelectionType.Organizations\n )?.selections;\n }\n\n if(this.orgSelectionIds?.length) {\n this.alphabet = [\"#\", ...\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\".split(\"\")];\n this.selectedCharacterRange = \"#\";\n } else this.selectedCharacterRange = \"A\";\n\n if (this.activeTab === 0) {\n this.getDesignationsList(this.paginationOffset, \"\", [], this.selectedCharacterRange);\n } else {\n this.getDesignationsList(this.paginationOffset, \"\", this.selectedData, undefined);\n this.alphabet = [];\n }\n\n this.radioSelections = this.accessControlCriteriaSelection?.designationRadioSelection;\n break;\n case NsAccessControlConfig.SelectionType.Service:\n this.radioSelections = this.accessControlCriteriaSelection?.servicesRadioSelection;\n this.getServicesList(this.searchControl.value);\n break;\n case NsAccessControlConfig.SelectionType.Cadre:\n this.radioSelections = this.accessControlCriteriaSelection?.cadreRadioSelection;\n this.getCadreList(this.searchControl.value);\n break;\n case NsAccessControlConfig.SelectionType.Batch:\n this.radioSelections = this.accessControlCriteriaSelection?.batchRadioSelection;\n this.getBatchList(this.searchControl.value);\n break;\n case NsAccessControlConfig.SelectionType.Group:\n this.getGroupList();\n break;\n case NsAccessControlConfig.SelectionType.VerificationStatus:\n this.getVerificationStatus();\n break;\n case NsAccessControlConfig.SelectionType.CustomField:\n this.radioSelections = this.accessControlCriteriaSelection[this.customeFieldValues?.value];\n this.getCustomsFieldList();\n break;\n }\n }\n\n onClose(): void {\n this.dialogRef.close();\n }\n\n private getSelectionValue(item: any): any {\n if (typeof item !== \"object\" || item === null) {\n return item\n } else if (\n this.selectionType === NsAccessControlConfig.SelectionType.Cadre ||\n this.selectionType === NsAccessControlConfig.SelectionType.Service ||\n this.selectionType === NsAccessControlConfig.SelectionType.Designation\n ) {\n return item?.name?.toLowerCase() || item?.designation?.toLowerCase();\n } else if (this.selectionType === NsAccessControlConfig.SelectionType.Batch) {\n return Number(item);\n }\n\n return item?.id?.toLowerCase() || item?.identifier?.toLowerCase() || item;\n }\n\n isSelected(item: any): boolean {\n const value = this.getSelectionValue(item);\n const compareList = this.filterValue === \"selected\" ? this.selectedData : this.selectedDataTemp;\n\n return compareList.some(selected => {\n if (typeof selected === 'string' && typeof value === 'string') {\n return selected === value ||\n selected.toLowerCase() === value.toLowerCase() ||\n selected.toUpperCase() === value.toUpperCase();\n } else {\n return selected === value;\n }\n });\n}\n\n toggleSelection(item: any): void {\n const value = this.getSelectionValue(item);\n if (this.filterValue === \"all\") {\n if (this.selectedDataTemp.includes(value)) {\n this.selectedDataTemp = this.selectedDataTemp.filter((v) => v !== value);\n } else {\n this.selectedDataTemp = [...this.selectedDataTemp, value];\n }\n } else if (this.filterValue === \"selected\") {\n if (this.selectedData.includes(value)) {\n this.selectedData = this.selectedData.filter((v) => v !== value);\n } else {\n this.selectedData = [...this.selectedData, value];\n }\n this.selectedDataTemp = [...this.selectedData];\n }\n }\n\n setSelected(): void {\n this.selectedData = [...this.selectedDataTemp];\n this.activeTab = 1;\n }\n\n onFilterChange(event: MatTabChangeEvent): void {\n if ((event?.tab?.textLabel).toLowerCase().includes(\"selected\")) {\n this.filterValue = \"selected\";\n this.searchControl.setValue(\"\");\n } else {\n this.filterValue = \"all\";\n }\n if (this.selectionType === NsAccessControlConfig.SelectionType.Organizations) {\n if (this.activeTab === 0) {\n this.selectedCharacterRange = \"A\";\n this.getOrganisationsList(\"\", [], this.selectedCharacterRange);\n } else {\n this.getOrganisationsList(\"\", this.selectedData, undefined);\n }\n }\n\n if (this.selectionType === NsAccessControlConfig.SelectionType.Designation) {\n if (this.orgSelectionIds?.length) {\n this.alphabet = [\"#\", ...\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\".split(\"\")];\n this.selectedCharacterRange = \"#\";\n } else this.selectedCharacterRange = \"A\"; \n\n if (this.activeTab === 0) {\n this.getDesignationsList(this.paginationOffset, \"\", [], this.selectedCharacterRange);\n } else {\n this.getDesignationsList(this.paginationOffset, \"\", this.selectedData, undefined);\n }\n }\n\n this.getFilteredEntityGrouped();\n if (this.selectionType === NsAccessControlConfig.SelectionType.Batch) {\n this.updateBatchRanges();\n } else {\n this.updateAlphabet();\n }\n\n if (this.selectionType === NsAccessControlConfig.SelectionType.Cadre || this.selectionType === NsAccessControlConfig.SelectionType.Service) {\n this.alphabet = [];\n }\n }\n\n search(): void {\n this.paginationOffset = 0;\n switch (this.selectionType) {\n case NsAccessControlConfig.SelectionType.Designation:\n if (this.filterValue === \"all\" && !this.searchControl.value) {\n this.selectedCharacterRange = \"A\";\n this.updateAlphabet();\n this.getDesignationsList(this.paginationOffset, this.searchControl.value, [], this.selectedCharacterRange);\n } else {\n this.getDesignationsList(this.paginationOffset, this.searchControl.value);\n }\n break;\n case NsAccessControlConfig.SelectionType.Organizations:\n this.selectedCharacterRange = \"A\";\n if (this.filterValue === \"all\" && !this.searchControl.value) this.updateAlphabet();\n this.getOrganisationsList(this.searchControl.value, []);\n break;\n case NsAccessControlConfig.SelectionType.Service:\n this.getServicesList(this.searchControl.value);\n break;\n case NsAccessControlConfig.SelectionType.Cadre:\n this.getCadreList(this.searchControl.value);\n break;\n case NsAccessControlConfig.SelectionType.Batch:\n this.getCadreList(this.searchControl.value);\n break;\n }\n }\n\n getFilteredEntityGrouped(): void {\n this.isLoading = true;\n let filtered = this.dataList;\n\n if (this.filterValue === \"selected\") {\n if (this.selectionType === NsAccessControlConfig.SelectionType.CustomField) {\n const selectedData = this.selectedData.map((ele) => ele.fieldValue);\n filtered = this.dataListDup.filter((item) => this.isSelected(item) && selectedData.includes(item?.fieldValue));\n } else {\n filtered = this.dataListDup.filter(item => {\n const keysToCheck = [item?.name, item?.designation, item?.id, item?.identifier, item];\n return this.isSelected(item) && keysToCheck.some(key =>\n key && this.selectedData.some(selected => {\n if (typeof selected === 'string' && typeof key === 'string') {\n return selected === key ||\n selected.toLowerCase() === key.toLowerCase() ||\n selected.toUpperCase() === key.toUpperCase();\n } else {\n return selected === key;\n }\n })\n );\n });\n }\n }\n\n if (filtered.length === 0) {\n this.groupedEntityData = {};\n this.isLoading = false;\n return;\n }\n\n // For batch, group by range and chunk each range\n if (this.selectionType === this.selectionTypeEnum.Batch) {\n const batchGrouped = this.groupBatchByRange(filtered);\n const chunked: { [key: string]: any[][] } = {};\n for (const key in batchGrouped) {\n chunked[key] = this.chunkArray(batchGrouped[key], 8);\n }\n this.groupedEntityData = chunked;\n this.isLoading = false;\n return;\n }\n\n // For cadre and service, group 8 items irrespective of letter\n if (this.selectionType === this.selectionTypeEnum.Cadre || this.selectionType === this.selectionTypeEnum.Service) {\n // sort the filtered list by name\n filtered = filtered.sort((a, b) => {\n const nameA = a?.name?.toLowerCase() || \"\";\n const nameB = b?.name?.toLowerCase() || \"\";\n return nameA.localeCompare(nameB);\n });\n\n // chunk the filtered list into groups of 8\n const grouped: { [key: string]: any[][] } = {};\n grouped[\"All\"] = this.chunkArray(filtered, 8);\n this.groupedEntityData = grouped;\n this.isLoading = false;\n return;\n }\n\n if(this.selectionType === this.selectionTypeEnum.CustomField) {\n filtered = filtered.sort((a, b) => {\n const nameA = a?.fieldValue?.toLowerCase() || \"\";\n const nameB = b?.fieldValue?.toLowerCase() || \"\";\n return nameA.localeCompare(nameB);\n });\n\n // chunk the filtered list into groups of 8\n const grouped: { [key: string]: any[][] } = {};\n grouped[\"All\"] = this.chunkArray(filtered, 8);\n this.groupedEntityData = grouped;\n this.isLoading = false;\n return;\n }\n\n // For Designation or organizations with search query, don't group by letter\n if ((this.selectionType === this.selectionTypeEnum.Designation || this.selectionType === this.selectionTypeEnum.Organizations) && this.searchControl.value) {\n const grouped: { [key: string]: any[][] } = {};\n grouped[\"All\"] = this.chunkArray(filtered, 8);\n this.groupedEntityData = grouped;\n this.isLoading = false;\n this.alphabet = [];\n return;\n }\n\n // For all other types, group by letter and chunk each group\n const grouped: { [key: string]: any[][] } = {};\n const temp: { [key: string]: any[] } = {};\n for (const org of filtered) {\n let entity = org?.channel || org?.name || org?.designation;\n let letter = entity?.trim()?.charAt(0)?.toUpperCase() || \"#\";\n if (!/^[A-Z]$/.test(letter)) {\n letter = \"#\";\n }\n if (!temp[letter]) temp[letter] = [];\n temp[letter].push(org);\n }\n // Ensure # group is assigned at the end\n const sortedLetters = Object.keys(temp)\n .filter((l) => l !== \"#\")\n .sort();\n if (temp[\"#\"]) sortedLetters.push(\"#\");\n for (const letter of sortedLetters) {\n grouped[letter] = this.chunkArray(temp[letter], 7);\n }\n this.groupedEntityData = grouped;\n this.isLoading = false;\n }\n\n scrollToSection(letter: string) {\n this.paginationOffset = 0;\n if (this.selectionType === NsAccessControlConfig.SelectionType.Organizations && this.filterValue === \"all\" && !this.searchedOrganisationFlagWithQuery) {\n this.selectedCharacterRange = letter;\n this.getOrganisationsList(\"\", [], letter);\n return;\n }\n if (this.selectionType === NsAccessControlConfig.SelectionType.Designation && this.filterValue === \"all\" && !this.searchedDesignationFlagWithQuery) {\n // !this.orgSelectionIds?.length\n this.selectedCharacterRange = letter;\n this.getDesignationsList(this.paginationOffset, \"\", [], letter);\n return;\n }\n\n const section = document.getElementById(`section-${letter}`);\n if (section) {\n this.selectedCharacterRange = letter;\n section.scrollIntoView({ behavior: \"auto\", inline: \"start\" });\n }\n }\n\n private updateAlphabet(): void {\n this.selectedCharacterRange = \"A\";\n const chars = new Set<string>();\n\n const sourceList =\n this.filterValue === \"selected\"\n ? this.dataListDup.filter((item) => this.isSelected(item) && this.selectedData.includes(item?.name || item?.designation || item?.id || item?.identifier || item))\n : this.dataList;\n\n for (const data of sourceList) {\n const value = data?.channel || data?.name || data?.designation || \"\";\n let letter = value.charAt(0)?.toUpperCase() || \"#\";\n if (!/^[A-Z]$/.test(letter)) {\n letter = \"#\";\n }\n chars.add(letter);\n }\n\n const sorted = Array.from(chars)\n .filter((c) => c !== \"#\")\n .sort();\n if (chars.has(\"#\")) sorted.push(\"#\");\n\n // Show all characters for Organizations\n if (\n (this.selectionType === NsAccessControlConfig.SelectionType.Organizations || this.selectionType === NsAccessControlConfig.SelectionType.Designation) &&\n this.filterValue === \"all\" &&\n !this.searchControl.value\n ) {\n if( this.selectionType === NsAccessControlConfig.SelectionType.Designation && this.orgSelectionIds?.length) {\n this.alphabet = [\"#\", ...\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\".split(\"\")];\n this.selectedCharacterRange = \"#\";\n } else {\n this.alphabet = [...\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\".split(\"\"), \"#\"];\n }\n } else {\n this.alphabet = sorted;\n }\n }\n\n get checkIfData(): boolean {\n return (\n (this.groupedEntityData && Object.keys(this.groupedEntityData).length > 0) ||\n (this.selectionType === NsAccessControlConfig.SelectionType.Group && this.dataList.length > 0) ||\n (this.selectionType === NsAccessControlConfig.SelectionType.VerificationStatus && this.dataList.length > 0) ||\n (this.selectionType === NsAccessControlConfig.SelectionType.Designation && this.dataList.length > 0)\n );\n }\n\n onScrollPaginate(event: any): void {\n const threshold = 150;\n const position = event.target.scrollLeft + event.target.offsetWidth;\n const width = event.target.scrollWidth;\n if (width - position < threshold && !this.isLoading && !this.isFetchingMore && this.dataList.length < this.totalItemsCount) {\n this.loadMore();\n }\n }\n\n loadMore(): void {\n if (this.dataList.length >= this.totalItemsCount || this.isFetchingMore) return;\n this.isFetchingMore = true;\n this.paginationOffset += this.accessControlConfig.accessControlCriteriaSelection.paginationLimit || this.paginationLImit;\n \n switch (this.selectionType) {\n case this.selectionTypeEnum.Designation:\n if (this.searchControl.value) this.selectedCharacterRange = \"\";\n this.getDesignationsList(this.paginationOffset, this.searchControl.value, [], this.selectedCharacterRange, true);\n break;\n case this.selectionTypeEnum.Organizations:\n if (this.searchControl.value) this.selectedCharacterRange = \"\";\n this.getOrganisationsList(this.searchControl.value, [], this.selectedCharacterRange, true);\n break;\n }\n }\n\n getOrganisationsList(query: string, selectedData?: string[], character?: string, append: boolean = false): void {\n if (!append) {\n this.isLoading = true;\n }\n \n const pagination = {\n limit: this.accessControlConfig.accessControlCriteriaSelection.paginationLimit || this.paginationLImit,\n offset: this.paginationOffset\n };\n\n this.accessControlService.fetchOrgList(query, pagination, query ? [] : selectedData, character)\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (response) => {\n if (response?.result && response?.result?.response?.content) {\n const newData = response.result.response.content;\n this.dataList = append ? [...this.dataList, ...newData] : newData;\n this.dataListDup = _.uniqWith([...this.dataListDup, ...newData], _.isEqual);\n this.totalItemsCount = response.result.response.count;\n\n if (query) this.searchedOrganisationFlagWithQuery = true;\n else this.searchedOrganisationFlagWithQuery = false;\n\n if (this.filterValue === \"selected\" || query) this.updateAlphabet();\n\n this.getFilteredEntityGrouped();\n } else {\n this.dataList = [];\n this.alphabet = [];\n this.dataListDup = [];\n this.groupedEntityData = {};\n }\n },\n complete: () => {\n this.isLoading = false;\n this.isFetchingMore = false;\n },\n });\n }\n\n getDesignationsList(paginationOffset: number, query: string, selectedData?: string[], character?: string, append: boolean = false): void {\n if (!append) {\n this.isLoading = true;\n }\n\n // // For isCCA = false , fetch designations within their orgs only\n // if(!this.isCCA && this.application === NsAccessControlConfig.Application.MDO) {\n // this.orgSelectionIds = this.accessControlConfig.userConfig.org?.rootOrgId ? [this.accessControlConfig.userConfig.org?.rootOrgId] : [];\n // } else {\n // this.orgSelectionIds = this.data?.rule?.conditions?.find((c: any) => c.entity === NsAccessControlConfig.SelectionType.Organizations)?.selections;\n // }\n if (this.orgSelectionIds?.length && !this.canLoadMasterDesignation) {\n const categories = this.orgSelectionIds.map((ele: string) => `${ele}_${this.ODCSMasterFramework ? this.ODCSMasterFramework : 'odcs'}_designation`);\n this.accessControlService\n .fetchDesignationsWithOrg(paginationOffset, categories, query, query ? [] : selectedData, character)\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (response) => {\n if (response?.result && response?.result?.Term) {\n // const newData = response?.result?.Term;\n const newData = _.uniqBy(response.result.Term, (item: any) => item?.identifier && item?.name);\n\n this.dataList = append ? [...this.dataList, ...newData] : newData;\n this.dataListDup = _.uniqWith([...this.dataListDup, ...newData], _.isEqual);\n this.totalItemsCount = response?.result?.count;\n\n if (query) this.searchedDesignationFlagWithQuery = true;\n if (this.filterValue === \"selected\" || query) this.updateAlphabet();\n this.getFilteredEntityGrouped();\n\n } else {\n this.dataList = [];\n this.dataListDup = [];\n this.groupedEntityData = {};\n if (query) this.alphabet = [];\n\n if(!query && selectedData?.length) {\n this.loadMoreDesignation();\n }\n }\n },\n complete: () => {\n this.isLoading = false;\n this.isFetchingMore = false;\n },\n });\n } else {\n const pageSize = this.accessControlConfig.accessControlCriteriaSelection.paginationLimit || this.paginationLImit;\n const pagination = {\n pageSize: pageSize,\n pageNumber: Math.floor(paginationOffset / pageSize)\n };\n \n this.accessControlService\n .fetchDesignation(query, pagination, query ? [] : selectedData, character)\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (response) => {\n if (response?.result && response?.result?.result?.data) {\n const newData = response?.result?.result?.data;\n this.dataList = append ? [...this.dataList, ...newData] : newData;\n this.dataListDup = _.uniqWith([...this.dataListDup, ...newData], _.isEqual);\n this.totalItemsCount = response?.result?.result?.totalCount;\n\n if (query) this.searchedDesignationFlagWithQuery = true;\n else this.searchedDesignationFlagWithQuery = false;\n \n if (this.filterValue === \"selected\" || query) this.updateAlphabet();\n this.getFilteredEntityGrouped();\n\n if(!query && selectedData?.length && this.orgSelectionIds?.length) {\n this.canLoadMasterDesignation = true;\n }\n } else {\n this.dataList = [];\n this.dataListDup = [];\n this.groupedEntityData = {};\n this.alphabet = [];\n }\n },\n complete: () => {\n this.isLoading = false;\n this.isFetchingMore = false;\n },\n });\n }\n }\n\n getServicesList(query: string): void {\n if (this.application === NsAccessControlConfig.Application.MDO || this.applyNewServiceSelections) {\n const baseList = this.accessControlService.holdServiceCadrebatch().service;\n const baseServiceNames = new Set(baseList.map(service => service.name?.trim().toLowerCase()));\n \n const cadreDataRaw = this.cadreMappingService.getCadreConfigData()?.civilServiceType?.civilServiceTypeList || [];\n \n // Update service types only once when first loading\n if (this.serviceSelectionTypes.length === 1) {\n this.serviceSelectionTypes = [\"All Services\", ...cadreDataRaw.map((element: any) => element.name)];\n }\n\n let selectedTypes: string[];\n if (this.selectedServiceType === \"All Services\") {\n selectedTypes = cadreDataRaw.map((element: any) => element.name);\n } else {\n selectedTypes = [this.selectedServiceType];\n }\n let allServices: any[] = [];\n cadreDataRaw.forEach((item: any) => {\n if (selectedTypes.includes(item.name) && Array.isArray(item.serviceList)) {\n // Filter services that exist in baseList\n const filteredServices = item.serviceList.filter((service: any) => \n baseServiceNames.has(service.name?.trim().toLowerCase())\n );\n allServices = allServices.concat(filteredServices);\n }\n });\n \n allServices = _.uniqBy(allServices, (service: any) => service.name?.trim().toLowerCase());\n this.dataList = query ? allServices.filter((service) => service.name?.toLowerCase().includes(query.toLowerCase())) : allServices;\n this.dataListDup = _.uniqWith([...this.dataListDup, ...this.dataList], _.isEqual);\n this.alphabet = [];\n this.getFilteredEntityGrouped();\n } else {\n const baseList = this.accessControlService.holdServiceCadrebatch().service;\n this.dataList = query ? baseList.filter((service) => service.name?.toLowerCase().includes(query.toLowerCase())) : baseList;\n this.dataListDup = _.uniqWith([...this.dataListDup, ...this.dataList], _.isEqual);\n this.alphabet = [];\n this.getFilteredEntityGrouped();\n }\n }\n\n getCadreList(query: string): void {\n const baseList = this.accessControlService.holdServiceCadrebatch().cadre;\n this.dataList = query ? baseList.filter((cadre) => cadre.name?.toLowerCase().includes(query.toLowerCase())) : baseList;\n this.dataListDup = _.uniqWith([...this.dataListDup, ...this.dataList], _.isEqual);\n\n this.alphabet = [];\n this.getFilteredEntityGrouped();\n }\n\n getBatchList(query: string): void {\n const baseList = this.accessControlService.holdServiceCadrebatch().batch;\n this.dataList = query ? baseList.filter((batch) => batch.toString().includes(query)) : baseList;\n this.dataListDup = _.uniqWith([...this.dataListDup, ...this.dataList], _.isEqual);\n\n this.updateBatchRanges();\n this.getFilteredEntityGrouped();\n }\n\n getGroupList(): void {\n this.isLoading = true;\n this.accessControlService\n .fetchGroupsList()\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (response: any) => {\n if (response?.result && response?.result?.response) {\n this.dataList = response.result.response;\n }\n },\n complete: () => {\n this.isLoading = false;\n },\n });\n }\n\n getVerificationStatus(): void {\n this.dataList = this.accessControlCriteriaSelection.verificationStatus;\n }\n\n getCustomsFieldList(): void {\n if(this.customeFieldValues?.reversedOrderCustomFieldData?.length) {\n const mappedValues = this.customeFieldValues?.reversedOrderCustomFieldData;\n \n this.dataList = mappedValues || [];\n this.dataListDup = _.uniqWith([...mappedValues], _.isEqual);\n this.alphabet = [];\n \n if (this.data && this.data.selected && Array.isArray(this.data.selected) && this.data.selected.length) {\n if (this.data.selected.every((item) => typeof item === \"string\")) {\n const dataFields = this.dataList.filter((ele) => this.data.selected.includes(ele?.fieldValue));\n this.selectedData = [...dataFields];\n this.selectedDataTemp = [...this.selectedData];\n }\n }\n this.getFilteredEntityGrouped();\n \n } else {\n this.dataList = []\n this.dataListDup = []\n this.getFilteredEntityGrouped();\n }\n \n }\n\n updateBatchRanges(): void {\n const isSelectedFilter = this.filterValue === \"selected\";\n\n const sourceList = isSelectedFilter ? this.dataListDup.filter((item) => this.isSelected(item) && this.selectedData.includes(item)) : this.dataList;\n\n const validLabels: string[] = [];\n\n for (const { label, start, end } of BATCH_RANGES) {\n const hasItemInRange = sourceList.some((item) => item >= start && item <= end);\n if (hasItemInRange) {\n validLabels.push(label);\n }\n }\n\n this.batchRanges = validLabels;\n }\n\n groupBatchByRange(batchList: number[]) {\n const grouped: { [key: string]: number[] } = {};\n for (const range of BATCH_RANGES) {\n grouped[range.label] = batchList.filter((year) => year >= range.start && year <= range.end);\n }\n return grouped;\n }\n\n getModalTitle(): string {\n switch (this.selectionType) {\n case NsAccessControlConfig.SelectionType.Designation:\n return \"Select Designation\";\n case NsAccessControlConfig.SelectionType.Organizations:\n return \"Select Organisation\";\n case NsAccessControlConfig.SelectionType.Service:\n return \"Select Services\";\n case NsAccessControlConfig.SelectionType.Cadre:\n return \"Select Cadre\";\n case NsAccessControlConfig.SelectionType.Batch:\n return \"Select Batch\";\n case NsAccessControlConfig.SelectionType.Group:\n return \"Select Group\";\n case NsAccessControlConfig.SelectionType.VerificationStatus:\n return \"Verification Status\";\n case NsAccessControlConfig.SelectionType.CustomField:\n return `Select ${this.capitalizeFirstLetter(this.customeFieldValues?.label)}` || \"Select Value\";\n case NsAccessControlConfig.SelectionType.CentralDeputation:\n return \"Central Deputation\";\n }\n return \"\";\n }\n\n applySelections(): void {\n if (\n this.selectionType === NsAccessControlConfig.SelectionType.Group ||\n this.selectionType === NsAccessControlConfig.SelectionType.VerificationStatus ||\n this.selectionType === NsAccessControlConfig.SelectionType.CentralDeputation\n ) {\n this.selectedData = this.selectedDataTemp;\n }\n this.dialogRef.close({\n rule: this.data.rule,\n condition: this.data.condition,\n selected: this.selectedData,\n });\n }\n\n chunkArray<T>(array: T[], chunkSize: number): T[][] {\n const results: T[][] = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n results.push(array.slice(i, i + chunkSize));\n }\n return results;\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n onVerificationChange(event: MatRadioChange) {\n const value = event.value;\n const index = this.selectedDataTemp.indexOf(value);\n if (index > -1) {\n this.selectedDataTemp.splice(index, 1);\n } else {\n this.selectedDataTemp.push(value);\n }\n }\n\n isSelectedVerification(event: any): boolean {\n return this.selectedDataTemp.includes(event?.value);\n }\n\n disableOrganisationIfModerated(item: any): boolean {\n const value = this.getSelectionValue(item);\n\n // // Case 1: It's the user's own root org AND content is MDO-specific\n // const isOwnRootOrgAndMdoSpecific =\n // value === this.userProfile?.rootOrgId &&\n // this.content?.accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC;\n\n // // Case 2: Org is already selected AND content is/was Live → prevent deselection\n // const isAlreadySelectedAndLive =\n // this.data.selected.includes(value) &&\n // (this.content?.status === \"Live\" || this.content?.prevStatus === \"Live\");\n\n // // Disable if EITHER condition is true\n // return isOwnRootOrgAndMdoSpecific || isAlreadySelectedAndLive;\n\n if (value === this.userProfile?.rootOrgId && this.content?.accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC) return true;\n return false;\n }\n\n disabledVerifiedIfModerated(item: any): boolean {\n // const isVerifiedOption = item?.value === \"VERIFIED\";\n // const isMdoSpecific = this.content?.accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC;\n\n // const isSelectedAndLive = this.data.selected.includes(item?.value) && (this.content?.status === \"Live\" || this.content?.prevStatus === \"Live\");\n\n // return isMdoSpecific && (isVerifiedOption || isSelectedAndLive);\n if (item?.value === \"VERIFIED\" && this.content?.accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC) return true;\n return false;\n }\n\n // On Mdo Portal, Service Selection Type Change\n onChangeServiceSelectionType(event: MatRadioChange): void {\n const wasSelectAllChecked = this.areAllSelected();\n this.selectedServiceType = event.value;\n this.getServicesList(this.searchControl.value);\n \n // If selectAll was checked before, auto-select all items in the new filtered list\n if (wasSelectAllChecked) {\n this.selectedDataTemp = this.dataList.map((item) => this.getSelectionValue(item));\n this.getFilteredEntityGrouped();\n } \n}\n\n checkIfCustomeField(condition: any): boolean {\n const optionsEntity = this.accessControlConfig.accessControlCriteriaSelection.optionsEntity;\n if (optionsEntity && optionsEntity.length) {\n const matched = optionsEntity.find((ele: any) => ele?.value === condition?.entity);\n return matched?.isCustomField || false;\n }\n return false;\n }\n\n isCentralDeputationSelected(isDeputation: string): boolean {\n return this.selectedDataTemp.includes(isDeputation);\n }\n\n onCentralDeputationChange(event: any): void {\n const isChecked = event?.target?.checked;\n this.selectedDataTemp = [isChecked];\n }\n\n selectAvailableOptions(event: MatCheckboxChange): void {\n const checked = event.checked;\n const value = event.source.value;\n\n if (!checked) {\n this.selectedDataTemp = [];\n return;\n }\n\n switch (value) {\n case \"selectAll\":\n this.selectedDataTemp = this.dataList.map((item) => this.getSelectionValue(item));\n break;\n case \"isCCA\":\n this.selectedDataTemp = this.dataList.filter((item) => item?.iscca === true).map((item) => this.getSelectionValue(item));\n break;\n }\n\n switch (this.selectionType) {\n case this.selectionTypeEnum.Organizations:\n case this.selectionTypeEnum.Designation:\n case this.selectionTypeEnum.Group:\n case this.selectionTypeEnum.CustomField:\n case this.selectionTypeEnum.Cadre:\n case this.selectionTypeEnum.Batch:\n this.getFilteredEntityGrouped();\n break;\n }\n }\n\n areAllSelected(): boolean {\n if (!this.dataList.length) return false;\n return this.dataList.every((item) => this.selectedDataTemp.includes(this.getSelectionValue(item)));\n }\n\n isOptionSelected(value: string): boolean {\n switch (value) {\n case \"selectAll\":\n return this.areAllSelected();\n default:\n return false;\n }\n }\n\n capitalizeFirstLetter(str: string) {\n if (typeof str !== \"string\" || str.length === 0) {\n return str;\n }\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n loadMoreDesignation(): void {\n this.canLoadMasterDesignation = true;\n if(this.filterValue === \"all\") {\n this.getDesignationsList(this.paginationOffset, '', [], 'A', false);\n } else {\n this.getDesignationsList(this.paginationOffset, '', this.selectedData, '', false);\n }\n }\n\n}\n","<div class=\"flex justify-between dialog-heading items-center\">\n <h2 mat-dialog-title class=\"mb-0\">{{ getModalTitle() }}</h2>\n <button mat-icon-button class=\"close-button\" (click)=\"onClose()\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n\n<div mat-dialog-content class=\"dialog-body-wrapper\">\n <ng-container\n *ngIf=\"\n selectionType === selectionTypeEnum.Designation ||\n selectionType === selectionTypeEnum.Service ||\n selectionType === selectionTypeEnum.Cadre ||\n selectionType === selectionTypeEnum.Batch ||\n selectionType === selectionTypeEnum.Organizations ||\n selectionType === selectionTypeEnum.CustomField\n \"\n >\n <!-- Search Box -->\n <ng-container *ngIf=\"selectionType !== selectionTypeEnum.CustomField\">\n <div class=\"search-container flex items-center gap-4\">\n <div class=\"mat-full-radius flex-grow\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-icon matPrefix>search</mat-icon>\n <input matInput placeholder=\"Type here to search...\" [formControl]=\"searchControl\" (keyup.enter)=\"search()\" />\n </mat-form-field>\n </div>\n <button mat-flat-button [disabled]=\"!searchControl.value\" class=\"flex items-center rounded-full new-bg-color font-bold text-sm text-white search-button\" (click)=\"search()\">Search</button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"selectionType === selectionTypeEnum.Organizations\">\n <div class=\"lato-normal-text-line mt-2 ml-4\">Select the Organizations only if this plan needs to be made visible to only selective organizations users.</div>\n </ng-container>\n <ng-container *ngIf=\"selectionType === selectionTypeEnum.Designation\">\n <div class=\"lato-normal-text-line mt-2 ml-4\">Select the Designations only if this plan needs to be made visible to only selective designation users.</div>\n </ng-container>\n\n <div class=\"p-4 pl-0 mt-2\">\n <!-- Filter Options -->\n <ng-container *ngIf=\"selectionType !== selectionTypeEnum.Group && selectionType !== selectionTypeEnum.VerificationStatus\">\n <div class=\"filter-options\">\n <mat-tab-group #tabGroup dynamicHeight mat-stretch-tabs=\"false\" mat-align-tabs=\"start\" (selectedTabChange)=\"onFilterChange($event)\" [(selectedIndex)]=\"activeTab\" [animationDuration]=\"100\">\n <mat-tab *ngFor=\"let item of radioSelections\" [label]=\"item.label\">\n <div class=\"org-container\">\n <!-- A-Z Filter Bar -->\n <ng-container *ngIf=\"isLoading\">\n <div class=\"spinner-loader flex items-center justify-center\">\n <mat-spinner></mat-spinner>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!isLoading\">\n <!-- Select all option -->\n <ng-container\n *ngIf=\"\n ( selectionType === selectionTypeEnum.Cadre ||\n selectionType === selectionTypeEnum.CustomField ||\n selectionType === selectionTypeEnum.Service ||\n selectionType === selectionTypeEnum.Batch) &&\n filterValue === 'all'\n \"\n >\n <div class=\"px-2 py-4 options-checkbox\">\n <ng-container *ngFor=\"let item of entityFilterOptions\">\n <mat-checkbox\n class=\"mr-4\"\n [disabled]=\"accessControlCriteriaSelection?.readOnly || data?.disabled\"\n (change)=\"selectAvailableOptions($event)\"\n [value]=\"item?.value\"\n [checked]=\"item?.value === 'selectAll' ? areAllSelected() : isOptionSelected(item?.value)\"\n >\n {{ item?.label }}\n </mat-checkbox>\n </ng-container>\n </div>\n </ng-container>\n <div class=\"alphabet-filter\" *ngIf=\"selectionType !== selectionTypeEnum.Batch && selectionType !== selectionTypeEnum.CustomField && alphabet?.length\">\n <ng-container *ngTemplateOutlet=\"alphabetFilterTemplate; context: { alphabet: alphabet }\"></ng-container>\n </div>\n\n <div class=\"alphabet-filter\" *ngIf=\"selectionType === selectionTypeEnum.Batch\">\n <ng-container *ngFor=\"let letter of batchRanges; let i = index; let last = last\">\n <button\n mat-button\n class=\"range-button px-4\"\n (click)=\"scrollToSection(letter)\"\n [ngClass]=\"{\n 'active-range-btn': selectedCharacterRange === letter\n }\"\n >\n {{ letter }}\n </button>\n <div class=\"divider-apl\" *ngIf=\"!last\"></div>\n </ng-container>\n </div>\n\n <!-- Selections for Service -->\n <ng-container *ngIf=\"selectionType === selectionTypeEnum.Service && (application === APPLICATION_ENUM.MDO || applyNewServiceSelections)\">\n <ng-container *ngIf=\"filterValue === 'all' && selectionType === selectionTypeEnum.Service\">\n <div class=\"flex gap-4 items-center px-2 my-3 options-radio\">\n <mat-radio-group [disabled]=\"accessControlCriteriaSelection?.readOnly || data?.disabled\" \n [(ngModel)]=\"selectedServiceType\" \n (change)=\"onChangeServiceSelectionType($event)\"\n class=\"flex flex-wrap gap-4\">\n <ng-container *ngFor=\"let type of serviceSelectionTypes\">\n <mat-radio-button\n [value]=\"type\"\n [disabled]=\"accessControlCriteriaSelection?.readOnly || data?.disabled\"\n [checked]=\"selectedServiceType === type\"\n class=\"service-radio-btn\"\n >\n {{ type }}\n </mat-radio-button>\n </ng-container>\n </mat-radio-group>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"checkIfData; else noData\">\n <ng-container *ngTemplateOutlet=\"entityListTemplate\"></ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"(selectionType !== selectionTypeEnum.Service)\">\n <ng-container *ngIf=\"checkIfData; else noData\">\n <ng-container *ngTemplateOutlet=\"entityListTemplate\"></ng-container>\n </ng-container>\n </ng-container>\n\n <ng-template #noData>\n <div class=\"no-data p-4 flex flex-column items-center justify-center\">\n <img src=\"/assets/icons/no-events.png\" alt=\"no-data\" />\n <span class=\"font-bold\">No information to display yet</span>\n\n <ng-container *ngIf=\"selectionType === selectionTypeEnum.Designation && orgSelectionIds?.length && !searchControl.value\">\n <ng-container *ngIf=\"selectedCharacterRange === '#' && application !== APPLICATION_ENUM.MDO\">\n <div class=\"lato-normal-text-line text-center mt-2 mb-2\">Designations are not available for the selected organizations.</div>\n <button (click)=\"loadMoreDesignation()\" mat-flat-button class=\"flex items-center justify-center rounded-full new-bg-color font-bold text-sm text-white mt-2\">\n Load Master Designations\n </button>\n </ng-container>\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n </div>\n </mat-tab>\n </mat-tab-group>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"selectionType === selectionTypeEnum.Group\">\n <ng-container *ngIf=\"isLoading\">\n <div class=\"spinner-loader flex items-center justify-center\">\n <mat-spinner></mat-spinner>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!isLoading\">\n <div class=\"flex gap-16 items-center p-4 options-checkbox\">\n <ng-container *ngFor=\"let group of dataList\">\n <mat-checkbox [disabled]=\"accessControlCriteriaSelection?.readOnly || data?.disabled\" [checked]=\"isSelected(group)\" (change)=\"toggleSelection(group)\" [title]=\"group\">\n {{ group }}\n </mat-checkbox>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"selectionType === selectionTypeEnum.VerificationStatus\">\n <div class=\"flex gap-16 items-center p-4 options-checkbox\">\n <ng-container *ngFor=\"let group of dataList\">\n <mat-checkbox\n [disabled]=\"accessControlCriteriaSelection?.readOnly || data?.disabled || disabledVerifiedIfModerated(group)\"\n [checked]=\"isSelectedVerification(group)\"\n (change)=\"onVerificationChange(group)\"\n [title]=\"group?.label\"\n >\n {{ group?.label }}\n </mat-checkbox>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"selectionType === selectionTypeEnum.CentralDeputation\">\n <div class=\"flex items-start p-4 flex-column\">\n <div class=\"lato-normal-text-line\">When ON, this training plan will be allocated to all AIS officials marked as on Central Deputation in their profiles.</div>\n <div class=\"toggle-central-deputation flex gap-4 items-end\">\n <div class=\"toggle-central-deputation lato-normal-text-line\">Central Deputation</div>\n <div class=\"checkbox-toggle\">\n <input\n [disabled]=\"accessControlCriteriaSelection?.readOnly || data?.disabled\"\n [(ngModel)]=\"selectedCentralDeputation\"\n (change)=\"onCentralDeputationChange($event)\"\n id=\"switch-onDeputation\"\n type=\"checkbox\"\n />\n <label for=\"switch-onDeputation\" [attr.data-disabled]=\"accessControlCriteriaSelection?.readOnly || data?.disabled\"></label>\n </div>\n </div>\n </div>\n </ng-container>\n</div>\n\n<mat-dialog-actions>\n <ng-container *ngIf=\"checkIfData || selectionType === selectionTypeEnum.CentralDeputation\">\n <div class=\"flex gap-4 items-center ml-auto mr-1 apply-button-container my-2\">\n <ng-container *ngIf=\"selectionType !== selectionTypeEnum.VerificationStatus && selectionType !== selectionTypeEnum.CentralDeputation\">\n <div class=\"text-xs\">{{ filterValue === \"all\" ? selectedDataTemp?.length : selectedData?.length }} items selected</div>\n </ng-container>\n <ng-container\n *ngIf=\"selectionType === selectionTypeEnum?.VerificationStatus || selectionType === selectionTypeEnum?.Group || selectionType === selectionTypeEnum?.CentralDeputation || activeTab === 1\"\n >\n <button\n mat-flat-button\n [disabled]=\"(selectedData.length === 0 && selectedDataTemp.length === 0) || accessControlCriteriaSelection?.readOnly || data?.disabled\"\n (click)=\"applySelections()\"\n class=\"flex items-center justify-center rounded-full new-bg-color font-bold text-sm text-white mt-2\"\n >\n Apply\n </button>\n </ng-container>\n <ng-container\n *ngIf=\"selectionType !== selectionTypeEnum?.VerificationStatus && selectionType !== selectionTypeEnum?.Group && selectionType !== selectionTypeEnum.CentralDeputation && activeTab === 0\"\n >\n <button\n mat-flat-button\n [disabled]=\"selectedDataTemp.length === 0 || accessControlCriteriaSelection?.readOnly || data?.disabled\"\n (click)=\"setSelected()\"\n class=\"flex items-center justify-center rounded-full new-bg-color font-bold text-sm text-white mt-2\"\n >\n {{ getModalTitle() }}\n </button>\n </ng-container>\n </div>\n </ng-container>\n</mat-dialog-actions>\n\n<ng-template #entityListTemplate>\n <div class=\"flex overflow-x-auto\" (scroll)=\"onScrollPaginate($event)\">\n <ng-container *ngFor=\"let group of groupedEntityData | keyvalue\">\n <div class=\"org-column p-2 mr-4\" [attr.id]=\"'section-' + group.key\">\n <div class=\"org-list\">\n <div class=\"batch-range-columns\">\n <ng-container *ngIf=\"group.value && group.value.length\">\n <ng-container *ngFor=\"let column of group.value\">\n <div class=\"batch-column\">\n <div *ngFor=\"let entity of column\" class=\"org-card py-2\">\n <ng-container\n *ngIf=\"\n selectionType === selectionTypeEnum.Designation ||\n selectionType === selectionTypeEnum.Organizations ||\n selectionType === selectionTypeEnum.Service ||\n selectionType === selectionTypeEnum.Cadre ||\n selectionType === selectionTypeEnum.CustomField\n \"\n >\n <mat-checkbox\n [disabled]=\"accessControlCriteriaSelection?.readOnly || disableOrganisationIfModerated(entity) || data?.disabled\"\n [checked]=\"isSelected(entity)\"\n (change)=\"toggleSelection(entity)\"\n [title]=\"entity?.fieldValue || entity?.name || entity?.designation || entity?.channel\"\n >\n {{ entity?.fieldValue || entity?.name || entity?.designation || entity?.channel }}\n </mat-checkbox>\n </ng-container>\n <ng-container *ngIf=\"selectionType === selectionTypeEnum.Batch\">\n <mat-checkbox [disabled]=\"accessControlCriteriaSelection?.readOnly || data?.disabled\" [checked]=\"isSelected(entity)\" (change)=\"toggleSelection(entity)\" [title]=\"entity\">\n {{ entity }}\n </mat-checkbox>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #alphabetFilterTemplate let-alphabet=\"alphabet\">\n <ng-container *ngFor=\"let letter of alphabet; let i = index; let last = last\">\n <button\n mat-button\n class=\"letter-button\"\n (click)=\"scrollToSection(letter)\"\n [ngClass]=\"{\n 'active-range-btn': selectedCharacterRange === letter\n }\"\n >\n {{ letter }}\n </button>\n <div class=\"divider-apl\" *ngIf=\"!last\"></div>\n </ng-container>\n</ng-template>\n","import { Component, inject } from \"@angular/core\";\nimport { MAT_DIALOG_DATA, MatDialogRef } from \"@angular/material/dialog\";\nimport { NsAccessControlConfig } from \"../../../_models/access-control.model\";\n\n@Component({\n selector: \"sb-uic-confirm-dialog\",\n templateUrl: \"./confirm-dialog.component.html\",\n styleUrls: [\"./confirm-dialog.component.scss\"],\n standalone: false\n})\nexport class ConfirmDialogComponent {\n public readonly data = inject<{ additionalData: string; type: \"delete\" | \"confirm-access-type\" }>(MAT_DIALOG_DATA);\n constructor(public dialogRef: MatDialogRef<ConfirmDialogComponent>) {}\n\n confirmNo(): void {\n this.dialogRef.close({ action: NsAccessControlConfig.IActions.Reject });\n }\n confirmYes(): void {\n this.dialogRef.close({ action: NsAccessControlConfig.IActions.Confirm });\n }\n}\n","<div class=\"dialog-confirm p-4\" *ngIf=\"data && data?.type !== 'confirm-reset-fields'\">\n <div class=\"flex items-center justify-center flex-column\">\n <div class=\"icon mb-6\" [ngSwitch]=\"data.type\">\n <mat-icon *ngSwitchCase=\"'delete'\">delete</mat-icon>\n <mat-icon *ngSwitchCase=\"'confirm-access-type'\" svgIcon=\"radio-on\"></mat-icon>\n <mat-icon *ngSwitchCase=\"'confirm-apply-accesscontrol-for-live'\" svgIcon=\"radio-on\"></mat-icon>\n </div>\n\n <div [ngSwitch]=\"data?.type\">\n <ng-container *ngSwitchCase=\"'delete'\">\n <div class=\"confirm-title text-center\">Are you sure you want to delete {{ data?.additionalData || \"\" }} ?</div>\n <div class=\"confirm-desc text-center\">\n Once deleted, it cannot be restored, and any access permissions associated with it will be removed. This action is irreversible.\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'confirm-access-type'\">\n <div class=\"confirm-title text-center\">Are you sure you want to opt for \"Public\" access?</div>\n <div class=\"confirm-desc text-center\">Or else please cancel and select <strong>\"Custom\"</strong> for the restricted content access.</div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'confirm-save-without-user-group'\">\n <div class=\"confirm-title text-center\">Are you sure you want to save without adding user group/s?</div>\n <div class=\"confirm-desc text-center\">Or please cancel and <strong>“Add User Group”</strong> for the restricted content access,</div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'confirm-apply-accesscontrol-for-live'\">\n <div class=\"confirm-title text-center\">\n Are you sure you want to apply changes without any more modifications?\n </div>\n <div class=\"confirm-desc text-center\">\n <p><strong>These changes will go live immediately</strong> and affect <strong>all enrolled learners</strong>.</p>\n </div>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"data?.type === 'delete'\">\n <div class=\"confirm-actions flex items-center gap-4 mt-4\">\n <button mat-flat-button class=\"mat-btn-outline mt-2 gap-2 border-radius-4\" (click)=\"confirmNo()\">No</button>\n <button mat-flat-button class=\"new-bg-color text-white mt-2\" (click)=\"confirmYes()\">Yes</button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"data?.type === 'confirm-access-type' || data?.type === 'confirm-save-without-user-group' || data?.type === 'confirm-apply-accesscontrol-for-live'\">\n <div class=\"confirm-actions flex items-center gap-4 mt-4\">\n <button mat-flat-button class=\"mat-btn-outline mt-2 gap-2 border-radius-4\" (click)=\"confirmNo()\">Cancel</button>\n <button mat-flat-button class=\"new-bg-color text-white mt-2\" (click)=\"confirmYes()\">Yes</button>\n </div>\n </ng-container>\n </div>\n</div>\n\n<div class=\"dialog-confirm p-4\" *ngIf=\"data && data?.type === 'confirm-reset-fields'\">\n <div class=\"flex items-center justify-center flex-column\">\n\n <div class=\"icon mb-6\" [ngSwitch]=\"data.type\">\n <mat-icon *ngSwitchCase=\"'confirm-reset-fields'\" svgIcon=\"radio-on\"></mat-icon>\n </div>\n\n <div [ngSwitch]=\"data?.type\">\n <ng-container *ngSwitchCase=\"'confirm-reset-fields'\">\n <div class=\"confirm-title text-center\">\n Any changes in this condition would reset the below AND conditions, do you still wish to continue?\n </div>\n <!-- Optional description div can go here -->\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"data?.type === 'confirm-reset-fields'\">\n <div class=\"confirm-actions flex items-center justify-center gap-4 mt-4\">\n <button mat-flat-button class=\"mat-btn-outline mt-2 gap-2\" (click)=\"confirmNo()\">Cancel</button>\n <button mat-flat-button class=\"new-bg-color text-white mt-2\" (click)=\"confirmYes()\">Confirm</button>\n </div>\n </ng-container>\n\n </div>\n</div>\n\n\n","import { Component, OnInit } from \"@angular/core\";\nimport { MatDialogRef } from \"@angular/material/dialog\";\nimport { AccessControlService } from \"../../../_services/access-control.service\";\nimport { NsAccessControlConfig } from \"../../../_models/access-control.model\";\n\n@Component({\n selector: \"sb-uic-access-control-guide\",\n templateUrl: \"./access-control-guide.component.html\",\n styleUrls: [\"./access-control-guide.component.scss\"],\n standalone: false\n})\nexport class AccessControlGuideComponent implements OnInit {\n accessControlGuideConfig: NsAccessControlConfig.IAccessControlGuide;\n constructor(public dialogRef: MatDialogRef<AccessControlGuideComponent>, private accessControlService: AccessControlService) {}\n\n ngOnInit(): void {\n this.accessControlGuideConfig = this.accessControlService.accessControlConfig().accessControlGuide;\n }\n\n onClose() {\n this.dialogRef.close();\n }\n}\n","<div class=\"flex justify-between dialog-heading items-center\">\n <h2 mat-dialog-title class=\"mb-0\">Access Control Guide</h2>\n <button mat-icon-button class=\"close-button\" (click)=\"onClose()\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n<div mat-dialog-content>\n <div class=\"video-wrapper\">\n <video [src]=\"accessControlGuideConfig?.instructionVideoPath\" class=\"w-full h-full\" autoplay controls></video>\n </div>\n\n <div class=\"guide-information\">\n <mat-tab-group dynamicHeight mat-stretch-tabs=\"false\" mat-align-tabs=\"start\">\n <mat-tab label=\"Summary\" *ngIf=\"accessControlGuideConfig?.canShowSummaryTab\">\n <div class=\"about-guide text-xs text-dark py-4\">\n {{ accessControlGuideConfig?.summaryText || \"\" }}\n </div>\n </mat-tab>\n <!-- <mat-tab label=\"Transcript\" *ngIf=\"accessControlGuideConfig?.canShowTranscriptTab\">No data yet </mat-tab> -->\n </mat-tab-group>\n </div>\n</div>\n","import { AfterViewInit, Component, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { InviteUsersComponent } from \"../dialogs/invite-users/invite-users.component\";\nimport { IUserGroupRequest, NsAccessControlConfig } from \"../../_models/access-control.model\";\nimport { FormBuilder, FormGroup, FormArray, Validators } from \"@angular/forms\";\nimport { AccessControlService } from \"../../_services/access-control.service\";\nimport { EntitySelectionsComponent } from \"../dialogs/entity-selections/entity-selections.component\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { CadreMappingService } from \"../../_services/cadre-mapping.service\";\nimport { SnackbarComponent } from \"../../components/snackbar/snackbar.component\";\nimport { MatSnackBar } from \"@angular/material/snack-bar\";\nimport { ConfirmDialogComponent } from \"../dialogs/confirm-dialog/confirm-dialog.component\";\nimport { AccessControlGuideComponent } from \"../dialogs/access-control-guide/access-control-guide.component\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { MatRadioChange } from \"@angular/material/radio\";\nimport * as _ from \"lodash\";\n\n@Component({\n selector: \"sb-uic-access-control\",\n templateUrl: \"./access-control.component.html\",\n styleUrls: [\"./access-control.component.scss\"],\n standalone: false\n})\nexport class AccessControlComponent implements OnInit, AfterViewInit, OnDestroy {\n @Input() config!: NsAccessControlConfig.IAccessControlConfig;\n @Input() contentId: string = \"\";\n @Input() content: any;\n @Input() tempAccessControl: any;\n\n @Output() accessControlData: EventEmitter<{ userGroup: any; accessType: string }> = new EventEmitter();\n @Output() refreshContentMeta: EventEmitter<boolean> = new EventEmitter();\n @Output() sendForCQF: EventEmitter<boolean> = new EventEmitter();\n\n private destroy$ = new Subject<void>();\n\n accessType: NsAccessControlConfig.ITypeAccessType = NsAccessControlConfig.IAccessTypes.Public;\n accessTypeDup: NsAccessControlConfig.ITypeAccessType = NsAccessControlConfig.IAccessTypes.Public;\n ACCESS_TYPE_ENUM = NsAccessControlConfig.IAccessTypes;\n ACCESS_SETTING_ENUM = NsAccessControlConfig.IAccessSetting;\n\n isLoading = false;\n isVisibilityEnabled: boolean = true;\n filterCriteria: boolean = false;\n\n defaultConditionRelationship: string = \"AND\";\n defaultUserGroupRelationship: string = \"OR\";\n\n accessControlCriteriaSelection!: NsAccessControlConfig.IAccessControlCriteriaSelection;\n usersTableConfig: NsAccessControlConfig.ITableConfig;\n accessControlForm!: FormGroup;\n MDO_SPECIFIC = NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC;\n MDO_APPLICATION = NsAccessControlConfig.Application.MDO;\n CBP_APPLICATION = NsAccessControlConfig.Application.Creation_Portal;\n\n cadreConfigData: any;\n isSaveFltrBtnDisabled = true;\n isAddUserGroupBtnDisabled = false;\n isSaving = false;\n userCount: any = {};\n\n initialUserGroupValue: any;\n\n canShowAccessControlTypeRadio = true;\n shouldShowVisibilityToggle = true;\n isCCA = false;\n mdoContent: any;\n\n constructor(\n private dialog: MatDialog,\n private fb: FormBuilder,\n private accessControlService: AccessControlService,\n private cadreMappingService: CadreMappingService,\n private snackbar: MatSnackBar\n ) {}\n\n async ngOnInit(): Promise<void> {\n this.initForm();\n\n if (this.config?.application === NsAccessControlConfig.Application.MDO) {\n this.isCCA = this.config?.userConfig?.org?.isCCA ?? false;\n if (!this.isCCA) {\n this.config.accessControlCriteriaSelection.optionsEntity = _.filter(\n this.config.accessControlCriteriaSelection.optionsEntity,\n (entity) => entity.value !== NsAccessControlConfig.SelectionType.Organizations\n );\n }\n\n this.mdoContent = this.config?.mdoContent\n }\n\n this.config.content = this.content;\n this.accessControlCriteriaSelection = this.config?.accessControlCriteriaSelection;\n\n if (this.accessControlCriteriaSelection.readOnly) {\n this.accessControlCriteriaSelection.readOnly = false;\n }\n\n this.usersTableConfig = this.config?.usersTableConfig;\n\n // Dont call read api for MDO its only for CBP for now\n if (this.config.application !== NsAccessControlConfig.Application.MDO) {\n this.getAccessControl();\n }\n\n if (!this.cadreConfigData) {\n this.fetchCadreConfigData();\n }\n\n if (this.content && !this.content?.externalId) {\n const isAllUsers = this.content.accessSetting === NsAccessControlConfig.IAccessSetting.ALL_USERS;\n const isCustomAccess =\n this.content.accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC ||\n this.content.accessSetting === NsAccessControlConfig.IAccessSetting.CUSTOME_USER;\n const isComprehensiveCategory = this.content.courseCategory === \"Comprehensive Assessment Program\";\n\n const accessTypePublic = _.find(this.accessControlCriteriaSelection?.accessTypes, {\n value: NsAccessControlConfig.IAccessTypes.Public\n });\n\n if (isAllUsers) {\n this.accessType = NsAccessControlConfig.IAccessTypes.Public;\n if (accessTypePublic) accessTypePublic.disabled = false;\n\n if (this.content.accessSettingsEnabled) {\n this.accessType = NsAccessControlConfig.IAccessTypes.Custom;\n }\n }\n\n if (isCustomAccess || isComprehensiveCategory) {\n this.accessType = NsAccessControlConfig.IAccessTypes.Custom;\n if (accessTypePublic) accessTypePublic.disabled = true;\n }\n\n this.processConditionsForContentType();\n } else if(this.config.application === NsAccessControlConfig.Application.MDO){ \n // Condition for MDO\n this.accessType = NsAccessControlConfig.IAccessTypes.Custom;\n } \n // For curated content of marketplace with external id \n else if(this.content && this.content?.externalId) {\n this.accessType = NsAccessControlConfig.IAccessTypes.Custom;\n }\n\n this.canShowAccessControlTypeRadio = this.config?.accessControlCriteriaSelection?.canShowAccessTypeRadio ?? true;\n this.shouldShowVisibilityToggle = this.config?.accessControlCriteriaSelection?.shouldShowVisibilityToggle ?? true;\n this.accessTypeDup = this.accessType;\n\n // Add config to signal \n this.accessControlService.accessControlConfig.set(this.config);\n\n if(this.config.application === this.MDO_APPLICATION) {\n if (this.tempAccessControl) {\n this.processTempAccessControl(this.tempAccessControl);\n } else {\n // Don't create a default user group yet - wait for API data to load\n // If no data is loaded, the component using this will call addUserGroup\n setTimeout(() => {\n this.initialUserGroupValue = JSON.stringify(this.accessControlForm.getRawValue().userGroup);\n this.setupFormChangeDetection();\n }, 0);\n }\n }\n\n }\n\n ngAfterViewInit(): void {\n if (this.config?.visiblilityOnOff?.default !== \"on\") {\n this.isVisibilityEnabled = false;\n }\n localStorage.removeItem(\"goToSetting\");\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n \n async fetchCadreConfigData(): Promise<void> {\n this.isLoading = true;\n\n const response: any = await this.accessControlService.fetchCadreConfig().catch(() => (this.isLoading = false));\n if (response?.result && response?.result?.response && Object.keys(response?.result?.response)?.length) {\n this.cadreConfigData = response?.result?.response?.value;\n this.cadreMappingService.initialize(this.cadreConfigData);\n\n this.accessControlService.holdServiceCadrebatch.set({\n service: this.cadreMappingService.getAllServices(),\n batch: this.cadreMappingService.getAllBatchYears(),\n cadre: this.cadreMappingService.getAllCadres(),\n });\n\n this.cadreMappingService.setCadreConfigData(this.cadreConfigData);\n\n if (this.config.accessControlCriteriaSelection.allowCustomsField && !this.isCCA) {\n this.getCustomsField();\n } else {\n this.isLoading = false;\n }\n \n }\n }\n\n initForm() {\n this.accessControlForm = this.fb.group({\n userGroup: this.fb.array([])\n });\n }\n\n get userGroup(): FormArray {\n return this.accessControlForm.get(\"userGroup\") as FormArray;\n }\n\n ruleConditions(ruleIndex: number): FormArray {\n return this.userGroup.at(ruleIndex).get(\"conditions\") as FormArray;\n }\n\n onAccessTypeChange(event: MatRadioChange): void {\n const selectedType = event.value;\n (event?.source?._inputElement?.nativeElement as HTMLElement)?.blur();\n if (selectedType === NsAccessControlConfig.IAccessTypes.Public) {\n const dialogRef = this.dialog.open(ConfirmDialogComponent, {\n width: \"470px\",\n data: { type: \"confirm-access-type\" }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result?.action === NsAccessControlConfig.IActions.Confirm) {\n this.accessType = selectedType;\n this.updateContentAccessSetting();\n } else {\n this.accessTypeDup = this.accessType;\n }\n });\n } else {\n this.accessType = selectedType;\n this.updateContentAccessSetting();\n }\n }\n\n addUserGroup() {\n const ruleGroup = this.fb.group({\n id: [uuidv4()],\n name: [`User Group ${this.userGroup.length + 1}`],\n description: [`Description for UserGroup ${this.userGroup.length + 1}`],\n conditions: this.fb.array([this.createConditionGroup(uuidv4(), this.userGroup.length - 1)]),\n isUserGroupDisabled: [false],\n isAddConditionDisabled: [false]\n });\n\n this.userGroup.push(ruleGroup);\n \n // Update Central Deputation availability based on current AIS status\n const hasAIS = this.hasAllIndiaServicesInAnyGroup();\n if (!hasAIS) {\n this.accessControlService.enableDeputation(false);\n }\n }\n\n addCondition(userGroupIndex: number) {\n this.processCadreConfigMapping(userGroupIndex);\n const conditions = this.ruleConditions(userGroupIndex);\n const accessSetting = this.content?.accessSetting;\n\n // Check if organization/users already exists based on access setting\n if (accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC || accessSetting === NsAccessControlConfig.IAccessSetting.CUSTOME_USER) {\n const entityType =\n accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC\n ? NsAccessControlConfig.SelectionType.Organizations\n : NsAccessControlConfig.SelectionType.Users;\n const existingEntity = conditions.controls.some(ctrl => ctrl.get(\"entity\")?.value === entityType);\n\n if (existingEntity) {\n this.callSnackbar(`${entityType.toUpperCase()} is already added in this user group`, \"error\");\n return;\n }\n }\n\n // Check if the last condition's selections are empty\n if (conditions?.length > 0) {\n const lastCondition = conditions.at(conditions.length - 1);\n const selections = lastCondition.get(\"selections\")?.value || [];\n if (selections.length === 0) {\n this.callSnackbar(\"Please select a value for the current condition before adding another one.\", \"error\");\n return;\n }\n }\n\n // Check if user is added in the condition then no more conditions can be added\n if (conditions?.length > 0) {\n const lastCondition = conditions.at(conditions.length - 1);\n const lastEntity = lastCondition.get(\"entity\")?.value;\n if (lastEntity === NsAccessControlConfig.SelectionType.Users) {\n this.callSnackbar(\"Adding further condition is not possible , as you have already added User as condition\", \"error\");\n return;\n }\n }\n\n conditions.push(this.createConditionGroup(uuidv4(), userGroupIndex));\n \n // Update Central Deputation availability based on current AIS status\n const hasAIS = this.hasAllIndiaServicesInAnyGroup();\n if (!hasAIS) {\n this.accessControlService.enableDeputation(false);\n }\n }\n\n createConditionGroup(id: number, userGroupIndex: number): FormGroup {\n let entity = \"\";\n const accessSetting = this.content?.accessSetting;\n if (accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC || accessSetting === NsAccessControlConfig.IAccessSetting.CUSTOME_USER) {\n entity =\n accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC\n ? NsAccessControlConfig.SelectionType.Organizations\n : NsAccessControlConfig.SelectionType.Users;\n this.accessControlCriteriaSelection.optionsEntity.forEach((ele: NsAccessControlConfig.IOptionsEntity) => {\n ele.disabled = ele.value !== entity;\n });\n } else {\n // Don't modify optionsEntity here - it will be handled in onOpeningEntityChange\n // Just reset to default state\n this.accessControlCriteriaSelection.optionsEntity.forEach((ele: NsAccessControlConfig.IOptionsEntity) => {\n ele.disabled = false;\n });\n }\n\n // Disable entity control if readOnly is true\n const isEntityDisabled = !!this.accessControlCriteriaSelection?.readOnly;\n return this.fb.group({\n id: [id],\n entity: [{ value: entity, disabled: isEntityDisabled }, Validators.required],\n conditionType: [{ value: \"is\", disabled: true }, Validators.required],\n selections: [[]]\n });\n }\n\n /**\n * Check if any user group has All India Services selected\n */\n private hasAllIndiaServicesInAnyGroup(): boolean {\n const isAllIndiaService = (serviceName: string): boolean => {\n if (!serviceName) return false;\n const lower = serviceName.toLowerCase();\n return lower.includes(\"all india service\") ||\n lower.includes(\"indian administrative service\") ||\n lower.includes(\"(ias)\") ||\n lower.includes(\"indian police service\") ||\n lower.includes(\"(ips)\") ||\n lower.includes(\"indian forest service\") ||\n lower.includes(\"(ifs)\");\n };\n \n for (let i = 0; i < this.userGroup.length; i++) {\n const conditions = this.ruleConditions(i);\n for (let j = 0; j < conditions.length; j++) {\n const condition = conditions.at(j);\n const entity = condition?.get(\"entity\")?.value;\n const selections = condition?.get(\"selections\")?.value || [];\n \n if (entity === NsAccessControlConfig.SelectionType.Service && selections.length > 0) {\n // Check raw selections\n if (selections.some((s: string) => isAllIndiaService(s))) {\n return true;\n }\n \n // Also check through service mapping\n const serviceNames = this.cadreMappingService.getServicesByNames(selections);\n if (serviceNames.some((service) => isAllIndiaService(service.name))) {\n return true;\n }\n }\n }\n }\n return false;\n }\n\n /**\n * Check if a specific user group has All India Services selected\n */\n private hasAllIndiaServicesInUserGroup(userGroupIndex: number): boolean {\n if (userGroupIndex < 0 || userGroupIndex >= this.userGroup.length) {\n return false;\n }\n \n const isAllIndiaService = (serviceName: string): boolean => {\n if (!serviceName) return false;\n const lower = serviceName.toLowerCase();\n return lower.includes(\"all india service\") ||\n lower.includes(\"indian administrative service\") ||\n lower.includes(\"(ias)\") ||\n lower.includes(\"indian police service\") ||\n lower.includes(\"(ips)\") ||\n lower.includes(\"indian forest service\") ||\n lower.includes(\"(ifs)\");\n };\n \n const conditions = this.ruleConditions(userGroupIndex);\n for (let j = 0; j < conditions.length; j++) {\n const condition = conditions.at(j);\n const entity = condition?.get(\"entity\")?.value;\n const selections = condition?.get(\"selections\")?.value || [];\n \n if (entity === NsAccessControlConfig.SelectionType.Service && selections.length > 0) {\n // Check raw selections\n if (selections.some((s: string) => isAllIndiaService(s))) {\n return true;\n }\n \n // Also check through service mapping\n const serviceNames = this.cadreMappingService.getServicesByNames(selections);\n if (serviceNames.some((service) => isAllIndiaService(service.name))) {\n return true;\n }\n }\n }\n return false;\n }\n\n onEntityChange(userGroupIndex: number, conditionIndex: number): void {\n const conditions = this.ruleConditions(userGroupIndex);\n const condition = conditions.at(conditionIndex);\n const selectedEntity = condition?.get(\"entity\")?.value;\n const previousEntity = condition?.value?.entity;\n\n if (condition?.value?.selections?.length) {\n condition.get(\"selections\")?.setValue([]);\n this.processDisableAddConditionOnClose(userGroupIndex);\n this.calculateUserCountForUserGroup(userGroupIndex, conditionIndex);\n }\n\n // If entity type changed from Service to something else, clear Central Deputation conditions\n if (previousEntity === NsAccessControlConfig.SelectionType.Service && selectedEntity !== NsAccessControlConfig.SelectionType.Service) {\n // Remove all Central Deputation conditions after this index in this user group\n for (let i = conditions.length - 1; i >= conditionIndex + 1; i--) {\n const cond = conditions.at(i);\n if (cond?.get(\"entity\")?.value === NsAccessControlConfig.SelectionType.CentralDeputation) {\n conditions.removeAt(i);\n }\n }\n \n // Check if any other user group still has AIS\n const hasAIS = this.hasAllIndiaServicesInAnyGroup();\n if (!hasAIS) {\n this.accessControlService.enableDeputation(false);\n }\n }\n }\n\n onOpeningEntityChange(event: boolean, userGroupIndex: number, conditionIndex: number): void {\n if (event) {\n // Disable cadre from selection if services/batch has not cadre\n const conditions = this.ruleConditions(userGroupIndex);\n let selectedService: string[] = [];\n let selectedBatch: number[] = [];\n for (let i = 0; i < conditions.length; i++) {\n const entity = conditions.at(i).get(\"entity\")?.value;\n const selections = conditions.at(i).get(\"selections\")?.value || [];\n if (entity === NsAccessControlConfig.SelectionType.Service) {\n selectedService = selections;\n }\n if (entity === NsAccessControlConfig.SelectionType.Batch) {\n selectedBatch = selections;\n }\n }\n\n let availableCadres: any[] = [];\n let disableCadre = false;\n\n // 1. Only service is added\n if (selectedService.length) {\n const serviceSelections = this.cadreMappingService.getServiceIdsByName(selectedService || []) || [];\n availableCadres = this.cadreMappingService.getCadresByServices(serviceSelections);\n disableCadre = availableCadres.length === 0;\n } else {\n // If neither is selected, do not disable Cadre\n if(this.content) {\n if (this.content.accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC) disableCadre = true;\n else disableCadre = false;\n }\n }\n\n // Check if Central Deputation should be available (only if All India Services exists in THIS user group)\n const hasAISInThisGroup = this.hasAllIndiaServicesInUserGroup(userGroupIndex);\n const disableCentralDeputation = !hasAISInThisGroup;\n\n const updatedOptions = this.accessControlCriteriaSelection.optionsEntity.map(option => {\n if (option.value === NsAccessControlConfig.SelectionType.Cadre) {\n return { ...option, disabled: disableCadre };\n }\n if (option.value === NsAccessControlConfig.SelectionType.CentralDeputation) {\n return { ...option, disabled: disableCentralDeputation };\n }\n return option;\n });\n this.accessControlCriteriaSelection.optionsEntity = [...updatedOptions];\n }\n }\n\n getAvailableEntities(userGroupIndex: number, currentConditionIndex: number): any[] {\n const conditions = this.ruleConditions(userGroupIndex);\n const selectedEntities = conditions.controls\n .map((ctrl, idx) => (idx !== currentConditionIndex ? ctrl.get(\"entity\")?.value : null))\n .filter(e => !!e);\n return this.accessControlCriteriaSelection?.optionsEntity.filter(option => !selectedEntities.includes(option.value));\n }\n\n removeUserGroup(index: number) {\n const group = this.userGroup.at(index);\n const dialogRef = this.dialog.open(ConfirmDialogComponent, {\n width: \"470px\",\n data: { additionalData: group?.value?.name, type: \"delete\" }\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result?.action === NsAccessControlConfig.IActions.Confirm) {\n if (group?.value?.conditions?.length && group?.value?.conditions[0]?.selections.length) {\n this.userGroup.removeAt(index);\n // Rename remaining groups\n for (let i = 0; i < this.userGroup.length; i++) {\n this.resetUserGroup(i);\n }\n this.reindexUserCount();\n \n // Check if any remaining user group has AIS\n const hasAIS = this.hasAllIndiaServicesInAnyGroup();\n if (!hasAIS) {\n this.accessControlService.enableDeputation(false);\n }\n \n this.applyAccessControlValue(true);\n this.calculateUserCountForUserGroup(index);\n } else {\n this.userGroup.removeAt(index);\n // Rename remaining groups\n for (let i = 0; i < this.userGroup.length; i++) {\n this.resetUserGroup(i);\n }\n this.reindexUserCount();\n \n // Check if any remaining user group has AIS\n const hasAIS = this.hasAllIndiaServicesInAnyGroup();\n if (!hasAIS) {\n this.accessControlService.enableDeputation(false);\n }\n }\n }\n });\n }\n\n private reindexUserCount() {\n const newUserCount: { [key: number]: number } = {};\n for (let i = 0; i < this.userGroup.length; i++) {\n newUserCount[i] = this.userCount[i] || 0;\n }\n this.userCount = newUserCount;\n }\n\n resetUserGroup(index: number) {\n const group = this.userGroup.at(index);\n if (group) {\n group.get(\"name\")?.setValue(`User Group ${index + 1}`);\n }\n }\n\n resetUserGroupWithSelections(userGroupIndex: number) {\n const group = this.userGroup.at(userGroupIndex);\n if (group) {\n group.get(\"name\")?.setValue(`User Group ${userGroupIndex + 1}`);\n const conditions = group.get(\"conditions\") as FormArray;\n if (conditions && conditions.length) {\n for (let i = 0; i < conditions.length; i++) {\n const condition = conditions.at(i);\n condition.get(\"entity\")?.setValue(\"\");\n condition.get(\"selections\")?.setValue([]);\n }\n }\n this.calculateUserCountForUserGroup(userGroupIndex);\n this.processDisableAddConditionOnClose(userGroupIndex);\n }\n }\n\n\n checkServicesAndResetReleated(userGroupIndex: number, conditionIndex: number): void {\n const userGroups = this.userGroup.at(userGroupIndex);\n const conditions = this.ruleConditions(userGroupIndex);\n if (userGroups) {\n const conditionsUserGroup = userGroups?.value?.conditions || [];\n\n // Find service index\n const serviceIndex = _.findIndex(conditionsUserGroup, (c: any) => c.entity === NsAccessControlConfig.SelectionType.Service);\n const condition = conditions.at(conditionIndex);\n if (serviceIndex !== -1 && condition?.get(\"entity\")?.value === NsAccessControlConfig.SelectionType.Service) {\n conditionsUserGroup.forEach((c: any, index: number) => {\n if (_.includes([NsAccessControlConfig.SelectionType.CentralDeputation], c.entity) && index > serviceIndex) {\n conditions.setControl(index, this.createConditionGroup(uuidv4(), userGroupIndex));\n this.accessControlService.enableDeputation(false)\n }\n });\n if (this.accessControlCriteriaSelection?.optionsEntity?.filter(ele => ele.value === NsAccessControlConfig.SelectionType.CentralDeputation)?.length) {\n this.accessControlService.enableDeputation(false)\n }\n }\n }\n }\n\n removeCondition(userGroupIndex: number, conditionIndex: number) {\n const conditions = this.ruleConditions(userGroupIndex);\n const dialogRef = this.dialog.open(ConfirmDialogComponent, {\n width: \"470px\",\n data: { additionalData: \"this condition\", type: \"delete\" }\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result?.action === NsAccessControlConfig.IActions.Confirm) {\n this.checkServicesAndResetReleated(userGroupIndex, conditionIndex);\n conditions.removeAt(conditionIndex);\n this.applyAccessControlValue(true);\n this.calculateUserCountForUserGroup(userGroupIndex);\n this.processDisableAddConditionOnClose(userGroupIndex);\n }\n });\n }\n\n resetCondition(userGroupIndex: number, conditionIndex: number) {\n const conditions = this.ruleConditions(userGroupIndex);\n const condition = conditions.at(conditionIndex);\n if (condition) {\n const wasServiceCondition = condition.get(\"entity\")?.value === NsAccessControlConfig.SelectionType.Service;\n \n this.checkServicesAndResetReleated(userGroupIndex, conditionIndex);\n\n const id = condition.get(\"id\")?.value || uuidv4();\n conditions.setControl(conditionIndex, this.createConditionGroup(id, userGroupIndex));\n\n // If it was a service condition, check if any user group still has AIS\n if (wasServiceCondition) {\n const hasAIS = this.hasAllIndiaServicesInAnyGroup();\n if (!hasAIS) {\n this.accessControlService.enableDeputation(false);\n }\n }\n\n this.calculateUserCountForUserGroup(userGroupIndex, conditionIndex);\n this.processDisableAddConditionOnClose(userGroupIndex);\n\n if (this.config.application === this.MDO_APPLICATION) {\n this.applyAccessControlValue(true, false)\n }\n }\n }\n\n manageSelections(conditionForm: any, ruleForm: any, userGroupIndex: number, activeTabSelected = 0): void {\n const condition = conditionForm.getRawValue();\n const rule = ruleForm.getRawValue();\n let resetFilterFlag = false;\n if (!(this.content?.status === \"Live\" || this.content?.prevStatus === \"Live\" || this.content?.status === \"Review\") || this.config.application === this.MDO_APPLICATION || this.content?.contentId) {\n if (this.content?.accessSetting === NsAccessControlConfig.IAccessSetting.ALL_USERS) {\n resetFilterFlag = this.checkForResetFilter(condition, rule, userGroupIndex);\n } else if (this.config.application === this.MDO_APPLICATION || this.content?.contentId) {\n // For MDO applications, check if the user group is in initial state\n const currentGroup = this.userGroup.at(userGroupIndex);\n const isInInitialState = (() => {\n if (this.config?.mdoContent?.status === 'Live' || this.content?.status === 'live') {\n const initialUserGroups = this.getInitialState();\n if (initialUserGroups) {\n return initialUserGroups.some(group => group.userGroupName === currentGroup.get('name')?.value);\n }\n }\n return false;\n })();\n\n // Only show reset filter flag if not in initial state\n if (!isInInitialState) {\n resetFilterFlag = this.checkForResetFilter(condition, rule, userGroupIndex);\n }\n }\n \n if (resetFilterFlag) {\n const dialogRef = this.dialog.open(ConfirmDialogComponent, {\n width: \"470px\",\n data: { type: \"confirm-reset-fields\" }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result?.action === NsAccessControlConfig.IActions.Confirm) {\n this.resetActiveUserGroupFields(condition, rule, userGroupIndex);\n }\n });\n }\n }\n\n switch (condition.entity) {\n case NsAccessControlConfig.SelectionType.Users:\n if (!resetFilterFlag) {\n this.openInviteUserDialog(condition, rule, activeTabSelected, rule?.isUserGroupDisabled);\n }\n break;\n case NsAccessControlConfig.SelectionType.Organizations:\n case NsAccessControlConfig.SelectionType.Designation:\n case NsAccessControlConfig.SelectionType.Service:\n case NsAccessControlConfig.SelectionType.Cadre:\n case NsAccessControlConfig.SelectionType.Batch:\n case NsAccessControlConfig.SelectionType.Group:\n case NsAccessControlConfig.SelectionType.VerificationStatus:\n this.processCadreConfigMapping(userGroupIndex);\n if (!resetFilterFlag) {\n this.openSelectionDialog(rule, condition, activeTabSelected, rule?.isUserGroupDisabled);\n }\n break;\n default:\n if (!resetFilterFlag) {\n this.openSelectionDialog(rule, condition, activeTabSelected, rule?.isUserGroupDisabled);\n }\n }\n }\n\n openSelectionDialog(rule: any, condition: any, activeTabSelected: number, isDisabled: boolean): void {\n const originalSelections = [...(condition.selections || [])];\n\n const dialogRef = this.dialog.open(EntitySelectionsComponent, {\n width: \"1032px\",\n data: { rule: rule, condition: condition, selected: condition.selections, activeTabSelected: activeTabSelected, disabled: isDisabled }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n // Find the rule FormGroup in the FormArray\n const ruleIndex = this.userGroup.controls.findIndex((ctrl: any) => ctrl.get(\"id\")?.value === result.rule.id);\n if (ruleIndex !== -1) {\n const ruleGroup = this.userGroup.at(ruleIndex);\n const conditions = ruleGroup.get(\"conditions\") as FormArray;\n const conditionIndex = conditions.controls.findIndex((ctrl: any) => ctrl.get(\"id\")?.value === result.condition.id);\n\n if (conditionIndex !== -1) {\n const conditionGroup = conditions.at(conditionIndex);\n conditionGroup.get(\"selections\")?.setValue(result.selected);\n\n if (\n condition.entity === NsAccessControlConfig.SelectionType.Organizations &&\n !this.areSelectionsEqual(originalSelections, result.selected)\n ) {\n const designationCondition = conditions.controls.find(\n ctrl => ctrl.get(\"entity\")?.value === NsAccessControlConfig.SelectionType.Designation\n );\n\n if (designationCondition) {\n designationCondition.get(\"selections\")?.setValue([]);\n }\n }\n\n // Enable Deputation if Service is selected 'All India Services'\n if (condition.entity === NsAccessControlConfig.SelectionType.Service) {\n this.checkServicesAndResetReleated(ruleIndex, conditionIndex);\n \n const isAllIndiaService = (serviceName: string): boolean => {\n if (!serviceName) return false;\n const lower = serviceName.toLowerCase();\n return lower.includes(\"all india service\") ||\n lower.includes(\"indian administrative service\") ||\n lower.includes(\"(ias)\") ||\n lower.includes(\"indian police service\") ||\n lower.includes(\"(ips)\") ||\n lower.includes(\"indian forest service\") ||\n lower.includes(\"(ifs)\");\n };\n \n const hasAIS = result.selected.some((s: string) => isAllIndiaService(s));\n if (hasAIS) {\n this.accessControlService.enableDeputation(true);\n } else {\n this.accessControlService.enableDeputation(false);\n }\n }\n this.processCadreConfigMapping(ruleIndex);\n this.processDisableAddConditionOnClose(ruleIndex);\n\n if (!this.areSelectionsEqual(originalSelections, result.selected)) {\n this.calculateUserCountForUserGroup(ruleIndex);\n }\n\n // send event after every selection for MDO\n if (this.config.application === this.MDO_APPLICATION) {\n this.applyAccessControlValue(true, false);\n }\n }\n }\n }\n });\n }\n\n private areSelectionsEqual(content_1: any[], content_2: any[]): boolean {\n if (content_1.length !== content_2.length) return false;\n return content_1.every(item => content_2.includes(item));\n }\n\n processCadreConfigMapping(userGroupIndex: number): void {\n const ruleGroup = this.userGroup.at(userGroupIndex);\n const conditionValue = ruleGroup.get(\"conditions\").value;\n if (conditionValue && conditionValue.length) {\n const services = conditionValue.find((ele: any) => ele.entity === NsAccessControlConfig.SelectionType.Service);\n const cadre = conditionValue.find((ele: any) => ele.entity === NsAccessControlConfig.SelectionType.Cadre);\n const batch = conditionValue.find((ele: any) => ele.entity === NsAccessControlConfig.SelectionType.Batch);\n\n const serviceSelections = this.cadreMappingService.getServiceIdsByName(services?.selections || []) || [];\n const cadreSelections = this.cadreMappingService.getCadreIdsByName(cadre?.selections || []) || [];\n const batchSelections = batch?.selections || [];\n\n // Case 1: Only service selected\n if (serviceSelections?.length && !cadreSelections?.length && !batchSelections?.length) {\n this.accessControlService.holdServiceCadrebatch.update(prev => ({\n ...prev,\n service: this.cadreMappingService.getAllServices(),\n cadre: this.cadreMappingService.getCadresByServices(serviceSelections),\n batch: this.cadreMappingService.getBatchYearsByServices(serviceSelections)\n }));\n }\n // Case 2: Only cadre selected\n else if (!serviceSelections?.length && cadreSelections?.length && !batchSelections?.length) {\n this.accessControlService.holdServiceCadrebatch.update(prev => ({\n ...prev,\n cadre: this.cadreMappingService.getAllCadres(),\n service: this.cadreMappingService.getServicesByCadres(cadreSelections),\n batch: this.cadreMappingService.getBatchYearsByCadres(cadreSelections)\n }));\n }\n // Case 3: Only batch selected\n else if (!serviceSelections?.length && !cadreSelections?.length && batchSelections?.length) {\n this.accessControlService.holdServiceCadrebatch.update(prev => ({\n ...prev,\n batch: this.cadreMappingService.getAllBatchYears(),\n service: this.cadreMappingService.getServicesByBatchYears(batchSelections),\n cadre: this.cadreMappingService.getCadresByBatchYears(batchSelections)\n }));\n }\n // Case 4: Service and Cadre selected\n else if (serviceSelections?.length && cadreSelections?.length && !batchSelections?.length) {\n this.accessControlService.holdServiceCadrebatch.update(prev => ({\n ...prev,\n service: this.cadreMappingService.getServicesByCadres(cadreSelections),\n cadre: this.cadreMappingService.getCadresByServices(serviceSelections),\n batch: this.cadreMappingService.getBatchYearsByServicesAndCadres(serviceSelections, cadreSelections)\n }));\n }\n // Case 5: Service and Batch selected\n else if (serviceSelections?.length && !cadreSelections?.length && batchSelections?.length) {\n this.accessControlService.holdServiceCadrebatch.update(prev => ({\n ...prev,\n cadre: this.cadreMappingService.getCadresByServicesAndBatch(serviceSelections, batchSelections),\n service: this.cadreMappingService.getServicesByBatchYears(batchSelections),\n batch: this.cadreMappingService.getBatchYearsByServices(serviceSelections)\n }));\n }\n // Case 6: Cadre and Batch selected\n else if (!serviceSelections?.length && cadreSelections?.length && batchSelections?.length) {\n this.accessControlService.holdServiceCadrebatch.update(prev => ({\n ...prev,\n service: this.cadreMappingService.getServicesByCadresAndBatch(cadreSelections, batchSelections),\n cadre: this.cadreMappingService.getCadresByBatchYears(batchSelections),\n batch: this.cadreMappingService.getBatchYearsByCadres(cadreSelections)\n }));\n } else {\n this.accessControlService.holdServiceCadrebatch.set({\n service: this.cadreMappingService.getAllServices(),\n batch: this.cadreMappingService.getAllBatchYears(),\n cadre: this.cadreMappingService.getAllCadres()\n });\n }\n }\n }\n\n processDisableAddConditionOnClose(userGroupIndex: number): void {\n // If any condition is Users and at least one user is added, disable add condition\n const ruleGroup = this.userGroup.at(userGroupIndex);\n const conditions = ruleGroup.get(\"conditions\") as FormArray;\n const hasUsersConditionWithSelection = conditions.controls.some(\n ctrl =>\n ctrl.get(\"entity\")?.value === NsAccessControlConfig.SelectionType.Users &&\n Array.isArray(ctrl.get(\"selections\")?.value) &&\n ctrl.get(\"selections\")?.value.length > 0\n );\n ruleGroup.get(\"isAddConditionDisabled\")?.setValue(hasUsersConditionWithSelection);\n }\n\n openInviteUserDialog(condition: any, rule: any, activeTabSelected: number, isDisabled: boolean): void {\n const originalSelections = [...(condition.selections || [])];\n\n const dialogRef = this.dialog.open(InviteUsersComponent, {\n width: \"1090px\",\n data: { condition: condition, rule: rule, selected: condition.selections, activeTab: activeTabSelected, disabled: isDisabled }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n // Find the rule FormGroup in the FormArray\n const ruleIndex = this.userGroup.controls.findIndex((ctrl: any) => ctrl.get(\"id\")?.value === result.rule.id);\n if (ruleIndex !== -1) {\n const ruleGroup = this.userGroup.at(ruleIndex);\n const conditions = ruleGroup.get(\"conditions\") as FormArray;\n const conditionIndex = conditions.controls.findIndex((ctrl: any) => ctrl.get(\"id\")?.value === result.condition.id);\n if (conditionIndex !== -1) {\n const conditionGroup = conditions.at(conditionIndex);\n // const userIds = result.selected && result.selected.map((user: any) => user?.userId);\n conditionGroup.get(\"selections\")?.setValue(result.selected);\n this.processDisableAddConditionOnClose(ruleIndex);\n }\n\n // send event after every selection for MDO\n if (this.config.application === this.MDO_APPLICATION) {\n this.applyAccessControlValue(true, false);\n }\n\n if (!this.areSelectionsEqual(originalSelections, result.selected)) {\n this.calculateUserCountForUserGroup(ruleIndex);\n }\n }\n }\n });\n }\n\n callSnackbar(message: string, type: \"success\" | \"error\"): void {\n if (type === \"success\") {\n this.snackbar.openFromComponent(SnackbarComponent, {\n data: { message: message, type: \"success\" },\n duration: 3000,\n panelClass: \"course-success-snackbar\"\n });\n } else if (type === \"error\") {\n this.snackbar.openFromComponent(SnackbarComponent, {\n data: { message: message, type: \"error\" },\n duration: 3000,\n panelClass: \"course-error-snackbar\"\n });\n }\n }\n\n validateFormData() {\n // Validate user groups and conditions\n if (!this.userGroup || this.userGroup.length === 0) {\n this.callSnackbar(\"Please add at least one user group.\", \"error\");\n return false;\n }\n for (let i = 0; i < this.userGroup.length; i++) {\n const group = this.userGroup.at(i);\n const conditions = group.get(\"conditions\") as FormArray;\n if (!conditions || conditions.length === 0) {\n this.callSnackbar(`User group ${i + 1} must have at least one condition.`, \"error\");\n return false;\n }\n for (let j = 0; j < conditions.length; j++) {\n const selections = conditions.at(j).get(\"selections\")?.value;\n if (!selections || selections.length === 0) {\n this.callSnackbar(`Condition ${j + 1} in user group ${i + 1} must have at least one selection.`, \"error\");\n return false;\n }\n }\n }\n return true;\n }\n\n async applyAccessControlValue(shouldProceedWithoutValidation: boolean = false, displaySuccessMessage: boolean = true): Promise<void> {\n if (!shouldProceedWithoutValidation) {\n const validated = this.validateFormData();\n if (!validated) return;\n }\n\n this.isSaving = true;\n\n const payload = await this.processRequestCreation();\n\n if (this.config.application === this.MDO_APPLICATION) {\n this.accessControlData.emit({ userGroup: payload, accessType: this.accessType });\n if (displaySuccessMessage) this.callSnackbar(\"Access Control saved successfully\", \"success\");\n this.isSaveFltrBtnDisabled = true;\n this.isSaving = false;\n\n this.isAddUserGroupBtnDisabled = true\n return;\n }\n\n this.accessControlService\n .applyUserGroupAccessControl(payload)\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: response => {\n if (response?.result && response?.result?.accessControl) {\n this.accessControlData.emit({ userGroup: response.result.accessControl?.userGroups, accessType: this.accessType });\n if (displaySuccessMessage) this.callSnackbar(\"Access Control saved successfully\", \"success\");\n this.initialUserGroupValue = JSON.stringify(this.accessControlForm.getRawValue().userGroup);\n this.isSaveFltrBtnDisabled = true;\n\n // Update secure setting for moderated content\n if (this.content?.status !== \"Live\" && this.content?.prevStatus !== \"Live\" && !this.isCuratedContentWithExternalId) {\n this.updateContentAccessSetting();\n }\n\n // Remove initialstate for saved content for Marketplace external content on live status \n if(this.content?.status === 'live' && this.isCuratedContentWithExternalId) {\n localStorage.removeItem(`${NsAccessControlConfig.Application.Creation_Portal}_access_control_${this.contentId}`)\n }\n } else {\n this.callSnackbar(\"Could not save access control, Please try again.\", \"error\");\n }\n this.isSaving = false\n },\n error: () => {\n this.callSnackbar(\"Could not save access control, Please try again.\", \"error\");\n this.isSaving = false\n }\n });\n }\n\n processRequestCreation(): Promise<IUserGroupRequest> {\n return new Promise((resolve, reject) => {\n try {\n const data = this.accessControlForm.getRawValue();\n\n // Filter out user groups with empty userGroupCriteriaList\n const userGroups = data.userGroup\n .map((group: any) => ({\n userGroupName: group.name,\n userGroupCriteriaList: group.conditions.map((condition: any) => {\n let criteriaValue: string[];\n if (\n condition?.entity === NsAccessControlConfig.SelectionType.Users &&\n condition?.selections?.length &&\n condition?.selections[0]?.userId\n ) {\n const userIds = condition.selections?.map((user: any) => user?.userId) || [];\n criteriaValue = userIds;\n } else if (condition?.entity === NsAccessControlConfig.SelectionType.CentralDeputation) {\n criteriaValue = condition.selections[0];\n return { criteriaKey: condition.entity, criteriaValue };\n\n } else {\n if (condition.selections.length && typeof condition.selections[0] === \"object\") {\n criteriaValue = condition.selections?.map((sel: any) => sel?.fieldValue) || [];\n } else {\n criteriaValue = condition.selections?.map(String) || [];\n }\n }\n\n if (condition.entity && criteriaValue && criteriaValue.length > 0) {\n return {\n criteriaKey: condition.entity,\n criteriaValue,\n };\n }\n return null;\n })\n .filter((criteria: any) => !!criteria), // Remove nulls\n }))\n .filter((group: any) => Array.isArray(group.userGroupCriteriaList) && group.userGroupCriteriaList.length > 0);\n\n const requestPayload: IUserGroupRequest = {\n contentId: this.contentId,\n accessControl: {\n version: 1,\n userGroups,\n },\n };\n\n resolve(requestPayload);\n } catch (error) {\n reject(error);\n }\n })\n}\n\n\n openInstructonsDialog(): void {\n this.dialog.open(AccessControlGuideComponent, {\n width: \"960px\"\n });\n }\n\n async getAccessControl(): Promise<void> {\n const response = await this.accessControlService\n .fetchUserGroupAccessControl(this.contentId)\n .pipe(takeUntil(this.destroy$))\n .toPromise()\n .catch(() => {\n // For Moderated Content Condition if not already added the usergroup autocreate a usergroup with added conditions and save it\n if (this.content?.accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC) {\n // Create Organization condition\n const orgCondition = this.createConditionGroup(uuidv4(), 0);\n orgCondition.get(\"entity\")?.setValue(NsAccessControlConfig.SelectionType.Organizations);\n orgCondition.get(\"selections\").setValue([this.config?.userConfig?.rootOrgId]);\n\n // Create Verification Status condition with default 'Verified'\n const verificationCondition = this.createConditionGroup(uuidv4(), 0);\n verificationCondition.get(\"entity\")?.setValue(NsAccessControlConfig.SelectionType.VerificationStatus);\n verificationCondition.get(\"selections\")?.setValue([\"VERIFIED\"]);\n\n // Create user group with these two conditions\n const group = this.fb.group({\n id: [uuidv4()],\n name: [\"User Group 1\"],\n description: [\"Description for UserGroup 1\"],\n conditions: this.fb.array([orgCondition, verificationCondition])\n });\n this.userGroup.push(group);\n\n // Disable add user group btn\n this.isAddUserGroupBtnDisabled = true;\n this.accessControlData.emit({ userGroup: this.accessControlForm.value?.userGroup, accessType: this.accessType });\n this.applyAccessControlValue(false, false);\n this.updateContentAccessSetting();\n } \n\n // For a content not having any user group disable the access control type change\n if (\n (this.content?.status === \"Live\" || this.content?.prevStatus === \"Live\") && \n // this.content?.accessSetting !== NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC &&\n (!this.isCuratedContentWithExternalId)\n ) {\n this.accessControlCriteriaSelection?.accessTypes.forEach((type) => {\n type.disabled = true;\n });\n this.isSaveFltrBtnDisabled = true;\n }\n setTimeout(() => {\n this.initialUserGroupValue = JSON.stringify(this.accessControlForm.getRawValue().userGroup);\n this.setupFormChangeDetection();\n }, 0);\n });\n if (response?.result?.accessControl) {\n this.processAccessControlResult(response.result.accessControl);\n this.accessControlData.emit({ userGroup: response.result.accessControl?.userGroups, accessType: this.accessType });\n\n }\n }\n\n private setupFormChangeDetection(): void {\n this.accessControlForm.valueChanges.subscribe(() => {\n const currentValue = JSON.stringify(this.accessControlForm.getRawValue().userGroup);\n if (this.content?.status === \"Live\" || this.content?.prevStatus === \"Live\") {\n this.isSaveFltrBtnDisabled = currentValue === this.initialUserGroupValue;\n\n if(this.content?.accessSetting !== NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC) {\n this.isAddUserGroupBtnDisabled = currentValue === this.initialUserGroupValue;\n }\n } else {\n this.isSaveFltrBtnDisabled = currentValue === this.initialUserGroupValue;\n }\n });\n }\n\n processAccessControlResult(accessControl: any): void {\n if (!accessControl?.userGroups?.length) {\n setTimeout(() => {\n this.initialUserGroupValue = JSON.stringify(this.accessControlForm.getRawValue().userGroup);\n this.setupFormChangeDetection();\n }, 0);\n\n return;\n }\n\n while (this.userGroup.length) {\n this.userGroup.removeAt(0);\n }\n\n // Save initial state if not already saved for live content\n if (!this.getInitialState()) {\n this.saveInitialState(accessControl?.userGroups);\n }\n\n // Check if ANY user group has All India Services BEFORE processing\n const isAllIndiaService = (serviceName: string): boolean => {\n if (!serviceName) return false;\n const lower = serviceName.toLowerCase();\n return lower.includes(\"all india service\") ||\n lower.includes(\"indian administrative service\") ||\n lower.includes(\"(ias)\") ||\n lower.includes(\"indian police service\") ||\n lower.includes(\"(ips)\") ||\n lower.includes(\"indian forest service\") ||\n lower.includes(\"(ifs)\");\n };\n \n let hasAISInAnyGroup = false;\n accessControl.userGroups.forEach((group: any) => {\n const isContainsService = group.userGroupCriteriaList.find((criteria: any) => criteria.criteriaKey === NsAccessControlConfig.SelectionType.Service);\n if (isContainsService?.criteriaKey === NsAccessControlConfig.SelectionType.Service) {\n const criteriaValues = isContainsService.criteriaValue || [];\n // Check if any service is an All India Service\n if (criteriaValues.some((val: string) => isAllIndiaService(val))) {\n hasAISInAnyGroup = true;\n }\n }\n });\n \n // Enable/disable deputation based on whether ANY group has AIS\n if (hasAISInAnyGroup) {\n this.accessControlService.enableDeputation(true);\n } else {\n this.accessControlService.enableDeputation(false);\n }\n\n accessControl.userGroups.forEach((group: any, index: number) => {\n const conditions = this.fb.array([]) as any;\n\n group.userGroupCriteriaList.forEach((criteria: any) => {\n const condition = this.createConditionGroup(uuidv4(), this.userGroup.length);\n\n // Map API keys to form entity values\n const entityMap: { [key: string]: string } = {\n rootOrgId: NsAccessControlConfig.SelectionType.Organizations,\n user: NsAccessControlConfig.SelectionType.Users,\n group: NsAccessControlConfig.SelectionType.Group,\n designation: NsAccessControlConfig.SelectionType.Designation,\n profilestatus: NsAccessControlConfig.SelectionType.VerificationStatus,\n Cadre: NsAccessControlConfig.SelectionType.Cadre,\n service: NsAccessControlConfig.SelectionType.Service,\n batch: NsAccessControlConfig.SelectionType.Batch,\n isOnCentralDeputation: NsAccessControlConfig.SelectionType.CentralDeputation\n };\n\n // Set the form values\n condition.patchValue({\n entity: entityMap[criteria.criteriaKey] || criteria.criteriaKey,\n selections:\n criteria.criteriaKey === NsAccessControlConfig.SelectionType.Batch\n ? Array.isArray(criteria.criteriaValue)\n ? criteria.criteriaValue.map((b: any) => Number(b))\n : []\n : criteria.criteriaKey === NsAccessControlConfig.SelectionType.CentralDeputation\n ? Array.isArray(criteria.criteriaValue)\n ? criteria.criteriaValue\n : [criteria.criteriaValue]\n : criteria.criteriaValue,\n });\n\n conditions.push(condition);\n });\n\n const ruleGroup = this.fb.group({\n id: [group.userGroupId || uuidv4()],\n name: [group.userGroupName],\n description: [`Description for ${group.userGroupName}`],\n conditions: conditions,\n isUserGroupDisabled: [false],\n isAddConditionDisabled: [false]\n });\n\n this.userGroup.push(ruleGroup);\n\n // Check if add condition should be disabled for this user group\n this.processDisableAddConditionOnClose(index);\n\n // Calculate count for each user group\n this.calculateUserCountForUserGroup(index);\n\n if (\n (this.content?.status === \"Live\" || this.content?.prevStatus === \"Live\") && \n // this.content?.accessSetting !== NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC && \n (!this.isCuratedContentWithExternalId)\n ) {\n // publisher (cannot edit already added)\n for (let i = 0; i < this.userGroup?.length; i++) {\n const group = this.userGroup.at(i);\n group.get(\"id\")?.disable();\n group.get(\"name\")?.disable();\n group.get(\"description\")?.disable();\n group.get(\"conditions\")?.disable();\n group.get(\"isUserGroupDisabled\")?.setValue(true);\n }\n this.accessControlCriteriaSelection?.accessTypes.forEach((type) => {\n type.disabled = true;\n });\n this.isSaveFltrBtnDisabled = true;\n }\n\n // For marketplace curated content with external id, disable only those user groups which were in live\n if (this.content?.status === \"live\" && this.isCuratedContentWithExternalId) {\n // Get initial state from localStorage\n const initialUserGroups = this.getInitialState();\n\n if (initialUserGroups) {\n // Only disable user groups that were in the initial state\n const initialGroupIds = initialUserGroups.map(group => group.userGroupName);\n\n for (let i = 0; i < this.userGroup.length; i++) {\n const group = this.userGroup.at(i);\n const groupId = group.get(\"name\")?.value;\n\n // If this group was in the initial state, disable it\n if (initialGroupIds.includes(groupId)) {\n group.get(\"id\")?.disable();\n group.get(\"name\")?.disable();\n group.get(\"description\")?.disable();\n group.get(\"conditions\")?.disable();\n group.get(\"isUserGroupDisabled\")?.setValue(true);\n }\n }\n }\n\n this.isSaveFltrBtnDisabled = true;\n }\n\n setTimeout(() => {\n this.initialUserGroupValue = JSON.stringify(this.accessControlForm.getRawValue().userGroup);\n this.setupFormChangeDetection();\n }, 0);\n });\n }\n\n async updateContentAccessSetting(): Promise<void> {\n let secureSettings = {};\n if (typeof this.content.language === \"string\") {\n this.content.language = [this.content.language];\n }\n if (this.content.accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC) {\n const userGroup0 = this.userGroup.at(0);\n let organisation: string[] = [];\n let isVerifiedKarmayogi = \"\";\n\n if (userGroup0) {\n const conditions = userGroup0.get(\"conditions\") as FormArray;\n if (conditions && conditions.length) {\n const orgCondition = conditions.controls.find(ctrl => ctrl.get(\"entity\")?.value === NsAccessControlConfig.SelectionType.Organizations);\n if (orgCondition) {\n organisation = orgCondition.get(\"selections\")?.value || [];\n }\n\n const verificationCondition = conditions.controls.find(\n ctrl => ctrl.get(\"entity\")?.value === NsAccessControlConfig.SelectionType.VerificationStatus\n );\n if (verificationCondition) {\n const verSelections = verificationCondition.get(\"selections\")?.value || [];\n isVerifiedKarmayogi = Array.isArray(verSelections) && verSelections?.length > 1 ? \"No\" : \"Yes\";\n }\n }\n }\n\n this.content.secureSettings = {\n version: 1,\n organisation,\n isVerifiedKarmayogi\n };\n secureSettings = {\n version: 1,\n organisation,\n isVerifiedKarmayogi\n };\n }\n\n const accessTypeBoolean = this.accessType === NsAccessControlConfig.IAccessTypes.Public ? false : true;\n const request = this.accessControlService.createRequestContent(this.content, accessTypeBoolean);\n const requestForMDO = this.accessControlService.createRequesForMDOContent(this.content, accessTypeBoolean, secureSettings);\n if (this.content.status !== \"Live\" || this.content.prevStatus != \"Live\") {\n if (\n (this.config.userConfig.userRoles.has(\"content_publisher\") || this.config.userConfig.userRoles.has(\"spv_publisher\")) &&\n this.content.status !== \"Draft\"\n ) {\n if (this.content.accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC) {\n if (this.content.reviewStatus) {\n (requestForMDO.request.content as any).reviewStatus = this.content.reviewStatus;\n }\n await this.accessControlService.updateContentV4(requestForMDO, this.contentId).toPromise();\n } else {\n if (this.content.reviewStatus) {\n (request.request.content as any).reviewStatus = this.content.reviewStatus;\n }\n await this.accessControlService.updateContentV4(request, this.contentId).toPromise();\n }\n } else {\n if (this.content.accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC) {\n await this.accessControlService.updateContentV3(requestForMDO, this.contentId).toPromise();\n } else {\n await this.accessControlService.updateContentV3(request, this.contentId).toPromise();\n }\n }\n }\n\n this.refreshContentMeta.emit(true);\n }\n\n get hasUserGroupBeenAdded(): boolean {\n if (!this.userGroup?.length) {\n return true;\n }\n\n return !this.userGroup.controls.every((group: any) => {\n const conditions = (group.get(\"conditions\") as FormArray)?.controls || [];\n return (\n conditions?.length > 0 &&\n conditions.every((condition: any) => {\n const selections = condition.get(\"selections\")?.value;\n return Array.isArray(selections) && selections.length > 0;\n })\n );\n });\n }\n\n get getTotalUserCount(): number {\n return (Object.values(this.userCount) as number[]).reduce((total, count) => total + count, 0);\n }\n\n processConditionsForContentType(): void {\n if (this.content?.accessSetting === NsAccessControlConfig.IAccessSetting.MDO_SPECIFIC) {\n // Disable add user group btn\n this.isAddUserGroupBtnDisabled = true;\n }\n\n if (this.content?.status === \"Review\" && this.content?.reviewStatus === \"InReview\") {\n // reviewer(readonly)\n this.accessControlCriteriaSelection.readOnly = true;\n this.isSaveFltrBtnDisabled = true;\n }\n // else if (\n // (this.content?.status === \"Live\" || this.content?.prevStatus === \"Live\") &&\n // this.content?.courseCategory !== \"Comprehensive Assessment Program\" &&\n // (this.config.userConfig.userRoles.has(\"spv_publisher\") || this.config.userConfig.userRoles.has(\"content_publisher\")) &&\n // !this.config.userConfig.userRoles.has(\"content_creator\")\n // ) {\n // // publisher (disabled all)\n // this.accessControlCriteriaSelection.readOnly = true;\n // this.isSaveFltrBtnDisabled = true;\n // }\n }\n\n async calculateUserCountForUserGroup(userGroupIndex: number, conditionIndex?: number): Promise<void> {\n // Mapping of entity to request key\n const entityKeyMap: { [key: string]: string } = {\n [NsAccessControlConfig.SelectionType.Organizations]: \"rootOrgId\",\n [NsAccessControlConfig.SelectionType.Designation]: \"profileDetails.professionalDetails.designation\",\n [NsAccessControlConfig.SelectionType.Group]: \"profileDetails.professionalDetails.group\",\n [NsAccessControlConfig.SelectionType.VerificationStatus]: \"profileDetails.profileStatus\",\n [NsAccessControlConfig.SelectionType.Cadre]: \"profileDetails.cadreDetails.cadreName\",\n [NsAccessControlConfig.SelectionType.Service]: \"profileDetails.cadreDetails.civilServiceName\",\n [NsAccessControlConfig.SelectionType.Batch]: \"profileDetails.cadreDetails.cadreBatch\",\n [NsAccessControlConfig.SelectionType.Users]: \"identifier\",\n [NsAccessControlConfig.SelectionType.CentralDeputation]: \"profileDetails.cadreDetails.isOnCentralDeputation\"\n };\n\n const group = this.userGroup.at(userGroupIndex);\n if (!group) {\n this.userCount[userGroupIndex] = 0;\n return;\n }\n\n const conditions = group.get(\"conditions\") as FormArray;\n const request: { [key: string]: any } = {};\n\n for (let j = 0; j < conditions.length; j++) {\n const condition = conditions.at(j);\n const entity = condition.get(\"entity\")?.value;\n const selections = condition.get(\"selections\")?.value || [];\n const key = entityKeyMap[entity];\n if (key) {\n if (\n entity === NsAccessControlConfig.SelectionType.Users &&\n Array.isArray(selections) &&\n selections.every(sel => typeof sel === \"object\" && sel !== null)\n ) {\n const userIds = selections && selections.map((user: any) => user?.userId);\n request[key] = userIds;\n } else if (entity === NsAccessControlConfig.SelectionType.CentralDeputation) {\n if (selections.length && typeof selections[0] === \"boolean\") {\n request[key] = selections[0];\n }\n }\n else {\n request[key] = selections;\n }\n } \n else {\n const customFieldSelections = selections.map((sel: any) => sel?.fieldValue || sel);\n request[`${entity}`] = customFieldSelections;\n }\n }\n\n // Remove keys with empty array values\n Object.keys(request).forEach(key => {\n if (Array.isArray(request[key]) && request[key].length === 0) {\n delete request[key];\n }\n });\n \n if (this.accessControlService.accessControlConfig()?.application === NsAccessControlConfig.Application.MDO) {\n if (!this.isCCA && Object.keys(request)?.length > 0) {\n request.rootOrgId = this.accessControlService.accessControlConfig().userConfig.org?.rootOrgId ? [this.accessControlService.accessControlConfig().userConfig.org?.rootOrgId] : [];\n }\n }\n\n const filters: any = { ...request };\n if (Object.keys(filters).length > 0) {\n filters.status = 1;\n } else {\n delete filters.status;\n }\n\n const payload = {\n request: {\n ...(Object.keys(filters).length > 0 ? { filters } : {}),\n fields: [\"identifier\", \"rootOrgId\", \"firstName\"]\n }\n };\n if(payload?.request?.filters) {\n const response = await this.accessControlService\n .validateUser(payload)\n .toPromise()\n .catch(() => {\n this.userCount[userGroupIndex] = 0;\n });\n if (response?.result?.response) {\n const count = response?.result?.response?.count;\n this.userCount[userGroupIndex] = count;\n if (!this.userCount[userGroupIndex]) {\n this.callSnackbar(\"No iGOT official match the set conditions selections, please review the set conditions and their respective selections.\", \"error\")\n }\n }\n } else {\n this.userCount[userGroupIndex] = 0;\n }\n }\n\n isUserGroupFormChanged(initialValue: any): boolean {\n const currentValue = this.accessControlForm.getRawValue().userGroup;\n return JSON.stringify(currentValue) !== JSON.stringify(initialValue);\n }\n\n checkForResetFilter(condition: any, rule: any, userGroupIndex: any) {\n let flag = false;\n let accessControlFormData = this.accessControlForm.getRawValue();\n let activeManageSelection = accessControlFormData && accessControlFormData?.userGroup?.[userGroupIndex];\n let activeSelectionCount = 0;\n if (activeManageSelection && activeManageSelection?.conditions && activeManageSelection?.conditions?.length > 1) {\n //Show Popup\n let onlyOneCondition = this.hasOnlyOneArrayWithLength(activeManageSelection?.conditions, \"selections\");\n if (onlyOneCondition) {\n flag = false;\n } else {\n activeManageSelection?.conditions?.map(item => {\n if (item?.entity == condition?.entity && item?.selections.length > 0) {\n flag = true;\n }\n });\n }\n if (activeManageSelection?.conditions?.length > 1) {\n let checkLastIndexHaveSelections = -1;\n activeManageSelection?.conditions?.forEach((item, index) => {\n if (item?.selections.length > 0) {\n checkLastIndexHaveSelections = index;\n }\n });\n // console.log('activeManageSelection?.conditions', activeManageSelection?.conditions)\n // console.log('checkLastIndexHaveSelections--', checkLastIndexHaveSelections)\n if (activeManageSelection?.conditions[checkLastIndexHaveSelections]?.entity === condition?.entity && condition?.selections?.length > 0) {\n flag = false;\n }\n }\n\n // let index = activeManageSelection?.conditions?.findLastIndex((item) =>\n // item?.entity === condition?.entity && item?.selections.length > 0\n // );\n // if((index + 1) === activeManageSelection?.conditions.length) {\n // flag = false\n // }\n // console.log('activeManageSelection?.conditions', activeManageSelection?.conditions)\n // console.log('index', index)\n }\n return flag;\n }\n\n hasOnlyOneArrayWithLength(data, key) {\n let count = 0;\n for (const obj of data) {\n if (Array.isArray(obj[key]) && obj[key].length > 0) {\n count++;\n }\n }\n return count > 1 ? false : true;\n }\n\n resetActiveUserGroupFields(condition: any, rule: any, userGroupIndex: any) {\n let accessControlFormData = this.accessControlForm.getRawValue();\n let activeManageSelection = accessControlFormData && accessControlFormData?.userGroup?.[userGroupIndex];\n let activeConditionIndex = activeManageSelection?.conditions?.findIndex(item => {\n return item?.entity === condition?.entity && item?.selections?.length > 0;\n });\n let activeManageSelectionArrLength = activeManageSelection?.conditions.length;\n for (let i = activeConditionIndex + 1; i < activeManageSelectionArrLength; i++) {\n const userGroupArray = this.accessControlForm.get(\"userGroup\") as FormArray;\n const userGroup = userGroupArray.at(userGroupIndex) as FormGroup;\n const conditionsArray = userGroup.get(\"conditions\") as FormArray;\n const conditionGroup = conditionsArray.at(i) as FormGroup;\n // conditionGroup.reset();\n const condition = conditionGroup;\n condition.get(\"entity\")?.setValue(\"\");\n condition.get(\"selections\")?.setValue([]);\n }\n\n this.calculateUserCountForUserGroup(userGroupIndex);\n }\n\n // Customs Field Logics\n getCustomsField() {\n this.accessControlService\n .fetchCustomsField({\n organisationId: this.config.userConfig.rootOrgId,\n isEnabled: true,\n type: \"masterList\"\n // isMandatory: true,\n })\n .subscribe({\n next: (data) => {\n if (data && data?.result && data.result.searchResults?.data) {\n const results = data.result.searchResults.data;\n if (Array.isArray(results) && results.length) {\n\n const mappedFields = _.chain(results)\n .map(field => {\n if (field?.originalCustomFieldData?.length === 1) {\n const firstField = _.first(field.originalCustomFieldData) as { \n attributeName?: string; \n name?: string; \n };\n const filteredAndUniqueData = _.chain(field?.reversedOrderCustomFieldData)\n .filter((item: any) => item?.fieldAttribute === firstField?.attributeName)\n .uniqBy('fieldValue') \n .value();\n \n return {\n disabled: false,\n value: firstField?.attributeName || \"\",\n label: firstField?.name || \"\",\n isCustomField: true,\n reversedOrderCustomFieldData: filteredAndUniqueData\n };\n } else if (field?.originalCustomFieldData?.length > 1) {\n const lastField = _.last(field.originalCustomFieldData) as { \n attributeName?: string; \n name?: string; \n };\n if (lastField) {\n const filteredAndUniqueData = _.chain(field?.reversedOrderCustomFieldData)\n .filter((item: any) => item?.fieldAttribute === lastField?.attributeName)\n .uniqBy('fieldValue') \n .value();\n\n return {\n disabled: false,\n value: lastField?.attributeName || \"\",\n label: lastField?.name || \"\",\n isCustomField: true,\n reversedOrderCustomFieldData: filteredAndUniqueData\n };\n }\n }\n return null;\n })\n .compact()\n .value();\n\n // Update the service with mapped fields\n this.accessControlService.customesFieldData.set(mappedFields);\n\n // Update optionsEntity without duplicates\n this.accessControlCriteriaSelection.optionsEntity = _.uniqBy(\n [...this.accessControlCriteriaSelection.optionsEntity, ...mappedFields],\n 'value'\n );\n\n // Create dynamic fields\n const dynamicFields = mappedFields.reduce((acc, field) => {\n acc[field.value] = [\n { value: \"all\", label: `All ${field.label}` },\n { value: \"selected\", label: `Selected ${field.label}` },\n ];\n return acc;\n }, {} as Record<string, Array<{ value: string; label: string }>>);\n\n // Merge configurations\n this.accessControlCriteriaSelection = {\n ...this.accessControlCriteriaSelection,\n ...dynamicFields,\n };\n\n // Update the signal with the full updated object\n this.accessControlService.accessControlConfig.update((prevConfig) => ({\n ...prevConfig,\n accessControlCriteriaSelection: this.accessControlCriteriaSelection,\n }));\n this.isLoading = false;\n\n } else {\n this.isLoading = false;\n }\n } else {\n this.isLoading = false;\n }\n },\n });\n }\n\n // Patch raw accesscontrol to form\n private getStorageKey(): string {\n return `${this.config.application}_access_control_${this.contentId}`;\n }\n\n private saveInitialState(userGroups: any[]): void {\n if ((this.config?.application === this.MDO_APPLICATION && this.config?.mdoContent?.status === \"Live\") || \n (this.content?.status === \"live\" && this.isCuratedContentWithExternalId)) {\n const state = {\n initialUserGroups: userGroups,\n timestamp: new Date().getTime()\n };\n localStorage.setItem(this.getStorageKey(), JSON.stringify(state));\n }\n }\n\n private getInitialState(): any[] | null {\n const savedState = localStorage.getItem(this.getStorageKey());\n if (savedState) {\n const { initialUserGroups } = JSON.parse(savedState);\n return initialUserGroups;\n }\n return null;\n }\n\n processTempAccessControl(tempAccessControl: any): void {\n while (this.userGroup.length) {\n this.userGroup.removeAt(0);\n }\n\n // If no user groups in the data, add a default one\n if (!tempAccessControl?.userGroups || tempAccessControl.userGroups.length === 0) {\n this.addUserGroup();\n setTimeout(() => {\n this.initialUserGroupValue = JSON.stringify(this.accessControlForm.getRawValue().userGroup);\n this.setupFormChangeDetection();\n }, 0);\n return;\n }\n\n // Save initial state if not already saved for live content\n if (!this.getInitialState()) {\n this.saveInitialState(tempAccessControl.userGroups);\n }\n\n // Check if ANY user group has All India Services BEFORE processing\n const isAllIndiaService = (serviceName: string): boolean => {\n if (!serviceName) return false;\n const lower = serviceName.toLowerCase();\n return lower.includes(\"all india service\") ||\n lower.includes(\"indian administrative service\") ||\n lower.includes(\"(ias)\") ||\n lower.includes(\"indian police service\") ||\n lower.includes(\"(ips)\") ||\n lower.includes(\"indian forest service\") ||\n lower.includes(\"(ifs)\");\n };\n \n let hasAISInAnyGroup = false;\n if (this.config?.application === NsAccessControlConfig.Application.MDO) {\n tempAccessControl.userGroups.forEach((group: any) => {\n const isContainsService = group.userGroupCriteriaList.find((criteria: any) => criteria.criteriaKey === NsAccessControlConfig.SelectionType.Service);\n if (isContainsService?.criteriaKey === NsAccessControlConfig.SelectionType.Service) {\n const criteriaValues = isContainsService.criteriaValue || [];\n // Check if any service is an All India Service\n if (criteriaValues.some((val: string) => isAllIndiaService(val))) {\n hasAISInAnyGroup = true;\n }\n }\n });\n \n // Enable/disable deputation based on whether ANY group has AIS\n if (hasAISInAnyGroup) {\n this.accessControlService.enableDeputation(true);\n } else {\n this.accessControlService.enableDeputation(false);\n }\n }\n\n tempAccessControl.userGroups.forEach((group: any, index: number) => {\n // Process patching.\n const conditions = this.fb.array([]) as any;\n\n group.userGroupCriteriaList.forEach((criteria: any) => {\n\n if(!this.isCCA && criteria.criteriaKey === NsAccessControlConfig.SelectionType.Organizations) {\n return; // Skip this iteration to not add the organization condition\n }\n\n const condition = this.createConditionGroup(uuidv4(), this.userGroup.length);\n\n // Set the form values\n condition.patchValue({\n entity: criteria.criteriaKey,\n selections:\n criteria.criteriaKey === NsAccessControlConfig.SelectionType.Batch\n ? Array.isArray(criteria.criteriaValue)\n ? criteria.criteriaValue.map((b: any) => Number(b))\n : []\n : criteria.criteriaKey === NsAccessControlConfig.SelectionType.CentralDeputation\n ? Array.isArray(criteria.criteriaValue)\n ? criteria.criteriaValue\n : [criteria.criteriaValue]\n : criteria.criteriaValue,\n });\n\n conditions.push(condition);\n });\n\n const ruleGroup = this.fb.group({\n id: [group.userGroupId || uuidv4()],\n name: [group.userGroupName],\n description: [`Description for ${group.userGroupName}`],\n conditions: conditions,\n isUserGroupDisabled: [false],\n isAddConditionDisabled: [false],\n });\n\n this.userGroup.push(ruleGroup);\n\n if (\n (this.mdoContent?.status === \"Live\") &&\n (this.config.userConfig.userRoles.has(\"mdo_admin\") || this.config.userConfig.userRoles.has(\"mdo_leader\"))\n ) {\n // Get initial state from localStorage\n const initialUserGroups = this.getInitialState();\n \n if (initialUserGroups) {\n // Only disable user groups that were in the initial state\n const initialGroupIds = initialUserGroups.map(group => group.userGroupName);\n \n for (let i = 0; i < this.userGroup.length; i++) {\n const group = this.userGroup.at(i);\n const groupId = group.get(\"name\")?.value;\n \n // If this group was in the initial state, disable it\n if (initialGroupIds.includes(groupId)) {\n group.get(\"id\")?.disable();\n group.get(\"name\")?.disable();\n group.get(\"description\")?.disable();\n group.get(\"conditions\")?.disable();\n group.get(\"isUserGroupDisabled\")?.setValue(true);\n }\n }\n }\n \n this.isSaveFltrBtnDisabled = true;\n }\n\n // Check if add condition should be disabled for this user group\n this.processDisableAddConditionOnClose(index);\n\n // Calculate count for each user group\n this.calculateUserCountForUserGroup(index);\n });\n\n setTimeout(() => {\n this.initialUserGroupValue = JSON.stringify(this.accessControlForm.getRawValue().userGroup);\n this.setupFormChangeDetection();\n }, 0);\n }\n\n get canAddUserGroup(): boolean {\n if (this.isLoading) {\n return false;\n }\n\n if (!this.userGroup?.length) {\n return true;\n }\n\n if (this.config?.application !== this.MDO_APPLICATION) {\n return true;\n }\n\n // For MDO applications with Live status\n if (this.config?.application === this.MDO_APPLICATION && this.config?.mdoContent?.status === \"Live\") {\n const initialUserGroups = this.getInitialState();\n if (!initialUserGroups) {\n return true;\n }\n\n // Get current non-disabled user groups\n const activeUserGroups = this.userGroup.controls.filter(group => \n !group.get('isUserGroupDisabled')?.value\n );\n\n if (activeUserGroups.length === 0) {\n return true;\n }\n\n return false;\n }\n\n return false;\n }\n\n get isCuratedContentWithExternalId(): boolean { \n return !!(this.content && this.content.externalId);\n }\n\n saveAccessSettings(): void {\n const isLiveContent = this.content?.status === \"Live\" || this.content?.prevStatus === \"Live\" || this.content?.status === \"live\";\n const isMdoLiveContent = this.config?.application === this.MDO_APPLICATION && this.config?.mdoContent?.status === \"Live\";\n const isCuratedLiveWithExternalId = this.content?.status === \"live\" && this.isCuratedContentWithExternalId;\n\n if (isLiveContent || isMdoLiveContent || isCuratedLiveWithExternalId) {\n const dialogRef = this.dialog.open(ConfirmDialogComponent, {\n width: \"520px\",\n data: { type: \"confirm-apply-accesscontrol-for-live\" }\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result?.action === \"confirm\") {\n this.applyAccessControlValue(true, true);\n }\n });\n } else {\n this.applyAccessControlValue(true, true);\n }\n }\n}\n","<div class=\"py-4 px-10\">\n <div class=\"p-4 as-container\">\n <div class=\"flex items-center justify-between\">\n <span class=\"text-xl font-bold primary-text-color\">{{(config?.application === MDO_APPLICATION || config?.application === CBP_APPLICATION) ? 'Access Control' : 'Access Settings'}}</span>\n <div class=\"flex gap-2 items-center\">\n <span class=\"text-sm primary-text-color cursor-pointer\" (click)=\"openInstructonsDialog()\">How to use access control?</span>\n <img src=\"/assets/icons/support-i.svg\" alt=\"support i\" class=\"img-icon-24 cursor-pointer\" (click)=\"openInstructonsDialog()\"/>\n </div>\n </div>\n <div class=\"light-grey-border p-4 mt-4\">\n <ng-container *ngIf=\"canShowAccessControlTypeRadio\">\n <mat-radio-group [(ngModel)]=\"accessTypeDup\" (change)=\"onAccessTypeChange($event)\">\n <div class=\"radio-container flex gap-5 mb-4\">\n <ng-container *ngFor=\"let item of accessControlCriteriaSelection?.accessTypes\">\n <mat-radio-button [value]=\"item.value\" [disabled]=\"item?.disabled || accessControlCriteriaSelection?.readOnly\">\n <div class=\"flex gap-2 items-center\">\n <span>{{ item?.name }}</span>\n <mat-icon svgIcon=\"info-outline\" [matTooltip]=\"item?.tooltip\"></mat-icon>\n </div>\n </mat-radio-button>\n </ng-container>\n </div>\n </mat-radio-group>\n </ng-container>\n\n <ng-container *ngIf=\"accessType === ACCESS_TYPE_ENUM.Public\">\n <!-- <div class=\"info-container\">\n <label class=\"text-sm\">This event will be visible to all Karmayogis.</label>\n </div> -->\n </ng-container>\n <ng-container *ngIf=\"accessType === ACCESS_TYPE_ENUM.Custom\">\n <ng-container *ngIf=\"shouldShowVisibilityToggle\">\n <div class=\"visibiliy-container light-grey-border p-4 mb-4\">\n <div class=\"flex justify-between items-center\">\n <span class=\"text-lg font-bold\">{{ config?.visiblilityOnOff?.label }}</span>\n <!-- <mat-slide-toggle [(ngModel)]=\"isVisibilityEnabled\" [disabled]=\"config?.visiblilityOnOff?.disabled || false\"></mat-slide-toggle> -->\n <div class=\"checkbox-toggle\">\n <input [(ngModel)]=\"isVisibilityEnabled\" [disabled]=\"config?.visiblilityOnOff?.disabled || false\" type=\"checkbox\" id=\"switch\" />\n <label for=\"switch\" [attr.disabled]=\"config?.visiblilityOnOff?.disabled || false\"></label>\n </div>\n </div>\n <ng-container *ngIf=\"!isVisibilityEnabled\">\n <label class=\"text-sm\">{{ (config?.visiblilityOnOff?.off || \"\").replace(\"{contentType}\", content?.courseCategory || content?.contentType) }}</label>\n </ng-container>\n <ng-container *ngIf=\"isVisibilityEnabled\">\n <label class=\"text-sm\">{{ (config?.visiblilityOnOff?.on || \"\").replace(\"{contentType}\", content?.courseCategory || content?.contentType) }}</label>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"filterCriteria\">\n <div class=\"filter-criteria-container light-grey-border p-4 mt-4 flex flex-middle justify-between mb-4\">\n <div class=\"info\">\n <span class=\"text-sm\">Define the conditions that Karmayogis must satisfy to enroll in the event.</span>\n </div>\n <button mat-button class=\"new-secondary-button-no-border button-with-corners\" type=\"button\">\n <div class=\"flex gap-2 flex-middle\">\n <span class=\"text-m\">Refresh</span>\n <mat-icon class=\"primary-text-color\">refresh</mat-icon>\n </div>\n </button>\n </div>\n </ng-container>\n\n <div class=\"users-total-count flex gap-2 items-center my-3\" *ngIf=\"getTotalUserCount\">\n <mat-icon svgIcon=\"info-outline\" [matTooltip]=\"\"></mat-icon>\n <div class=\"text-dark\">Total Count : {{ getTotalUserCount }}</div>\n </div>\n\n <ng-container *ngIf=\"accessControlForm && userGroup?.length > 0 && !isLoading\">\n <form [formGroup]=\"accessControlForm\">\n <mat-accordion class=\"example-headers-align access-usergroup-accordion mt-3\" multi=\"true\">\n <ng-container formArrayName=\"userGroup\" *ngFor=\"let rule of userGroup?.controls; let i = index; let ruleLast = last\">\n <ng-container [formGroupName]=\"i\">\n <mat-expansion-panel class=\"access-usergroup-panel\" expanded>\n <mat-expansion-panel-header>\n <mat-panel-title class=\"items-center\">\n <div class=\"flex gap-4 items-center\">\n <span class=\"text-sm\">{{ rule.get(\"name\")?.value }}</span>\n <ng-container *ngIf=\"userCount[i]\">\n <div class=\"text-dark user-group-user-count\">Count : {{ userCount[i] }}</div>\n </ng-container>\n </div>\n </mat-panel-title>\n <mat-panel-description class=\"justify-end items-center\" (click)=\"$event.stopPropagation()\">\n <ng-container *ngIf=\"content?.accessSetting !== MDO_SPECIFIC && (config?.application !== MDO_APPLICATION || (config?.application === MDO_APPLICATION && config?.mdoContent?.status === 'Live' && userGroup?.length > 1))\">\n <button\n [disabled]=\"accessControlCriteriaSelection?.readOnly || rule.get('isUserGroupDisabled')?.value\"\n mat-icon-button\n aria-label=\"delete user group\"\n (click)=\"removeUserGroup(i)\"\n title=\"Delete\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n <button\n [disabled]=\"accessControlCriteriaSelection?.readOnly || rule.get('isUserGroupDisabled')?.value\"\n mat-icon-button\n aria-label=\"refresh user group\"\n (click)=\"resetUserGroupWithSelections(i)\"\n title=\"Refresh\"\n >\n <img src=\"/assets/icons/restart.svg\" alt=\"refresh\" class=\"img-icon-24\" />\n </button>\n </ng-container>\n </mat-panel-description>\n </mat-expansion-panel-header>\n <ng-container *ngIf=\"rule.get('conditions') as conditionsArray\">\n <div [formArrayName]=\"'conditions'\">\n <ng-container *ngFor=\"let condition of conditionsArray?.controls; let j = index; let conditionlast = last\">\n <div class=\"condition-selection mt-2\" [formGroupName]=\"j\">\n <div class=\"select-condition-text mb-3 mt-4\">Select Condition {{ i + 1 + \".\" + (j + 1) }}</div>\n <div class=\"selections-options grid grid-cols-5 gap-4\">\n <div class=\"mat-full-radius\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-select placeholder=\"Select\" formControlName=\"entity\" (selectionChange)=\"onEntityChange(i, j)\" (openedChange)=\"onOpeningEntityChange($event, i, j)\">\n <ng-container *ngFor=\"let item of getAvailableEntities(i, j)\">\n <mat-option [value]=\"item?.value\" [disabled]=\"item?.disabled\">{{ item?.label }}</mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"mat-full-radius\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-select placeholder=\"Select\" formControlName=\"conditionType\">\n <ng-container *ngFor=\"let item of accessControlCriteriaSelection?.optionsConditions\">\n <mat-option [value]=\"item?.value\">{{ item?.label }}</mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"action-manage-selection\">\n <button\n mat-flat-button\n (click)=\"manageSelections(condition, rule, i)\"\n [disabled]=\"!condition.get('entity').value || !condition.get('conditionType').value || accessControlCriteriaSelection?.readOnly\"\n class=\"rounded-full new-bg-color text-white mt-2 flex items-center gap-2\"\n >\n <mat-icon svgIcon=\"svg_search\" class=\"mr-2\"></mat-icon>\n <span class=\"font-bold text-sm\">Manage Selection</span>\n </button>\n </div>\n <div class=\"action-options-selected\">\n <button [disabled]=\"!condition.get('entity').value\" mat-button class=\"new-secondary-button-no-border button-with-corners mt-2\" type=\"button\" (click)=\"manageSelections(condition, rule, i, 1)\">\n <div class=\"flex gap-2 flex-middle mt-2\">\n <span class=\"text-m underline\">{{ condition?.get(\"selections\").value?.length }} items selected</span>\n </div>\n </button>\n </div>\n <div class=\"action-more-options flex justify-end\">\n <div class=\"flex gap-4\">\n <ng-container *ngIf=\"content?.accessSetting !== MDO_SPECIFIC\">\n <button\n mat-icon-button\n aria-label=\"delete condition\"\n class=\"mt-2 ml-auto\"\n [disabled]=\"accessControlCriteriaSelection?.readOnly || rule.get('isUserGroupDisabled')?.value\"\n (click)=\"removeCondition(i, j)\"\n title=\"Delete\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n <button\n mat-icon-button\n aria-label=\"refresh condition\"\n class=\"mt-2 ml-auto\"\n [disabled]=\"accessControlCriteriaSelection?.readOnly || rule.get('isUserGroupDisabled')?.value\"\n (click)=\"resetCondition(i, j)\"\n title=\"Refresh\"\n >\n <img src=\"/assets/icons/restart.svg\" alt=\"refresh\" class=\"img-icon-24\" />\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <div class=\"and-or mat-full-radius\" *ngIf=\"conditionsArray?.length > 1 && !conditionlast\">\n <mat-form-field appearance=\"outline\" class=\"w-max-100\">\n <mat-select placeholder=\"Select\" [(value)]=\"defaultConditionRelationship\">\n <mat-option [value]=\"'AND'\">AND</mat-option>\n <!-- <mat-option [value]=\"'OR'\" [disabled]=\"true\">OR</mat-option> -->\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n </div>\n </ng-container>\n <div class=\"action-add-condition\">\n <button\n [disabled]=\"\n content?.accessSetting === ACCESS_SETTING_ENUM.MDO_SPECIFIC ||\n content?.accessSetting === ACCESS_SETTING_ENUM.CUSTOME_USER ||\n accessControlCriteriaSelection?.readOnly ||\n rule.get('isUserGroupDisabled')?.value ||\n rule.get('isAddConditionDisabled')?.value\n \"\n mat-button\n class=\"new-secondary-button-no-border button-with-corners\"\n type=\"button\"\n (click)=\"addCondition(i)\"\n >\n <div class=\"flex gap-2 flex-middle\">\n <mat-icon class=\"primary-text-color\">add</mat-icon>\n <span class=\"text-m\">Add New Condition</span>\n </div>\n </button>\n </div>\n </mat-expansion-panel>\n <div class=\"and-or mat-full-radius\" *ngIf=\"userGroup?.length > 1 && !ruleLast\">\n <mat-form-field appearance=\"outline\" class=\"w-max-100\">\n <mat-select placeholder=\"Select\" [(value)]=\"defaultUserGroupRelationship\">\n <mat-option [value]=\"'AND'\" [disabled]=\"true\">AND</mat-option>\n <mat-option [value]=\"'OR'\">OR</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n </ng-container>\n </mat-accordion>\n </form>\n </ng-container>\n\n <ng-container *ngIf=\"isLoading\">\n <div class=\"spinner-loader flex items-center justify-center\">\n <mat-spinner></mat-spinner>\n </div>\n </ng-container>\n <ng-container *ngIf=\"canAddUserGroup\">\n <div class=\"text-center mb-6 mt-4\">\n <button\n [disabled]=\"accessControlCriteriaSelection?.readOnly || isAddUserGroupBtnDisabled\"\n mat-button\n class=\"new-secondary-button-no-border button-with-corners\"\n type=\"button\"\n (click)=\"addUserGroup()\"\n >\n <div class=\"flex gap-2 flex-middle\">\n <mat-icon class=\"primary-text-color\">add</mat-icon>\n <span class=\"text-m\">Add User Group</span>\n </div>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"userGroup?.length > 0 && config?.application !== MDO_APPLICATION\">\n <div class=\"action-save flex justify-center items-center gap-4\" [ngClass]=\"{ 'mt-4': userGroup?.length === 1 && config?.application === MDO_APPLICATION }\">\n <!-- Save Filter Button -->\n <button\n mat-flat-button\n class=\"flex rounded-full px-4 py-2 mat-btn-outline font-bold text-sm items-center gap-2\"\n [disabled]=\"isSaveFltrBtnDisabled || isSaving || hasUserGroupBeenAdded\"\n (click)=\"saveAccessSettings()\"\n >\n <mat-spinner *ngIf=\"isSaving\" diameter=\"18\" strokeWidth=\"3\" class=\"!inline !m-0 mr-2\"></mat-spinner>\n <span>Save Filter</span>\n </button>\n\n <!-- Apply Button -->\n <!-- <button\n mat-flat-button\n [disabled]=\"isApplyBtnDisabled || isApplying || hasUserGroupBeenAdded\"\n class=\"flex items-center rounded-full px-4 py-2 new-bg-color font-bold text-sm text-white gap-2\"\n (click)=\"applyAccessControlValue()\">\n <mat-spinner *ngIf=\"isApplying\" diameter=\"18\" strokeWidth=\"3\" class=\"!inline !m-0 mr-2\"></mat-spinner>\n <span>Apply</span>\n </button> -->\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n</div>\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\n\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatDialogModule } from \"@angular/material/dialog\";\nimport { MatRippleModule } from \"@angular/material/core\";\nimport { MatExpansionModule } from \"@angular/material/expansion\";\nimport { MatTabsModule } from \"@angular/material/tabs\";\nimport { MatTableModule } from \"@angular/material/table\";\nimport { MatSortModule } from \"@angular/material/sort\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\n\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatMenuModule } from \"@angular/material/menu\";\nimport { MatRadioModule } from \"@angular/material/radio\";\nimport { MatSelectModule } from \"@angular/material/select\";\nimport { MatProgressSpinnerModule } from \"@angular/material/progress-spinner\";\nimport { MatSnackBarModule } from \"@angular/material/snack-bar\";\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\nimport { MatSlideToggleModule } from \"@angular/material/slide-toggle\";\nimport { MatButtonModule } from \"@angular/material/button\";\n\nimport { DragDropDirective } from \"../../_directives/drag-drop.directive\";\n\nimport { AccessControlComponent } from \"./access-control.component\";\nimport { ListTableComponent } from \"../../components/list-table/list-table.component\";\nimport { PaginationComponent } from \"../pagination/pagination.component\";\nimport { BulkUploadKarmayogiComponent } from \"../../components/bulk-upload-karmayogi/bulk-upload-karmayogi.component\";\n\nimport { InviteUsersComponent } from \"../dialogs/invite-users/invite-users.component\";\nimport { EntitySelectionsComponent } from \"../dialogs/entity-selections/entity-selections.component\";\nimport { ConfirmDialogComponent } from \"../dialogs/confirm-dialog/confirm-dialog.component\";\nimport { AccessControlGuideComponent } from \"../dialogs/access-control-guide/access-control-guide.component\";\n\n@NgModule({\n declarations: [\n AccessControlComponent,\n InviteUsersComponent,\n ListTableComponent,\n PaginationComponent,\n BulkUploadKarmayogiComponent,\n DragDropDirective,\n EntitySelectionsComponent,\n ConfirmDialogComponent,\n AccessControlGuideComponent\n ],\n imports: [\n CommonModule,\n MatRadioModule,\n MatIconModule,\n MatDialogModule,\n MatMenuModule,\n MatCheckboxModule,\n MatSlideToggleModule,\n MatSelectModule,\n MatRippleModule,\n MatInputModule,\n MatFormFieldModule,\n MatExpansionModule,\n ReactiveFormsModule,\n FormsModule,\n MatButtonModule,\n MatTabsModule,\n MatTableModule,\n MatProgressSpinnerModule,\n MatSnackBarModule,\n MatSortModule,\n MatTooltipModule\n ],\n exports: [AccessControlComponent, PaginationComponent]\n})\nexport class AccessControlModule {}\n","/*\n * Public API Surface of access-settings\n */\n\nexport * from \"./lib/access-settings.component\";\nexport * from \"./lib/access-settings.module\";\nexport * from \"./lib/_common/access-control/access-control.module\";\nexport * from \"./lib/_common/access-control/access-control.component\";\nexport * from \"./lib/_common/pagination/pagination.component\";\nexport * from \"./lib/_models/access-control.model\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i1","i2","i4","i5","i8.PaginationComponent","i1.AccessControlService","i6.ListTableComponent","i7.DragDropDirective","i2.AccessControlService","i6","i7","i9","i10","i11","i13.ListTableComponent","i14.BulkUploadKarmayogiComponent","i8","i12","i13","uuidv4","i3.AccessControlService","i4.CadreMappingService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAkBa,uBAAuB,CAAA;AAClC,IAAA,WAAA,GAAA,EAAe;AAEf,IAAA,QAAQ,KAAI;+GAHD,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,mFAdtB,CAAA,+BAAA,CAAiC,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,iOAAA,CAAA,EAAA,CAAA,CAAA;;4FAclC,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAhBnC,SAAS;+BACI,wBAAwB,EAAA,QAAA,EACxB,CAAA,+BAAA,CAAiC,EAAA,UAAA,EAY/B,KAAK,EAAA,MAAA,EAAA,CAAA,iOAAA,CAAA,EAAA;;;MCNR,iBAAiB,CAAA;AAG5B,IAAA,WAAA,CAAmB,WAA8C,EAAA;QAA9C,IAAA,CAAA,WAAW,GAAX,WAAW;AAFd,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAA+C,kBAAkB,CAAC;IAE3B;+GAHzD,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,4ECV9B,guBAmBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDTa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,guBAAA,EAAA;;;MEER,oBAAoB,CAAA;+GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAApB,oBAAoB,EAAA,YAAA,EAAA,CAJhB,uBAAuB,EAAE,iBAAiB,aAC/C,aAAa,EAAE,YAAY,CAAA,EAAA,OAAA,EAAA,CAC3B,uBAAuB,CAAA,EAAA,CAAA,CAAA;gHAEtB,oBAAoB,EAAA,OAAA,EAAA,CAHrB,aAAa,EAAE,YAAY,CAAA,EAAA,CAAA,CAAA;;4FAG1B,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,uBAAuB,EAAE,iBAAiB,CAAC;AAC1D,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,YAAY,CAAC;oBACtC,OAAO,EAAE,CAAC,uBAAuB;AAClC,iBAAA;;;MCGY,iBAAiB,CAAA;AAJ9B,IAAA,WAAA,GAAA;AAKY,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAO;QACV,IAAA,CAAA,OAAO,GAAG,GAAG;AAyBnD,IAAA;;AAtBuC,IAAA,UAAU,CAAC,GAAU,EAAA;QACzD,GAAG,CAAC,cAAc,EAAE;QACpB,GAAG,CAAC,eAAe,EAAE;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACtB;;AAE8C,IAAA,WAAW,CAAC,GAAU,EAAA;QAClE,GAAG,CAAC,cAAc,EAAE;QACpB,GAAG,CAAC,eAAe,EAAE;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACtB;;AAEyC,IAAA,MAAM,CAAC,GAAQ,EAAA;QACtD,GAAG,CAAC,cAAc,EAAE;QACpB,GAAG,CAAC,eAAe,EAAE;QACrB,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QAEpB,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B;IACF;+GA1BW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAjB,iBAAiB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,cAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE;AACf,iBAAA;;sBAEE;;sBACA,WAAW;uBAAC,eAAe;;sBAG3B,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;;sBAMnC,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;sBAMpC,YAAY;uBAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;;;AC7B5B,IAAW;AAAjB,CAAA,UAAiB,qBAAqB,EAAA;AA0EpC,IAAA,IAAY,aAWX;AAXD,IAAA,CAAA,UAAY,aAAa,EAAA;AACvB,QAAA,aAAA,CAAA,OAAA,CAAA,GAAA,MAAc;AACd,QAAA,aAAA,CAAA,eAAA,CAAA,GAAA,WAA2B;AAC3B,QAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,QAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,QAAA,aAAA,CAAA,oBAAA,CAAA,GAAA,eAAoC;AACpC,QAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,QAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,QAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,QAAA,aAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAC5B,QAAA,aAAA,CAAA,mBAAA,CAAA,GAAA,uBAA2C;AAC7C,IAAA,CAAC,EAXW,aAAa,GAAb,qBAAA,CAAA,aAAa,KAAb,mCAAa,GAAA,EAAA,CAAA,CAAA;AAkBzB,IAAA,IAAY,QAGX;AAHD,IAAA,CAAA,UAAY,QAAQ,EAAA;AAClB,QAAA,QAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,QAAA,QAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,IAAA,CAAC,EAHW,QAAQ,GAAR,qBAAA,CAAA,QAAQ,KAAR,8BAAQ,GAAA,EAAA,CAAA,CAAA;AAKpB,IAAA,IAAY,YAGX;AAHD,IAAA,CAAA,UAAY,YAAY,EAAA;AACtB,QAAA,YAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,QAAA,YAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,IAAA,CAAC,EAHW,YAAY,GAAZ,qBAAA,CAAA,YAAY,KAAZ,kCAAY,GAAA,EAAA,CAAA,CAAA;AAaxB,IAAA,IAAY,cAIX;AAJD,IAAA,CAAA,UAAY,cAAc,EAAA;AACxB,QAAA,cAAA,CAAA,WAAA,CAAA,GAAA,UAAsB;AACtB,QAAA,cAAA,CAAA,cAAA,CAAA,GAAA,aAA4B;AAC5B,QAAA,cAAA,CAAA,cAAA,CAAA,GAAA,aAA4B;AAC9B,IAAA,CAAC,EAJW,cAAc,GAAd,qBAAA,CAAA,cAAc,KAAd,oCAAc,GAAA,EAAA,CAAA,CAAA;AAM1B,IAAA,IAAY,WAGX;AAHD,IAAA,CAAA,UAAY,WAAW,EAAA;AACrB,QAAA,WAAA,CAAA,KAAA,CAAA,GAAA,YAAkB;AAClB,QAAA,WAAA,CAAA,iBAAA,CAAA,GAAA,YAA8B;AAChC,IAAA,CAAC,EAHW,WAAW,GAAX,qBAAA,CAAA,WAAW,KAAX,iCAAW,GAAA,EAAA,CAAA,CAAA;AAIzB,CAAC,EAxHgB,qBAAqB,KAArB,qBAAqB,GAAA,EAAA,CAAA,CAAA;;ACMtC,MAAM,gBAAgB,GAAG,GAAG;AAC5B,MAAM,SAAS,GAAG;IAChB,sBAAsB,EAAE,CAAC,KAAa,KAAK,CAAA,sCAAA,EAAyC,KAAK,CAAA,CAAE;AAC3F,IAAA,WAAW,EAAE,CAAA,qCAAA,CAAuC;AACpD,IAAA,UAAU,EAAE,sCAAsC;AAClD,IAAA,aAAa,EAAE,iCAAiC;AAChD,IAAA,MAAM,EAAE,iCAAiC;AACzC,IAAA,YAAY,EAAE,0DAA0D;AACxE,IAAA,gBAAgB,EAAE,qCAAqC;AACvD,IAAA,SAAS,EAAE,wCAAwC;AACnD,IAAA,yBAAyB,EAAE,2CAA2C;IACtE,kBAAkB,EAAE,CAAC,EAAU,KAAK,CAAA,qCAAA,EAAwC,EAAE,CAAA,CAAE;AAChF,IAAA,iBAAiB,EAAE,CAAA,kCAAA,CAAoC;AACvD,IAAA,kBAAkB,EAAE,CAAA,mCAAA,CAAqC;AAEzD,IAAA,qBAAqB,EAAE,wCAAwC;CAChE;MAKY,oBAAoB,CAAA;AAQ/B,IAAA,WAAA,CAA6B,IAAgB,EAAA;QAAhB,IAAA,CAAA,IAAI,GAAJ,IAAI;AADjC,QAAA,IAAA,CAAA,iBAAiB,GAA0B,MAAM,CAAC,EAAE,6DAAC;AAEnD,QAAA,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAA6C,IAAI,+DAAC;AACnF,QAAA,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC;AAClC,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,KAAK,EAAE,EAAE;AACV,SAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IACJ;AAEA,IAAA,sBAAsB,CAAC,WAAmB,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,SAAS,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC1E;IAEA,aAAa,CAAC,KAAa,EAAE,UAA6C,EAAE,OAAkB,EAAE,OAAa,EAAE,OAAa,EAAA;AAC1H,QAAA,IAAI,OAAO,GAAQ;AACjB,YAAA,OAAO,EAAE;AACP,gBAAA,MAAM,EAAE,CAAC;AACV,aAAA;AACD,YAAA,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC;AAC5B,YAAA,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,CAAC;AAC9B,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC;SACvE;AACD,QAAA,IAAI,OAAO,EAAE,MAAM,EAAE;AACnB,YAAA,OAAO,CAAC,OAAO,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAC3D;QACA,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,CAAC,OAAO,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE;QACtD;QACA,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,CAAC,OAAO,GAAG,OAAO;QAC3B;AACA,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,SAAS,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IACzE;AAEA,IAAA,YAAY,CAAC,KAAa,EAAE,UAA6C,EAAE,YAAuB,EAAE,eAAwB,EAAA;AAC1H,QAAA,IAAI,OAAO,GAAQ;AACjB,YAAA,OAAO,EAAE;AACP,gBAAA,OAAO,EAAE;AACP,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,KAAK,EAAE,IAAI;AACZ,iBAAA;;;;AAID,gBAAA,MAAM,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC;AAC1C,gBAAA,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,MAAM,EAAE,UAAU,CAAC,MAAM;AAC1B,aAAA;SACF;AACD,QAAA,IAAI,YAAY,EAAE,MAAM,EAAE;YACxB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,GAAG,YAAY;YACjD,eAAe,GAAG,EAAE;QACtB;QAEA,IAAI,eAAe,IAAI,eAAe,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AACxD,YAAA,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE,UAAU,EAAE,eAAe,EAAE;QACnE;AACA,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC;IAC3D;AAEA,IAAA,YAAY,CAAC,OAAY,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC;IAC9D;IAEA,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,SAAS,CAAC,MAAM,CAAC;IAC7C;IAEA,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,SAAS,CAAC,YAAY,CAAC,CAAC,SAAS,EAAE;IAC/D;AAEA,IAAA,gBAAgB,CAAC,KAAa,EAAE,UAAoD,EAAE,YAAuB,EAAE,eAAwB,EAAA;AACrI,QAAA,IAAI,OAAO,GAAQ;AACjB,YAAA,iBAAiB,EAAE;AACjB,gBAAA,MAAM,EAAE,QAAQ;AACjB,aAAA;AACD,YAAA,eAAe,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC;AACtC,YAAA,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE,8BAA8B,EAAE,eAAe,IAAI,gBAAgB;AAChI,YAAA,UAAU,EAAE,UAAU,CAAC,UAAU,IAAI,CAAC;;SAEvC;AACD,QAAA,IAAI,YAAY,EAAE,MAAM,EAAE;AACxB,YAAA,OAAO,CAAC,iBAAiB,CAAC,WAAW,GAAG,YAAY;YACpD,eAAe,GAAG,EAAE;QACtB;QACA,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,CAAC,YAAY,GAAG,KAAK;QAC9B;QACA,IAAI,eAAe,IAAI,eAAe,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AACxD,YAAA,OAAO,CAAC,UAAU,GAAG,eAAe;QACtC;QACA,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,CAAC,OAAO,GAAG,aAAa;QACjC;AACA,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACjE;IAEA,wBAAwB,CAAC,gBAAwB,EAAE,UAAoB,EAAE,KAAa,EAAE,YAAuB,EAAE,eAAwB,EAAA;AACvI,QAAA,IAAI,OAAO,GAAQ;AACjB,YAAA,OAAO,EAAE;AACP,gBAAA,OAAO,EAAE;AACP,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,UAAU,EAAE,UAAU;AACtB,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;AACD,gBAAA,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC;AAC9B,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;AACxB,gBAAA,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,EAAE,8BAA8B,EAAE,eAAe,IAAI,gBAAgB;AACtG,gBAAA,MAAM,EAAE,gBAAgB;AACzB,aAAA;SACF;AACD,QAAA,IAAI,YAAY,EAAE,MAAM,EAAE;YACxB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,GAAG,YAAY;QAC7C;QACA,IAAI,eAAe,IAAI,eAAe,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;YACxD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACrF,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE;YACnC;YACA,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,eAAe;QAC3D;AACA,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC;IAC1D;AAEA,IAAA,2BAA2B,CAAC,OAA0B,EAAA;AACpD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,SAAS,CAAC,yBAAyB,EAAE,OAAO,CAAC;IACzE;AAEA,IAAA,2BAA2B,CAAC,EAAU,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,SAAS,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAC7D;IAEA,eAAe,CAAC,IAAS,EAAE,EAAU,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAM,CAAA,EAAG,SAAS,CAAC,iBAAiB,UAAU,EAAE,CAAA,CAAE,EAAE,IAAI,CAAC;IACjF;IAEA,eAAe,CAAC,IAAS,EAAE,EAAU,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAM,CAAA,EAAG,SAAS,CAAC,kBAAkB,UAAU,EAAE,CAAA,CAAE,EAAE,IAAI,CAAC;IAClF;AAEA,IAAA,YAAY,CAAC,IAAS,EAAE,QAAQ,GAAG,MAAM,EAAA;AACvC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AACjF,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAA,MAAA,EAAS,OAAO,CAAA,CAAE,CAAC,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC;QAChF,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;QAC5C,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;QACrC,MAAM,eAAe,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpH,IAAI,eAAe,EAAE;;AAEnB,YAAA,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC3C;AACA,QAAA,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC;QAClC,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,CAAA,EAAG,QAAQ,CAAA,IAAA,CAAM,CAAC;AACpD,QAAA,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ;AACpC,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;QACnC,QAAQ,CAAC,KAAK,EAAE;AAChB,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;IACrC;IAEA,YAAY,CAAC,QAAa,EAAE,UAAe,EAAA;AACzC,QAAA,MAAM,KAAK,GAAG,OAAO,QAAQ,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,QAAQ;QAC5E,IAAI,GAAG,GAAG,EAAE;QACZ,IAAI,GAAG,GAAG,OAAO;AAEjB,QAAA,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;AAC9B,YAAA,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;AACrB,gBAAA,GAAG,IAAI,CAAA,EAAG,UAAU,CAAC,KAAK,CAAC,IAAI;YACjC;QACF;QACA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtB,QAAA,GAAG,IAAI,CAAA,EAAG,GAAG,CAAA,IAAA,CAAM;;AAEnB,QAAA,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;AAC1B,YAAA,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;gBACjB,IAAI,IAAI,GAAG,CAAA,EAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG;AACrC,gBAAA,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;AAC9B,oBAAA,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;AACrB,wBAAA,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;wBAE9B,IAAI,IAAI,CAAA,EAAA,EAAK,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAA,CAAE;oBACpC;gBACF;AACA,gBAAA,GAAG,IAAI,CAAA,EAAG,IAAI,CAAA,IAAA,CAAM;YACtB;QACF;AACA,QAAA,OAAO,GAAG;IACZ;IAEA,oBAAoB,CAAC,WAAgB,EAAE,qBAA8B,EAAA;QACnE,OAAO;AACL,YAAA,OAAO,EAAE;AACP,gBAAA,OAAO,EAAE;AACP,oBAAA,UAAU,EAAE,WAAW,CAAC,UAAU,IAAI,EAAE;oBACxC,qBAAqB,EAAE,qBAAqB,IAAI,KAAK;AACtD,iBAAA;AACF,aAAA;SACF;IACH;AAEA,IAAA,yBAAyB,CAAC,WAAgB,EAAE,qBAA8B,EAAE,cAAmB,EAAA;QAC7F,OAAO;AACL,YAAA,OAAO,EAAE;AACP,gBAAA,OAAO,EAAE;AACP,oBAAA,UAAU,EAAE,WAAW,CAAC,UAAU,IAAI,EAAE;oBACxC,qBAAqB,EAAE,qBAAqB,IAAI,KAAK;oBACrD,cAAc,EAAE,cAAc,IAAI,IAAI;AACvC,iBAAA;AACF,aAAA;SACF;IACH;AAEA,IAAA,iBAAiB,CAAC,cAAmB,EAAA;AACnC,QAAA,MAAM,cAAc,GAAG;AACrB,YAAA,iBAAiB,EAAE,cAAc;YACjC,eAAe,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,EAAE,8BAA8B,CAAC;AAClM,YAAA,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,EAAE,8BAA8B,EAAE,eAAe,IAAI,gBAAgB;AACzG,YAAA,cAAc,EAAE,MAAM;AACtB,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,MAAM,EAAE,EAAE;SACX;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,SAAS,CAAC,qBAAqB,EAAE,cAAc,CAAC;IAC7E;AAEA,IAAA,gBAAgB,CAAC,KAAc,EAAA;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE;QACzC,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,uBAAuB,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,CAAC,aAAa,CAAC,iBAAiB,EAAE,KAAK,EAAE,oBAAoB,EAAE;AAC9I,YAAA,MAAM,yBAAyB,GAAG;AAChC,gBAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAC9B,gBAAA,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;aAC7B;;YAED,IAAI,KAAK,EAAE;;gBAET,IAAI,CAAC,MAAM,CAAC,8BAA8B,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,KAAK,KAAK,qBAAqB,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE;oBAC5I,MAAM,CAAC,8BAA8B,CAAC,aAAa,CAAC,IAAI,CAAC,uBAAuB,CAAC;gBACnF;;AAEA,gBAAA,IAAI,CAAC,MAAM,CAAC,8BAA8B,CAAC,iBAAiB,EAAE;AAC5D,oBAAA,MAAM,CAAC,8BAA8B,CAAC,iBAAiB,GAAG,yBAAyB;gBACrF;YACF;iBAAO;;AAEL,gBAAA,MAAM,CAAC,8BAA8B,CAAC,aAAa,GAAG,MAAM,CAAC,8BAA8B,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,KAAK,KAAK,qBAAqB,CAAC,aAAa,CAAC,iBAAiB,CAAC;;AAE/L,gBAAA,IAAI,MAAM,CAAC,8BAA8B,CAAC,iBAAiB,EAAE;AAC3D,oBAAA,OAAO,MAAM,CAAC,8BAA8B,CAAC,iBAAiB;gBAChE;YACF;;YAEA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;QAC7C;IACF;+GA1QW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA,CAAA;;4FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCVY,mBAAmB,CAAA;AANhC,IAAA,WAAA,GAAA;QAOU,IAAA,CAAA,YAAY,GAAW,CAAC;QAEvB,IAAA,CAAA,qBAAqB,GAAW,EAAE;QAClC,IAAA,CAAA,4BAA4B,GAAa,EAAE;QAC3C,IAAA,CAAA,eAAe,GAAW,CAAC;AAY1B,QAAA,IAAA,CAAA,UAAU,GAAoC,IAAI,YAAY,EAAE;QAE1E,IAAA,CAAA,UAAU,GAAQ,EAAE;QAEpB,IAAA,CAAA,YAAY,GAAU,EAAE;QACxB,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,YAAY,GAAG,CAAC;AA2JjB,IAAA;IA7KC,IACI,WAAW,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,EAAE;AAC/B,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;YACzB,IAAI,CAAC,mBAAmB,EAAE;QAC5B;IACF;AACA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;IAWA,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AACA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IACE,OAAO,CAAC,eAAe;YACvB,OAAO,CAAC,eAAe,CAAC,aAAa;YACrC,OAAO,CAAC,eAAe,CAAC,YAAY;AAClC,gBAAA,OAAO,CAAC,eAAe,CAAC,aAAa,EACvC;YACA,IAAI,CAAC,mBAAmB,EAAE;QAC5B;AAEA,QAAA,IAAI,OAAO,EAAE,WAAW,EAAE;YACxB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,YAAY;YACnD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,IAAI,CAAC;YAC1D,IAAI,CAAC,mBAAmB,EAAE;QAC5B;IACF;IAEA,mBAAmB,GAAA;QACjB,IAAI,KAAK,GAAG,CAAC;QACb,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,qBAAqB;AACtC,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AAEtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC9B,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,GAAG,KAAK,EAAE;gBACpC,KAAK,GAAG,KAAK;AACb,gBAAA,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,KAAK,KAAK,EAAE;AACtD,oBAAA,KAAK,GAAG,KAAK,GAAG,KAAK;gBACvB;qBAAO;oBACL,KAAK,GAAG,KAAK;gBACf;gBACA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACxC;QACF;AAEA,QAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAC/D,QAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,aAAa,CACvC,IAAI,CAAC,WAAW,EAChB,iBAAiB,CAClB;AAED,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AAC1D,QAAA,IAAI,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;AACrE,QAAA,IAAI,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE;QAEjE,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC;QAEpC,IAAI,CAAC,UAAU,GAAG;AAChB,YAAA,iBAAiB,EAAE,iBAAiB;AACpC,YAAA,gBAAgB,EAAE,gBAAgB;AAClC,YAAA,KAAK,EAAE,eAAe;AACtB,YAAA,KAAK,EAAE,eAAe;SACvB;IACH;IAEA,aAAa,CAAC,CAAM,EAAE,CAAM,EAAA;QAC1B,IAAI,OAAO,GAAG,CAAC;QACf,IAAI,IAAI,GAAG,CAAC;QACZ,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,IAAI,IAAI,GAAG,OAAO,GAAG,KAAK;AAC1B,QAAA,IAAI,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,CAAC;QAC/B,IAAI,KAAK,GAAQ,EAAE;AACnB,QAAA,IAAI,CAAC;AACL,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AAEvB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE;AAC9B,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE;AACnD,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACf;QACF;AAEA,QAAA,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;YACnB,IAAI,CAAC,EAAE;AACL,gBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBACf,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAChC;AAAO,qBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACtB,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;gBAChC;YACF;AACA,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1B,CAAC,GAAG,CAAC;QACP;QACA,OAAO,IAAI,CAAC,aAAa;IAC3B;AAEA,IAAA,QAAQ,CAAC,IAAY,EAAA;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,IAAI,CAAC,qBAAqB;AAClC,SAAA,CAAC;QACF,IAAI,CAAC,mBAAmB,EAAE;IAC5B;;AAGA,IAAA,kBAAkB,CAAC,IAAY,EAAA;AAC7B,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACrB;IACF;;AAGA,IAAA,mBAAmB,CAAC,IAAY,EAAA;AAC9B,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACrB;IACF;AAEA,IAAA,kBAAkB,CAAC,IAAY,EAAA;AAC7B,QAAA,IACE,IAAI;AACJ,aAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB;AAC/B,gBAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAC9B,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAC5C,CAAC,EACJ;YACA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC;AACvC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;QACjC;IACF;AAEA,IAAA,kBAAkB,CAAC,IAAY,EAAA;AAC7B,QAAA,IACE,IAAI;AACJ,aAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB;AAC/B,gBAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAC9B,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAC5C,CAAC,EACJ;YACA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC;AACvC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;QACjC;IACF;AAEA,IAAA,gBAAgB,CAAC,KAAU,EAAA;AACzB,QAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,KAAK;AACxC,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;QACrB,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,IAAI,CAAC,qBAAqB;AAClC,SAAA,CAAC;IACJ;+GAlLW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,oUChBhC,m8DAmCM,EAAA,MAAA,EAAA,CAAA,inCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDnBO,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cAGjB,KAAK,EAAA,QAAA,EAAA,m8DAAA,EAAA,MAAA,EAAA,CAAA,inCAAA,CAAA,EAAA;;sBAKlB;;sBACA;;sBACA;;sBACA;;sBAWA;;;MEnBU,kBAAkB,CAAA;AAsB7B,IAAA,WAAA,CAAoB,cAA6B,EAAA;QAA7B,IAAA,CAAA,cAAc,GAAd,cAAc;QArBzB,IAAA,CAAA,IAAI,GAAU,EAAE;QAChB,IAAA,CAAA,KAAK,GAAW,CAAC;QACjB,IAAA,CAAA,qBAAqB,GAAW,CAAC;QACjC,IAAA,CAAA,4BAA4B,GAAa,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;QAIzD,IAAA,CAAA,WAAW,GAAW,CAAC;QACvB,IAAA,CAAA,UAAU,GAAY,KAAK;AAE1B,QAAA,IAAA,CAAA,kBAAkB,GAAsB,IAAI,YAAY,EAAE;AAC1D,QAAA,IAAA,CAAA,UAAU,GAAoC,IAAI,YAAY,EAAE;AAChE,QAAA,IAAA,CAAA,kBAAkB,GAAsB,IAAI,YAAY,EAAE;AAC1D,QAAA,IAAA,CAAA,UAAU,GAAsB,IAAI,YAAY,EAAE;QAI5D,IAAA,CAAA,UAAU,GAAG,IAAI,kBAAkB,CAAM,IAAI,CAAC,IAAI,CAAC;QACnD,IAAA,CAAA,SAAS,GAAG,IAAI,cAAc,CAAM,IAAI,EAAE,EAAE,CAAC;QAC7C,IAAA,CAAA,gBAAgB,GAAU,EAAE;IAEwB;AACpD,IAAA,QAAQ,KAAI;AAEZ,IAAA,WAAW,CAAC,OAAsB,EAAA;;QAEhC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE;AACzC,YAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAS,MAAM;AACnE,gBAAA,SAAS,EAAE,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI,EAAE,QAAQ,IAAI,EAAE;gBACrE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE;gBACzC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,WAAW,IAAI,EAAE;gBAC7C,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,IAAI,EAAE,WAAW,IAAI,EAAE;AACnD,gBAAA,UAAU,EAAE,IAAI,EAAE,UAAU,IAAI,EAAE;AAClC,gBAAA,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE;gBAC1B,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,IAAI;AACrC,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,IAAI,GAAG,WAAW;YACvB,IAAI,CAAC,UAAU,GAAG,IAAI,kBAAkB,CAAM,WAAW,CAAC;YAC1D,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QAClC;QAEA,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,YAAY,KAAK,SAAS,EAAE;YAChD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,YAAY;QAC5C;AAEA,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE;AACrC,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YAEtB,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAG;oBACjC,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE;AAClF,wBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;oBAC5B;AACF,gBAAA,CAAC,CAAC;YACJ;YAEA,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,EAAE,YAAY,IAAI,EAAE;QACjE;AAEA,QAAA,IAAI,OAAO,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE;YACxC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,EAAE,YAAY;QACzD;IACF;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE;YACnC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QAClC;IACF;AAEA,IAAA,iBAAiB,CAAC,IAAY,EAAA;QAC5B,MAAM,UAAU,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,qBAAqB;AAC1D,QAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,qBAAqB;AACxD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC;QAC5D,IAAI,CAAC,UAAU,GAAG,IAAI,kBAAkB,CAAM,cAAc,CAAC;QAC7D,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;IAClC;IAEA,aAAa,GAAA;QACX,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM;QAC3C,OAAO,WAAW,KAAK,OAAO;IAChC;IAEA,YAAY,GAAA;AACV,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;QAClC,IAAI,KAAK,EAAE;AACT,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;YAC3H,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACjE,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;AACzH,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;gBAC3B,YAAY,EAAE,IAAI,CAAC,gBAAgB;AACnC,gBAAA,WAAW,EAAE,kBAAkB;AAC/B,gBAAA,MAAM,EAAE;AACT,aAAA,CAAC;QACJ;aAAO;AACL,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;YACvH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,aAAa,CAAC;AACpE,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;gBAC3B,YAAY,EAAE,IAAI,CAAC,gBAAgB;AACnC,gBAAA,WAAW,EAAE,aAAa;AAC1B,gBAAA,MAAM,EAAE;AACT,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,eAAe,CAAC,GAAQ,EAAA;AACtB,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM;AACxB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC;QAEtE,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC;AAC7E,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC9B;aAAO;AACL,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/B,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;QAC5B;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;YAC3B,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAChD,YAAA,UAAU,EAAE,GAAG;YACf,MAAM,EAAE,UAAU,GAAG,YAAY,GAAG;AACrC,SAAA,CAAC;IACJ;AAEA,IAAA,YAAY,CAAC,KAAwB,EAAA;AACnC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,EAAE,WAAW;AACrC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7B;IAEA,sBAAsB,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;YACjC;QACF;QACA,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAC9C,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;AACxH,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,MAAM;AACjC,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;QACtB,IAAI,CAAC,UAAU,GAAG,IAAI,kBAAkB,CAAM,aAAa,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QAChC,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,eAAe,EAAE;AAC9C,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;gBAC3B,aAAa;gBACb;AACD,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,YAAY,CAAC,SAAe,EAAA;AAC1B,QAAA,IAAI,SAAS,CAAC,SAAS,EAAE;AACvB,YAAA,IAAI,SAAS,CAAC,MAAM,KAAK,UAAU;AAAE,gBAAA,SAAS,CAAC,MAAM,GAAG,aAAa;AACrE,YAAA,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ;AAAE,gBAAA,SAAS,CAAC,MAAM,GAAG,OAAO;YAC7D,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,eAAe,EAAE;gBAC9C,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA,OAAA,EAAU,SAAS,CAAC,SAAS,CAAA,MAAA,CAAQ,CAAC;YACrE;iBAAO;AACL,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;YACnE;QACF;aAAO;YACL,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,eAAe,EAAE;AAC9C,gBAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACjD;iBAAO;AACL,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B;QACF;IACF;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;+GA5KW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAlB,kBAAkB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,4BAAA,EAAA,8BAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAgBlB,OAAO,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9BpB,63KAiHM,EAAA,MAAA,EAAA,CAAA,2vDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,EAAA,8BAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDnGO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cAGjB,KAAK,EAAA,QAAA,EAAA,63KAAA,EAAA,MAAA,EAAA,CAAA,2vDAAA,CAAA,EAAA;;sBAGlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBAEA,SAAS;uBAAC,OAAO;;;AExBpB,MAAM,aAAa,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;MAO3B,4BAA4B,CAAA;IAsBvC,WAAA,CAAoB,oBAA0C,EAAU,QAAqB,EAAA;QAAzE,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;QAAgC,IAAA,CAAA,QAAQ,GAAR,QAAQ;AArBtE,QAAA,IAAA,CAAA,WAAW,GAAsB,IAAI,YAAY,EAAE;QACpD,IAAA,CAAA,UAAU,GAAY,KAAK;QAKpC,IAAA,CAAA,kBAAkB,GAAG,SAAS;QAE9B,IAAA,CAAA,QAAQ,GAAQ,EAAE;QAClB,IAAA,CAAA,UAAU,GAAQ,EAAE;QACpB,IAAA,CAAA,IAAI,GAAG,KAAK;QACZ,IAAA,CAAA,aAAa,GAAG,KAAK;QACrB,IAAA,CAAA,iBAAiB,GAAQ,EAAE;QAC3B,IAAA,CAAA,eAAe,GAAQ,EAAE;QACzB,IAAA,CAAA,QAAQ,GAAW,EAAE;AACrB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,IAAI,EAAE;QAExB,IAAA,CAAA,iBAAiB,GAAU,EAAE;QAC7B,IAAA,CAAA,kBAAkB,GAAU,EAAE;QAC9B,IAAA,CAAA,KAAK,GAAG,KAAK;QAGX,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,CAAC,mBAAmB;AAC3F,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK;IAC/F;IAEA,cAAc,GAAA;AACZ,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB;QAC/D,IAAI,cAAc,EAAE;YAClB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACxC,YAAA,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI;YAC/B,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,IAAI,YAAY;AACvD,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAC/B,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QACjC;IACF;AAEA,IAAA,MAAM,CAAC,KAAuB,EAAA;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,MAAM,KAAK,GAAQ,CAAC,KAAK,CAAC;AAC1B,QAAA,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,CAAC;AAE1B,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;YACzB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;AAC/D,YAAA,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YACpD,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,aAAa,EAAE;AACjC,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,gBAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;AACjD,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,qDAAqD;AAC9D,wBAAA,IAAI,EAAE;AACP,qBAAA;AACD,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,UAAU,EAAE;AACb,iBAAA,CAAC;gBACF;YACF;YAEA,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;AAC7B,gBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC;AAC3B,gBAAA,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE;AACnC,gBAAA,UAAU,CAAC,MAAM,GAAG,CAAC,KAAU,KAAI;AACjC,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACxB,gBAAA,CAAC;AACD,gBAAA,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC;YAC5C;iBAAO;AACL,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,gBAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;AACjD,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,oDAAoD;AAC7D,wBAAA,IAAI,EAAE;AACP,qBAAA;AACD,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,UAAU,EAAE;AACb,iBAAA,CAAC;gBACF;YACF;QACF;aAAO;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,YAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;AACjD,gBAAA,IAAI,EAAE;AACJ,oBAAA,OAAO,EAAE,oDAAoD;AAC7D,oBAAA,IAAI,EAAE;AACP,iBAAA;AACD,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,UAAU,EAAE;AACb,aAAA,CAAC;YACF;QACF;IACF;IAEA,MAAM,UAAU,CAAC,eAAoB,EAAA;AACnC,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC3B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,QAAA,MAAM,kBAAkB,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM;AACxD,QAAA,IAAI,CAAC,UAAU,GAAG,kBAAkB;;QAGpC,IAAI,IAAI,GAAG,KAAK;;QAEhB,MAAM,QAAQ,GAAQ,EAAE;;QAExB,MAAM,IAAI,GAAQ,EAAE;;QAEpB,IAAI,IAAI,GAAQ,CAAC;AAEjB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YACnD,IAAI,IAAI,EAAE;gBACR,MAAM,GAAG,GAAQ,EAAE;AACnB,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;;AAEhC,oBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnC;AACA,gBAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YACpB;iBAAO;;gBAEL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;oBAClD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM;;oBAE7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACnE;gBACA,IAAI,GAAG,IAAI;YACb;QACF;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,YAAA,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAClD,YAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEtD,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,gBAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;AACjD,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,wFAAwF;AACjG,wBAAA,IAAI,EAAE;AACP,qBAAA;AACD,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,UAAU,EAAE;AACb,iBAAA,CAAC;gBACF;YACF;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;AAC/E,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,gBAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;AACjD,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,wFAAwF;AACjG,wBAAA,IAAI,EAAE;AACP,qBAAA;AACD,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,UAAU,EAAE;AACb,iBAAA,CAAC;gBACF;YACF;QACF;AACA,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AAEpB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;;QAEtB,MAAM,QAAQ,GAAQ,EAAE;QACxB,MAAM,aAAa,GAAQ,EAAE;QAC7B,MAAM,kBAAkB,GAAQ,EAAE;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,YAAY,CAAC;QACnF,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,EAAE;AAChC,YAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;gBACjD,IAAI,EAAE,EAAE,OAAO,EAAE,uCAAuC,EAAE,IAAI,EAAE,OAAO,EAAE;AACzE,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,UAAU,EAAE;AACb,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC5B;aAAO;YACL,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAY,KAAI;AAC3C,gBAAA,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,CAAA,sCAAA,CAAwC,CAAC;AACzE,gBAAA,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,kBAAkB,CAAC;gBACpD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;gBAC7E,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;AACzF,gBAAA,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO;AAClC,gBAAA,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,YAAY;AACxC,gBAAA,IAAI,UAAU,IAAI,OAAO,CAAC,YAAY,EAAE;AACtC,oBAAA,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;gBAC1C;AACA,gBAAA,IAAI,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE;oBAChC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC9C;AACA,gBAAA,IAAI,SAAS,IAAI,UAAU,EAAE;AAC3B,oBAAA,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS;AAC7B,oBAAA,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;oBAC5B,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,OAAO;gBAC7D;qBAAO;AACL,oBAAA,IAAI,SAAS,IAAI,UAAU,EAAE;AAC3B,wBAAA,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS;AAC7B,wBAAA,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;wBAC5B,IAAI,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC,YAAY,KAAK,EAAE,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC,YAAY,KAAK,EAAE,CAAC,EAAE;AAC9F,4BAAA,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO;AAC3B,4BAAA,OAAO,CAAC,YAAY,CAAC,GAAG,KAAK;4BAC7B,OAAO,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,kBAAkB;wBACnF;wBACA,IAAI,CAAC,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,KAAK,EAAE,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,KAAK,EAAE,CAAC,EAAE;AACtF,4BAAA,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO;AAC3B,4BAAA,OAAO,CAAC,YAAY,CAAC,GAAG,KAAK;4BAC7B,OAAO,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,uBAAuB;wBAC9F;oBACF;yBAAO;AACL,wBAAA,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,EAAE;AAC7B,4BAAA,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO;AAC3B,4BAAA,OAAO,CAAC,YAAY,CAAC,GAAG,KAAK;AAC7B,4BAAA,OAAO,CAAC,SAAS,CAAC,GAAG,oCAAoC;wBAC3D;6BAAO;AACL,4BAAA,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO;AAC3B,4BAAA,OAAO,CAAC,YAAY,CAAC,GAAG,KAAK;4BAC7B,OAAO,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,kBAAkB;4BACjF,OAAO,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,uBAAuB;wBAC9F;oBACF;gBACF;AACF,YAAA,CAAC,CAAC;;YAGF,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAS,EAAE,KAAa,KAAK,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;AACvG,YAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,gBAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;AACjD,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,yFAAyF;AAClG,wBAAA,IAAI,EAAE;AACP,qBAAA;AACD,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,UAAU,EAAE;AACb,iBAAA,CAAC;gBACF;YACF;;YAGA,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,IAAS,EAAE,KAAa,KAAK,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;AAClH,YAAA,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,gBAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;AACjD,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,8FAA8F;AACvG,wBAAA,IAAI,EAAE;AACP,qBAAA;AACD,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,UAAU,EAAE;AACb,iBAAA,CAAC;gBACF;YACF;AAEA,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;YAChB,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,CAAC;YAC/E,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,QAAQ,CAAC;AAC/E,YAAA,IAAI,iBAAiB,IAAI,kBAAkB,EAAE;AAC3C,gBAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;YACxD;iBAAO;AACL,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,gBAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;AACjD,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,wCAAwC;AACjD,wBAAA,IAAI,EAAE;AACP,qBAAA;AACD,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,UAAU,EAAE;AACb,iBAAA,CAAC;YACJ;QACF;IACF;AACA,IAAA,MAAM,gBAAgB,CAAC,QAAa,EAAE,GAAQ,EAAA;AAC5C,QAAA,MAAM,OAAO,GAAQ;AACnB,YAAA,OAAO,EAAE;AACP,gBAAA,OAAO,EAAE,EAAE;gBACX,MAAM,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,aAAa;AAC/H;SACF;AACD,QAAA,IAAI,GAAG,KAAK,cAAc,EAAE;AAC1B,YAAA,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG;AACxB,gBAAA,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO;AAC1B,gBAAA,KAAK,EAAE;aACR;QACH;aAAO;AACL,YAAA,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG;AACxB,gBAAA,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO;AAC1B,gBAAA,KAAK,EAAE;aACR;QACH;AAEA,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,EAAE,WAAW,KAAK,qBAAqB,CAAC,WAAW,CAAC,GAAG,EAAE;AAC1G,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,gBAAA,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE;YAClM;QACF;QACA,OAAO,IAAI,CAAC;aACT,YAAY,CAAC,OAAO;AACpB,aAAA,SAAS;AACT,aAAA,IAAI,CAAC,OAAO,GAAQ,KAAI;AACvB,YAAA,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE;AACvB,gBAAA,OAAO,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ;YAClC;AACF,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,IAAS,KAAI,EAAE,CAAC;aACvB,OAAO,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC;IAEA,UAAU,CAAC,aAAkB,EAAE,cAAmB,EAAA;AAChD,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC3B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;QACzB,MAAM,YAAY,GAAQ,EAAE;QAC5B,MAAM,kBAAkB,GAAQ,EAAE;QAClC,MAAM,aAAa,GAAQ,EAAE;AAC7B,QAAA,IAAI,aAAa,CAAC,KAAK,EAAE;YACvB,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAM,KAAI;AAC7C,gBAAA,IAAI,CAAC,CAAC,cAAc,EAAE;AACpB,oBAAA,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC;AAC7E,oBAAA,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBAClC;AACF,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,IAAI,cAAc,CAAC,KAAK,EAAE;YACxB,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAM,KAAI;AAC9C,gBAAA,IAAI,CAAC,CAAC,cAAc,EAAE;oBACpB,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC5D;AACF,YAAA,CAAC,CAAC;QACJ;QACA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAM,KAAI;AACrC,YAAA,IAAI,CAAC,CAAC,UAAU,EAAE;gBAChB,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE;oBACvB,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AACpD,oBAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,cAAc,CAAC,eAAe,IAAI,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,EAAE;AACzG,wBAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;AAC/E,4BAAA,CAAC,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM;AAC7B,4BAAA,CAAC,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,WAAW;4BACpC,CAAC,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS;AACxD,4BAAA,CAAC,CAAC,QAAQ,CAAC,GAAG,QAAQ,EAAE,KAAK;AAC7B,4BAAA,CAAC,CAAC,OAAO,CAAC,GAAG,QAAQ,EAAE,KAAK;wBAC9B;6BAAO;AACL,4BAAA,CAAC,CAAC,QAAQ,CAAC,GAAG,OAAO;AACrB,4BAAA,CAAC,CAAC,YAAY,CAAC,GAAG,KAAK;AACvB,4BAAA,CAAC,CAAC,SAAS,CAAC,GAAG,oCAAoC;wBACrD;oBACF;yBAAO;AACL,wBAAA,CAAC,CAAC,QAAQ,CAAC,GAAG,OAAO;AACrB,wBAAA,CAAC,CAAC,YAAY,CAAC,GAAG,KAAK;AACvB,wBAAA,CAAC,CAAC,SAAS,CAAC,GAAG,oCAAoC;oBACrD;gBACF;AAAO,qBAAA,IAAI,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE;oBACzD,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AACpD,oBAAA,CAAC,CAAC,QAAQ,CAAC,GAAG,QAAQ,EAAE,KAAK;AAE7B,oBAAA,CAAC,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM;AAC7B,oBAAA,CAAC,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,WAAW;oBACpC,CAAC,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS;gBAC1D;qBAAO,IAAI,CAAC,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;oBAC9C,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;AACxC,oBAAA,CAAC,CAAC,OAAO,CAAC,GAAG,QAAQ,EAAE,KAAK;AAC5B,oBAAA,CAAC,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM;AAC7B,oBAAA,CAAC,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,WAAW;oBACpC,CAAC,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS;gBAC1D;qBAAO;AACL,oBAAA,CAAC,CAAC,QAAQ,CAAC,GAAG,OAAO;AACrB,oBAAA,CAAC,CAAC,YAAY,CAAC,GAAG,KAAK;AACvB,oBAAA,CAAC,CAAC,SAAS,CAAC,GAAG,oCAAoC;gBACrD;YACF;AACF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,UAAU,CAAC;AAC3E,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAQ,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;;AAG1E,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,SAAS,GAAG,OAAO;AAC7E,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE;;;;;;;;;;;AAWzC,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB;YAC/C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;;QAG/C;AAAO,aAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,OAAO,EAAE;;;;;QAKhD;IACF;AAEA,IAAA,cAAc,CAAC,IAAY,EAAA;AACzB,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;IAChC;IAEA,iBAAiB,GAAA;QACf,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC;IAC/E;AAEA,IAAA,eAAe,CAAC,KAAU,EAAA;QACxB,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;IAC/C;+GApZW,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,wKCbzC,2kRAiLA,EAAA,MAAA,EAAA,CAAA,4jDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,kBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,uBAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDpKa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBANxC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,cAG5B,KAAK,EAAA,QAAA,EAAA,2kRAAA,EAAA,MAAA,EAAA,CAAA,4jDAAA,CAAA,EAAA;;sBAGlB;;sBACA;;;MEEU,oBAAoB,CAAA;AA2B/B,IAAA,WAAA,CAAmB,SAA6C,EAAU,oBAA0C,EAAU,QAAqB,EAAA;QAAhI,IAAA,CAAA,SAAS,GAAT,SAAS;QAA8C,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;QAAgC,IAAA,CAAA,QAAQ,GAAR,QAAQ;AA1BtH,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAM,eAAe,CAAC;AAC3C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AAEtC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;QACnC,IAAA,CAAA,WAAW,GAA+C,gBAAgB;QAE1E,IAAA,CAAA,SAAS,GAAU,EAAE;QACrB,IAAA,CAAA,UAAU,GAAW,CAAC;QAEtB,IAAA,CAAA,iBAAiB,GAAU,EAAE;QAC7B,IAAA,CAAA,kBAAkB,GAAU,EAAE;QAC9B,IAAA,CAAA,cAAc,GAAU,EAAE;QAC1B,IAAA,CAAA,kBAAkB,GAAU,EAAE;QAG9B,IAAA,CAAA,YAAY,GAAG,KAAK;QACpB,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,SAAS,GAAQ,EAAE;AACnB,QAAA,IAAA,CAAA,UAAU,GAAsC;AAC9C,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,MAAM,EAAE,CAAC;SACV;QAED,IAAA,CAAA,OAAO,GAAQ,EAAE;QACjB,IAAA,CAAA,WAAW,GAAG,CAAC;QACf,IAAA,CAAA,KAAK,GAAG,KAAK;IACyI;IAEtJ,QAAQ,GAAA;QACN,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,CAAC,gBAAgB;AACxF,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK;AAC7F,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAChE,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;gBAC/C,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;YACjG;iBAAO;gBACL,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC7C,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;gBACjD,IAAI,CAAC,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;AAClD,gBAAA,IAAI,CAAC,SAAS,GAAG,CAAC;YACpB;QACF;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;IAEA,MAAM,GAAA;QACJ,IAAI,WAAW,GAAQ,EAAE;QACzB,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AAEnB,QAAA,MAAM,UAAU,GAAG;YACjB,qBAAqB,CAAC,aAAa,CAAC,aAAa;YACjD,qBAAqB,CAAC,aAAa,CAAC,kBAAkB;YACtD,qBAAqB,CAAC,aAAa,CAAC,WAAW;YAC/C,qBAAqB,CAAC,aAAa,CAAC,KAAK;YACzC,qBAAqB,CAAC,aAAa,CAAC,KAAK;YACzC,qBAAqB,CAAC,aAAa,CAAC,OAAO;YAC3C,qBAAqB,CAAC,aAAa,CAAC,KAAK;SAC1C;AAED,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,EAAE,WAAW,KAAK,qBAAqB,CAAC,WAAW,CAAC,GAAG,EAAE;AAC1G,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,gBAAA,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE;YACtL;QACF;QAEA,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE;AACtC,YAAA,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,IAAS,KAAI;gBACvE,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;oBACpC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU;gBACpC;AACA,gBAAA,OAAO,GAAG;AACZ,YAAA,CAAC,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC;QACxB;QAEA,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE;YACpC,IAAI,CAAC,OAAO,GAAG;gBACb,SAAS,EAAE,WAAW,EAAE,SAAS;gBACjC,8BAA8B,EAAE,WAAW,CAAC,aAAa;gBACzD,gDAAgD,EAAE,WAAW,CAAC,WAAW;gBACzE,0CAA0C,EAAE,WAAW,CAAC,KAAK;gBAC7D,uCAAuC,EAAE,WAAW,CAAC,KAAK;gBAC1D,8CAA8C,EAAE,WAAW,CAAC,OAAO;gBACnE,wCAAwC,EAAE,WAAW,CAAC,KAAK;AAC3D,gBAAA,MAAM,EAAE,CAAC;aACV;QACH;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;IAC9H;AAEA,IAAA,cAAc,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,KAAK,EAAE,KAAK,KAAK,wBAAwB;AAAE,YAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC3E,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK;IAChC;IAEA,YAAY,CAAC,KAAa,EAAE,KAAc,EAAE,MAAe,EAAE,OAAkB,EAAE,OAAa,EAAE,OAAa,EAAA;AAC3G,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC;AACF,aAAA,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;AAChF,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,MAAM,IAAI,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE;oBAC3D,IAAI,CAAC,SAAS,GAAG,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO;oBACpD,IAAI,CAAC,UAAU,GAAG,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK;AACnD,oBAAA,IAAI,OAAO,EAAE,MAAM,EAAE;wBACnB,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO;AAC1D,wBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB;AAChD,wBAAA,IAAI,CAAC,SAAS,GAAG,CAAC;oBACpB;AACA,oBAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE;wBAClC,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;oBACnD;gBACF;qBAAO;AACL,oBAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,oBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;gBACrB;AACA,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;YAC3B,CAAC;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;YAC3B,CAAC;AACF,SAAA,CAAC;IACN;AAEA,IAAA,eAAe,CAAC,KAAU,EAAA;QACxB,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;IAClD;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,iBAAiB;QAChD,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAClD,QAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;YACjD,IAAI,EAAE,EAAE,OAAO,EAAE,6BAA6B,EAAE,IAAI,EAAE,SAAS,EAAE;AACjE,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,UAAU,EAAE,yBAAyB;AACtC,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;IACpB;AAEA,IAAA,YAAY,CAAC,KAAwB,EAAA;AACnC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW;QACpC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;AACnC,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK;AACxE,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;IAC9H;AAEA,IAAA,eAAe,CAAC,KAAU,EAAA;QACxB,IAAI,CAAC,kBAAkB,GAAG,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC;AAClD,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB;IAClD;AAEA,IAAA,sBAAsB,CAAC,KAAU,EAAA;QAC/B,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;QAC7C,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;IAClD;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/G;AAEA,IAAA,gBAAgB,CAAC,GAAQ,EAAA;AACvB,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrH;AAEA,IAAA,YAAY,CAAC,SAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;IACzH;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC;AACzB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;IAC5B;AAEA,IAAA,wBAAwB,CAAC,KAAU,EAAA;AACjC,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;IACjC;IAEA,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACnH;+GA/LW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAT,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,gFCjBjC,wrLA+HA,EAAA,MAAA,EAAA,CAAA,krBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,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,EAAAC,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,KAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,KAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,uBAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,4BAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FD9Ga,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cAGnB,KAAK,EAAA,QAAA,EAAA,wrLAAA,EAAA,MAAA,EAAA,CAAA,krBAAA,CAAA,EAAA;;;AEfd,MAAM,YAAY,GAAG;IAC1B,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IAC9C,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IAC9C,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;CAC/C;AAEM,MAAM,gBAAgB,GAAG;AAC9B,IAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE;;CAE5C;;MCgBY,mBAAmB,CAAA;AAHhC,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAAe;AAClC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAAe;AACpC,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,GAAG,EAAuB;AAClD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,GAAG,EAAuB;AACnD,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,GAAG,EAAuB;AACrD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,GAAG,EAAuB;QAEvD,IAAA,CAAA,eAAe,GAA4B,IAAI;AA2NxD,IAAA;AAzNS,IAAA,WAAW,CAAC,GAAuB,EAAE,GAAQ,EAAE,KAAU,EAAA;QAC/D,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACjB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC;QACzB;QACA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC;IAC1B;AAEA,IAAA,UAAU,CAAC,IAAsB,EAAA;;AAE/B,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACxB,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AAC9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE;AAC/B,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;AACjC,QAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE;;QAGnC,IAAI,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,OAAO,CAAC,GAAG,IAAG;YACzD,IAAI,GAAG,EAAE;AACP,gBAAA,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,IAAG;oBAChC,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,GAAG,OAAO;oBAC3E,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;;AAGxC,oBAAA,KAAK,IAAI,CAAC,GAAG,oBAAoB,EAAE,CAAC,IAAI,kBAAkB,EAAE,CAAC,EAAE,EAAE;wBAC/D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,EAAE,SAAS,CAAC;oBAC7D;AAEA,oBAAA,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,IAAG;wBACjC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,KAAK;wBAC3D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;;wBAGlC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,SAAS,CAAC;wBAC5D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAE,SAAS,EAAE,OAAO,CAAC;;AAG7D,wBAAA,KAAK,IAAI,CAAC,GAAG,cAAc,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,EAAE,EAAE;4BACnD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,EAAE,OAAO,CAAC;wBACzD;AACF,oBAAA,CAAC,CAAC;AACJ,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,gBAAgB,GAAA;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3E;IAEA,YAAY,GAAA;AACV,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK;YACnD,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC;AACT,SAAA,CAAC,CAAC;IACL;IAEA,cAAc,GAAA;AACZ,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK;YACrD,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC;AACT,SAAA,CAAC,CAAC;IACL;AAEA,IAAA,mBAAmB,CAAC,QAAkB,EAAA;AACpC,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU;AACvC,QAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;AACzB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE;AACjE,YAAA,QAAQ,CAAC,OAAO,CAAC,SAAS,IAAI,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7D,QAAA,CAAC,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,EAAE,IAAG;YACxC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AAClC,YAAA,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACnC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,mBAAmB,CAAC,UAAoB,EAAA;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU;AACrC,QAAA,UAAU,CAAC,OAAO,CAAC,SAAS,IAAG;AAC7B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,GAAG,EAAE;AAClE,YAAA,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACrD,QAAA,CAAC,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,IAAG;YACtC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AAChC,YAAA,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACnC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,qBAAqB,CAAC,KAAe,EAAA;AACnC,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU;AACrC,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AACnB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE;AAC/D,YAAA,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACrD,QAAA,CAAC,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,IAAG;YACtC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AAChC,YAAA,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACnC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,uBAAuB,CAAC,KAAe,EAAA;AACrC,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU;AACvC,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AACnB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE;AACnE,YAAA,QAAQ,CAAC,OAAO,CAAC,SAAS,IAAI,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7D,QAAA,CAAC,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,EAAE,IAAG;YACxC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AAClC,YAAA,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACnC,QAAA,CAAC,CAAC;IACJ;IAEA,2BAA2B,CAAC,QAAkB,EAAE,KAAe,EAAA;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;QACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACzB,YAAA,KAAK,GAAG,CAAC,KAAK,CAAC;QACjB;AACA,QAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAG;AAC/B,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;;YAEpD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,WAAW,CAAC,oBAAoB,IAAI,IAAI,IAAI,WAAW,CAAC,kBAAkB,CAAC;AAC/G,QAAA,CAAC,CAAC;IACJ;IAEE,2BAA2B,CAAC,UAAoB,EAAE,KAAe,EAAA;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;QACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACzB,YAAA,KAAK,GAAG,CAAC,KAAK,CAAC;QACjB;AACA,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,IAAG;AAC3B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;;YAE9C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,SAAS,CAAC,cAAc,IAAI,IAAI,IAAI,SAAS,CAAC,YAAY,CAAC;AAC/F,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,qBAAqB,CAAC,QAAkB,EAAA;AACtC,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU;AACvC,QAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;YACzC,IAAI,KAAK,EAAE;AACT,gBAAA,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE;AAC/D,oBAAA,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtB;YACF;AACF,QAAA,CAAC,CAAC;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxD;AAEA,IAAA,uBAAuB,CAAC,UAAoB,EAAA;AAC1C,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU;AACvC,QAAA,UAAU,CAAC,OAAO,CAAC,SAAS,IAAG;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;YAC/C,IAAI,OAAO,EAAE;AACX,gBAAA,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,EAAE,EAAE;AAC/E,oBAAA,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtB;YACF;AACF,QAAA,CAAC,CAAC;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxD;IAEA,gCAAgC,CAAC,UAAoB,EAAE,QAAkB,EAAA;QACvE,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;;AAGvD,QAAA,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC1E,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1C;AAEA,IAAA,iBAAiB,CAAC,KAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,YAAA,KAAK,GAAG,CAAC,KAAK,CAAC;AAC1C,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAClD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACtC,aAAA,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;aAC7D,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC;IAC3B;AAEA,IAAA,mBAAmB,CAAC,KAAe,EAAA;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,YAAA,KAAK,GAAG,CAAC,KAAK,CAAC;AAC1C,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACxC,aAAA,MAAM,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;aACnE,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,CAAC;IACjC;AAEA,IAAA,kBAAkB,CAAC,IAAsB,EAAA;AACvC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;IAC7B;IAEA,kBAAkB,GAAA;QAChB,OAAO,IAAI,CAAC,eAAe;IAC7B;AAEA,IAAA,kBAAkB,CAAC,KAAe,EAAA;AAChC,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,YAAA,KAAK,GAAG,CAAC,KAAK,CAAC;AAC1C,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AACpD,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwC;AACjE,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE;QAC7C,IAAI,WAAW,EAAE;YACf,WAAW,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;gBAChE,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAClC,oBAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE;wBACnD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;4BAC1B,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;wBACvD;oBACF;AACF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;QACJ;QACA,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;IACvC;+GAlOW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCJY,yBAAyB,CAAA;AAqDpC,IAAA,WAAA,CACW,SAAkD,EACjD,oBAA0C,EAC1C,mBAAwC,EACzB,WAAgB,EAAA;QAHhC,IAAA,CAAA,SAAS,GAAT,SAAS;QACR,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;QACpB,IAAA,CAAA,mBAAmB,GAAnB,mBAAmB;AAtDvB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;QACtC,IAAA,CAAA,SAAS,GAAG,KAAK;AACjB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;QACnC,IAAA,CAAA,WAAW,GAAuC,KAAK;AACvD,QAAA,IAAA,CAAA,QAAQ,GAAG,6BAA6B,CAAC,KAAK,CAAC,EAAE,CAAC;QAElD,IAAA,CAAA,QAAQ,GAAU,EAAE;QACpB,IAAA,CAAA,WAAW,GAAU,EAAE;QAEvB,IAAA,CAAA,yBAAyB,GAAY,KAAK;QAE1C,IAAA,CAAA,YAAY,GAAU,EAAE;QACxB,IAAA,CAAA,gBAAgB,GAAU,EAAE;QAE5B,IAAA,CAAA,iBAAiB,GAA6B,EAAE;AAEhD,QAAA,IAAA,CAAA,iBAAiB,GAAG,qBAAqB,CAAC,aAAa;QACvD,IAAA,CAAA,eAAe,GAAuC,EAAE;QAIxD,IAAA,CAAA,SAAS,GAAG,CAAC;QAGb,IAAA,CAAA,iCAAiC,GAAY,KAAK;AAElC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAA+F,eAAe,CAAC;QAE5I,IAAA,CAAA,eAAe,GAAG,EAAE;QAEpB,IAAA,CAAA,gBAAgB,GAAG,CAAC;QACpB,IAAA,CAAA,eAAe,GAAG,CAAC;QACnB,IAAA,CAAA,eAAe,GAAG,GAAG;QACrB,IAAA,CAAA,cAAc,GAAG,KAAK;QAEtB,IAAA,CAAA,WAAW,GAAG,EAAE;AAChB,QAAA,IAAA,CAAA,gBAAgB,GAAG,qBAAqB,CAAC,WAAW;QAEpD,IAAA,CAAA,mBAAmB,GAAsD,IAAI;AAE7E,QAAA,IAAA,CAAA,qBAAqB,GAAG,CAAC,cAAc,CAAC;QACxC,IAAA,CAAA,mBAAmB,GAAG,cAAc;QAIpC,IAAA,CAAA,mBAAmB,GAAG,gBAAgB;QACtC,IAAA,CAAA,KAAK,GAAG,KAAK;QAGb,IAAA,CAAA,yBAAyB,GAAG,IAAI;QAChC,IAAA,CAAA,wBAAwB,GAAG,KAAK;AAO5B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAChC;IAEF,QAAQ,GAAA;;AAEN,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE;YACxC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,mBAAmB;QACjE;QACA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE;QAE1E,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,mBAAmB,EAAE,8BAA8B;QAC9F,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,UAAU;QACvD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAE,OAAO;QAChD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,WAAW,IAAI,EAAE;AAC9D,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK;;;;AAMtE,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM;QACnD;AAEA,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AACxE,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAQ,KAAK,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YACrI,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC,aAAa,CAAC,WAAW;QACtE;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAChE,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK,EAAE;gBACpE,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAQ,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9E,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;YAChD;iBAAO,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,iBAAiB,EAAE;gBACvF,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI;YACrG;iBAAO;gBACL,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC3C,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;YAChD;YAEA,IAAI,IAAI,CAAC,WAAW,KAAK,qBAAqB,CAAC,WAAW,CAAC,GAAG,EAAE;AAC9D,gBAAA,IAAI,CAAC,mBAAmB,GAAG,cAAc;YAC3C;YAEA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,iBAAiB,IAAI,CAAC;AAClD,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,CAAC,GAAG,UAAU,GAAG,KAAK;QAC1E;QAEC,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,iBAAiB,EAAE;YACjF,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC;QAC1D;;QAGA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAa,KAAI;AACzF,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,gBAAA,QAAQ,IAAI,CAAC,aAAa;AACxB,oBAAA,KAAK,IAAI,CAAC,iBAAiB,CAAC,OAAO;AACjC,wBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;wBAC3B;AACF,oBAAA,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK;AAC/B,wBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;wBACxB;AACF,oBAAA,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK;AAC/B,wBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;wBACxB;;YAEN;AACF,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEA,iBAAiB,GAAA;AACf,QAAA,QAAQ,IAAI,CAAC,aAAa;AACxB,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,aAAa;AACpD,gBAAA,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AACxB,oBAAA,IAAI,CAAC,sBAAsB,GAAG,GAAG;oBACjC,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,sBAAsB,CAAC;gBAChE;qBAAO;oBACL,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC;AAC3D,oBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;gBACpB;gBACA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,8BAA8B,CAAC,0BAA0B;gBACrF;AACF,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,WAAW;;AAGlD,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,KAAK,qBAAqB,CAAC,WAAW,CAAC,GAAG,EAAE;AAC7E,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE;gBACvI;qBAAO;AACL,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CACtD,CAAC,CAAM,KAAK,CAAC,CAAC,MAAM,KAAK,qBAAqB,CAAC,aAAa,CAAC,aAAa,CAC3E,EAAE,UAAU;gBACf;AAEA,gBAAA,IAAG,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE;AAC/B,oBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAChE,oBAAA,IAAI,CAAC,sBAAsB,GAAG,GAAG;gBACnC;;AAAO,oBAAA,IAAI,CAAC,sBAAsB,GAAG,GAAG;AAExC,gBAAA,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AACxB,oBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,sBAAsB,CAAC;gBACtF;qBAAO;AACL,oBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC;AACjF,oBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;gBACpB;gBAEA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,8BAA8B,EAAE,yBAAyB;gBACrF;AACF,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO;gBAC9C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,8BAA8B,EAAE,sBAAsB;gBAClF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBAC9C;AACF,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK;gBAC5C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,8BAA8B,EAAE,mBAAmB;gBAC/E,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBAC3C;AACF,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK;gBAC5C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,8BAA8B,EAAE,mBAAmB;gBAC/E,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBAC3C;AACF,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK;gBAC5C,IAAI,CAAC,YAAY,EAAE;gBACnB;AACF,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,kBAAkB;gBACzD,IAAI,CAAC,qBAAqB,EAAE;gBAC5B;AACF,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,WAAW;AAClD,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC;gBAC1F,IAAI,CAAC,mBAAmB,EAAE;gBAC1B;;IAEN;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;AAEQ,IAAA,iBAAiB,CAAC,IAAS,EAAA;QACjC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE;AAC7C,YAAA,OAAO,IAAI;QACb;aAAO,IACL,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK;AAChE,YAAA,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO;YAClE,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,WAAW,EACtE;AACA,YAAA,OAAO,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;QACtE;aAAO,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK,EAAE;AAC3E,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB;AAEA,QAAA,OAAO,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,IAAI;IAC3E;AAED,IAAA,UAAU,CAAC,IAAS,EAAA;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC1C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB;AAE/F,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,QAAQ,IAAG;YACjC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC7D,OAAO,QAAQ,KAAK,KAAK;AAClB,oBAAA,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE;oBAC9C,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE;YACvD;iBAAO;gBACL,OAAO,QAAQ,KAAK,KAAK;YAC3B;AACF,QAAA,CAAC,CAAC;IACJ;AAEE,IAAA,eAAe,CAAC,IAAS,EAAA;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC1C,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;YAC9B,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACzC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;YAC1E;iBAAO;gBACL,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;YAC3D;QACF;AAAO,aAAA,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,EAAE;YAC1C,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACrC,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;YAClE;iBAAO;gBACL,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC;YACnD;YACA,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QAChD;IACF;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAC9C,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;IACpB;AAEA,IAAA,cAAc,CAAC,KAAwB,EAAA;AACrC,QAAA,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAC9D,YAAA,IAAI,CAAC,WAAW,GAAG,UAAU;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC;aAAO;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QAC1B;QACA,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,aAAa,EAAE;AAC5E,YAAA,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AACxB,gBAAA,IAAI,CAAC,sBAAsB,GAAG,GAAG;gBACjC,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,sBAAsB,CAAC;YAChE;iBAAO;gBACL,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC;YAC7D;QACF;QAEA,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,WAAW,EAAE;AAC1E,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE;AAC9B,gBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAChE,gBAAA,IAAI,CAAC,sBAAsB,GAAG,GAAG;YACrC;;AAAO,gBAAA,IAAI,CAAC,sBAAsB,GAAG,GAAG;AAExC,YAAA,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AACxB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,sBAAsB,CAAC;YACtF;iBAAO;AACL,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC;YACnF;QACF;QAEA,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK,EAAE;YACpE,IAAI,CAAC,iBAAiB,EAAE;QAC1B;aAAO;YACL,IAAI,CAAC,cAAc,EAAE;QACvB;QAEA,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO,EAAE;AAC1I,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QACpB;IACF;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC;AACzB,QAAA,QAAQ,IAAI,CAAC,aAAa;AACxB,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,WAAW;AAClD,gBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC3D,oBAAA,IAAI,CAAC,sBAAsB,GAAG,GAAG;oBACjC,IAAI,CAAC,cAAc,EAAE;AACrB,oBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,sBAAsB,CAAC;gBAC5G;qBAAO;AACL,oBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBAC3E;gBACA;AACF,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,aAAa;AACpD,gBAAA,IAAI,CAAC,sBAAsB,GAAG,GAAG;gBACjC,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK;oBAAE,IAAI,CAAC,cAAc,EAAE;gBAClF,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC;gBACvD;AACF,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO;gBAC9C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBAC9C;AACF,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK;gBAC5C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBAC3C;AACF,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK;gBAC5C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBAC3C;;IAEN;IAEA,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAE5B,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,EAAE;YACnC,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,WAAW,EAAE;AAC1E,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,UAAU,CAAC;AACnE,gBAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAChH;iBAAO;gBACH,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,IAAG;oBAC1C,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC;oBACrF,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,IAClD,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,IAAG;wBACvC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;4BAC3D,OAAO,QAAQ,KAAK,GAAG;AACjB,gCAAA,QAAQ,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE;gCAC5C,QAAQ,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE;wBACpD;6BAAO;4BACL,OAAO,QAAQ,KAAK,GAAG;wBACzB;oBACF,CAAC,CAAC,CACH;AACH,gBAAA,CAAC,CAAC;YACJ;QACF;AAEA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC3B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB;QACF;;QAGA,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;YACvD,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YACrD,MAAM,OAAO,GAA+B,EAAE;AAC9C,YAAA,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE;AAC9B,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACtD;AACA,YAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO;AAChC,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB;QACF;;QAGA,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE;;YAEhH,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;gBAChC,MAAM,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE;gBAC1C,MAAM,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE;AAC1C,gBAAA,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;AACnC,YAAA,CAAC,CAAC;;YAGF,MAAM,OAAO,GAA+B,EAAE;AAC9C,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO;AAChC,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB;QACF;QAEA,IAAG,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;YAC5D,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;gBAChC,MAAM,KAAK,GAAG,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE;gBAChD,MAAM,KAAK,GAAG,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE;AAChD,gBAAA,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;AACnC,YAAA,CAAC,CAAC;;YAGF,MAAM,OAAO,GAA+B,EAAE;AAC9C,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO;AAChC,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB;QACF;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,iBAAiB,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,iBAAiB,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;YAC1J,MAAM,OAAO,GAA+B,EAAE;AAC9C,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO;AAChC,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;YAClB;QACF;;QAGA,MAAM,OAAO,GAA+B,EAAE;QAC9C,MAAM,IAAI,GAA6B,EAAE;AACzC,QAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;AAC1B,YAAA,IAAI,MAAM,GAAG,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,WAAW;AAC1D,YAAA,IAAI,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,GAAG;YAC5D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC3B,MAAM,GAAG,GAAG;YACd;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;YACpC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACxB;;AAEA,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI;aACnC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG;AACvB,aAAA,IAAI,EAAE;QACT,IAAI,IAAI,CAAC,GAAG,CAAC;AAAE,YAAA,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;AACtC,QAAA,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE;AAClC,YAAA,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpD;AACA,QAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IACxB;AAEA,IAAA,eAAe,CAAC,MAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC;QACzB,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,iCAAiC,EAAE;AACrJ,YAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM;YACpC,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC;YACzC;QACF;QACA,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,gCAAgC,EAAE;;AAElJ,YAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM;AACpC,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC;YAC/D;QACF;QAEA,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAA,QAAA,EAAW,MAAM,CAAA,CAAE,CAAC;QAC5D,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM;AACpC,YAAA,OAAO,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAC/D;IACF;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,sBAAsB,GAAG,GAAG;AACjC,QAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU;AAE/B,QAAA,MAAM,UAAU,GACd,IAAI,CAAC,WAAW,KAAK;AACnB,cAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,WAAW,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,UAAU,IAAI,IAAI,CAAC;AAChK,cAAE,IAAI,CAAC,QAAQ;AAEnB,QAAA,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;AAC7B,YAAA,MAAM,KAAK,GAAG,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,WAAW,IAAI,EAAE;AACpE,YAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,GAAG;YAClD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC3B,MAAM,GAAG,GAAG;YACd;AACA,YAAA,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;QACnB;AAEA,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK;aAC5B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG;AACvB,aAAA,IAAI,EAAE;AACT,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;;QAGpC,IACE,CAAC,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,WAAW;YACnJ,IAAI,CAAC,WAAW,KAAK,KAAK;AAC1B,YAAA,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EACzB;AACA,YAAA,IAAI,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,WAAW,IAAI,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE;AAC1G,gBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAChE,gBAAA,IAAI,CAAC,sBAAsB,GAAG,GAAG;YACnC;iBAAO;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;YAClE;QACF;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM;QACxB;IACF;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,QACE,CAAC,IAAI,CAAC,iBAAiB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC;AACzE,aAAC,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9F,aAAC,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,kBAAkB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3G,aAAC,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAExG;AAEA,IAAA,gBAAgB,CAAC,KAAU,EAAA;QACzB,MAAM,SAAS,GAAG,GAAG;AACrB,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW;AACnE,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW;QACtC,IAAI,KAAK,GAAG,QAAQ,GAAG,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;YAC1H,IAAI,CAAC,QAAQ,EAAE;QACjB;IACF;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,cAAc;YAAE;AACzE,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,mBAAmB,CAAC,8BAA8B,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe;AAExH,QAAA,QAAQ,IAAI,CAAC,aAAa;AACxB,YAAA,KAAK,IAAI,CAAC,iBAAiB,CAAC,WAAW;AACrC,gBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK;AAAE,oBAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;gBAC9D,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC;gBAChH;AACF,YAAA,KAAK,IAAI,CAAC,iBAAiB,CAAC,aAAa;AACvC,gBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK;AAAE,oBAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;AAC9D,gBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC;gBAC1F;;IAEN;IAEA,oBAAoB,CAAC,KAAa,EAAE,YAAuB,EAAE,SAAkB,EAAE,SAAkB,KAAK,EAAA;QACtG,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB;AAEA,QAAA,MAAM,UAAU,GAAG;YACjB,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,8BAA8B,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe;YACtG,MAAM,EAAE,IAAI,CAAC;SACd;QAED,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,GAAG,EAAE,GAAG,YAAY,EAAE,SAAS;AAC3F,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,MAAM,IAAI,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE;oBAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO;oBAChD,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,GAAG,OAAO;oBACjE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;oBAC3E,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK;AAErD,oBAAA,IAAI,KAAK;AAAE,wBAAA,IAAI,CAAC,iCAAiC,GAAG,IAAI;;AACnD,wBAAA,IAAI,CAAC,iCAAiC,GAAG,KAAK;AAEnD,oBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,IAAI,KAAK;wBAAE,IAAI,CAAC,cAAc,EAAE;oBAEnE,IAAI,CAAC,wBAAwB,EAAE;gBACjC;qBAAO;AACL,oBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,oBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,oBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,oBAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;gBAC7B;YACF,CAAC;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;YAC7B,CAAC;AACF,SAAA,CAAC;IACN;IAEA,mBAAmB,CAAC,gBAAwB,EAAE,KAAa,EAAE,YAAuB,EAAE,SAAkB,EAAE,MAAA,GAAkB,KAAK,EAAA;QAC/H,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB;;;;;;;QAQA,IAAI,IAAI,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAClE,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAW,KAAK,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAA,YAAA,CAAc,CAAC;AAClJ,YAAA,IAAI,CAAC;AACF,iBAAA,wBAAwB,CAAC,gBAAgB,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,GAAG,YAAY,EAAE,SAAS;AAClG,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;oBACjB,IAAI,QAAQ,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;;wBAE9C,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAS,KAAK,IAAI,EAAE,UAAU,IAAI,IAAI,EAAE,IAAI,CAAC;wBAE7F,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,GAAG,OAAO;wBACjE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;wBAC3E,IAAI,CAAC,eAAe,GAAG,QAAQ,EAAE,MAAM,EAAE,KAAK;AAE9C,wBAAA,IAAI,KAAK;AAAE,4BAAA,IAAI,CAAC,gCAAgC,GAAG,IAAI;AACvD,wBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,IAAI,KAAK;4BAAE,IAAI,CAAC,cAAc,EAAE;wBACnE,IAAI,CAAC,wBAAwB,EAAE;oBAEjC;yBAAO;AACL,wBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,wBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,wBAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC3B,wBAAA,IAAI,KAAK;AAAE,4BAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAE7B,wBAAA,IAAG,CAAC,KAAK,IAAI,YAAY,EAAE,MAAM,EAAE;4BACjC,IAAI,CAAC,mBAAmB,EAAE;wBAC5B;oBACF;gBACF,CAAC;gBACD,QAAQ,EAAE,MAAK;AACb,oBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;gBAC7B,CAAC;AACF,aAAA,CAAC;QACN;aAAO;AACL,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,8BAA8B,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe;AAChH,YAAA,MAAM,UAAU,GAAG;AACjB,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,QAAQ;aACnD;AAED,YAAA,IAAI,CAAC;AACF,iBAAA,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,GAAG,EAAE,GAAG,YAAY,EAAE,SAAS;AACxE,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,IAAI,QAAQ,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;wBACtD,MAAM,OAAO,GAAG,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI;wBAC9C,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,GAAG,OAAO;wBACjE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;wBAC3E,IAAI,CAAC,eAAe,GAAG,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU;AAE3D,wBAAA,IAAI,KAAK;AAAE,4BAAA,IAAI,CAAC,gCAAgC,GAAG,IAAI;;AAClD,4BAAA,IAAI,CAAC,gCAAgC,GAAG,KAAK;AAElD,wBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,IAAI,KAAK;4BAAE,IAAI,CAAC,cAAc,EAAE;wBACnE,IAAI,CAAC,wBAAwB,EAAE;AAE/B,wBAAA,IAAG,CAAC,KAAK,IAAI,YAAY,EAAE,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE;AACjE,4BAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;wBACtC;oBACF;yBAAO;AACL,wBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,wBAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,wBAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC3B,wBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;oBACpB;gBACF,CAAC;gBACD,QAAQ,EAAE,MAAK;AACb,oBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;gBAC7B,CAAC;AACF,aAAA,CAAC;QACN;IACF;AAEA,IAAA,eAAe,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,qBAAqB,CAAC,WAAW,CAAC,GAAG,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAChG,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,CAAC,OAAO;YAC1E,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AAE7F,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,EAAE,gBAAgB,EAAE,oBAAoB,IAAI,EAAE;;YAGhH,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC3C,IAAI,CAAC,qBAAqB,GAAG,CAAC,cAAc,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,OAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;YACpG;AAEA,YAAA,IAAI,aAAuB;AAC3B,YAAA,IAAI,IAAI,CAAC,mBAAmB,KAAK,cAAc,EAAE;AAC/C,gBAAA,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,OAAY,KAAK,OAAO,CAAC,IAAI,CAAC;YAClE;iBAAO;AACL,gBAAA,aAAa,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC;YAC5C;YACA,IAAI,WAAW,GAAU,EAAE;AAC3B,YAAA,YAAY,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;AACjC,gBAAA,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;;AAExE,oBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAY,KAC5D,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CACzD;AACD,oBAAA,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBACpD;AACF,YAAA,CAAC,CAAC;YAEF,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,OAAY,KAAK,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACzF,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,WAAW;YAChI,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;AACjF,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;YAClB,IAAI,CAAC,wBAAwB,EAAE;QACjC;aAAO;YACL,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,CAAC,OAAO;AAC1E,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,QAAQ;YAC1H,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;AACjF,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;YAClB,IAAI,CAAC,wBAAwB,EAAE;QACjC;IACF;AAEA,IAAA,YAAY,CAAC,KAAa,EAAA;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,CAAC,KAAK;AACxE,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,QAAQ;QACtH,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;AAEjF,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,wBAAwB,EAAE;IACjC;AAEA,IAAA,YAAY,CAAC,KAAa,EAAA;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,CAAC,KAAK;AACxE,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ;QAC/F,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;QAEjF,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,wBAAwB,EAAE;IACjC;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC;AACF,aAAA,eAAe;AACf,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;gBACtB,IAAI,QAAQ,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;oBAClD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ;gBAC1C;YACF,CAAC;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACxB,CAAC;AACF,SAAA,CAAC;IACN;IAEA,qBAAqB,GAAA;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,8BAA8B,CAAC,kBAAkB;IACxE;IAEA,mBAAmB,GAAA;QACjB,IAAG,IAAI,CAAC,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,EAAE;AAChE,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE,4BAA4B;AAE1E,YAAA,IAAI,CAAC,QAAQ,GAAG,YAAY,IAAI,EAAE;AAClC,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;AAC3D,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAElB,YAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACrG,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE;oBAChE,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AAC9F,oBAAA,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,UAAU,CAAC;oBACnC,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;gBAChD;YACF;YACA,IAAI,CAAC,wBAAwB,EAAE;QAEjC;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;YACrB,IAAI,CAAC,wBAAwB,EAAE;QACjC;IAEF;IAEA,iBAAiB,GAAA;AACf,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,KAAK,UAAU;AAExD,QAAA,MAAM,UAAU,GAAG,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ;QAElJ,MAAM,WAAW,GAAa,EAAE;QAEhC,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,YAAY,EAAE;AAChD,YAAA,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,CAAC;YAC9E,IAAI,cAAc,EAAE;AAClB,gBAAA,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB;QACF;AAEA,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAChC;AAEA,IAAA,iBAAiB,CAAC,SAAmB,EAAA;QACnC,MAAM,OAAO,GAAgC,EAAE;AAC/C,QAAA,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE;YAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC;QAC7F;AACA,QAAA,OAAO,OAAO;IAChB;IAEA,aAAa,GAAA;AACX,QAAA,QAAQ,IAAI,CAAC,aAAa;AACxB,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,WAAW;AAClD,gBAAA,OAAO,oBAAoB;AAC7B,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,aAAa;AACpD,gBAAA,OAAO,qBAAqB;AAC9B,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO;AAC9C,gBAAA,OAAO,iBAAiB;AAC1B,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK;AAC5C,gBAAA,OAAO,cAAc;AACvB,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK;AAC5C,gBAAA,OAAO,cAAc;AACvB,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK;AAC5C,gBAAA,OAAO,cAAc;AACvB,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,kBAAkB;AACzD,gBAAA,OAAO,qBAAqB;AAC9B,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,WAAW;AAClD,gBAAA,OAAO,CAAA,OAAA,EAAU,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAA,CAAE,IAAI,cAAc;AACjG,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,iBAAiB;AACxD,gBAAA,OAAO,oBAAoB;;AAE/B,QAAA,OAAO,EAAE;IACX;IAEA,eAAe,GAAA;QACb,IACE,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK;AAChE,YAAA,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,kBAAkB;YAC7E,IAAI,CAAC,aAAa,KAAK,qBAAqB,CAAC,aAAa,CAAC,iBAAiB,EAC5E;AACA,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB;QAC3C;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACnB,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;AACpB,YAAA,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;YAC9B,QAAQ,EAAE,IAAI,CAAC,YAAY;AAC5B,SAAA,CAAC;IACJ;IAEA,UAAU,CAAI,KAAU,EAAE,SAAiB,EAAA;QACzC,MAAM,OAAO,GAAU,EAAE;AACzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE;AAChD,YAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;QAC7C;AACA,QAAA,OAAO,OAAO;IAChB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;AAEA,IAAA,oBAAoB,CAAC,KAAqB,EAAA;AACxC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;AAClD,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACd,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACxC;aAAO;AACL,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QACnC;IACF;AAEA,IAAA,sBAAsB,CAAC,KAAU,EAAA;QAC/B,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACrD;AAEA,IAAA,8BAA8B,CAAC,IAAS,EAAA;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;;;;;;;;;;;AAe1C,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW,EAAE,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC,YAAY;AAAE,YAAA,OAAO,IAAI;AAC3I,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,2BAA2B,CAAC,IAAS,EAAA;;;;;AAOnC,QAAA,IAAI,IAAI,EAAE,KAAK,KAAK,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC,YAAY;AAAE,YAAA,OAAO,IAAI;AAChI,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,4BAA4B,CAAC,KAAqB,EAAA;AAClD,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,EAAE;AACjD,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,KAAK;QACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;;QAG9C,IAAI,mBAAmB,EAAE;YACvB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACjF,IAAI,CAAC,wBAAwB,EAAE;QACjC;IACF;AAEE,IAAA,mBAAmB,CAAC,SAAc,EAAA;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,8BAA8B,CAAC,aAAa;AAC3F,QAAA,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,EAAE;AACzC,YAAA,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,GAAQ,KAAK,GAAG,EAAE,KAAK,KAAK,SAAS,EAAE,MAAM,CAAC;AAClF,YAAA,OAAO,OAAO,EAAE,aAAa,IAAI,KAAK;QACxC;AACA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,2BAA2B,CAAC,YAAoB,EAAA;QAC9C,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,YAAY,CAAC;IACrD;AAEA,IAAA,yBAAyB,CAAC,KAAU,EAAA;AAClC,QAAA,MAAM,SAAS,GAAG,KAAK,EAAE,MAAM,EAAE,OAAO;AACxC,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,SAAS,CAAC;IACrC;AAEA,IAAA,sBAAsB,CAAC,KAAwB,EAAA;AAC7C,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;AAC7B,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK;QAEhC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;YAC1B;QACF;QAEA,QAAQ,KAAK;AACX,YAAA,KAAK,WAAW;gBACd,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACjF;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACxH;;AAGJ,QAAA,QAAQ,IAAI,CAAC,aAAa;AACxB,YAAA,KAAK,IAAI,CAAC,iBAAiB,CAAC,aAAa;AACzC,YAAA,KAAK,IAAI,CAAC,iBAAiB,CAAC,WAAW;AACvC,YAAA,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK;AACjC,YAAA,KAAK,IAAI,CAAC,iBAAiB,CAAC,WAAW;AACvC,YAAA,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK;AACjC,YAAA,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK;gBAC/B,IAAI,CAAC,wBAAwB,EAAE;gBAC/B;;IAEN;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;QACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IACpG;AAEA,IAAA,gBAAgB,CAAC,KAAa,EAAA;QAC5B,QAAQ,KAAK;AACX,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,IAAI,CAAC,cAAc,EAAE;AAC9B,YAAA;AACE,gBAAA,OAAO,KAAK;;IAElB;AAEA,IAAA,qBAAqB,CAAC,GAAW,EAAA;QAC/B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/C,YAAA,OAAO,GAAG;QACZ;AACA,QAAA,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACnD;IAEA,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;AACpC,QAAA,IAAG,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;AAC7B,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;QACrE;aAAO;AACL,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,KAAK,CAAC;QACnF;IACF;AA98BW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,iHAyDxB,aAAa,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAzDd,yBAAyB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACL,UAAU,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrB3C,4yeA2SA,EAAA,MAAA,EAAA,CAAA,mmGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,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,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,KAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,KAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDvRa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,cAGxB,KAAK,EAAA,QAAA,EAAA,4yeAAA,EAAA,MAAA,EAAA,CAAA,mmGAAA,CAAA,EAAA;;0BA2Dd,MAAM;2BAAC,aAAa;;sBAxDxB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;;MEXhC,sBAAsB,CAAA;AAEjC,IAAA,WAAA,CAAmB,SAA+C,EAAA;QAA/C,IAAA,CAAA,SAAS,GAAT,SAAS;AADZ,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAqE,eAAe,CAAC;IAC7C;IAErE,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IACzE;IACA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC1E;+GATW,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAlB,IAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,kFCVnC,ojIA+EA,EAAA,MAAA,EAAA,CAAA,kUAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDrEa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,cAGrB,KAAK,EAAA,QAAA,EAAA,ojIAAA,EAAA,MAAA,EAAA,CAAA,kUAAA,CAAA,EAAA;;;MEGR,2BAA2B,CAAA;IAEtC,WAAA,CAAmB,SAAoD,EAAU,oBAA0C,EAAA;QAAxG,IAAA,CAAA,SAAS,GAAT,SAAS;QAAqD,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;IAAyB;IAE9H,QAAQ,GAAA;QACN,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,CAAC,kBAAkB;IACpG;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;+GAVW,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,wFCXxC,09BAsBA,EAAA,MAAA,EAAA,CAAA,8vBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,KAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,KAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDXa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBANvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,cAG3B,KAAK,EAAA,QAAA,EAAA,09BAAA,EAAA,MAAA,EAAA,CAAA,8vBAAA,CAAA,EAAA;;;MEeR,sBAAsB,CAAA;IA4CjC,WAAA,CACU,MAAiB,EACjB,EAAe,EACf,oBAA0C,EAC1C,mBAAwC,EACxC,QAAqB,EAAA;QAJrB,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;QACpB,IAAA,CAAA,mBAAmB,GAAnB,mBAAmB;QACnB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QA/CT,IAAA,CAAA,SAAS,GAAW,EAAE;AAIrB,QAAA,IAAA,CAAA,iBAAiB,GAAyD,IAAI,YAAY,EAAE;AAC5F,QAAA,IAAA,CAAA,kBAAkB,GAA0B,IAAI,YAAY,EAAE;AAC9D,QAAA,IAAA,CAAA,UAAU,GAA0B,IAAI,YAAY,EAAE;AAExD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AAEtC,QAAA,IAAA,CAAA,UAAU,GAA0C,qBAAqB,CAAC,YAAY,CAAC,MAAM;AAC7F,QAAA,IAAA,CAAA,aAAa,GAA0C,qBAAqB,CAAC,YAAY,CAAC,MAAM;AAChG,QAAA,IAAA,CAAA,gBAAgB,GAAG,qBAAqB,CAAC,YAAY;AACrD,QAAA,IAAA,CAAA,mBAAmB,GAAG,qBAAqB,CAAC,cAAc;QAE1D,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,mBAAmB,GAAY,IAAI;QACnC,IAAA,CAAA,cAAc,GAAY,KAAK;QAE/B,IAAA,CAAA,4BAA4B,GAAW,KAAK;QAC5C,IAAA,CAAA,4BAA4B,GAAW,IAAI;AAK3C,QAAA,IAAA,CAAA,YAAY,GAAG,qBAAqB,CAAC,cAAc,CAAC,YAAY;AAChE,QAAA,IAAA,CAAA,eAAe,GAAG,qBAAqB,CAAC,WAAW,CAAC,GAAG;AACvD,QAAA,IAAA,CAAA,eAAe,GAAG,qBAAqB,CAAC,WAAW,CAAC,eAAe;QAGnE,IAAA,CAAA,qBAAqB,GAAG,IAAI;QAC5B,IAAA,CAAA,yBAAyB,GAAG,KAAK;QACjC,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,SAAS,GAAQ,EAAE;QAInB,IAAA,CAAA,6BAA6B,GAAG,IAAI;QACpC,IAAA,CAAA,0BAA0B,GAAG,IAAI;QACjC,IAAA,CAAA,KAAK,GAAG,KAAK;IASV;AAEH,IAAA,MAAM,QAAQ,GAAA;QACZ,IAAI,CAAC,QAAQ,EAAE;AAEf,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,WAAW,KAAK,qBAAqB,CAAC,WAAW,CAAC,GAAG,EAAE;AACtE,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK;AACzD,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,gBAAA,IAAI,CAAC,MAAM,CAAC,8BAA8B,CAAC,aAAa,GAAG,CAAC,CAAC,MAAM,CACjE,IAAI,CAAC,MAAM,CAAC,8BAA8B,CAAC,aAAa,EACxD,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,qBAAqB,CAAC,aAAa,CAAC,aAAa,CAC/E;YACH;YAEA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU;QAC3C;QAEA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;QAClC,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,MAAM,EAAE,8BAA8B;AAEjF,QAAA,IAAI,IAAI,CAAC,8BAA8B,CAAC,QAAQ,EAAE;AAChD,YAAA,IAAI,CAAC,8BAA8B,CAAC,QAAQ,GAAG,KAAK;QACtD;QAEA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,EAAE,gBAAgB;;AAGrD,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,qBAAqB,CAAC,WAAW,CAAC,GAAG,EAAE;YACrE,IAAI,CAAC,gBAAgB,EAAE;QACzB;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,IAAI,CAAC,oBAAoB,EAAE;QAC7B;QAEA,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE;AAC7C,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC,SAAS;AAChG,YAAA,MAAM,cAAc,GAClB,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC,YAAY;gBAChF,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC,YAAY;YAClF,MAAM,uBAAuB,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,KAAK,kCAAkC;YAElG,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,8BAA8B,EAAE,WAAW,EAAE;AAChF,gBAAA,KAAK,EAAE,qBAAqB,CAAC,YAAY,CAAC;AAC3C,aAAA,CAAC;YAEF,IAAI,UAAU,EAAE;gBACd,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,YAAY,CAAC,MAAM;AAC3D,gBAAA,IAAI,gBAAgB;AAAE,oBAAA,gBAAgB,CAAC,QAAQ,GAAG,KAAK;AAEvD,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE;oBACtC,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,YAAY,CAAC,MAAM;gBAC7D;YACF;AAEA,YAAA,IAAI,cAAc,IAAI,uBAAuB,EAAE;gBAC7C,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,YAAY,CAAC,MAAM;AAC3D,gBAAA,IAAI,gBAAgB;AAAE,oBAAA,gBAAgB,CAAC,QAAQ,GAAG,IAAI;YACxD;YAEA,IAAI,CAAC,+BAA+B,EAAE;QACxC;AAAO,aAAA,IAAG,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,qBAAqB,CAAC,WAAW,CAAC,GAAG,EAAC;;YAE1E,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,YAAY,CAAC,MAAM;QAC7D;;aAEK,IAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE;YAChD,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,YAAY,CAAC,MAAM;QAC7D;AAEA,QAAA,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,MAAM,EAAE,8BAA8B,EAAE,sBAAsB,IAAI,IAAI;AAChH,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,MAAM,EAAE,8BAA8B,EAAE,0BAA0B,IAAI,IAAI;AACjH,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU;;QAGpC,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAE/D,IAAG,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,eAAe,EAAE;AACnD,YAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC3B,gBAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACvD;iBAAO;;;gBAGL,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC;oBAC3F,IAAI,CAAC,wBAAwB,EAAE;gBACjC,CAAC,EAAE,CAAC,CAAC;YACP;QACD;IAED;IAEA,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,KAAK,IAAI,EAAE;AACnD,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;QAClC;AACA,QAAA,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC;IACxC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;AAEA,IAAA,MAAM,oBAAoB,GAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QAErB,MAAM,QAAQ,GAAQ,MAAM,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;QAC9G,IAAI,QAAQ,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,EAAE,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE;YACrG,IAAI,CAAC,eAAe,GAAG,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK;YACxD,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC;AAEzD,YAAA,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,GAAG,CAAC;AAClD,gBAAA,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE;AAClD,gBAAA,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,EAAE;AAClD,gBAAA,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE;AAC/C,aAAA,CAAC;YAEF,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC;AAEjE,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,8BAA8B,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBAC/E,IAAI,CAAC,eAAe,EAAE;YACxB;iBAAO;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACxB;QAEF;IACF;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACrC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;AAC5B,SAAA,CAAC;IACJ;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAc;IAC7D;AAEA,IAAA,cAAc,CAAC,SAAiB,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,YAAY,CAAc;IACpE;AAEA,IAAA,kBAAkB,CAAC,KAAqB,EAAA;AACtC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK;QAC/B,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,aAA6B,EAAE,IAAI,EAAE;QACpE,IAAI,YAAY,KAAK,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;AACzD,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,IAAI,EAAE,EAAE,IAAI,EAAE,qBAAqB;AACpC,aAAA,CAAC;YAEF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAM,IAAG;gBACzC,IAAI,MAAM,EAAE,MAAM,KAAK,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE;AAC7D,oBAAA,IAAI,CAAC,UAAU,GAAG,YAAY;oBAC9B,IAAI,CAAC,0BAA0B,EAAE;gBACnC;qBAAO;AACL,oBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU;gBACtC;AACF,YAAA,CAAC,CAAC;QACJ;aAAO;AACL,YAAA,IAAI,CAAC,UAAU,GAAG,YAAY;YAC9B,IAAI,CAAC,0BAA0B,EAAE;QACnC;IACF;IAEA,YAAY,GAAA;AACV,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AAC9B,YAAA,EAAE,EAAE,CAACU,EAAM,EAAE,CAAC;YACd,IAAI,EAAE,CAAC,CAAA,WAAA,EAAc,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAA,CAAE,CAAC;YACjD,WAAW,EAAE,CAAC,CAAA,0BAAA,EAA6B,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAA,CAAE,CAAC;YACvE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAACA,EAAM,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3F,mBAAmB,EAAE,CAAC,KAAK,CAAC;YAC5B,sBAAsB,EAAE,CAAC,KAAK;AAC/B,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;;AAG9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,6BAA6B,EAAE;QACnD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,CAAC;QACnD;IACF;AAEA,IAAA,YAAY,CAAC,cAAsB,EAAA;AACjC,QAAA,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;AACtD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;;AAGjD,QAAA,IAAI,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC,YAAY,IAAI,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC,YAAY,EAAE;YAC9I,MAAM,UAAU,GACd,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC;AACrD,kBAAE,qBAAqB,CAAC,aAAa,CAAC;AACtC,kBAAE,qBAAqB,CAAC,aAAa,CAAC,KAAK;YAC/C,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,UAAU,CAAC;YAEjG,IAAI,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,YAAY,CAAC,CAAA,EAAG,UAAU,CAAC,WAAW,EAAE,CAAA,oCAAA,CAAsC,EAAE,OAAO,CAAC;gBAC7F;YACF;QACF;;AAGA,QAAA,IAAI,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE;AAC1B,YAAA,MAAM,aAAa,GAAG,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1D,YAAA,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,IAAI,EAAE;AAC/D,YAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,gBAAA,IAAI,CAAC,YAAY,CAAC,4EAA4E,EAAE,OAAO,CAAC;gBACxG;YACF;QACF;;AAGA,QAAA,IAAI,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE;AAC1B,YAAA,MAAM,aAAa,GAAG,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1D,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK;YACrD,IAAI,UAAU,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK,EAAE;AAC5D,gBAAA,IAAI,CAAC,YAAY,CAAC,wFAAwF,EAAE,OAAO,CAAC;gBACpH;YACF;QACF;AAEA,QAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAACA,EAAM,EAAE,EAAE,cAAc,CAAC,CAAC;;AAGpE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,6BAA6B,EAAE;QACnD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,CAAC;QACnD;IACF;IAEA,oBAAoB,CAAC,EAAU,EAAE,cAAsB,EAAA;QACrD,IAAI,MAAM,GAAG,EAAE;AACf,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;AACjD,QAAA,IAAI,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC,YAAY,IAAI,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC,YAAY,EAAE;YAC9I,MAAM;AACJ,gBAAA,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC;AACrD,sBAAE,qBAAqB,CAAC,aAAa,CAAC;AACtC,sBAAE,qBAAqB,CAAC,aAAa,CAAC,KAAK;YAC/C,IAAI,CAAC,8BAA8B,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAyC,KAAI;gBACtG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,KAAK,KAAK,MAAM;AACrC,YAAA,CAAC,CAAC;QACJ;aAAO;;;YAGL,IAAI,CAAC,8BAA8B,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAyC,KAAI;AACtG,gBAAA,GAAG,CAAC,QAAQ,GAAG,KAAK;AACtB,YAAA,CAAC,CAAC;QACJ;;QAGA,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,8BAA8B,EAAE,QAAQ;AACxE,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACnB,EAAE,EAAE,CAAC,EAAE,CAAC;AACR,YAAA,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AAC5E,YAAA,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;YACrE,UAAU,EAAE,CAAC,EAAE;AAChB,SAAA,CAAC;IACJ;AAEA;;AAEG;IACK,6BAA6B,GAAA;AACnC,QAAA,MAAM,iBAAiB,GAAG,CAAC,WAAmB,KAAa;AACzD,YAAA,IAAI,CAAC,WAAW;AAAE,gBAAA,OAAO,KAAK;AAC9B,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE;AACvC,YAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AACnC,gBAAA,KAAK,CAAC,QAAQ,CAAC,+BAA+B,CAAC;AAC/C,gBAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AACvB,gBAAA,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC;AACvC,gBAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AACvB,gBAAA,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC;AACvC,gBAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AAChC,QAAA,CAAC;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;AACzC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClC,MAAM,MAAM,GAAG,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK;AAC9C,gBAAA,MAAM,UAAU,GAAG,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,IAAI,EAAE;AAE5D,gBAAA,IAAI,MAAM,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEnF,oBAAA,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAS,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE;AACxD,wBAAA,OAAO,IAAI;oBACb;;oBAGA,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,UAAU,CAAC;AAC5E,oBAAA,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE;AACnE,wBAAA,OAAO,IAAI;oBACb;gBACF;YACF;QACF;AACA,QAAA,OAAO,KAAK;IACd;AAEA;;AAEG;AACK,IAAA,8BAA8B,CAAC,cAAsB,EAAA;AAC3D,QAAA,IAAI,cAAc,GAAG,CAAC,IAAI,cAAc,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACjE,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,iBAAiB,GAAG,CAAC,WAAmB,KAAa;AACzD,YAAA,IAAI,CAAC,WAAW;AAAE,gBAAA,OAAO,KAAK;AAC9B,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE;AACvC,YAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AACnC,gBAAA,KAAK,CAAC,QAAQ,CAAC,+BAA+B,CAAC;AAC/C,gBAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AACvB,gBAAA,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC;AACvC,gBAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AACvB,gBAAA,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC;AACvC,gBAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AAChC,QAAA,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;AACtD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK;AAC9C,YAAA,MAAM,UAAU,GAAG,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,IAAI,EAAE;AAE5D,YAAA,IAAI,MAAM,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEnF,gBAAA,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAS,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE;AACxD,oBAAA,OAAO,IAAI;gBACb;;gBAGA,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,UAAU,CAAC;AAC5E,gBAAA,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE;AACnE,oBAAA,OAAO,IAAI;gBACb;YACF;QACF;AACA,QAAA,OAAO,KAAK;IACd;IAEA,cAAc,CAAC,cAAsB,EAAE,cAAsB,EAAA;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;QACtD,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,cAAc,CAAC;QAC/C,MAAM,cAAc,GAAG,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK;AACtD,QAAA,MAAM,cAAc,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM;QAE/C,IAAI,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE;YACxC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;AACzC,YAAA,IAAI,CAAC,iCAAiC,CAAC,cAAc,CAAC;AACtD,YAAA,IAAI,CAAC,8BAA8B,CAAC,cAAc,EAAE,cAAc,CAAC;QACrE;;AAGA,QAAA,IAAI,cAAc,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO,IAAI,cAAc,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO,EAAE;;AAEpI,YAAA,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAChE,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7B,gBAAA,IAAI,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,qBAAqB,CAAC,aAAa,CAAC,iBAAiB,EAAE;AACxF,oBAAA,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACxB;YACF;;AAGA,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,6BAA6B,EAAE;YACnD,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,CAAC;YACnD;QACF;IACF;AAEA,IAAA,qBAAqB,CAAC,KAAc,EAAE,cAAsB,EAAE,cAAsB,EAAA;QAClF,IAAI,KAAK,EAAE;;YAET,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;YACtD,IAAI,eAAe,GAAa,EAAE;YAClC,IAAI,aAAa,GAAa,EAAE;AAChC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,gBAAA,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK;AACpD,gBAAA,MAAM,UAAU,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,IAAI,EAAE;gBAClE,IAAI,MAAM,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO,EAAE;oBAC1D,eAAe,GAAG,UAAU;gBAC9B;gBACA,IAAI,MAAM,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK,EAAE;oBACxD,aAAa,GAAG,UAAU;gBAC5B;YACF;YAEA,IAAI,eAAe,GAAU,EAAE;YAC/B,IAAI,YAAY,GAAG,KAAK;;AAGxB,YAAA,IAAI,eAAe,CAAC,MAAM,EAAE;AAC1B,gBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,eAAe,IAAI,EAAE,CAAC,IAAI,EAAE;gBACnG,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,iBAAiB,CAAC;AACjF,gBAAA,YAAY,GAAG,eAAe,CAAC,MAAM,KAAK,CAAC;YAC7C;iBAAO;;AAEL,gBAAA,IAAG,IAAI,CAAC,OAAO,EAAE;oBACf,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC,YAAY;wBAAE,YAAY,GAAG,IAAI;;wBACpG,YAAY,GAAG,KAAK;gBAC3B;YACF;;YAGA,MAAM,iBAAiB,GAAG,IAAI,CAAC,8BAA8B,CAAC,cAAc,CAAC;AAC7E,YAAA,MAAM,wBAAwB,GAAG,CAAC,iBAAiB;AAEnD,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,8BAA8B,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,IAAG;gBACpF,IAAI,MAAM,CAAC,KAAK,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK,EAAE;oBAC9D,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE;gBAC9C;gBACA,IAAI,MAAM,CAAC,KAAK,KAAK,qBAAqB,CAAC,aAAa,CAAC,iBAAiB,EAAE;oBAC1E,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,wBAAwB,EAAE;gBAC1D;AACA,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,8BAA8B,CAAC,aAAa,GAAG,CAAC,GAAG,cAAc,CAAC;QACzE;IACF;IAEA,oBAAoB,CAAC,cAAsB,EAAE,qBAA6B,EAAA;QACxE,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;AACtD,QAAA,MAAM,gBAAgB,GAAG,UAAU,CAAC;AACjC,aAAA,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,KAAK,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;aACrF,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC,8BAA8B,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtH;AAEA,IAAA,eAAe,CAAC,KAAa,EAAA;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;AACzD,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,IAAI,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ;AAC3D,SAAA,CAAC;QACF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAM,IAAG;YACzC,IAAI,MAAM,EAAE,MAAM,KAAK,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE;gBAC7D,IAAI,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,EAAE;AACtF,oBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAE9B,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9C,wBAAA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;oBACxB;oBACA,IAAI,CAAC,gBAAgB,EAAE;;AAGvB,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,6BAA6B,EAAE;oBACnD,IAAI,CAAC,MAAM,EAAE;AACX,wBAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,CAAC;oBACnD;AAEA,oBAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;AAClC,oBAAA,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC;gBAC5C;qBAAO;AACL,oBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAE9B,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9C,wBAAA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;oBACxB;oBACA,IAAI,CAAC,gBAAgB,EAAE;;AAGvB,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,6BAA6B,EAAE;oBACnD,IAAI,CAAC,MAAM,EAAE;AACX,wBAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,CAAC;oBACnD;gBACF;YACF;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,gBAAgB,GAAA;QACtB,MAAM,YAAY,GAA8B,EAAE;AAClD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9C,YAAA,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1C;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,YAAY;IAC/B;AAEA,IAAA,cAAc,CAAC,KAAa,EAAA;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC;QACtC,IAAI,KAAK,EAAE;AACT,YAAA,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAA,WAAA,EAAc,KAAK,GAAG,CAAC,CAAA,CAAE,CAAC;QACxD;IACF;AAEA,IAAA,4BAA4B,CAAC,cAAsB,EAAA;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,cAAc,CAAC;QAC/C,IAAI,KAAK,EAAE;AACT,YAAA,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAA,WAAA,EAAc,cAAc,GAAG,CAAC,CAAA,CAAE,CAAC;YAC/D,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAc;AACvD,YAAA,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,EAAE;AACnC,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC1C,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;oBAClC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;oBACrC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAC3C;YACF;AACA,YAAA,IAAI,CAAC,8BAA8B,CAAC,cAAc,CAAC;AACnD,YAAA,IAAI,CAAC,iCAAiC,CAAC,cAAc,CAAC;QACxD;IACF;IAGA,6BAA6B,CAAC,cAAsB,EAAE,cAAsB,EAAA;QAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,cAAc,CAAC;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;QACtD,IAAI,UAAU,EAAE;YACd,MAAM,mBAAmB,GAAG,UAAU,EAAE,KAAK,EAAE,UAAU,IAAI,EAAE;;YAG/D,MAAM,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC,CAAM,KAAK,CAAC,CAAC,MAAM,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO,CAAC;YAC3H,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,cAAc,CAAC;YAC/C,IAAI,YAAY,KAAK,CAAC,CAAC,IAAI,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO,EAAE;gBAC1G,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,KAAa,KAAI;oBACpD,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,YAAY,EAAE;AACxG,wBAAA,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAACA,EAAM,EAAE,EAAE,cAAc,CAAC,CAAC;AACjF,wBAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,CAAC;oBACpD;AACF,gBAAA,CAAC,CAAC;gBACH,IAAI,IAAI,CAAC,8BAA8B,EAAE,aAAa,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,qBAAqB,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE;AACnJ,oBAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,CAAC;gBAClD;YACD;QACF;IACF;IAEA,eAAe,CAAC,cAAsB,EAAE,cAAsB,EAAA;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;AACzD,YAAA,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ;AACzD,SAAA,CAAC;QACF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAM,IAAG;YACzC,IAAI,MAAM,EAAE,MAAM,KAAK,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE;AAC7D,gBAAA,IAAI,CAAC,6BAA6B,CAAC,cAAc,EAAE,cAAc,CAAC;AAClE,gBAAA,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC;AACnC,gBAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;AAClC,gBAAA,IAAI,CAAC,8BAA8B,CAAC,cAAc,CAAC;AACnD,gBAAA,IAAI,CAAC,iCAAiC,CAAC,cAAc,CAAC;YACxD;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,cAAc,CAAC,cAAsB,EAAE,cAAsB,EAAA;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;QACtD,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,cAAc,CAAC;QAC/C,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,mBAAmB,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO;AAE1G,YAAA,IAAI,CAAC,6BAA6B,CAAC,cAAc,EAAE,cAAc,CAAC;AAElE,YAAA,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,IAAIA,EAAM,EAAE;AACjD,YAAA,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;;YAGpF,IAAI,mBAAmB,EAAE;AACvB,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,6BAA6B,EAAE;gBACnD,IAAI,CAAC,MAAM,EAAE;AACX,oBAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,CAAC;gBACnD;YACF;AAEA,YAAA,IAAI,CAAC,8BAA8B,CAAC,cAAc,EAAE,cAAc,CAAC;AACnE,YAAA,IAAI,CAAC,iCAAiC,CAAC,cAAc,CAAC;YAEtD,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,eAAe,EAAE;AACpD,gBAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC;YAC3C;QACF;IACF;IAEA,gBAAgB,CAAC,aAAkB,EAAE,QAAa,EAAE,cAAsB,EAAE,iBAAiB,GAAG,CAAC,EAAA;AAC/F,QAAA,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,EAAE;AAC7C,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,EAAE;QACnC,IAAI,eAAe,GAAG,KAAK;AAC3B,QAAA,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE;AACjM,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC,SAAS,EAAE;gBAClF,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC;YAC7E;AAAO,iBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE;;gBAEtF,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,cAAc,CAAC;AACtD,gBAAA,MAAM,gBAAgB,GAAG,CAAC,MAAK;AAC7B,oBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,EAAE;AACjF,wBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE;wBAChD,IAAI,iBAAiB,EAAE;4BACrB,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,aAAa,KAAK,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;wBACjG;oBACF;AACA,oBAAA,OAAO,KAAK;gBACd,CAAC,GAAG;;gBAGJ,IAAI,CAAC,gBAAgB,EAAE;oBACrB,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC;gBAC7E;YACF;YAEA,IAAI,eAAe,EAAE;gBACnB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;AACzD,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,IAAI,EAAE,EAAE,IAAI,EAAE,sBAAsB;AACrC,iBAAA,CAAC;gBAEF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAM,IAAG;oBACzC,IAAI,MAAM,EAAE,MAAM,KAAK,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE;wBAC7D,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC;oBAClE;AACF,gBAAA,CAAC,CAAC;YACJ;QACF;AAEA,QAAA,QAAQ,SAAS,CAAC,MAAM;AACtB,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK;gBAC5C,IAAI,CAAC,eAAe,EAAE;AACpB,oBAAA,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,mBAAmB,CAAC;gBAC1F;gBACA;AACF,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,aAAa;AACtD,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,WAAW;AACpD,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO;AAChD,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK;AAC9C,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK;AAC9C,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK;AAC9C,YAAA,KAAK,qBAAqB,CAAC,aAAa,CAAC,kBAAkB;AACzD,gBAAA,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC;gBAC9C,IAAI,CAAC,eAAe,EAAE;AACpB,oBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,EAAE,IAAI,EAAE,mBAAmB,CAAC;gBACzF;gBACA;AACF,YAAA;gBACE,IAAI,CAAC,eAAe,EAAE;AACpB,oBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,EAAE,IAAI,EAAE,mBAAmB,CAAC;gBACzF;;IAEN;AAEA,IAAA,mBAAmB,CAAC,IAAS,EAAE,SAAc,EAAE,iBAAyB,EAAE,UAAmB,EAAA;AAC3F,QAAA,MAAM,kBAAkB,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAE5D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;AAC5D,YAAA,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU;AACrI,SAAA,CAAC;QAEF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAM,IAAG;YACzC,IAAI,MAAM,EAAE;;AAEV,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5G,gBAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;oBACpB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC;oBAC9C,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,YAAY,CAAc;AAC3D,oBAAA,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;AAElH,oBAAA,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE;wBACzB,MAAM,cAAc,GAAG,UAAU,CAAC,EAAE,CAAC,cAAc,CAAC;AACpD,wBAAA,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;wBAE3D,IACE,SAAS,CAAC,MAAM,KAAK,qBAAqB,CAAC,aAAa,CAAC,aAAa;4BACtE,CAAC,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,MAAM,CAAC,QAAQ,CAAC,EAC7D;4BACA,MAAM,oBAAoB,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CACnD,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,qBAAqB,CAAC,aAAa,CAAC,WAAW,CACtF;4BAED,IAAI,oBAAoB,EAAE;gCACxB,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;4BACtD;wBACF;;wBAGA,IAAI,SAAS,CAAC,MAAM,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO,EAAE;AACpE,4BAAA,IAAI,CAAC,6BAA6B,CAAC,SAAS,EAAE,cAAc,CAAC;AAE7D,4BAAA,MAAM,iBAAiB,GAAG,CAAC,WAAmB,KAAa;AACzD,gCAAA,IAAI,CAAC,WAAW;AAAE,oCAAA,OAAO,KAAK;AAC9B,gCAAA,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE;AACvC,gCAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AACnC,oCAAA,KAAK,CAAC,QAAQ,CAAC,+BAA+B,CAAC;AAC/C,oCAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AACvB,oCAAA,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC;AACvC,oCAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AACvB,oCAAA,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC;AACvC,oCAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AAChC,4BAAA,CAAC;AAED,4BAAA,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAS,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC;4BACxE,IAAI,MAAM,EAAE;AACV,gCAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,CAAC;4BAClD;iCAAO;AACL,gCAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,CAAC;4BACnD;wBACF;AACA,wBAAA,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC;AACzC,wBAAA,IAAI,CAAC,iCAAiC,CAAC,SAAS,CAAC;AAEjD,wBAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;AACjE,4BAAA,IAAI,CAAC,8BAA8B,CAAC,SAAS,CAAC;wBAChD;;wBAGA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,eAAe,EAAE;AACpD,4BAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC;wBAC3C;oBACF;gBACF;YACF;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,kBAAkB,CAAC,SAAgB,EAAE,SAAgB,EAAA;AAC3D,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;AACvD,QAAA,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1D;AAEA,IAAA,yBAAyB,CAAC,cAAsB,EAAA;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,cAAc,CAAC;QACnD,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK;AACxD,QAAA,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,EAAE;YAC3C,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,MAAM,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO,CAAC;YAC9G,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,MAAM,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK,CAAC;YACzG,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,MAAM,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK,CAAC;AAEzG,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAC,IAAI,EAAE;AACxG,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,KAAK,EAAE,UAAU,IAAI,EAAE,CAAC,IAAI,EAAE;AACjG,YAAA,MAAM,eAAe,GAAG,KAAK,EAAE,UAAU,IAAI,EAAE;;AAG/C,YAAA,IAAI,iBAAiB,EAAE,MAAM,IAAI,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE;gBACrF,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,KAAK;AAC9D,oBAAA,GAAG,IAAI;AACP,oBAAA,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE;oBAClD,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,iBAAiB,CAAC;oBACtE,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,iBAAiB;AAC1E,iBAAA,CAAC,CAAC;YACL;;AAEK,iBAAA,IAAI,CAAC,iBAAiB,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE;gBAC1F,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,KAAK;AAC9D,oBAAA,GAAG,IAAI;AACP,oBAAA,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE;oBAC9C,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,eAAe,CAAC;oBACtE,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,eAAe;AACtE,iBAAA,CAAC,CAAC;YACL;;AAEK,iBAAA,IAAI,CAAC,iBAAiB,EAAE,MAAM,IAAI,CAAC,eAAe,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,EAAE;gBAC1F,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,KAAK;AAC9D,oBAAA,GAAG,IAAI;AACP,oBAAA,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,EAAE;oBAClD,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,eAAe,CAAC;oBAC1E,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,eAAe;AACtE,iBAAA,CAAC,CAAC;YACL;;AAEK,iBAAA,IAAI,iBAAiB,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE;gBACzF,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,KAAK;AAC9D,oBAAA,GAAG,IAAI;oBACP,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,eAAe,CAAC;oBACtE,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,iBAAiB,CAAC;oBACtE,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,gCAAgC,CAAC,iBAAiB,EAAE,eAAe;AACpG,iBAAA,CAAC,CAAC;YACL;;AAEK,iBAAA,IAAI,iBAAiB,EAAE,MAAM,IAAI,CAAC,eAAe,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,EAAE;gBACzF,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,KAAK;AAC9D,oBAAA,GAAG,IAAI;oBACP,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,2BAA2B,CAAC,iBAAiB,EAAE,eAAe,CAAC;oBAC/F,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,eAAe,CAAC;oBAC1E,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,iBAAiB;AAC1E,iBAAA,CAAC,CAAC;YACL;;AAEK,iBAAA,IAAI,CAAC,iBAAiB,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,EAAE;gBACzF,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,KAAK;AAC9D,oBAAA,GAAG,IAAI;oBACP,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,2BAA2B,CAAC,eAAe,EAAE,eAAe,CAAC;oBAC/F,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,eAAe,CAAC;oBACtE,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,eAAe;AACtE,iBAAA,CAAC,CAAC;YACL;iBAAO;AACL,gBAAA,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,GAAG,CAAC;AAClD,oBAAA,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE;AAClD,oBAAA,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,EAAE;AAClD,oBAAA,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,YAAY;AAC7C,iBAAA,CAAC;YACJ;QACF;IACF;AAEA,IAAA,iCAAiC,CAAC,cAAsB,EAAA;;QAEtD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,cAAc,CAAC;QACnD,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,YAAY,CAAc;QAC3D,MAAM,8BAA8B,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAC7D,IAAI,IACF,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK;YACvE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;AAC5C,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAC3C;QACD,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,QAAQ,CAAC,8BAA8B,CAAC;IACnF;AAEA,IAAA,oBAAoB,CAAC,SAAc,EAAE,IAAS,EAAE,iBAAyB,EAAE,UAAmB,EAAA;AAC5F,QAAA,MAAM,kBAAkB,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAE5D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;AACvD,YAAA,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU;AAC7H,SAAA,CAAC;QAEF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAM,IAAG;YACzC,IAAI,MAAM,EAAE;;AAEV,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5G,gBAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;oBACpB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC;oBAC9C,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,YAAY,CAAc;AAC3D,oBAAA,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;AAClH,oBAAA,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE;wBACzB,MAAM,cAAc,GAAG,UAAU,CAAC,EAAE,CAAC,cAAc,CAAC;;AAEpD,wBAAA,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC3D,wBAAA,IAAI,CAAC,iCAAiC,CAAC,SAAS,CAAC;oBACnD;;oBAGD,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,eAAe,EAAE;AACjD,wBAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC;oBAC/C;AAEE,oBAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;AACjE,wBAAA,IAAI,CAAC,8BAA8B,CAAC,SAAS,CAAC;oBAChD;gBACF;YACF;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,YAAY,CAAC,OAAe,EAAE,IAAyB,EAAA;AACrD,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,YAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;gBACjD,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;AAC3C,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,UAAU,EAAE;AACb,aAAA,CAAC;QACJ;AAAO,aAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;gBACjD,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;AACzC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,UAAU,EAAE;AACb,aAAA,CAAC;QACJ;IACF;IAEA,gBAAgB,GAAA;;AAEd,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAClD,YAAA,IAAI,CAAC,YAAY,CAAC,qCAAqC,EAAE,OAAO,CAAC;AACjE,YAAA,OAAO,KAAK;QACd;AACA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;YAClC,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAc;YACvD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1C,IAAI,CAAC,YAAY,CAAC,CAAA,WAAA,EAAc,CAAC,GAAG,CAAC,CAAA,kCAAA,CAAoC,EAAE,OAAO,CAAC;AACnF,gBAAA,OAAO,KAAK;YACd;AACA,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,gBAAA,MAAM,UAAU,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK;gBAC5D,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1C,oBAAA,IAAI,CAAC,YAAY,CAAC,CAAA,UAAA,EAAa,CAAC,GAAG,CAAC,CAAA,eAAA,EAAkB,CAAC,GAAG,CAAC,CAAA,kCAAA,CAAoC,EAAE,OAAO,CAAC;AACzG,oBAAA,OAAO,KAAK;gBACd;YACF;QACF;AACA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,uBAAuB,CAAC,iCAA0C,KAAK,EAAE,wBAAiC,IAAI,EAAA;QAClH,IAAI,CAAC,8BAA8B,EAAE;AACnC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACzC,YAAA,IAAI,CAAC,SAAS;gBAAE;QAClB;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AAEpB,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE;QAEnD,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,eAAe,EAAE;AACpD,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AAChF,YAAA,IAAI,qBAAqB;AAAE,gBAAA,IAAI,CAAC,YAAY,CAAC,mCAAmC,EAAE,SAAS,CAAC;AAC5F,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AAErB,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;YACrC;QACF;AAEA,QAAA,IAAI,CAAC;aACF,2BAA2B,CAAC,OAAO;AACnC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,QAAQ,IAAG;gBACf,IAAI,QAAQ,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE;oBACvD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AAClH,oBAAA,IAAI,qBAAqB;AAAE,wBAAA,IAAI,CAAC,YAAY,CAAC,mCAAmC,EAAE,SAAS,CAAC;AAC5F,oBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC;AAC3F,oBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;;oBAGjC,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,UAAU,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,8BAA8B,EAAE;wBAClH,IAAI,CAAC,0BAA0B,EAAE;oBACnC;;AAGA,oBAAA,IAAG,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,8BAA8B,EAAE;AACzE,wBAAA,YAAY,CAAC,UAAU,CAAC,CAAA,EAAG,qBAAqB,CAAC,WAAW,CAAC,eAAe,mBAAmB,IAAI,CAAC,SAAS,CAAA,CAAE,CAAC;oBAClH;gBACF;qBAAO;AACL,oBAAA,IAAI,CAAC,YAAY,CAAC,kDAAkD,EAAE,OAAO,CAAC;gBAChF;AACA,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;YACvB,CAAC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,YAAY,CAAC,kDAAkD,EAAE,OAAO,CAAC;AAC9E,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;YACvB;AACD,SAAA,CAAC;IACN;IAEA,sBAAsB,GAAA;QACpB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,IAAI;gBACF,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;;AAGjD,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC;AACrB,qBAAA,GAAG,CAAC,CAAC,KAAU,MAAM;oBACpB,aAAa,EAAE,KAAK,CAAC,IAAI;oBACzB,qBAAqB,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAc,KAAI;AAC7D,wBAAA,IAAI,aAAuB;wBAC3B,IACE,SAAS,EAAE,MAAM,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK;4BAC/D,SAAS,EAAE,UAAU,EAAE,MAAM;4BAC7B,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAChC;AACA,4BAAA,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;4BAC5E,aAAa,GAAG,OAAO;wBACzB;6BAAO,IAAI,SAAS,EAAE,MAAM,KAAK,qBAAqB,CAAC,aAAa,CAAC,iBAAiB,EAAE;AACtF,4BAAA,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;4BACvC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE;wBAEzD;6BAAO;AACL,4BAAA,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,IAAI,OAAO,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;AAC9E,gCAAA,aAAa,GAAG,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,GAAQ,KAAK,GAAG,EAAE,UAAU,CAAC,IAAI,EAAE;4BAChF;iCAAO;gCACL,aAAa,GAAG,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;4BACzD;wBACF;AAEA,wBAAA,IAAI,SAAS,CAAC,MAAM,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;4BACjE,OAAO;gCACL,WAAW,EAAE,SAAS,CAAC,MAAM;gCAC7B,aAAa;6BACd;wBACH;AACA,wBAAA,OAAO,IAAI;AACb,oBAAA,CAAC;yBACA,MAAM,CAAC,CAAC,QAAa,KAAK,CAAC,CAAC,QAAQ,CAAC;AACzC,iBAAA,CAAC;qBACD,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC;AAE/G,gBAAA,MAAM,cAAc,GAAsB;oBACxC,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,oBAAA,aAAa,EAAE;AACb,wBAAA,OAAO,EAAE,CAAC;wBACV,UAAU;AACX,qBAAA;iBACF;gBAED,OAAO,CAAC,cAAc,CAAC;YACzB;YAAE,OAAO,KAAK,EAAE;gBACd,MAAM,CAAC,KAAK,CAAC;YACf;AACF,QAAA,CAAC,CAAC;IACJ;IAGE,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE;AAC5C,YAAA,KAAK,EAAE;AACR,SAAA,CAAC;IACJ;AAEA,IAAA,MAAM,gBAAgB,GAAA;AACpB,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC;AACzB,aAAA,2BAA2B,CAAC,IAAI,CAAC,SAAS;AAC1C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS;aACT,KAAK,CAAC,MAAK;;AAEV,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC,YAAY,EAAE;;gBAErF,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAACA,EAAM,EAAE,EAAE,CAAC,CAAC;AAC3D,gBAAA,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,qBAAqB,CAAC,aAAa,CAAC,aAAa,CAAC;AACvF,gBAAA,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;;gBAG7E,MAAM,qBAAqB,GAAG,IAAI,CAAC,oBAAoB,CAACA,EAAM,EAAE,EAAE,CAAC,CAAC;AACpE,gBAAA,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,qBAAqB,CAAC,aAAa,CAAC,kBAAkB,CAAC;AACrG,gBAAA,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC;;AAG/D,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AAC1B,oBAAA,EAAE,EAAE,CAACA,EAAM,EAAE,CAAC;oBACd,IAAI,EAAE,CAAC,cAAc,CAAC;oBACtB,WAAW,EAAE,CAAC,6BAA6B,CAAC;AAC5C,oBAAA,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,qBAAqB,CAAC;AAChE,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;;AAG1B,gBAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;gBACrC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AAChH,gBAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC;gBAC1C,IAAI,CAAC,0BAA0B,EAAE;YACnC;;AAGA,YAAA,IACA,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,UAAU,KAAK,MAAM;;AAEvE,iBAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,EACpC;gBACF,IAAI,CAAC,8BAA8B,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC9D,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACxB,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;YACnC;YACE,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC;gBAC3F,IAAI,CAAC,wBAAwB,EAAE;YACjC,CAAC,EAAE,CAAC,CAAC;AACP,QAAA,CAAC,CAAC;AACJ,QAAA,IAAI,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE;YACnC,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC;YAC9D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QAEpH;IACF;IAEQ,wBAAwB,GAAA;QAC9B,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AACjD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC;AACnF,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,UAAU,KAAK,MAAM,EAAE;gBAC1E,IAAI,CAAC,qBAAqB,GAAG,YAAY,KAAK,IAAI,CAAC,qBAAqB;AAExE,gBAAA,IAAG,IAAI,CAAC,OAAO,EAAE,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC,YAAY,EAAE;oBACpF,IAAI,CAAC,yBAAyB,GAAG,YAAY,KAAK,IAAI,CAAC,qBAAqB;gBAC9E;YACF;iBAAO;gBACL,IAAI,CAAC,qBAAqB,GAAG,YAAY,KAAK,IAAI,CAAC,qBAAqB;YAC1E;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,0BAA0B,CAAC,aAAkB,EAAA;AAC3C,QAAA,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE;YACtC,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC;gBAC3F,IAAI,CAAC,wBAAwB,EAAE;YACjC,CAAC,EAAE,CAAC,CAAC;YAEL;QACF;AAEA,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5B;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,UAAU,CAAC;QAClD;;AAGA,QAAA,MAAM,iBAAiB,GAAG,CAAC,WAAmB,KAAa;AACzD,YAAA,IAAI,CAAC,WAAW;AAAE,gBAAA,OAAO,KAAK;AAC9B,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE;AACvC,YAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AACnC,gBAAA,KAAK,CAAC,QAAQ,CAAC,+BAA+B,CAAC;AAC/C,gBAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AACvB,gBAAA,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC;AACvC,gBAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AACvB,gBAAA,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC;AACvC,gBAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AAChC,QAAA,CAAC;QAED,IAAI,gBAAgB,GAAG,KAAK;QAC5B,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;YAC9C,MAAM,iBAAiB,GAAG,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,QAAa,KAAK,QAAQ,CAAC,WAAW,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO,CAAC;YACnJ,IAAI,iBAAiB,EAAE,WAAW,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO,EAAE;AAClF,gBAAA,MAAM,cAAc,GAAG,iBAAiB,CAAC,aAAa,IAAI,EAAE;;AAE5D,gBAAA,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,GAAW,KAAK,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE;oBAChE,gBAAgB,GAAG,IAAI;gBACzB;YACF;AACF,QAAA,CAAC,CAAC;;QAGF,IAAI,gBAAgB,EAAE;AACpB,YAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAClD;aAAO;AACL,YAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,CAAC;QACnD;QAEA,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,KAAa,KAAI;YAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAQ;YAE3C,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,QAAa,KAAI;AACpD,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAACA,EAAM,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;;AAG5E,gBAAA,MAAM,SAAS,GAA8B;AAC3C,oBAAA,SAAS,EAAE,qBAAqB,CAAC,aAAa,CAAC,aAAa;AAC5D,oBAAA,IAAI,EAAE,qBAAqB,CAAC,aAAa,CAAC,KAAK;AAC/C,oBAAA,KAAK,EAAE,qBAAqB,CAAC,aAAa,CAAC,KAAK;AAChD,oBAAA,WAAW,EAAE,qBAAqB,CAAC,aAAa,CAAC,WAAW;AAC5D,oBAAA,aAAa,EAAE,qBAAqB,CAAC,aAAa,CAAC,kBAAkB;AACrE,oBAAA,KAAK,EAAE,qBAAqB,CAAC,aAAa,CAAC,KAAK;AAChD,oBAAA,OAAO,EAAE,qBAAqB,CAAC,aAAa,CAAC,OAAO;AACpD,oBAAA,KAAK,EAAE,qBAAqB,CAAC,aAAa,CAAC,KAAK;AAChD,oBAAA,qBAAqB,EAAE,qBAAqB,CAAC,aAAa,CAAC;iBAC5D;;gBAGD,SAAS,CAAC,UAAU,CAAC;oBACnB,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,WAAW;oBAC/D,UAAU,EACN,QAAQ,CAAC,WAAW,KAAK,qBAAqB,CAAC,aAAa,CAAC;0BACzD,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa;AACpC,8BAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,MAAM,CAAC,CAAC,CAAC;AAClD,8BAAE;0BACF,QAAQ,CAAC,WAAW,KAAK,qBAAqB,CAAC,aAAa,CAAC;8BAC7D,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa;kCAClC,QAAQ,CAAC;AACX,kCAAE,CAAC,QAAQ,CAAC,aAAa;8BACzB,QAAQ,CAAC,aAAa;AAC/B,iBAAA,CAAC;AAEF,gBAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5B,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;gBAC9B,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,IAAIA,EAAM,EAAE,CAAC;AACnC,gBAAA,IAAI,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC;AAC3B,gBAAA,WAAW,EAAE,CAAC,CAAA,gBAAA,EAAmB,KAAK,CAAC,aAAa,EAAE,CAAC;AACvD,gBAAA,UAAU,EAAE,UAAU;gBACtB,mBAAmB,EAAE,CAAC,KAAK,CAAC;gBAC5B,sBAAsB,EAAE,CAAC,KAAK;AAC/B,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;;AAG9B,YAAA,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC;;AAG7C,YAAA,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC;AAE1C,YAAA,IACE,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,UAAU,KAAK,MAAM;;AAEvE,iBAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,EACtC;;AAEA,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;oBAClC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE;oBAC1B,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE;oBAC5B,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE;oBACnC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE;oBAClC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC;gBAClD;gBACA,IAAI,CAAC,8BAA8B,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC9D,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACxB,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;YACnC;;AAGC,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,8BAA8B,EAAE;;AAEzE,gBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE;gBAEhD,IAAI,iBAAiB,EAAE;;AAErB,oBAAA,MAAM,eAAe,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,aAAa,CAAC;AAE3E,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;wBAClC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK;;AAGxC,wBAAA,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;4BACrC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE;4BAC1B,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE;4BAC5B,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE;4BACnC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE;4BAClC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC;wBAClD;oBACF;gBACF;AAEA,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;YACnC;YAEF,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC;gBAC3F,IAAI,CAAC,wBAAwB,EAAE;YACjC,CAAC,EAAE,CAAC,CAAC;AACP,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,MAAM,0BAA0B,GAAA;QAC9B,IAAI,cAAc,GAAG,EAAE;QACvB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAC7C,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACjD;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC,YAAY,EAAE;YACpF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;YACvC,IAAI,YAAY,GAAa,EAAE;YAC/B,IAAI,mBAAmB,GAAG,EAAE;YAE5B,IAAI,UAAU,EAAE;gBACd,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,YAAY,CAAc;AAC5D,gBAAA,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,EAAE;oBACnC,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,qBAAqB,CAAC,aAAa,CAAC,aAAa,CAAC;oBACtI,IAAI,YAAY,EAAE;wBAChB,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,IAAI,EAAE;oBAC5D;oBAEA,MAAM,qBAAqB,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CACpD,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,qBAAqB,CAAC,aAAa,CAAC,kBAAkB,CAC7F;oBACD,IAAI,qBAAqB,EAAE;AACzB,wBAAA,MAAM,aAAa,GAAG,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,IAAI,EAAE;wBAC1E,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,aAAa,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;oBAChG;gBACF;YACF;AAEA,YAAA,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG;AAC5B,gBAAA,OAAO,EAAE,CAAC;gBACV,YAAY;gBACZ;aACD;AACD,YAAA,cAAc,GAAG;AACf,gBAAA,OAAO,EAAE,CAAC;gBACV,YAAY;gBACZ;aACD;QACH;AAEA,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,KAAK,qBAAqB,CAAC,YAAY,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI;AACtG,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC;AAC/F,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,cAAc,CAAC;AAC1H,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,MAAM,EAAE;YACvE,IACE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;AACnH,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO,EAC/B;AACA,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC,YAAY,EAAE;AACpF,oBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;AAC5B,wBAAA,aAAa,CAAC,OAAO,CAAC,OAAe,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY;oBACjF;AACA,oBAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE;gBAC5F;qBAAO;AACL,oBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;AAC5B,wBAAA,OAAO,CAAC,OAAO,CAAC,OAAe,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY;oBAC3E;AACA,oBAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE;gBACtF;YACF;iBAAO;AACL,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC,YAAY,EAAE;AACpF,oBAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE;gBAC5F;qBAAO;AACL,oBAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE;gBACtF;YACF;QACF;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;IACpC;AAEA,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE;AAC3B,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAU,KAAI;AACnD,YAAA,MAAM,UAAU,GAAI,KAAK,CAAC,GAAG,CAAC,YAAY,CAAe,EAAE,QAAQ,IAAI,EAAE;AACzE,YAAA,QACE,UAAU,EAAE,MAAM,GAAG,CAAC;AACtB,gBAAA,UAAU,CAAC,KAAK,CAAC,CAAC,SAAc,KAAI;oBAClC,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK;AACrD,oBAAA,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC3D,CAAC,CAAC;AAEN,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;IAC/F;IAEA,+BAA+B,GAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,aAAa,KAAK,qBAAqB,CAAC,cAAc,CAAC,YAAY,EAAE;;AAErF,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;QACvC;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,YAAY,KAAK,UAAU,EAAE;;AAElF,YAAA,IAAI,CAAC,8BAA8B,CAAC,QAAQ,GAAG,IAAI;AACnD,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;QACnC;;;;;;;;;;;IAWF;AAEA,IAAA,MAAM,8BAA8B,CAAC,cAAsB,EAAE,cAAuB,EAAA;;AAElF,QAAA,MAAM,YAAY,GAA8B;AAC9C,YAAA,CAAC,qBAAqB,CAAC,aAAa,CAAC,aAAa,GAAG,WAAW;AAChE,YAAA,CAAC,qBAAqB,CAAC,aAAa,CAAC,WAAW,GAAG,gDAAgD;AACnG,YAAA,CAAC,qBAAqB,CAAC,aAAa,CAAC,KAAK,GAAG,0CAA0C;AACvF,YAAA,CAAC,qBAAqB,CAAC,aAAa,CAAC,kBAAkB,GAAG,8BAA8B;AACxF,YAAA,CAAC,qBAAqB,CAAC,aAAa,CAAC,KAAK,GAAG,uCAAuC;AACpF,YAAA,CAAC,qBAAqB,CAAC,aAAa,CAAC,OAAO,GAAG,8CAA8C;AAC7F,YAAA,CAAC,qBAAqB,CAAC,aAAa,CAAC,KAAK,GAAG,wCAAwC;AACrF,YAAA,CAAC,qBAAqB,CAAC,aAAa,CAAC,KAAK,GAAG,YAAY;AACzD,YAAA,CAAC,qBAAqB,CAAC,aAAa,CAAC,iBAAiB,GAAG;SAC1D;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,cAAc,CAAC;QAC/C,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC;YAClC;QACF;QAEA,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAc;QACvD,MAAM,OAAO,GAA2B,EAAE;AAE1C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK;AAC7C,YAAA,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,IAAI,EAAE;AAC3D,YAAA,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC;YAChC,IAAI,GAAG,EAAE;AACP,gBAAA,IACE,MAAM,KAAK,qBAAqB,CAAC,aAAa,CAAC,KAAK;AACpD,oBAAA,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;AACzB,oBAAA,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,EAChE;AACA,oBAAA,MAAM,OAAO,GAAG,UAAU,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,EAAE,MAAM,CAAC;AACzE,oBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO;gBACxB;qBAAO,IAAI,MAAM,KAAK,qBAAqB,CAAC,aAAa,CAAC,iBAAiB,EAAE;AAC3E,oBAAA,IAAI,UAAU,CAAC,MAAM,IAAI,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;wBAC3D,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;oBAC9B;gBACF;qBACK;AACH,oBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU;gBAC3B;YACF;iBACK;AACD,gBAAA,MAAM,qBAAqB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAQ,KAAK,GAAG,EAAE,UAAU,IAAI,GAAG,CAAC;AAClF,gBAAA,OAAO,CAAC,CAAA,EAAG,MAAM,EAAE,CAAC,GAAG,qBAAqB;YAC9C;QACJ;;QAGA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;AACjC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5D,gBAAA,OAAO,OAAO,CAAC,GAAG,CAAC;YACrB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,EAAE,WAAW,KAAK,qBAAqB,CAAC,WAAW,CAAC,GAAG,EAAE;AAC1G,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE;AACnD,gBAAA,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE;YAClL;QACF;AAEA,QAAA,MAAM,OAAO,GAAQ,EAAE,GAAG,OAAO,EAAE;QACnC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,YAAA,OAAO,CAAC,MAAM,GAAG,CAAC;QACpB;aAAO;YACL,OAAO,OAAO,CAAC,MAAM;QACvB;AAEA,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,OAAO,EAAE;gBACP,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AACvD,gBAAA,MAAM,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW;AAChD;SACF;AACD,QAAA,IAAG,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC5B,YAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC;iBACzB,YAAY,CAAC,OAAO;AACpB,iBAAA,SAAS;iBACT,KAAK,CAAC,MAAK;AACV,gBAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC;AACpC,YAAA,CAAC,CAAC;AACJ,YAAA,IAAI,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC9B,MAAM,KAAK,GAAG,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK;AAC/C,gBAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,KAAK;gBACtC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE;AACnC,oBAAA,IAAI,CAAC,YAAY,CAAC,yHAAyH,EAAE,OAAO,CAAC;gBACvJ;YACF;QACF;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC;QACpC;IACF;AAEA,IAAA,sBAAsB,CAAC,YAAiB,EAAA;QACtC,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,SAAS;AACnE,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;IACtE;AAEA,IAAA,mBAAmB,CAAC,SAAc,EAAE,IAAS,EAAE,cAAmB,EAAA;QAChE,IAAI,IAAI,GAAG,KAAK;QAChB,IAAI,qBAAqB,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;QAChE,IAAI,qBAAqB,GAAG,qBAAqB,IAAI,qBAAqB,EAAE,SAAS,GAAG,cAAc,CAAC;QACvG,IAAI,oBAAoB,GAAG,CAAC;AAC5B,QAAA,IAAI,qBAAqB,IAAI,qBAAqB,EAAE,UAAU,IAAI,qBAAqB,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE;;AAE/G,YAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CAAC,qBAAqB,EAAE,UAAU,EAAE,YAAY,CAAC;YACtG,IAAI,gBAAgB,EAAE;gBACpB,IAAI,GAAG,KAAK;YACd;iBAAO;AACL,gBAAA,qBAAqB,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,IAAG;AAC5C,oBAAA,IAAI,IAAI,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,IAAI,IAAI,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;wBACpE,IAAI,GAAG,IAAI;oBACb;AACF,gBAAA,CAAC,CAAC;YACJ;YACA,IAAI,qBAAqB,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE;AACjD,gBAAA,IAAI,4BAA4B,GAAG,CAAC,CAAC;gBACrC,qBAAqB,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;oBACzD,IAAI,IAAI,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC/B,4BAA4B,GAAG,KAAK;oBACtC;AACF,gBAAA,CAAC,CAAC;;;gBAGF,IAAI,qBAAqB,EAAE,UAAU,CAAC,4BAA4B,CAAC,EAAE,MAAM,KAAK,SAAS,EAAE,MAAM,IAAI,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE;oBACtI,IAAI,GAAG,KAAK;gBACd;YACF;;;;;;;;;QAUF;AACA,QAAA,OAAO,IAAI;IACb;IAEA,yBAAyB,CAAC,IAAI,EAAE,GAAG,EAAA;QACjC,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAClD,gBAAA,KAAK,EAAE;YACT;QACF;QACA,OAAO,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI;IACjC;AAEA,IAAA,0BAA0B,CAAC,SAAc,EAAE,IAAS,EAAE,cAAmB,EAAA;QACvE,IAAI,qBAAqB,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;QAChE,IAAI,qBAAqB,GAAG,qBAAqB,IAAI,qBAAqB,EAAE,SAAS,GAAG,cAAc,CAAC;QACvG,IAAI,oBAAoB,GAAG,qBAAqB,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,IAAG;AAC7E,YAAA,OAAO,IAAI,EAAE,MAAM,KAAK,SAAS,EAAE,MAAM,IAAI,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC;AAC3E,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,8BAA8B,GAAG,qBAAqB,EAAE,UAAU,CAAC,MAAM;AAC7E,QAAA,KAAK,IAAI,CAAC,GAAG,oBAAoB,GAAG,CAAC,EAAE,CAAC,GAAG,8BAA8B,EAAE,CAAC,EAAE,EAAE;YAC9E,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAc;YAC3E,MAAM,SAAS,GAAG,cAAc,CAAC,EAAE,CAAC,cAAc,CAAc;YAChE,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,YAAY,CAAc;YAChE,MAAM,cAAc,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC,CAAc;;YAEzD,MAAM,SAAS,GAAG,cAAc;YAChC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;YACrC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC3C;AAEA,QAAA,IAAI,CAAC,8BAA8B,CAAC,cAAc,CAAC;IACrD;;IAGA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC;AACF,aAAA,iBAAiB,CAAC;AACjB,YAAA,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS;AAChD,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,IAAI,EAAE;;SAEP;AACA,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,IAAI,KAAI;AACb,gBAAA,IAAI,IAAI,IAAI,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE;oBAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI;oBAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE;AAE5C,wBAAA,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO;6BACjC,GAAG,CAAC,KAAK,IAAG;4BACX,IAAI,KAAK,EAAE,uBAAuB,EAAE,MAAM,KAAK,CAAC,EAAE;gCAC/C,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAGxD;gCACD,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,4BAA4B;AACtE,qCAAA,MAAM,CAAC,CAAC,IAAS,KAAK,IAAI,EAAE,cAAc,KAAK,UAAU,EAAE,aAAa;qCACxE,MAAM,CAAC,YAAY;AACnB,qCAAA,KAAK,EAAE;gCAEV,OAAO;AACL,oCAAA,QAAQ,EAAE,KAAK;AACf,oCAAA,KAAK,EAAE,UAAU,EAAE,aAAa,IAAI,EAAE;AACtC,oCAAA,KAAK,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE;AAC7B,oCAAA,aAAa,EAAE,IAAI;AACnB,oCAAA,4BAA4B,EAAE;iCAC/B;4BACH;iCAAO,IAAI,KAAK,EAAE,uBAAuB,EAAE,MAAM,GAAG,CAAC,EAAE;gCACrD,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAGrD;gCACD,IAAI,SAAS,EAAE;oCACb,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,4BAA4B;AACtE,yCAAA,MAAM,CAAC,CAAC,IAAS,KAAK,IAAI,EAAE,cAAc,KAAK,SAAS,EAAE,aAAa;yCACvE,MAAM,CAAC,YAAY;AACnB,yCAAA,KAAK,EAAE;oCAEV,OAAO;AACL,wCAAA,QAAQ,EAAE,KAAK;AACf,wCAAA,KAAK,EAAE,SAAS,EAAE,aAAa,IAAI,EAAE;AACrC,wCAAA,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE;AAC5B,wCAAA,aAAa,EAAE,IAAI;AACnB,wCAAA,4BAA4B,EAAE;qCAC/B;gCACH;4BACF;AACA,4BAAA,OAAO,IAAI;AACb,wBAAA,CAAC;AACA,6BAAA,OAAO;AACP,6BAAA,KAAK,EAAE;;wBAGV,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC;;wBAG7D,IAAI,CAAC,8BAA8B,CAAC,aAAa,GAAG,CAAC,CAAC,MAAM,CAC1D,CAAC,GAAG,IAAI,CAAC,8BAA8B,CAAC,aAAa,EAAE,GAAG,YAAY,CAAC,EACvE,OAAO,CACR;;wBAGD,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AACvD,4BAAA,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG;gCACjB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA,IAAA,EAAO,KAAK,CAAC,KAAK,CAAA,CAAE,EAAE;gCAC7C,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAA,SAAA,EAAY,KAAK,CAAC,KAAK,CAAA,CAAE,EAAE;6BACxD;AACD,4BAAA,OAAO,GAAG;wBACZ,CAAC,EAAE,EAA6D,CAAC;;wBAGjE,IAAI,CAAC,8BAA8B,GAAG;4BACpC,GAAG,IAAI,CAAC,8BAA8B;AACtC,4BAAA,GAAG,aAAa;yBACjB;;AAGD,wBAAA,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,UAAU,MAAM;AACpE,4BAAA,GAAG,UAAU;4BACb,8BAA8B,EAAE,IAAI,CAAC,8BAA8B;AACpE,yBAAA,CAAC,CAAC;AACH,wBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;oBAExB;yBAAO;AACL,wBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;oBACxB;gBACF;qBAAO;AACL,oBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;gBACxB;YACF,CAAC;AACF,SAAA,CAAC;IACN;;IAGQ,aAAa,GAAA;QACnB,OAAO,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAA,gBAAA,EAAmB,IAAI,CAAC,SAAS,CAAA,CAAE;IACtE;AAEQ,IAAA,gBAAgB,CAAC,UAAiB,EAAA;QACxC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM;AACpG,aAAC,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,8BAA8B,CAAC,EAAE;AACxE,YAAA,MAAM,KAAK,GAAG;AACZ,gBAAA,iBAAiB,EAAE,UAAU;AAC7B,gBAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO;aAC9B;AACD,YAAA,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnE;IACF;IAEQ,eAAe,GAAA;QACrB,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7D,IAAI,UAAU,EAAE;YACd,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;AACpD,YAAA,OAAO,iBAAiB;QAC1B;AACA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,wBAAwB,CAAC,iBAAsB,EAAA;AAC7C,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5B;;AAGA,QAAA,IAAI,CAAC,iBAAiB,EAAE,UAAU,IAAI,iBAAiB,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/E,IAAI,CAAC,YAAY,EAAE;YACnB,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC;gBAC3F,IAAI,CAAC,wBAAwB,EAAE;YACjC,CAAC,EAAE,CAAC,CAAC;YACL;QACF;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,CAAC;QACrD;;AAGA,QAAA,MAAM,iBAAiB,GAAG,CAAC,WAAmB,KAAa;AACzD,YAAA,IAAI,CAAC,WAAW;AAAE,gBAAA,OAAO,KAAK;AAC9B,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE;AACvC,YAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AACnC,gBAAA,KAAK,CAAC,QAAQ,CAAC,+BAA+B,CAAC;AAC/C,gBAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AACvB,gBAAA,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC;AACvC,gBAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AACvB,gBAAA,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC;AACvC,gBAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AAChC,QAAA,CAAC;QAED,IAAI,gBAAgB,GAAG,KAAK;AAC5B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,WAAW,KAAK,qBAAqB,CAAC,WAAW,CAAC,GAAG,EAAE;YACtE,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;gBAClD,MAAM,iBAAiB,GAAG,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,QAAa,KAAK,QAAQ,CAAC,WAAW,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO,CAAC;gBACnJ,IAAI,iBAAiB,EAAE,WAAW,KAAK,qBAAqB,CAAC,aAAa,CAAC,OAAO,EAAE;AAClF,oBAAA,MAAM,cAAc,GAAG,iBAAiB,CAAC,aAAa,IAAI,EAAE;;AAE5D,oBAAA,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,GAAW,KAAK,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE;wBAChE,gBAAgB,GAAG,IAAI;oBACzB;gBACF;AACF,YAAA,CAAC,CAAC;;YAGF,IAAI,gBAAgB,EAAE;AACpB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAClD;iBAAO;AACL,gBAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,CAAC;YACnD;QACF;QAEA,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,KAAa,KAAI;;YAEjE,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAQ;YAE3C,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,QAAa,KAAI;AAEpD,gBAAA,IAAG,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,WAAW,KAAK,qBAAqB,CAAC,aAAa,CAAC,aAAa,EAAE;AAC5F,oBAAA,OAAO;gBACT;AAEA,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAACA,EAAM,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;;gBAG5E,SAAS,CAAC,UAAU,CAAC;oBACjB,MAAM,EAAE,QAAQ,CAAC,WAAW;oBAC5B,UAAU,EACR,QAAQ,CAAC,WAAW,KAAK,qBAAqB,CAAC,aAAa,CAAC;0BACzD,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa;AACpC,8BAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,MAAM,CAAC,CAAC,CAAC;AAClD,8BAAE;0BACF,QAAQ,CAAC,WAAW,KAAK,qBAAqB,CAAC,aAAa,CAAC;8BAC7D,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa;kCAClC,QAAQ,CAAC;AACX,kCAAE,CAAC,QAAQ,CAAC,aAAa;8BACzB,QAAQ,CAAC,aAAa;AAC7B,iBAAA,CAAC;AAEF,gBAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5B,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;gBAC9B,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,IAAIA,EAAM,EAAE,CAAC;AACnC,gBAAA,IAAI,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC;AAC3B,gBAAA,WAAW,EAAE,CAAC,CAAA,gBAAA,EAAmB,KAAK,CAAC,aAAa,EAAE,CAAC;AACvD,gBAAA,UAAU,EAAE,UAAU;gBACtB,mBAAmB,EAAE,CAAC,KAAK,CAAC;gBAC5B,sBAAsB,EAAE,CAAC,KAAK,CAAC;AAChC,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;YAE9B,IACA,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM;iBAClC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EACzG;;AAEA,gBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE;gBAEhD,IAAI,iBAAiB,EAAE;;AAErB,oBAAA,MAAM,eAAe,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,aAAa,CAAC;AAE3E,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;wBAClC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK;;AAGxC,wBAAA,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;4BACrC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE;4BAC1B,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE;4BAC5B,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE;4BACnC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE;4BAClC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC;wBAClD;oBACF;gBACF;AAEA,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;YACnC;;AAGE,YAAA,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC;;AAG7C,YAAA,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC;AAC9C,QAAA,CAAC,CAAC;QAEF,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC;YAC3F,IAAI,CAAC,wBAAwB,EAAE;QACjC,CAAC,EAAE,CAAC,CAAC;IACP;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE;AAC3B,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,IAAI,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC,eAAe,EAAE;AACrD,YAAA,OAAO,IAAI;QACb;;QAGA,IAAI,IAAI,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,EAAE;AACnG,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE;YAChD,IAAI,CAAC,iBAAiB,EAAE;AACtB,gBAAA,OAAO,IAAI;YACb;;YAGA,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAC3D,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,KAAK,CACzC;AAED,YAAA,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,8BAA8B,GAAA;AAChC,QAAA,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IACpD;IAEA,kBAAkB,GAAA;QAChB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM;QAC/H,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM;AACxH,QAAA,MAAM,2BAA2B,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,8BAA8B;AAE1G,QAAA,IAAI,aAAa,IAAI,gBAAgB,IAAI,2BAA2B,EAAE;YACpE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;AACzD,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,IAAI,EAAE,EAAE,IAAI,EAAE,sCAAsC;AACrD,aAAA,CAAC;YAEF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAW,KAAI;AAChD,gBAAA,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS,EAAE;AAChC,oBAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC;gBAC1C;AACF,YAAA,CAAC,CAAC;QACJ;aAAO;AACL,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC;QAC1C;IACF;+GAl2DW,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAnB,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAmB,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAlB,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,6TCxBnC,ishBAiRA,EAAA,MAAA,EAAA,CAAA,syIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAV,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,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,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,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,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,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDzPa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,cAGrB,KAAK,EAAA,QAAA,EAAA,ishBAAA,EAAA,MAAA,EAAA,CAAA,syIAAA,CAAA,EAAA;;sBAGlB;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;MEyCU,mBAAmB,CAAA;+GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,iBAnC5B,sBAAsB;YACtB,oBAAoB;YACpB,kBAAkB;YAClB,mBAAmB;YACnB,4BAA4B;YAC5B,iBAAiB;YACjB,yBAAyB;YACzB,sBAAsB;AACtB,YAAA,2BAA2B,aAG3B,YAAY;YACZ,cAAc;YACd,aAAa;YACb,eAAe;YACf,aAAa;YACb,iBAAiB;YACjB,oBAAoB;YACpB,eAAe;YACf,eAAe;YACf,cAAc;YACd,kBAAkB;YAClB,kBAAkB;YAClB,mBAAmB;YACnB,WAAW;YACX,eAAe;YACf,aAAa;YACb,cAAc;YACd,wBAAwB;YACxB,iBAAiB;YACjB,aAAa;YACb,gBAAgB,CAAA,EAAA,OAAA,EAAA,CAER,sBAAsB,EAAE,mBAAmB,CAAA,EAAA,CAAA,CAAA;AAE1C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAxB5B,YAAY;YACZ,cAAc;YACd,aAAa;YACb,eAAe;YACf,aAAa;YACb,iBAAiB;YACjB,oBAAoB;YACpB,eAAe;YACf,eAAe;YACf,cAAc;YACd,kBAAkB;YAClB,kBAAkB;YAClB,mBAAmB;YACnB,WAAW;YACX,eAAe;YACf,aAAa;YACb,cAAc;YACd,wBAAwB;YACxB,iBAAiB;YACjB,aAAa;YACb,gBAAgB,CAAA,EAAA,CAAA,CAAA;;4FAIP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBArC/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,sBAAsB;wBACtB,oBAAoB;wBACpB,kBAAkB;wBAClB,mBAAmB;wBACnB,4BAA4B;wBAC5B,iBAAiB;wBACjB,yBAAyB;wBACzB,sBAAsB;wBACtB;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,cAAc;wBACd,aAAa;wBACb,eAAe;wBACf,aAAa;wBACb,iBAAiB;wBACjB,oBAAoB;wBACpB,eAAe;wBACf,eAAe;wBACf,cAAc;wBACd,kBAAkB;wBAClB,kBAAkB;wBAClB,mBAAmB;wBACnB,WAAW;wBACX,eAAe;wBACf,aAAa;wBACb,cAAc;wBACd,wBAAwB;wBACxB,iBAAiB;wBACjB,aAAa;wBACb;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,sBAAsB,EAAE,mBAAmB;AACtD,iBAAA;;;ACxED;;AAEG;;ACFH;;AAEG;;;;"}
|