@libs-ui/utils 0.2.351-0 → 0.2.352-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-utils.mjs","sources":["../../../../libs-ui/utils/src/dangerous-object.ts","../../../../libs-ui/utils/src/crypto.ts","../../../../libs-ui/utils/src/crypto-3rd.ts","../../../../libs-ui/utils/src/function-check-embed-frame.ts","../../../../libs-ui/utils/src/constants.ts","../../../../libs-ui/utils/src/communicate-micro.ts","../../../../libs-ui/utils/src/language.ts","../../../../libs-ui/utils/src/uuid.ts","../../../../libs-ui/utils/src/cache.ts","../../../../libs-ui/utils/src/date.ts","../../../../libs-ui/utils/src/http-params.ts","../../../../libs-ui/utils/src/two-way-signal-object.ts","../../../../libs-ui/utils/src/helpers.ts","../../../../libs-ui/utils/src/dom.ts","../../../../libs-ui/utils/src/url-search-params.ts","../../../../libs-ui/utils/src/color.ts","../../../../libs-ui/utils/src/key-code.ts","../../../../libs-ui/utils/src/key-cache.ts","../../../../libs-ui/utils/src/format-number.ts","../../../../libs-ui/utils/src/pattern.ts","../../../../libs-ui/utils/src/xss-filter.ts","../../../../libs-ui/utils/src/uri.ts","../../../../libs-ui/utils/src/base64.ts","../../../../libs-ui/utils/src/download.ts","../../../../libs-ui/utils/src/inject-token.ts","../../../../libs-ui/utils/src/file.ts","../../../../libs-ui/utils/src/format-text.ts","../../../../libs-ui/utils/src/get-smart-axis-scale.ts","../../../../libs-ui/utils/src/random.ts","../../../../libs-ui/utils/src/collection.ts","../../../../libs-ui/utils/src/data.ts","../../../../libs-ui/utils/src/libs-ui-utils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParams } from '@angular/common/http';\nimport { TemplateRef, ElementRef } from '@angular/core';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { Observable } from 'rxjs';\n\n/**\n * Danh sách các constructor name nguy hiểm\n */\nconst DANGEROUS_CONSTRUCTOR_NAMES = ['Window', 'Document', 'HTMLDocument', 'HTMLElement', 'Element', 'Node', 'Location', 'Navigator', 'Screen', 'History', 'Storage', 'Console', 'Performance'] as const;\n\n/**\n * Kiểm tra xem đối tượng có phải là browser global object không\n */\nexport const isBrowserGlobalObject = (obj: any): obj is Window | Document | Window | Document | typeof globalThis => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof Window || obj instanceof Document || obj === window || obj === document || obj === globalThis;\n};\n\n/**\n * Kiểm tra xem đối tượng có phải là DOM object không\n */\nexport const isDOMObject = (obj: any): obj is HTMLElement | Node | Element => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof HTMLElement || obj instanceof Node || obj instanceof Element;\n};\n\n/**\n * Kiểm tra xem đối tượng có phải là browser API object không\n */\nexport const isBrowserAPIObject = (obj: any): boolean => {\n if (obj === null || typeof obj !== 'object' || typeof window === 'undefined') {\n return false;\n }\n return obj === window.location || obj === window.navigator || obj === window.screen || obj === window.history || obj === window.localStorage || obj === window.sessionStorage || obj === window.console || obj === window.performance;\n};\n\n/**\n * Kiểm tra constructor name có nằm trong danh sách nguy hiểm không\n */\nexport const hasDangerousConstructorName = (obj: any): boolean => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n const constructorName = obj.constructor?.name;\n return constructorName && DANGEROUS_CONSTRUCTOR_NAMES.includes(constructorName as any);\n};\n\n/**\n * Kiểm tra xem đối tượng có phải là DOM object hoặc browser object nguy hiểm không\n * Những đối tượng này có thể gây ra circular reference và maximum call stack\n */\nexport const isDangerousObject = (obj: any): boolean => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n\n return isBrowserGlobalObject(obj) || isDOMObject(obj) || isBrowserAPIObject(obj) || hasDangerousConstructorName(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là Angular/Framework object không\n */\nexport const isFrameworkObject = <T = any>(obj: any): obj is TemplateRef<T> | ElementRef<T> => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof TemplateRef || obj instanceof ElementRef;\n};\n\n/**\n * Kiểm tra đối tượng có phải là File/Blob object không\n */\nexport const isFile = (obj: any): obj is File | Blob => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof File || obj instanceof Blob || Object.prototype.toString.call(obj) === '[object File]';\n};\n\n/**\n * Kiểm tra đối tượng có phải là Built-in object không\n */\nexport const isBuiltInObject = (obj: any): obj is Date | RegExp | HttpParams => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof Date || isRegExp(obj) || obj instanceof HttpParams || ('hasOwnProperty' in obj && '__ngContext__' in obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là RegExp object không\n */\nexport const isRegExp = (obj: any): obj is RegExp => {\n return obj instanceof RegExp;\n};\n\n/**\n * Kiểm tra đối tượng có phải là Async object không\n */\nexport const isAsyncObject = <T = any>(obj: any): obj is Promise<T> | Observable<T> => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof Promise || obj instanceof Observable;\n};\n\n/**\n * Kiểm tra đối tượng có phải là Special object cần bỏ qua không\n * Bao gồm: Framework objects, File objects, Built-in objects, Async objects\n */\nexport const isSpecialObject = (obj: any): boolean => {\n return isFrameworkObject(obj) || isFile(obj) || isBuiltInObject(obj) || isAsyncObject(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là dayjs object không\n */\nexport const isDayjsObject = (obj: any): obj is Dayjs => {\n return dayjs.isDayjs(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là object cần bỏ qua trong quá trình convert không\n */\nexport const isSkippableObject = (obj: any): boolean => {\n return isDangerousObject(obj) || isSpecialObject(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là Map object không\n */\nexport const isMap = <T = any>(obj: any): obj is Map<string, T> => {\n return obj instanceof Map;\n};\n\n/**\n * Kiểm tra đối tượng có phải là Set object không\n */\nexport const isSet = <T = any>(obj: any): obj is Set<T> => {\n return obj instanceof Set;\n};\n\n/**\n * Kiểm tra đối tượng có phải là Array object không\n */\nexport const isArray = <T = any>(obj: any): obj is Array<T> => {\n return Array.isArray(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là object cần trả về nguyên trạng không\n * Bao gồm: dangerous objects, special objects, dayjs objects\n */\nexport const isReturnAsIsObject = (obj: any): boolean => {\n return isSkippableObject(obj) || isDayjsObject(obj);\n};\n\n/**\n * Kiểm tra xem đối tượng có an toàn để clone/convert không\n */\nexport const isSafeToProcess = (obj: any): boolean => {\n return !isDangerousObject(obj);\n};\n","import CryptoES from 'crypto-es';\n\nlet key = '12~@#loqwsxacva(3rdhaq12';\n\n/**\n * @description Thiết lập key mã hóa\n * @param value key mã hóa, độ dài bằng 24 hoặc 32 ký tự.\n */\nexport const setKeyCrypto = (value: string) => {\n if (value.length !== 24 && value.length !== 32) {\n throw Error(`key.length = ${value.length}; Key phải là 1 chuỗi dài 24 hoặc 32 ký tự`);\n }\n key = value;\n};\n\nconst keyStore = () => {\n return key;\n};\n\nexport const encrypt = (plainData: string): string => {\n if (!keyStore()) {\n throw Error('lỗi chưa setup key mã hóa');\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.encrypt(plainData, key, options).toString();\n};\n\nexport const decrypt = (encryptedData: string): string => {\n if (!keyStore()) {\n throw Error('lỗi chưa setup key mã hóa');\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.decrypt(encryptedData, key, options).toString(CryptoES.enc.Utf8);\n};\n\nexport const md5 = (plainData: string) => {\n return CryptoES.MD5(plainData).toString();\n};\n","import CryptoES from 'crypto-es';\n\nlet key = '12~@#loqwsxacva(3rdhaq12';\n\n/**\n * @description Thiết lập key mã hóa\n * @param value key mã hóa, độ dài bằng 24 hoặc 32 ký tự.\n */\nexport const setKeyCrypto3rd = (value: string) => {\n if (value.length !== 24 && value.length !== 32) {\n throw Error(`key.length = ${value.length}; Key phải là 1 chuỗi dài 24 hoặc 32 ký tự`);\n }\n key = value;\n};\n\nconst keyStore = () => {\n return key;\n};\n\nexport const encrypt3rd = (plainData: string): string => {\n if (!keyStore()) {\n throw Error('lỗi chưa setup key mã hóa');\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.encrypt(plainData, key, options).toString();\n};\n\nexport const decrypt3rd = (encryptedData: string): string => {\n if (!keyStore()) {\n throw Error('lỗi chưa setup key mã hóa');\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.decrypt(encryptedData, key, options).toString(CryptoES.enc.Utf8);\n};\n","//NOTE: Do là function truyền từ bên ngoài vào nên sẽ không có unit test\nlet functionCheck = () => {\n return window.parent !== window.top;\n};\nexport const updateFunctionCheckEmbedFrame = (functionCustom: () => boolean) => {\n functionCheck = functionCustom;\n};\n\nexport const isEmbedFrame = (): boolean => {\n return functionCheck();\n};\n","export const ERROR_MESSAGE_EMPTY_VALID = 'i18n_valid_empty_message';\nexport const ERROR_MESSAGE_PATTEN_VALID = 'i18n_valid_pattern_message';\nexport const ERROR_MESSAGE_MIN_VALID = 'i18n_message_error_input_min_value';\nexport const ERROR_MESSAGE_MAX_VALID = 'i18n_message_error_input_max_value';\nexport const ERROR_MESSAGE_MIN_LENGTH = 'i18n_message_error_input_min_length';\nexport const ERROR_MESSAGE_MAX_LENGTH = 'i18n_message_error_input_max_length';\nexport const CHARACTER_DATA_EMPTY = '__';\nexport const DEFAULT_START_PAGE_0 = 'defaultStartPage0';\nexport const COMMUNICATE_MICRO_PREFIX_TYPE = '3RD_INTEGRATE_MICRO_SITE_';\nexport const COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE = 'MICRO_SITES_ALL_MESSAGE';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Subject, filter, fromEvent, takeUntil } from 'rxjs';\nimport { decrypt, encrypt } from './crypto';\nimport { decrypt3rd, encrypt3rd } from './crypto-3rd';\nimport { isEmbedFrame } from './function-check-embed-frame';\nimport { UtilsCache } from './cache';\nimport { COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE, COMMUNICATE_MICRO_PREFIX_TYPE } from './constants';\nimport { DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nexport class UtilsCommunicateMicroKeyGlobal {\n public static KEY_MESSAGE_MODAL = 'LIBS_UI_MODEL_EVENT';\n}\n\nexport class UtilsCommunicateMicro {\n private static initdEvent?: boolean;\n private static subs: Map<string, Subject<MessageEvent>> = new Map();\n private static allMessageSub: Subject<MessageEvent> = new Subject();\n\n public static initEvent(currentWindow: Window, destroyRef: DestroyRef) {\n if (this.initdEvent) {\n return;\n }\n this.initdEvent = true;\n if (!this.subs.get(COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE)) {\n this.subs.set(COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE, UtilsCommunicateMicro.allMessageSub);\n }\n\n fromEvent<MessageEvent>(currentWindow, 'message')\n .pipe(takeUntilDestroyed(destroyRef))\n .subscribe((e: MessageEvent) => {\n const event = { data: { ...e.data } } as MessageEvent;\n\n const data = event.data;\n const type = data.type;\n\n if (!type) {\n return this.allMessageSub.next(event);\n }\n const sub = UtilsCommunicateMicro.GetMessage(type);\n\n if (!type || !data.response) {\n return;\n }\n try {\n if (type.includes(COMMUNICATE_MICRO_PREFIX_TYPE)) {\n data.response = JSON.parse(decrypt3rd(data.response));\n sub.next(event);\n this.allMessageSub.next(event);\n\n return;\n }\n data.response = JSON.parse(decrypt(data.response));\n sub.next(event);\n this.allMessageSub.next(event);\n } catch (error) {\n console.log(error);\n sub.next(event);\n this.allMessageSub.next(event);\n }\n });\n\n UtilsCommunicateMicro.GetMessage(UtilsCache.typeKeyClearLocalStorage)\n .pipe(\n filter((e) => e.data.response !== UtilsCache.idService),\n takeUntilDestroyed(destroyRef)\n )\n .subscribe(() => {\n console.log('clear all cache by event');\n UtilsCache.ClearAll();\n });\n }\n\n static PostMessageToParent(data: any) {\n data = this.convertData(data);\n try {\n if (isEmbedFrame()) {\n window?.parent?.postMessage(data, '*');\n\n return;\n }\n\n window?.top?.postMessage(data, '*');\n } catch (error) {\n console.log(error);\n }\n }\n\n static PostMessageToChildren(data: any) {\n data = this.convertData(data);\n const iframes = document.querySelectorAll('iframe');\n\n Array.from(iframes).forEach((iframe) => {\n iframe?.contentWindow?.postMessage(data, '*');\n });\n }\n\n static PostMessageToOpener(data: any) {\n if (!window.opener) {\n return;\n }\n data = this.convertData(data);\n\n window.opener.postMessage(data, '*');\n }\n\n private static convertData(data: any) {\n if (!data || !data.type || !data.response) {\n return data;\n }\n data = { ...data };\n const type = data.type;\n\n if (type.includes(COMMUNICATE_MICRO_PREFIX_TYPE)) {\n try {\n JSON.parse(decrypt3rd(data.response));\n\n return data;\n } catch (_) {\n data.response = encrypt3rd(JSON.stringify(data.response));\n\n return data;\n }\n }\n try {\n JSON.parse(decrypt(data.response));\n\n return data;\n } catch (_) {\n data.response = encrypt(JSON.stringify(data.response));\n\n return data;\n }\n }\n\n static GetMessage(messageType: string | Array<string>): Subject<MessageEvent> {\n if (!this.initdEvent) {\n throw Error('chưa khơi tạo hàm lắng nghe sự kiện, gọi UtilsCommunicateMicro.initEvent(window) tại root component');\n }\n if (typeof messageType === 'string') {\n let sub = this.subs.get(messageType);\n\n if (!sub) {\n sub = new Subject();\n this.subs.set(messageType, sub);\n\n return sub;\n }\n\n return sub;\n }\n if (!Array.isArray(messageType) || !messageType.length) {\n throw new Error('message type empty');\n }\n if (messageType.length === 1) {\n return this.GetMessage(messageType[0]);\n }\n const types = messageType.sort().join(';');\n\n let sub = this.subs.get(types);\n\n if (sub) {\n return sub;\n }\n\n sub = new Subject();\n this.subs.set(types, sub);\n this.initSubject(sub, messageType);\n\n return sub;\n }\n\n private static initSubject(subRoot: Subject<MessageEvent>, messageType: Array<string>) {\n messageType.forEach((key) => {\n this.GetMessage(key).subscribe((e) => {\n subRoot.next(e);\n });\n });\n }\n}\n","export class UtilsLanguageConstants {\n public static VI = 'vi'; // Tiếng Việt\n public static EN = 'en'; // Tiếng Anh\n public static FR = 'fr'; // Tiếng Pháp\n public static DE = 'de'; // Tiếng Đức\n public static ES = 'es'; // Tiếng Tây Ban Nha\n public static ZH = 'zh'; // Tiếng Trung (Giản thể)\n public static ZH_TW = 'zh-TW'; // Tiếng Trung (Phồn thể)\n public static JA = 'ja'; // Tiếng Nhật\n public static KO = 'ko'; // Tiếng Hàn\n public static RU = 'ru'; // Tiếng Nga\n public static IT = 'it'; // Tiếng Ý\n public static PT = 'pt'; // Tiếng Bồ Đào Nha\n public static TH = 'th'; // Tiếng Thái\n public static ID = 'id'; // Tiếng Indonesia\n public static MS = 'ms'; // Tiếng Malaysia\n public static AR = 'ar'; // Tiếng Ả Rập\n public static HI = 'hi'; // Tiếng Hindi\n public static BN = 'bn'; // Tiếng Bengal\n public static TR = 'tr'; // Tiếng Thổ Nhĩ Kỳ\n public static NL = 'nl'; // Tiếng Hà Lan\n public static KM = 'km'; // Tiếng Khmer (Campuchia)\n public static LO = 'lo'; // Tiếng Lào\n public static MY = 'my'; // Tiếng Miến Điện (Myanmar)\n public static TL = 'tl'; // Tiếng Tagalog (Philippines)\n public static CEB = 'ceb'; // Tiếng Cebuano (Philippines)\n public static JV = 'jv'; // Tiếng Java (Indonesia)\n public static SU = 'su'; // Tiếng Sundanese (Indonesia)\n\n // Ngôn ngữ mặc định\n public static defaultLang = UtilsLanguageConstants.VI;\n\n // Danh sách các ngôn ngữ được hỗ trợ\n public static supportedLanguages = new Set([\n UtilsLanguageConstants.VI,\n UtilsLanguageConstants.EN,\n UtilsLanguageConstants.FR,\n UtilsLanguageConstants.DE,\n UtilsLanguageConstants.ES,\n UtilsLanguageConstants.ZH,\n UtilsLanguageConstants.ZH_TW,\n UtilsLanguageConstants.JA,\n UtilsLanguageConstants.KO,\n UtilsLanguageConstants.RU,\n UtilsLanguageConstants.IT,\n UtilsLanguageConstants.PT,\n UtilsLanguageConstants.TH,\n UtilsLanguageConstants.ID,\n UtilsLanguageConstants.MS,\n UtilsLanguageConstants.AR,\n UtilsLanguageConstants.HI,\n UtilsLanguageConstants.BN,\n UtilsLanguageConstants.TR,\n UtilsLanguageConstants.NL,\n UtilsLanguageConstants.KM,\n UtilsLanguageConstants.LO,\n UtilsLanguageConstants.MY,\n UtilsLanguageConstants.TL,\n UtilsLanguageConstants.CEB,\n UtilsLanguageConstants.JV,\n UtilsLanguageConstants.SU,\n ]);\n\n /**\n * Kiểm tra xem ngôn ngữ đầu vào có được hỗ trợ không\n * @param lang Mã ngôn ngữ cần kiểm tra\n * @returns True nếu được hỗ trợ, False nếu không\n */\n public static isSupported(lang: string): boolean {\n return UtilsLanguageConstants.supportedLanguages.has(lang);\n }\n}\n","import { md5 } from './crypto';\n\nexport const uuid = (): string => {\n const timestamp = performance.now() * 1000;\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+-=[]{}|;:,.<>?/~';\n let randomString = '';\n\n for (let i = 0; i < 5; i++) {\n randomString += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n const baseString = `${Math.floor(timestamp)}-${randomString}`;\n const charArray = baseString.split('');\n\n for (let i = charArray.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n\n [charArray[i], charArray[j]] = [charArray[j], charArray[i]];\n }\n\n const shuffledString = charArray.join('');\n\n return md5(shuffledString);\n};\n","/* eslint-disable no-async-promise-executor */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { IEvent, TYPE_LANGUAGE_SUPPORT } from '@libs-ui/interfaces-types';\nimport { UtilsCommunicateMicro } from './communicate-micro';\nimport { decrypt, encrypt, md5 } from './crypto';\nimport { getDeviceInfo } from './dom';\nimport { isEmbedFrame } from './function-check-embed-frame';\nimport { get, isNil } from './helpers';\nimport { UtilsLanguageConstants } from './language';\nimport { uuid } from './uuid';\n\nexport class UtilsCache {\n public static readonly CACHE_EXPIRE_TIME_DEFAULT = 5 * 60;\n public static readonly CACHE_EXPIRE_NONE = -1;\n public static readonly idService = uuid();\n public static typeKeyClearLocalStorage = 'LIBS_UI_CLEAR_LOCAL_STORAGE_EVENT';\n\n private static languageKeyCache = 'SR3xQKxHgffiCevPQRralg';\n private static listKeyKeepWhenClearALll = Array<string>();\n private static initdEvent?: boolean;\n private static storage: { [key: string]: unknown };\n private static dbName = 'libs-ui-cache';\n private static itemIndexByKey = 'key';\n private static dbVersion = 1;\n private static db: IDBDatabase | null = null;\n\n public static init(config: { indexedDBName?: string; languageKeyCache?: string; typeKeyClearLocalStorage?: string; listKeyKeepWhenClearAll?: Array<string> }) {\n if (this.initdEvent) {\n return;\n }\n this.initdEvent = true;\n if (config.indexedDBName) {\n this.dbName = config.indexedDBName;\n }\n if (config.typeKeyClearLocalStorage) {\n this.typeKeyClearLocalStorage = config.typeKeyClearLocalStorage;\n }\n if (config.listKeyKeepWhenClearAll) {\n this.listKeyKeepWhenClearALll = config.listKeyKeepWhenClearAll;\n }\n if (config.languageKeyCache) {\n this.languageKeyCache = config.languageKeyCache;\n }\n }\n\n public static setLang(lang: TYPE_LANGUAGE_SUPPORT) {\n if (!UtilsLanguageConstants.isSupported(lang)) {\n throw Error(`Language not support ${lang}`);\n }\n this.Set(this.languageKeyCache, lang, this.CACHE_EXPIRE_NONE);\n }\n\n public static getLang(): TYPE_LANGUAGE_SUPPORT {\n return this.Get(this.languageKeyCache, UtilsLanguageConstants.defaultLang);\n }\n\n private static openDB() {\n return new Promise((resolve) => {\n const request = indexedDB.open(this.dbName, this.dbVersion);\n\n request.onupgradeneeded = (event: IDBVersionChangeEvent) => {\n const db = (event.target as IDBOpenDBRequest).result;\n\n if (!db.objectStoreNames.contains(this.dbName)) {\n const objectStore = db.createObjectStore(this.dbName, { keyPath: this.itemIndexByKey });\n\n objectStore.createIndex(this.itemIndexByKey, this.itemIndexByKey, { unique: true });\n }\n };\n\n request.onsuccess = () => {\n this.db = request.result;\n resolve(true);\n };\n\n request.onerror = (event) => {\n console.trace('Error opening IndexedDB:', event);\n resolve(false);\n };\n });\n }\n\n private static async getObjectStore() {\n if (!this.db) {\n await this.openDB();\n }\n const transaction = this.db?.transaction([this.dbName], 'readwrite');\n if (!transaction) {\n return null;\n }\n\n return transaction.objectStore(this.dbName);\n }\n\n private static get LocalStorage(): any {\n try {\n if (typeof window.localStorage !== 'undefined') {\n if (getDeviceInfo().satisfies({ safari: '>=16' })) {\n return this.getLocalStorageFakeOnSafari();\n }\n\n return localStorage;\n }\n\n return this.getLocalStorageFake();\n } catch (error) {\n console.trace(`LocalStorage `, error);\n return this.getLocalStorageFake();\n }\n }\n\n private static getLocalStorageFakeOnSafari() {\n if (typeof window.localStorage !== 'undefined' && !this.storage && Object.keys(localStorage).length) {\n this.storage = { ...localStorage };\n }\n\n return {\n setItem: (key: string, value: string) => {\n localStorage.setItem(key, value);\n this.storage[key] = value;\n },\n getItem: (key: string) => {\n const value = localStorage.getItem(key);\n\n if (value) {\n return value;\n }\n\n if (!this.storage || isNil(this.storage[key])) {\n return null;\n }\n\n localStorage.setItem(key, this.storage[key] as string);\n\n return this.storage?.[key];\n },\n removeItem: (key: string) => {\n delete this.storage?.[key];\n localStorage.removeItem(key);\n },\n clear: () => {\n this.storage = {};\n localStorage.clear();\n },\n };\n }\n\n private static getLocalStorageFake() {\n if (!this.storage) {\n this.storage = {};\n }\n\n return {\n setItem: (key: string, value: unknown) => {\n this.storage[key] = value;\n },\n getItem: (key: string) => {\n return this.storage?.[key];\n },\n removeItem: (key: string) => {\n delete this.storage?.[key];\n },\n clear: () => {\n this.storage = {};\n },\n };\n }\n\n public static async GetAsync<T = any>(key: string, default_value?: any, isKeyMD5 = false): Promise<T> {\n key = isKeyMD5 ? key : md5(key);\n\n return new Promise<T>(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n if (!objectStore) {\n return resolve(default_value);\n }\n const request = objectStore.get(key);\n\n request.onsuccess = () => {\n if (!request.result) {\n return resolve(default_value);\n }\n const data = JSON.parse(decrypt(request.result.value));\n\n if (data.expire === this.CACHE_EXPIRE_NONE) {\n return resolve(data.json);\n }\n const currentMillisecond = new Date().valueOf() / 1000;\n\n if (data.expire < currentMillisecond) {\n return resolve(default_value);\n }\n\n return resolve(data.json);\n };\n\n request.onerror = () => {\n console.trace(`Get key ${key} Error, return default value: ${default_value}`);\n return resolve(default_value);\n };\n });\n }\n\n public static Get<T = any>(key: string, default_value?: any): T {\n // support cho những file không thể inject UtilsCache\n if (!key) {\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n const cachedData = this.LocalStorage.getItem(key);\n\n if (!cachedData) {\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n try {\n const data = JSON.parse(decrypt(cachedData));\n\n if (data.expire === this.CACHE_EXPIRE_NONE) {\n return data.value ?? default_value;\n }\n const currentMillisecond = new Date().valueOf() / 1000;\n\n if (data.expire < currentMillisecond) {\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n\n return data.value;\n } catch (error) {\n console.trace(`Get key ${key} Error, return default value: ${default_value}`, error);\n\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n }\n\n public static GetDefaultValueBySpecificKey(key: string, default_value: any) {\n return default_value;\n }\n\n public static async SetAsync<T = any>(key: string, value: any, expireTimeBySecond = this.CACHE_EXPIRE_TIME_DEFAULT, isKeyMD5 = false): Promise<T> {\n // support inject UtilsCache\n return new Promise<T>(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n key = isKeyMD5 ? key : md5(key);\n try {\n const currentMillisecond = expireTimeBySecond === this.CACHE_EXPIRE_NONE ? this.CACHE_EXPIRE_NONE : new Date().valueOf() / 1000 + expireTimeBySecond;\n const data: any = {\n value: encrypt(JSON.stringify({ json: value, expire: currentMillisecond })),\n };\n data[this.itemIndexByKey] = key;\n\n if (!objectStore) {\n console.trace(`Can not open object store`);\n return resolve({ key, messageError: 'Can not open object store' } as any);\n }\n const request = objectStore?.put(data);\n request.onsuccess = () => {\n console.log(`Set key ${key} Success`);\n resolve(request.result as any);\n };\n\n request.onerror = (error) => {\n console.trace(`Set key ${key} Error`);\n resolve({ key, messageError: get(error as IEvent, 'message') } as any);\n };\n } catch (error) {\n console.trace(`Set key ${key} Error`);\n resolve({ key, messageError: get(error, 'message') } as any);\n }\n });\n }\n\n static Set(key: string, value: any, expireTimeBySecond = this.CACHE_EXPIRE_TIME_DEFAULT): boolean {\n // support cho những file không inject UtilsCache\n const currentMillisecond = expireTimeBySecond === this.CACHE_EXPIRE_NONE ? this.CACHE_EXPIRE_NONE : new Date().valueOf() / 1000 + expireTimeBySecond;\n const data = {\n value: value,\n expire: currentMillisecond,\n };\n\n try {\n this.LocalStorage.setItem(key, encrypt(JSON.stringify(data)));\n return true;\n } catch (error) {\n console.trace(`Set key ${key} Error`, error);\n return false;\n }\n }\n\n public static async ClearAsync(key: string, isMD5 = false) {\n return new Promise<void>(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n if (!objectStore) {\n return resolve();\n }\n const request = objectStore.delete(isMD5 ? key : md5(key));\n\n request.onsuccess = () => {\n resolve({ clearSuccess: true } as any);\n };\n request.onerror = (event: Event) => {\n console.trace('Error deleting Key:', get((event.target as IDBRequest).error, 'message'));\n resolve({ messageError: get((event.target as IDBRequest).error, 'message'), clearSuccess: false } as any);\n };\n });\n }\n\n static Clear(key: string) {\n if (key.includes('kc-callback-')) {\n return;\n }\n this.LocalStorage.removeItem(key);\n }\n\n public static ClearAllAsync() {\n return new Promise<void>(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n if (!objectStore) {\n return resolve();\n }\n\n const request = objectStore.clear();\n request.onsuccess = () => {\n console.log('clear all successfully');\n resolve({ clearSuccess: true } as any);\n };\n\n request.onerror = (event: Event) => {\n console.trace('Error deleting key:', get((event.target as IDBRequest).error, 'message'));\n resolve({ messageError: get((event.target as IDBRequest).error, 'message'), clearSuccess: false } as any);\n };\n });\n }\n\n static ClearAll() {\n if (isEmbedFrame()) {\n const data = {\n type: this.typeKeyClearLocalStorage,\n response: {\n idEvent: this.idService,\n },\n };\n UtilsCommunicateMicro.PostMessageToParent(data);\n }\n const keys = [...this.listKeyKeepWhenClearALll];\n Object.keys(this.LocalStorage).forEach((key) => {\n if (key.includes('kc-callback-')) {\n keys.push(key);\n }\n });\n\n const stores = this.GetDataByKeys(Array.from(keys));\n\n this.LocalStorage.clear();\n\n this.SetDataByKey(stores);\n }\n\n private static GetDataByKeys(keys: Array<string>) {\n const stores = new Map();\n\n keys.forEach((key: string) => {\n if (key.includes('kc-callback-')) {\n stores.set(key, this.LocalStorage.getItem(key));\n\n return;\n }\n stores.set(key, this.Get(key));\n });\n\n return stores;\n }\n\n private static SetDataByKey(stores: Map<string, any>) {\n stores.forEach((value: any, key: string) => {\n if (key.includes('kc-callback-')) {\n this.LocalStorage.setItem(key, value);\n\n return;\n }\n if (key === this.languageKeyCache) {\n return this.setLang(value);\n }\n this.Set(key, value, this.CACHE_EXPIRE_NONE);\n });\n }\n\n public static DeleteKeyStartWithAsync(keyCacheStartWith: string, isKeyMD5 = false) {\n return new Promise(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n if (!objectStore) {\n return resolve({});\n }\n\n // Lấy tất cả các keys từ index\n const request = objectStore.getAll();\n\n keyCacheStartWith = isKeyMD5 ? keyCacheStartWith : md5(keyCacheStartWith);\n\n request.onsuccess = (e: any) => {\n const data = e.target.result as Array<any>;\n\n if (!Array.isArray(data)) {\n return resolve({});\n }\n\n data.forEach((obj) => {\n if (obj[this.itemIndexByKey].startsWith(keyCacheStartWith)) {\n this.ClearAsync(obj[this.itemIndexByKey], true);\n }\n });\n\n return resolve({});\n };\n\n request.onerror = () => {\n return resolve({});\n };\n });\n }\n\n public static DeleteKeyStartWith(keyCache: string, isMD5 = false) {\n keyCache = isMD5 ? md5(keyCache) : keyCache;\n const keys = Object.keys(this.LocalStorage);\n\n if (!keys || !keys.length) {\n return;\n }\n\n keys.forEach((key) => {\n if (key.startsWith(keyCache)) {\n this.Clear(key);\n }\n });\n }\n\n public static DeleteDatabaseIndexDB(dbName?: string) {\n return new Promise((resolve) => {\n dbName = (dbName || this.dbName) as string;\n const request = indexedDB.deleteDatabase(dbName as string);\n\n request.onsuccess = () => {\n console.trace('Database deleted successfully');\n resolve({ deleteSuccess: true });\n };\n\n request.onerror = (event: Event) => {\n const error = (event.target as IDBRequest).error;\n console.trace('Error deleting database:', error);\n resolve({ messageError: get((error as Record<string, any>) || {}, 'message'), deleteSuccess: false } as any);\n };\n\n request.onblocked = () => {\n console.trace('Delete request is blocked');\n resolve({ messageError: 'Delete request is blocked', deleteSuccess: false } as any);\n };\n });\n }\n}\n","import { isSignal } from '@angular/core';\nimport { GetDayjsConfig, GetDayjsReturn, NonNullableDate, TYPE_OBJECT } from '@libs-ui/interfaces-types';\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/en';\nimport 'dayjs/locale/vi';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport localeData from 'dayjs/plugin/localeData';\nimport timezone from 'dayjs/plugin/timezone';\nimport updateLocale from 'dayjs/plugin/updateLocale';\nimport utc from 'dayjs/plugin/utc';\nimport { UtilsCache } from './cache';\ndayjs.extend(localeData);\ndayjs.extend(updateLocale);\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(customParseFormat);\nlet timeZoneSetup = 'Asia/Ho_Chi_Minh';\nlet patternCheckTimeUTC: RegExp | undefined = undefined;\n\nexport const setDefaultTimeZone = (localeZone = timeZoneSetup) => {\n timeZoneSetup = localeZone;\n dayjs.tz.setDefault(localeZone);\n};\n\nexport const setPatternCheckTimeUTC = (pattern: RegExp) => {\n patternCheckTimeUTC = pattern;\n};\n\nexport type TYPE_FUNCTION_FORMAT_DATE = (time: dayjs.ConfigType, formatOutput: string, lang?: string) => string;\nlet functionFormatDate: TYPE_FUNCTION_FORMAT_DATE | undefined = undefined;\n\nexport const updateFunctionFormatDate = (functionCustom: TYPE_FUNCTION_FORMAT_DATE) => {\n functionFormatDate = functionCustom;\n};\n\n/**\n * @description Lấy đối tượng dayjs theo config\n * @param config nếu không có config sẽ trả về đối tượng dayjs là thời gian hiện tại\n * @param config.date thời gian cần lấy\n * @param config.returnDayjsIfConfigDateNotExist true nếu muốn trả về đối tượng dayjs nếu config.date không có\n * @param config.utc true nếu muốn lấy thời gian UTC\n * @param config.formatOfDate định dạng thời gian đang được truyền vào\n */\nexport const getDayjs = <C extends GetDayjsConfig | undefined = undefined>(config?: C): GetDayjsReturn<C> => {\n // helper cast để tránh lặp lại kiểu điều kiện ở các return\n const out = (v: unknown) => v as GetDayjsReturn<C>;\n if (!config) {\n return out(dayjs().tz());\n }\n config.date = !config.date && config.returnDayjsIfConfigDateNotExist ? dayjs().tz() : config.date;\n if (typeof config.date === 'number') {\n config.date = dayjs.unix(config.date);\n }\n if (!config.date) {\n return out(undefined);\n }\n let { date, utc, formatOfDate } = config as TYPE_OBJECT;\n\n while (isSignal(date)) {\n date = date();\n }\n while (isSignal(utc)) {\n utc = utc();\n }\n while (isSignal(formatOfDate)) {\n formatOfDate = formatOfDate();\n }\n\n if (typeof date === 'string' && patternCheckTimeUTC && new RegExp(patternCheckTimeUTC, 'gi').test(date)) {\n date = dayjs(date.replace(new RegExp(patternCheckTimeUTC, 'gi'), '$1$2$3T$5$6$7$8Z')).utc();\n }\n\n if (utc) {\n if (formatOfDate) {\n return out(dayjs(date, formatOfDate).utc());\n }\n const dateInputIsUTC = (dayjs.isDayjs(date) && date.isUTC()) || (typeof date === 'string' && (date as string).includes('Z'));\n\n if (dateInputIsUTC) {\n return out(dayjs(date));\n }\n\n return out(dayjs(date).utc());\n }\n\n if (typeof date === 'string' && !(date as string).includes('Z') && !(date as string).includes('+')) {\n return out(formatOfDate ? dayjs.tz(date, formatOfDate, config.localeZone || timeZoneSetup) : dayjs.tz(date, config.localeZone || timeZoneSetup));\n }\n\n return out((formatOfDate ? dayjs(date, formatOfDate) : dayjs(date)).tz());\n};\n\n/**\n * @description Kiểm tra xem hai ngày có khác nhau không (khác ngày trong tuần)\n * @param date1 ngày thứ nhất cần so sánh\n * @param date2 ngày thứ hai cần so sánh\n * @returns true nếu hai ngày khác nhau, false nếu giống nhau hoặc không thể so sánh\n */\nexport const isDifferenceDay = (date1: NonNullableDate, date2: NonNullableDate) => {\n if (isDifferenceMonth(date1, date2)) {\n return true;\n }\n const day1 = getDayjs({ date: date1 })?.day();\n const day2 = getDayjs({ date: date2 })?.day();\n\n return day1 !== day2;\n};\n\n/**\n * @description Kiểm tra xem hai ngày có khác tháng không\n * @param date1 ngày thứ nhất cần so sánh\n * @param date2 ngày thứ hai cần so sánh\n * @returns true nếu hai ngày khác tháng, false nếu cùng tháng hoặc không thể so sánh\n */\nexport const isDifferenceMonth = (date1: NonNullableDate, date2: NonNullableDate) => {\n if (isDifferenceYear(date1, date2)) {\n return true;\n }\n const month1 = getDayjs({ date: date1 })?.month();\n const month2 = getDayjs({ date: date2 })?.month();\n\n return month1 !== month2;\n};\n\n/**\n * @description Kiểm tra xem hai ngày có khác năm không\n * @param date1 ngày thứ nhất cần so sánh\n * @param date2 ngày thứ hai cần so sánh\n * @returns true nếu hai ngày khác năm, false nếu cùng năm hoặc không thể so sánh\n */\nexport const isDifferenceYear = (date1: NonNullableDate, date2: NonNullableDate) => {\n const year1 = getDayjs({ date: date1 })?.year();\n const year2 = getDayjs({ date: date2 })?.year();\n\n return year1 !== year2;\n};\n\n/**\n * @description Lấy ra chuỗi thời gian hiển thị theo định dạng và ngôn ngữ\n * @param date thời gian cần định dạng\n * @param format định dạng thời gian muốn lấy ra\n * @param lang lấy theo ngôn ngữ\n */\nexport const formatDate = (date: dayjs.ConfigType, formatOutput = 'YYYY/MM/DD HH:mm', lang?: string, formatInput?: string): string => {\n if (!date) {\n return '';\n }\n lang = lang || (UtilsCache.getLang() as string);\n if (functionFormatDate) {\n return functionFormatDate(date, formatOutput, lang);\n }\n\n date = getDayjs({ date, formatOfDate: formatInput }).locale(lang);\n if (lang === 'vi') {\n dayjs.updateLocale('vi', {\n monthsShort: 'Thg 1_Thg 2_Thg 3_Thg 4_Thg 5_Thg 6_Thg 7_Thg 8_Thg 9_Thg 10_Thg 11_Thg 12'.split('_'),\n });\n }\n\n return date.format(getFormatData(getTypeByFormat(formatOutput), lang)) || '';\n};\n\nconst getTypeByFormat = (format: string): 'dm' | 'dmy' | 'dmy hm' | 'my' | 'dmy hms' | 'hh:mm' | 'HH:mm' | 'hh:mm A' | 'HH:mm A' | 'dmy hmsS' => {\n if (format === 'dm' || format === 'dmy' || format === 'dmy hm' || format === 'my' || format === 'dmy hms' || format === 'hh:mm' || format === 'HH:mm' || format === 'hh:mm A' || format === 'HH:mm A' || format === 'dmy hmsS') {\n return format;\n }\n\n if (format === 'DD/MM/YYYY' || format === 'YYYY-MM-DD' || format === 'dd/MM/yyyy' || format === 'dd-MM-yyyy' || format === 'dd/mm/yyyy') {\n return 'dmy';\n }\n\n if (format === 'MM-DD' || format === 'dd/MM' || format === 'dd/mm') {\n return 'dm';\n }\n\n if (format === 'M/YYYY' || format === 'YYYY-MM' || format === 'MM/yyyy') {\n return 'my';\n }\n\n if (format === 'YYYY/MM/DD hh:mm:ss' || format === 'dmy hms' || format === 'dd/mm/yyyy hh:mm:ss') {\n return 'dmy hms';\n }\n\n if(format.toLowerCase() === 'dd/mm/yyyy hh:mm:ss:ss' || format.toLowerCase() === 'yyyy/mm/dd hh:mm:ss:ss' || format.toLowerCase() === 'yyyy-mm-dd hh:mm:ss:ss' || format.toLowerCase() === 'dd-mm-yyyy hh:mm:ss:ss'){\n return 'dmy hmsS';\n }\n\n if (format === 'hh:mm' || format === 'HH:mm') {\n return 'hh:mm';\n }\n\n if (format === 'hh:mm A' || format === 'HH:mm A') {\n return 'hh:mm A';\n }\n\n return 'dmy hm';\n};\n\nconst getFormatData = (type: 'dm' | 'dmy' | 'dmy hm' | 'my' | 'dmy hms' | 'hh:mm' | 'hh:mm A' | 'HH:mm' | 'HH:mm A' | 'dmy hmsS', lang: string) => {\n switch (type) {\n case 'dm':\n if (lang === 'vi') {\n return 'D MMM';\n }\n\n return 'MMM D';\n\n case 'dmy':\n if (lang === 'vi') {\n return 'D MMM, YYYY';\n }\n\n return 'MMM D, YYYY';\n\n case 'dmy hm':\n if (lang === 'vi') {\n return 'D MMM, YYYY HH:mm';\n }\n\n return 'MMM D, YYYY HH:mm';\n\n case 'my':\n if (lang === 'vi') {\n return 'MMM, YYYY';\n }\n\n return 'MMM YYYY ';\n\n case 'dmy hms':\n if (lang === 'vi') {\n return 'D MMM, YYYY HH:mm:ss';\n }\n\n return 'MMM D, YYYY HH:mm:ss';\n\n case 'hh:mm':\n case 'HH:mm':\n return 'HH:mm';\n\n case 'hh:mm A':\n case 'HH:mm A':\n return 'HH:mm A';\n case 'dmy hmsS':\n if (lang === 'vi') {\n return 'D MMM, YYYY HH:mm:ss:SSS';\n }\n\n return 'MMM D, YYYY HH:mm:ss:SSS';\n }\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParameterCodec, HttpParams } from '@angular/common/http';\n\nexport const UtilsHttpParamsRequestInstance = <Type>(options?: HttpParamsOptions<Type>, instance?: HttpParams): UtilsHttpParamsRequest<Type> => {\n return new UtilsHttpParamsRequest<Type>(options, instance);\n};\n\nexport class UtilsHttpParamsRequest<Type = { pem: string }> extends HttpParams {\n protected params = new HttpParams();\n\n constructor(options?: HttpParamsOptions<Type>, instance?: HttpParams) {\n super(options as any);\n\n if (!instance) {\n this.params = new HttpParams(options);\n\n return;\n }\n\n if (instance instanceof UtilsHttpParamsRequest) {\n this.params = instance.getInstance();\n\n return;\n }\n\n if (instance instanceof HttpParams) {\n this.params = instance;\n\n return;\n }\n }\n\n getInstance(): HttpParams {\n return this.params;\n }\n\n setInstance(instance: HttpParams) {\n if (instance instanceof UtilsHttpParamsRequest) {\n this.params = instance.getInstance();\n\n return;\n }\n\n if (instance instanceof HttpParams) {\n this.params = instance;\n\n return;\n }\n }\n\n override set(param: string, value: string | number | boolean): UtilsHttpParamsRequest {\n this.params = this.params.set(param, value);\n\n return this as UtilsHttpParamsRequest;\n }\n\n override has(param: string): boolean {\n return this.params.has(param);\n }\n\n override get(param: string): string | null {\n return this.params.get(param);\n }\n\n override getAll(param: string): string[] | null {\n return this.params.getAll(param);\n }\n\n override keys(): string[] {\n return this.params.keys();\n }\n\n override append(param: string, value: string | number | boolean): HttpParams {\n this.params = this.params.append(param, value);\n\n return this as HttpParams;\n }\n\n override appendAll(params: { [param: string]: string | number | boolean | ReadonlyArray<string | number | boolean> }): HttpParams {\n this.params = this.params.appendAll(params);\n\n return this as HttpParams;\n }\n\n override delete(param: string, value?: string | number | boolean): UtilsHttpParamsRequest {\n this.params = this.params.delete(param, value);\n\n return this as UtilsHttpParamsRequest;\n }\n\n override toString(): string {\n return this.params.toString();\n }\n}\n\nexport declare interface HttpParamsOptions<Type> {\n fromString?: string;\n fromObject?: TYPE_FROM_OBJECT<Type>;\n encoder?: HttpParameterCodec;\n}\nexport type GET_PATH_VARIABLE<TypePath, TypeOther = unknown> = {\n [Property in keyof TypePath as `pathVariable-${Lowercase<string & Property>}`]: TypePath[Property];\n} & TypeOther;\n\ntype TYPE_FROM_OBJECT<Type> = Type extends undefined | null\n ? { pem: string }\n : { pem?: string } & {\n [Property in keyof Type]?: Type[Property];\n };\n\n// Demo su dung GET_PATH_VARIABLE\n\n// interface Person {\n// name: string;\n// age: number;\n// location: string;\n// }\n\n// type c = GET_PATH_VARIABLE<Person, unknown>;\n\n// const a: c = {\n// \"pathVariable-age\": 1,\n// \"pathVariable-location\": '12',\n// \"pathVariable-name\": '124',\n// };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isSignal, signal, WritableSignal } from '@angular/core';\nimport { isArray, isAsyncObject, isMap, isReturnAsIsObject, isSet } from './dangerous-object';\nimport { cloneDeep } from './helpers';\n\n/**\n * Chuyển đổi một đối tượng hoặc giá trị thành signal\n * @param data Dữ liệu cần chuyển đổi thành signal\n * @param cloneDeepIfNotSignal Có thực hiện sao chép sâu dữ liệu trước khi chuyển đổi hay không nếu data không phải signal. Mặc định là true.\n * Đặt false nếu muốn giữ nguyên tham chiếu đến dữ liệu gốc.\n * Nếu muốn sao chép sâu đối tượng signal thì đặt cloneDeepIfNotSignal là true và acceptConvertObjectInnerWritableSignal là true.\n * @param isSignalPrimitiveType Có chuyển đổi các giá trị nguyên thủy (string, number, boolean) thành signal hay không. Mặc định là false.\n * Đặt true nếu muốn bọc các giá trị nguyên thủy trong signal.\n * @param acceptConvertObjectInnerWritableSignal Có tiếp tục tìm kiếm và chuyển đổi các đối tượng bên trong signal hay không. Mặc định là false.\n * Đặt true nếu muốn tìm và chuyển đổi các đối tượng bên trong signal hoặc chính nó thành signal mới.\n * @returns Dữ liệu đã được chuyển đổi theo kiểu T\n */\nexport const convertObjectToSignal = <T = any>(data: any, cloneDeepIfNotSignal = true, isSignalPrimitiveType = false, acceptConvertObjectInnerWritableSignal = false, seen = new WeakMap()): T => {\n if ((data === null || typeof data !== 'object') && !isSignal(data)) {\n return (isSignalPrimitiveType ? signal(data) : data) as T;\n }\n if (seen.has(data)) {\n return seen.get(data);\n }\n\n if (isSignal(data)) {\n if (!acceptConvertObjectInnerWritableSignal) {\n return data as T;\n }\n seen.set(data, convertObjectToSignal(data(), cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal, seen));\n return seen.get(data);\n }\n\n if (isArray(data)) {\n seen.set(data, signal(data.map((item) => convertObjectToSignal(item, cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal, seen))) as T);\n return seen.get(data);\n }\n\n if (isMap(data)) {\n const mapCopy = new Map();\n Array.from(data.keys()).forEach((key) => {\n mapCopy.set(key, convertObjectToSignal(data.get(key), cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal));\n });\n seen.set(data, signal(mapCopy) as T);\n return seen.get(data);\n }\n\n // Bỏ qua các đối tượng async\n if (isAsyncObject(data)) {\n return data as T;\n }\n\n data = signal(cloneDeepIfNotSignal ? { ...data } : data);\n seen.set(data, data);\n for (const key in data()) {\n const value = data()[key];\n // Bỏ qua các đối tượng nguy hiểm và đặc biệt\n if (isReturnAsIsObject(value)) {\n continue;\n }\n if (Object.prototype.hasOwnProperty.call(data(), key)) {\n data()[key] = convertObjectToSignal(value, cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal);\n }\n }\n\n return data as T;\n};\n\nexport const convertSignalToObject = <T = any>(data: any, isCloneDeep = true, seen = new WeakMap(), options?: { convertWhenFirstItemArrayNotIsSignal?: boolean }): T => {\n let ignoreCheckSeenHasDataAfterWhile = false;\n while (isSignal(data) && !seen.has(data)) {\n const dataConvert = (data as WritableSignal<unknown>)();\n if (typeof dataConvert === 'object') {\n if (dataConvert === null || isReturnAsIsObject(dataConvert)) {\n return dataConvert as T;\n }\n seen.set(dataConvert as object, dataConvert);\n data = dataConvert;\n ignoreCheckSeenHasDataAfterWhile = true;\n break;\n }\n seen.set(data, dataConvert);\n data = dataConvert;\n }\n\n if (data === null || typeof data === 'function' || typeof data !== 'object' || isReturnAsIsObject(data)) {\n return data;\n }\n\n if (!ignoreCheckSeenHasDataAfterWhile && seen.has(data)) {\n return seen.get(data);\n }\n\n if (isArray(data)) {\n if (!options?.convertWhenFirstItemArrayNotIsSignal && !isSignal(data[0])) {\n return data as T;\n }\n seen.set(data, data.map((item: any) => convertSignalToObject(isCloneDeep ? cloneDeep(item) : item, isCloneDeep, seen, options)) as T);\n return seen.get(data);\n }\n\n if (isMap(data)) {\n const mapCopy = new Map();\n Array.from(data.keys()).forEach((key) => {\n mapCopy.set(key, convertSignalToObject(isCloneDeep ? cloneDeep(data.get(key)) : data.get(key), isCloneDeep, seen, options));\n });\n seen.set(data, mapCopy as T);\n return seen.get(data);\n }\n\n if (isSet(data)) {\n const setCopy = new Set();\n Array.from(data.values()).forEach((value) => {\n setCopy.add(convertSignalToObject(isCloneDeep ? cloneDeep(value) : value, isCloneDeep, seen, options));\n });\n seen.set(data, setCopy as T);\n return seen.get(data);\n }\n\n // Bỏ qua các đối tượng nguy hiểm và đặc biệt\n if (isReturnAsIsObject(data)) {\n return data as T;\n }\n\n const result: Record<string, any> = isCloneDeep ? {} : data;\n seen.set(data, result);\n for (const key in data) {\n const value = data[key];\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n // Bỏ qua các đối tượng nguy hiểm để tránh maximum call stack\n if (isReturnAsIsObject(value)) {\n result[key] = value;\n continue;\n }\n result[key] = convertSignalToObject(isCloneDeep ? cloneDeep(value) : value, isCloneDeep, seen, options);\n }\n }\n\n return result as T;\n};\n\nexport const unwrapSignal = (data: any) => {\n while (isSignal(data)) {\n data = data();\n }\n return data;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParams } from '@angular/common/http';\nimport { Signal, WritableSignal, isSignal, signal } from '@angular/core';\nimport { GetReturnType, GetValueAtPath, PathOf, TYPE_OBJECT } from '@libs-ui/interfaces-types';\nimport dayjs from 'dayjs';\nimport { isArray, isDangerousObject, isDayjsObject, isMap, isRegExp, isReturnAsIsObject, isSet } from './dangerous-object';\nimport { getDayjs } from './date';\nimport { UtilsHttpParamsRequest } from './http-params';\nimport { unwrapSignal } from './two-way-signal-object';\n\n/**Các hàm tương tự thư viện lodash */\n/**\n * Kiểm tra xem một giá trị có phải là null hoặc undefined hay không\n * @param value Giá trị cần kiểm tra\n * @returns true nếu giá trị là null hoặc undefined, false nếu không\n * @example\n * isNil(null); // true\n * isNil(undefined); // true\n * isNil(0); // false\n * isNil('hello'); // false\n */\nexport const isNil = (value: unknown, options?: { ignoreUnWrapSignal?: boolean }): value is null | undefined => {\n if (!options?.ignoreUnWrapSignal) {\n value = unwrapSignal(value);\n }\n return value === null || value === undefined;\n};\n\n/**\n * Kiểm tra xem một giá trị có phải là rỗng hay không\n * @param value Giá trị cần kiểm tra\n * @returns true nếu giá trị là null, rỗng hoặc undefined, false nếu không\n * @example\n * isEmpty(null); // true\n * isEmpty(''); // true\n * isEmpty(undefined); // true\n * isEmpty({}); // true\n * isEmpty([]); // true\n * isEmpty([1, 2, 3]); // false\n * isEmpty({ a: 1 }); // false\n */\nexport const isEmpty = (value: any, options?: { ignoreCheckTypePrimitive?: boolean; ignoreUnWrapSignal?: boolean; ignoreCheckString?: boolean }): value is null | undefined | '' | 0 => {\n if (!options?.ignoreUnWrapSignal) {\n value = unwrapSignal(value);\n }\n if (options?.ignoreCheckString && value === '') {\n return false;\n }\n if (options?.ignoreCheckTypePrimitive) {\n return typeof value === 'object' && isEmptyTypeObject(value);\n }\n\n return isEmptyTypeObject(value);\n};\n\n/**\n * Kiểm tra xem một giá trị có phải là object rỗng hay không\n * @param value Giá trị cần kiểm tra\n * @returns true nếu giá trị là object rỗng, false nếu không\n * @example\n * isEmptyTypeObject({}); // true\n * isEmptyTypeObject({ a: 1 }); // false\n */\nconst isEmptyTypeObject = <T = null>(value: any): value is T => {\n try {\n if (isNil(value, { ignoreUnWrapSignal: true }) || value === '') {\n return true;\n }\n if (typeof value !== 'object') {\n return false;\n }\n\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n\n return Object.keys(value).length === 0;\n } catch (error) {\n console.error(error);\n return false;\n }\n};\n\n/**\n * Kiểm tra xem một giá trị có phải là null, rỗng, undefined hoặc 0 hay không\n * @param value Giá trị cần kiểm tra\n * @param options Cấu hình tùy chọn\n * @param options.ignoreZero Nếu true, sẽ không kiểm tra giá trị 0\n * @returns true nếu giá trị là null, rỗng, undefined hoặc 0, false nếu không\n * @example\n * isTruthy(null); // false\n * isTruthy(''); // false\n * isTruthy(undefined); // false\n * isTruthy(0); // false\n * isTruthy({}); // true\n * isTruthy(0, { ignoreZero: true }); // true\n */\n\nexport const isTruthy = <T>(value: T, options?: { ignoreZero?: boolean; ignoreCheckString?: boolean; ignoreUnWrapSignal?: boolean }): value is NonNullable<T> => {\n return !isFalsy(value, options);\n};\n\n/**\n * Kiểm tra xem một giá trị có phải là null, rỗng, undefined hoặc 0 hay không\n * @param value Giá trị cần kiểm tra\n * @param options Cấu hình tùy chọn\n * @param options.ignoreZero Nếu true, sẽ không kiểm tra giá trị 0\n * @returns true nếu giá trị là null, rỗng, undefined hoặc 0, false nếu không\n * @example\n * isFalsy(null); // true\n * isFalsy(''); // true\n * isFalsy(undefined); // true\n * isFalsy(0); // true\n * isFalsy({}); // false\n * isFalsy(0, { ignoreZero: true }); // false\n */\nexport const isFalsy = (value: unknown, options?: { ignoreZero?: boolean; ignoreCheckString?: boolean; ignoreUnWrapSignal?: boolean }): value is null | undefined | '' | 0 => {\n if (!options?.ignoreUnWrapSignal) {\n value = unwrapSignal(value);\n }\n\n if (options?.ignoreZero && value === 0) {\n return false;\n }\n\n if (options?.ignoreCheckString && value === '') {\n return false;\n }\n\n return !value;\n};\n\n/**\n * Loại bỏ các thuộc tính của đối tượng dựa trên một hàm điều kiện\n * @param objData Đối tượng cần xử lý\n * @param predicate Hàm điều kiện để kiểm tra giá trị của thuộc tính. Nếu hàm trả về true thì thuộc tính đó sẽ bị loại bỏ\n * @returns Đối tượng mới sau khi đã loại bỏ các thuộc tính thỏa mãn điều kiện\n * @example\n * const obj = { a: 1, b: null, c: 3, d: undefined };\n * omitBy(obj, isNil); // { a: 1, c: 3 }\n */\nexport const omitBy = <T>(objData: Record<string, any>, predicate: (val: any) => boolean): T => {\n if (!objData || typeof objData !== 'object' || Array.isArray(objData)) {\n return objData as T;\n }\n const newObj = {} as T;\n\n Object.keys(objData).forEach((key) => {\n const valueOfKey = get(objData, key);\n if (!predicate(valueOfKey)) {\n set(newObj, key as PathOf<T>, valueOfKey);\n }\n });\n return newObj;\n};\n\n/**\n * Lấy giá trị từ đối tượng theo đường dẫn chỉ định\n *\n * Hàm này giúp bạn truy cập vào các thuộc tính sâu bên trong một đối tượng một cách an toàn,\n * tránh lỗi khi thuộc tính không tồn tại.\n *\n * @param obj Đối tượng nguồn cần lấy giá trị\n * @param path Đường dẫn đến thuộc tính cần lấy. Có thể là:\n * - Chuỗi: 'user.profile.name' hoặc 'items[0].title'\n * - Mảng: ['user', 'profile', 'name'] hoặc ['items', '0', 'title']\n * - Chuỗi rỗng '': trả về chính đối tượng gốc\n * @param defaultValue Giá trị mặc định trả về khi không tìm thấy thuộc tính (mặc định: undefined)\n * @param keepLastValueIfSignal Có giữ nguyên signal cuối cùng hay không (mặc định: false - sẽ gọi signal())\n * @returns Giá trị tìm được hoặc giá trị mặc định\n *\n * @example\n * // Ví dụ cơ bản\n * const user = { name: 'John', age: 30 };\n * get(user, 'name'); // 'John'\n * get(user, 'email'); // undefined\n * get(user, 'email', 'no-email'); // 'no-email'\n *\n * @example\n * // Truyền path rỗng - trả về chính đối tượng gốc\n * const data = { name: 'Alice', age: 25 };\n * get(data, ''); // { name: 'Alice', age: 25 } (chính đối tượng data)\n * get(data, '', 'default'); // { name: 'Alice', age: 25 } (bỏ qua defaultValue)\n *\n * @example\n * // Truy cập thuộc tính sâu\n * const data = {\n * user: {\n * profile: {\n * name: 'Alice',\n * settings: { theme: 'dark' }\n * }\n * }\n * };\n * get(data, 'user.profile.name'); // 'Alice'\n * get(data, 'user.profile.settings.theme'); // 'dark'\n * get(data, 'user.profile.avatar', 'default.jpg'); // 'default.jpg'\n *\n * @example\n * // Truy cập mảng\n * const items = [\n * { name: 'Item 1', price: 100 },\n * { name: 'Item 2', price: 200 }\n * ];\n * get(items, '[0].name'); // 'Item 1'\n * get(items, '[1].name'); // 'Item 2'\n * get(items, '[2].name', 'Not found'); // 'Not found'\n *\n * @example\n * // Sử dụng với mảng path\n * const nested = { a: { b: { c: 'deep value' } } };\n * get(nested, ['a', 'b', 'c']); // 'deep value'\n * get(nested, ['a', 'b', 'd'], 'default'); // 'default'\n *\n * @example\n * // Trường hợp đặc biệt\n * get(null, 'any.path'); // undefined\n * get(undefined, 'any.path', 'fallback'); // 'fallback'\n */\nexport const get = <O, P extends PathOf<O> = PathOf<O>, KS extends boolean = false, D extends GetValueAtPath<O, P, KS> | undefined = undefined>(\n obj: Signal<O> | O,\n path: P,\n defaultValue?: D,\n keepLastValueIfSignal?: KS\n): GetReturnType<O, P, KS, D> => {\n // helper cast để tránh lặp lại kiểu điều kiện ở các return\n const out = (v: unknown) => v as GetReturnType<O, P, KS, D>;\n\n if (isNil(obj)) {\n return out(defaultValue);\n }\n obj = unwrapSignal(obj);\n if (path === '') {\n return out(obj);\n }\n if (obj instanceof HttpParams) {\n return out(obj.get(`${path}`) ?? defaultValue);\n }\n if (obj instanceof DOMRect) {\n return out(obj[path as keyof DOMRect]);\n }\n\n const paths = Array.isArray(path)\n ? path\n : (path as string)\n .replace(/\\[(\\d+)]/g, '.$1')\n .split('.')\n .filter((key) => key);\n\n for (const index in paths) {\n const key = paths[index];\n if (obj instanceof CSSStyleDeclaration) {\n obj = obj[key as keyof CSSStyleDeclaration] as O;\n continue;\n }\n\n if (obj instanceof HTMLElement) {\n obj = obj[key as keyof HTMLElement] as O;\n continue;\n }\n obj = unwrapSignal(obj);\n if (isNil(obj) || !Object.prototype.hasOwnProperty.call(obj, key)) {\n return out(defaultValue);\n }\n const val = isSignal((obj as any)[key]) && !keepLastValueIfSignal ? (obj as any)[key]() : (obj as any)[key];\n\n obj = val as O;\n }\n\n return out(obj ?? defaultValue);\n};\n\n/**\n * Thiết lập giá trị cho một thuộc tính trong đối tượng theo đường dẫn chỉ định\n * @param obj Đối tượng cần thiết lập giá trị\n * @param path Đường dẫn đến thuộc tính, có thể là chuỗi (vd: 'a.b.c') hoặc mảng (vd: ['a', 'b', 'c'])\n * @param value Giá trị cần thiết lập\n * @returns Đối tượng sau khi đã thiết lập giá trị\n * @throws Error nếu tham số đầu tiên không phải là đối tượng\n * @example\n * const obj = { a: { b: 1 } };\n * set(obj, 'a.b', 2); // { a: { b: 2 } }\n */\nexport const set = <O, P extends PathOf<O> = PathOf<O>, T extends GetValueAtPath<O, P, true> = GetValueAtPath<O, P, true>>(\n obj: Signal<O> | O,\n path: P,\n value: T,\n options?: { valueDefaultPathObjectUndefined?: any; valueDefaultPathArrayUndefined?: any }\n): O => {\n if (isNil(obj) || (typeof obj !== 'object' && !isSignal(obj)) || (isSignal(obj) && typeof obj() !== 'object')) {\n throw new Error('The first argument must be an object');\n }\n\n if (obj instanceof HttpParams) {\n return obj.set(`${path}`, value as string) as O;\n }\n\n const pathArray = Array.isArray(path)\n ? path\n : (path as string)\n .replace(/\\[(\\d+)]/g, '.[$1]')\n .split('.')\n .filter((key) => key);\n\n let currentObjectByKey: any = isSignal(obj) ? obj() : obj;\n let preObjectByKey = obj;\n\n pathArray.forEach((key, index) => {\n if (index < pathArray.length - 1) {\n if (!(key in currentObjectByKey) || (typeof currentObjectByKey[key] !== 'object' && !isSignal(currentObjectByKey[key]))) {\n const nextKey = pathArray[index + 1];\n key = key.replace(/\\[(\\d+)]/g, '$1');\n if (isNil(currentObjectByKey[key])) {\n currentObjectByKey[key] = /\\[(\\d+)]/g.test(nextKey) ? (options?.valueDefaultPathArrayUndefined ?? []) : (options?.valueDefaultPathObjectUndefined ?? {});\n }\n }\n currentObjectByKey = key ? currentObjectByKey[key] : currentObjectByKey;\n preObjectByKey = currentObjectByKey;\n currentObjectByKey = isSignal(currentObjectByKey) ? currentObjectByKey() : currentObjectByKey;\n return;\n }\n\n if (typeof currentObjectByKey !== 'object') {\n return;\n }\n\n // Gán giá trị ở cuối đường dẫn\n key = key.replace(/\\[(\\d+)]/g, '$1');\n const valueOfKey = currentObjectByKey[key];\n const valueOfKeyIsSignal = isSignal(valueOfKey);\n\n if (valueOfKeyIsSignal && (typeof valueOfKey() !== 'object' || valueOfKey() === null)) {\n (valueOfKey as WritableSignal<any>).set(isSignal(value) ? value() : value);\n return;\n }\n if (isSignal(preObjectByKey)) {\n (preObjectByKey as WritableSignal<any>).update((data: any) => {\n const dataOfKey = data[key];\n if (isNil(dataOfKey) || !valueOfKeyIsSignal) {\n data[key] = value;\n }\n\n if (valueOfKeyIsSignal) {\n (valueOfKey as WritableSignal<any>).set(isSignal(value) ? value() : value);\n }\n\n if (Array.isArray(data)) {\n return [...data];\n }\n return { ...data };\n });\n return;\n }\n if (valueOfKeyIsSignal) {\n (valueOfKey as WritableSignal<any>).set(isSignal(value) ? value() : value);\n return;\n }\n currentObjectByKey[key] = value;\n });\n\n return obj as O;\n};\n\n/**\n * Tạo một bản sao sâu của một đối tượng hoặc giá trị bất kỳ\n * @param data Dữ liệu cần sao chép\n * @param options Tùy chọn cấu hình\n * @param options.ignoreSignal Nếu true, sẽ không sao chép các signal mà trả về signal gốc\n * @param seen WeakMap để theo dõi các tham chiếu đã được sao chép, tránh lặp vô hạn với các tham chiếu vòng\n * @returns Bản sao sâu của dữ liệu đầu vào\n * @example\n * const obj = {\n * a: 1,\n * b: { c: 2 },\n * d: [1, 2, 3]\n * };\n * const clone = cloneDeep(obj);\n * // clone là một bản sao hoàn toàn độc lập của obj\n */\nexport const cloneDeep = <T = any>(data: any, options = { ignoreSignal: false }, seen = new WeakMap()): T => {\n if (data === null || (typeof data !== 'object' && !isSignal(data)) || isDangerousObject(data)) {\n return data;\n }\n\n if (seen.has(data)) {\n return seen.get(data);\n }\n\n if (data instanceof HttpParams) {\n return new UtilsHttpParamsRequest(undefined, data) as T;\n }\n\n if (data instanceof Date) {\n return new Date(data.getTime()) as T;\n }\n\n if (isDayjsObject(data)) {\n return getDayjs({ date: data.valueOf() }) as T;\n }\n\n if (isRegExp(data)) {\n return new RegExp(data.source, data.flags) as T;\n }\n\n if (isMap(data)) {\n const mapCopy = new Map();\n seen.set(data, mapCopy);\n data.forEach((val, key) => {\n mapCopy.set(cloneDeep(key, options, seen), cloneDeep(val, options, seen));\n });\n return mapCopy as T;\n }\n\n if (isSet(data)) {\n const setCopy = new Set();\n seen.set(data, setCopy);\n data.forEach((val) => {\n setCopy.add(cloneDeep(val, options, seen));\n });\n return setCopy as T;\n }\n\n if (isArray(data)) {\n seen.set(data, data.map((item) => cloneDeep(item, options, seen)) as T);\n return seen.get(data) as T;\n }\n\n if (isReturnAsIsObject(data)) {\n return data as T;\n }\n\n if (isSignal(data)) {\n if (options?.ignoreSignal) {\n return data as T;\n }\n seen.set(data, signal(cloneDeep(data(), options, seen)));\n return seen.get(data) as T;\n }\n\n const result: Record<string, any> = {};\n seen.set(data, result);\n for (const key in data) {\n const value = data[key];\n if (value instanceof HttpParams) {\n result[key] = new UtilsHttpParamsRequest(undefined, value) as T;\n continue;\n }\n\n if (value instanceof Date) {\n result[key] = new Date(value.getTime()) as T;\n continue;\n }\n\n if (dayjs.isDayjs(value)) {\n result[key] = getDayjs({ date: value.valueOf() }) as T;\n continue;\n }\n\n if (isRegExp(data)) {\n result[key] = new RegExp(value.source, value.flags) as T;\n continue;\n }\n if (isReturnAsIsObject(data)) {\n result[key] = value;\n continue;\n }\n\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n result[key] = cloneDeep(value, options, seen);\n }\n }\n\n return result as T;\n};\n\n/**\n * Chuyển đổi một mảng các đối tượng thành một đối tượng với khóa được chỉ định\n * @param data Mảng các đối tượng cần chuyển đổi\n * @param key Tên thuộc tính được sử dụng làm khóa trong đối tượng kết quả\n * @returns Đối tượng với các giá trị từ mảng được đánh key theo thuộc tính đã chỉ định\n * @example\n * const data = [\n * { id: 1, name: 'John' },\n * { id: 2, name: 'Jane' }\n * ];\n * keyBy(data, 'id');\n * // Kết quả: {\n * // '1': { id: 1, name: 'John' },\n * // '2': { id: 2, name: 'Jane' }\n * // }\n */\nexport const keyBy = (data: Array<TYPE_OBJECT>, key: string): TYPE_OBJECT => {\n if (!data || !data.length || !key) {\n return {};\n }\n return data.reduce((dir, nextItem) => {\n const valueOfKey = get(nextItem, key as PathOf<TYPE_OBJECT>);\n if (typeof valueOfKey !== 'string' && typeof valueOfKey !== 'number' && typeof valueOfKey !== 'boolean') {\n return dir;\n }\n if (!Object.keys(dir).includes(`${valueOfKey}`)) {\n dir[`${valueOfKey}`] = nextItem;\n }\n return dir;\n }, {});\n};\n\n/**\n * Nhóm các đối tượng trong một mảng thành các nhóm dựa trên một thuộc tính cụ thể\n * @param data Mảng các đối tượng cần nhóm\n * @param key Tên thuộc tính được sử dụng làm khóa nhóm\n * @returns Đối tượng với các giá trị từ mảng được nhóm theo thuộc tính đã chỉ định\n * @example\n * const data = [\n * { id: 1, name: 'John' },\n * { id: 2, name: 'Jane' },\n * { id: 1, name: 'John' }\n * ];\n * groupBy(data, 'id');\n * // Kết quả: {\n * // '1': [\n * // { id: 1, name: 'John' },\n * // { id: 1, name: 'John' }\n * // ],\n * // '2': [\n * // { id: 2, name: 'Jane' }\n * // }\n */\nexport const groupBy = (data: Array<TYPE_OBJECT>, key: string): TYPE_OBJECT => {\n if (!data || !data.length || !Object.keys(get(data, '[0]')).length || !key) {\n return {};\n }\n return data.reduce((dir, nextItem) => {\n const valueOfKey = get(nextItem, key as PathOf<TYPE_OBJECT>);\n if (typeof valueOfKey !== 'string' && typeof valueOfKey !== 'number' && typeof valueOfKey !== 'boolean') {\n return dir;\n }\n if (!Object.keys(dir).includes(`${valueOfKey}`)) {\n dir[`${valueOfKey}`] = [];\n }\n dir[`${valueOfKey}`].push(nextItem);\n return dir;\n }, {});\n};\n\n/**\n * Tạo một mảng các số từ giá trị bắt đầu đến giá trị kết thúc với bước nhảy tùy chọn\n * @param start Giá trị bắt đầu của dãy số. Nếu chỉ có một tham số, đây sẽ là giá trị kết thúc và giá trị bắt đầu sẽ là 0\n * @param end Giá trị kết thúc của dãy số (tùy chọn)\n * @param step Bước nhảy giữa các số trong dãy (tùy chọn). Mặc định là 1 nếu end > start, -1 nếu end < start\n * @returns Mảng các số từ start đến end với bước nhảy step\n * @example\n * range(4); // [0, 1, 2, 3]\n * range(1, 5); // [1, 2, 3, 4]\n * range(0, 20, 5); // [0, 5, 10, 15]\n * range(5, 2); // [5, 4, 3]\n */\nexport const range = (start: number, end?: number, step?: number): Array<number> => {\n if (end === undefined || end === null) {\n end = start;\n start = 0;\n }\n\n if (!step) {\n step = end < 0 ? -1 : 1;\n }\n\n if (end < start && step > 0) {\n step *= -1;\n }\n\n const valueStartByStep = step + start;\n const direction = start < end ? 'asc' : 'desc';\n if ((direction === 'asc' && (valueStartByStep < start || valueStartByStep > end)) || (direction === 'desc' && (valueStartByStep > start || valueStartByStep < end))) {\n return [start];\n }\n\n const arr = new Array<number>();\n\n for (let index = 0; index < Math.abs(end - start); index++) {\n let value = start + index * step;\n if (index === 0) {\n value = start;\n }\n\n if ((direction === 'asc' && (value < start || value > end)) || (direction === 'desc' && (value > start || value < end))) {\n return arr;\n }\n\n arr.push(value);\n }\n\n return arr;\n};\n\n/**\n * So sánh hai giá trị bất kỳ có bằng nhau hay không\n * @param value1 Giá trị thứ nhất cần so sánh\n * @param value2 Giá trị thứ hai cần so sánh\n * @param exactlyPosition Có so sánh chính xác vị trí các phần tử trong mảng hay không\n * @returns true nếu hai giá trị bằng nhau, false nếu không bằng nhau\n * @example\n * isEqual([1,2,3], [1,2,3]); // true\n * isEqual([1,2,3], [3,2,1]); // true khi exactlyPosition = false\n * isEqual([1,2,3], [3,2,1]); // false khi exactlyPosition = true\n * isEqual({a:1}, {a:1}); // true\n */\nexport const isEqual = (\n value1: any,\n value2: any,\n options?: {\n exactlyPosition?: boolean;\n ignoreExactlyDataType?: boolean;\n ignoreUnWrapSignal?: boolean;\n }\n): boolean => {\n // Handle signals\n if (!options?.ignoreUnWrapSignal) {\n value1 = unwrapSignal(value1);\n value2 = unwrapSignal(value2);\n }\n const { exactlyPosition = false, ignoreExactlyDataType = false } = options || {};\n\n if (value1 === value2 || (value1 === null && value2 === null) || (value1 === undefined && value2 === undefined)) {\n return true;\n }\n\n if (ignoreExactlyDataType) {\n return isEqual(isNil(value1) ? undefined : `${value1}`, isNil(value2) ? undefined : `${value2}`);\n }\n\n if (typeof value1 !== 'object' || typeof value2 !== 'object' || (Array.isArray(value1) && !Array.isArray(value2)) || (!Array.isArray(value1) && Array.isArray(value2))) {\n return false;\n }\n\n if (Array.isArray(value1) || Array.isArray(value2)) {\n if (value1.length !== value2.length) {\n return false;\n }\n if (!exactlyPosition) {\n return !value1.some((item: any) => !value2.includes(item));\n }\n\n return !value1.some((item: any, index: number) => !isEqual(item, value2[index], options));\n }\n\n if (Object.keys(value1).length !== Object.keys(value2).length) {\n return false;\n }\n return !Object.keys(value1).some((key) => !isEqual(value1[key], value2[key], options));\n};\n\n/**\n * Loại bỏ các phần tử trùng lặp trong mảng dựa trên một thuộc tính chỉ định\n * @param data Mảng dữ liệu cần xử lý\n * @param key Tên thuộc tính dùng để so sánh trùng lặp. Nếu không có key thì so sánh trực tiếp giá trị\n * @returns Mảng mới chứa các phần tử không trùng lặp\n * @example\n * const arr = [\n * { id: 1, name: 'A' },\n * { id: 2, name: 'B' },\n * { id: 1, name: 'C' }\n * ];\n * uniqBy(arr, 'id'); // [{ id: 1, name: 'A' }, { id: 2, name: 'B' }]\n *\n * const numbers = [1, 2, 2, 3, 3];\n * uniqBy(numbers); // [1, 2, 3]\n *\n * const numbersSignal = [signal(1), signal(2), signal(3), signal(2), signal(5), signal(4), signal(1), signal(6), signal(7), signal(6)];\n * uniqBy(numbersSignal); // [signal(1), signal(2), signal(3), signal(5), signal(4), signal(6), signal(7)]\n */\nexport const uniqBy = <T>(data: Array<T>, key?: string): Array<T> => {\n if (!key || !data?.length || typeof get(data, '[0]') !== 'object') {\n // Xử lý mảng chứa signal values\n if (data[0] && isSignal(data[0])) {\n const seen = new Set<string>();\n\n return data.filter((item) => {\n const value = `${get<any>(item, '')}`;\n if (seen.has(value)) {\n return false;\n }\n seen.add(value);\n return true;\n });\n }\n // Xử lý mảng primitive values\n return Array.from(new Set(data));\n }\n\n const dataUnique = keyBy(data as Array<Record<string, any>>, key);\n\n return Object.keys(dataUnique).map((key) => dataUnique[key]);\n};\n\nexport const generateInterface = (obj: any, interfaceName: string): string => {\n const generateType = (value: any): string => {\n if (value === null) {\n return 'null';\n }\n const type = typeof value;\n\n if (type === 'string') {\n return 'string';\n }\n if (type === 'number') {\n return 'number';\n }\n if (type === 'boolean') {\n return 'boolean';\n }\n if (type === 'undefined') {\n return 'any';\n }\n\n if (value instanceof Date) {\n return 'Date';\n }\n\n if (value instanceof RegExp) {\n return 'RegExp';\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return 'Array<any>';\n }\n return `Array<${generateType(value[0])}>`;\n }\n\n if (type === 'object') {\n let interfaceStr = '{\\n';\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n const valueType = generateType(value[key]);\n interfaceStr += ` ${key}: ${valueType};\\n`;\n }\n }\n interfaceStr += '}';\n return interfaceStr;\n }\n\n return 'any';\n };\n\n const interfaceStr = `interface ${interfaceName} ${generateType(obj)}`;\n return interfaceStr;\n};\n","import { DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IBoundingClientRect } from '@libs-ui/interfaces-types';\n\nimport Bowser from 'bowser';\nimport { finalize, fromEvent, mergeMap, startWith, takeUntil, tap } from 'rxjs';\nimport { set } from './helpers';\n\nlet parser: DOMParser | null = null;\nlet bowserParser: Bowser.Parser.Parser | null = null;\n\nexport const getDeviceInfo = () => {\n if (!bowserParser) {\n bowserParser = Bowser.getParser(window.navigator.userAgent);\n }\n return bowserParser;\n};\n\nexport const isTouchDevice = (): boolean => ('onpointerdown' in navigator && navigator.maxTouchPoints > 0) || 'ontouchstart' in window || (window.matchMedia?.('(pointer: coarse)').matches ?? false);\n\nexport const getEventNameHandleClick = (() => {\n if (isTouchDevice()) {\n return 'pointerdown';\n }\n const deviceInfo = getDeviceInfo();\n\n return deviceInfo.isPlatform('desktop') ? 'click' : 'touchstart';\n})();\n\nexport const getDocumentByString = (htmlStr: string): Document => {\n if (!parser) {\n parser = new DOMParser();\n }\n return parser.parseFromString(htmlStr, 'text/html');\n};\n\nexport const cloneIBoundingClientRect = (rect: IBoundingClientRect): IBoundingClientRect => {\n return {\n top: rect['top'],\n left: rect['left'],\n width: rect['width'],\n height: rect['height'],\n bottom: rect['bottom'],\n };\n};\n\nexport const setStylesElement = (el: HTMLElement, styles: Record<string, string>): void => {\n Object.keys(styles).forEach((key: string) => set(el, `style.${key}`, styles[key]));\n};\n\nexport const getViewport = (win: Window = window): { width: number; height: number } => {\n const doc = win.document.documentElement,\n body = win.document.getElementsByTagName('body')[0],\n w = win.innerWidth || doc.clientWidth || body.clientWidth,\n h = win.innerHeight || doc.clientHeight || body.clientHeight;\n\n return { width: w, height: h };\n};\n\nexport const setCaretPosition = (element: HTMLTextAreaElement | HTMLInputElement, position: number): void => {\n if (!element || !element.setSelectionRange) {\n return;\n }\n element.focus();\n element.setSelectionRange(position, position);\n};\n\nexport const checkViewInScreen = (container: HTMLElement, element: HTMLElement, elementScroll?: HTMLElement, maxTopLeft?: { top?: number; left?: number }): boolean => {\n if (!container || !element) {\n return false;\n }\n\n const rectContainer = cloneIBoundingClientRect(container.getBoundingClientRect());\n\n if (elementScroll) {\n const rectElementScroll = elementScroll.getBoundingClientRect();\n\n rectContainer['left'] = rectElementScroll.left;\n rectContainer['top'] = rectElementScroll.top;\n }\n\n const rectElement = element.getBoundingClientRect();\n const { left, top } = rectElement;\n const topContainer = rectContainer['top'];\n const leftContainer = rectContainer['left'];\n const widthContainer = rectContainer['width'];\n const heightContainer = rectContainer['height'];\n const scrollTopContainer = container.scrollTop;\n const scrollLeftContainer = container.scrollLeft;\n const limitTop = topContainer + scrollTopContainer + heightContainer;\n const limitLeft = leftContainer + scrollLeftContainer + widthContainer;\n\n const maxTopItem = top + (maxTopLeft?.top || 0);\n const maxLeftItem = left + (maxTopLeft?.left || 0);\n\n if (topContainer <= maxTopItem && maxTopItem <= limitTop && leftContainer <= maxLeftItem && maxLeftItem <= limitLeft) {\n return true;\n }\n\n return false;\n};\n\nexport const checkMouseOverInContainer = (mousePosition: { clientX: number; clientY: number }, element?: HTMLElement, rect?: DOMRect): boolean => {\n if (!element && !rect) {\n return false;\n }\n const rectElement = rect || element?.getBoundingClientRect() || ({} as DOMRect);\n const { left, top, width, height } = rectElement;\n const limitLeft = left + width;\n const limitTop = top + height;\n const { clientX, clientY } = mousePosition;\n if (left <= clientX && clientX <= limitLeft && top <= clientY && clientY <= limitTop) {\n return true;\n }\n\n return false;\n};\n\nexport const getDragEventByElement = (config: {\n elementMouseDown: HTMLElement;\n functionMouseDown?: (event: MouseEvent) => void;\n isStartWithMouseDownEvent?: boolean;\n elementMouseMove?: HTMLElement;\n functionMouseMove?: (event: MouseEvent) => void;\n elementMouseUp?: HTMLElement;\n functionMouseUp?: (event: MouseEvent) => void;\n destroyRef: DestroyRef;\n}) => {\n let timer: ReturnType<typeof setTimeout>;\n const addClass = () => {\n timer = setTimeout(() => {\n document.body.classList.add('!select-none');\n document.body.classList.add('!cursor-grabbing');\n }, 250);\n };\n const removeClass = () => {\n document.body.classList.remove('!select-none');\n document.body.classList.remove('!cursor-grabbing');\n clearTimeout(timer);\n };\n fromEvent(config.elementMouseDown, 'mouseleave')\n .pipe(\n tap(() => document.body.classList.remove('cursor-pointer')),\n takeUntilDestroyed(config.destroyRef)\n )\n .subscribe();\n fromEvent(config.elementMouseDown, 'mouseenter')\n .pipe(\n tap(() => document.body.classList.add('cursor-pointer')),\n takeUntilDestroyed(config.destroyRef)\n )\n .subscribe();\n\n const mouseDown = fromEvent<MouseEvent>(config.elementMouseDown, 'mousedown').pipe(\n tap((e) => {\n e.stopPropagation();\n addClass();\n config.functionMouseDown?.(e);\n })\n );\n const mouseup = fromEvent<MouseEvent>(config.elementMouseUp || document, 'mouseup').pipe(\n tap((e) => {\n e.stopPropagation();\n removeClass();\n config.functionMouseUp?.(e);\n })\n );\n\n const mousemove = fromEvent<MouseEvent>(config.elementMouseMove || document, 'mousemove').pipe(\n tap((e) => {\n e.stopPropagation();\n config.functionMouseMove?.(e);\n }),\n takeUntil(mouseup)\n );\n\n return mouseDown.pipe(\n mergeMap((e: MouseEvent) => (config.isStartWithMouseDownEvent ? mousemove.pipe(startWith(e)) : mousemove)),\n takeUntilDestroyed(config.destroyRef),\n finalize(removeClass)\n );\n};\n","export class UtilsUrlSearchParams {\n private static instance: UtilsUrlSearchParams;\n private params: Array<{ key: string; value: string }>;\n constructor(paramString: string) {\n this.params = new Array<{ key: string; value: string }>();\n this.params.length = 0;\n this.params.push(...this.buildParams(paramString));\n }\n\n static getInstance() {\n if (!this.instance) {\n this.instance = new UtilsUrlSearchParams('');\n }\n\n return this.instance;\n }\n\n public static toStringParamObject(params: { [key in string]: string }) {\n const paramsArr: Array<{ key: string; value: string }> = Object.keys(params).map((key) => {\n return {\n key,\n value: params[key],\n };\n });\n\n return UtilsUrlSearchParams.ToString(paramsArr);\n }\n\n public static ToString(params: Array<{ key: string; value: string }>) {\n let paramsStr = '';\n\n params\n .sort((item1, item2) => item1.key.localeCompare(item2.key))\n .forEach((item) => {\n const { key, value } = item;\n\n paramsStr = `${paramsStr}${paramsStr ? '&' : ''}${key}=${value}`;\n });\n\n return paramsStr;\n }\n\n private buildParams(paramString: string): Array<{ key: string; value: string }> {\n const paramsBuild = new Array<{ key: string; value: string }>();\n\n if (!paramString) {\n return paramsBuild;\n }\n\n const paramsError = paramString.split('?');\n\n if (paramsError.length > 2) {\n paramString = `${paramsError[0]}?${paramsError[1]}&${paramsError.slice(2).join('&')}`;\n }\n\n const params = paramString.replace(/\\S+[?]/g, '').split('&');\n\n if (params) {\n params.forEach((param) => {\n if (param.indexOf('=') < 0) {\n return;\n }\n let [key, value] = param.split('=');\n\n key = key.replace(/[?&]+/g, '');\n value = decodeURIComponent(value.replace(/\\+/g, ' '));\n if (!paramsBuild.some((param) => param.key === key)) {\n paramsBuild.push({ key, value });\n }\n });\n }\n\n return paramsBuild;\n }\n\n public set(key: string, value: string) {\n const paramByKey = this.params.find((param) => param.key === key) as Record<string, string>;\n\n if (!paramByKey) {\n this.params.push({ key, value: decodeURIComponent(value.replace(/\\+/g, ' ')) });\n\n return;\n }\n\n paramByKey['value'] = value;\n }\n\n public get(key: string) {\n return this.params.find((param) => param.key === key)?.value;\n }\n\n public has(key: string) {\n return this.params.some((param) => param.key === key);\n }\n\n public delete(key: string) {\n const index = this.params.findIndex((param) => param.key === key);\n\n if (index >= 0) {\n this.params.splice(index, 1);\n }\n }\n\n public length() {\n return this.params.length;\n }\n\n public toString(params?: Array<{ key: string; value: string }>) {\n params = params || this.params;\n\n return UtilsUrlSearchParams.ToString(params);\n }\n\n public getParamObject() {\n const params = {} as Record<string, string>;\n\n this.params.forEach((item) => {\n params[item.key] = item.value;\n });\n\n return params;\n }\n\n public compareParams(param1: string, param2: string) {\n const params1 = this.toString(this.buildParams(param1));\n const params2 = this.toString(this.buildParams(param2));\n\n return params1 === params2;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport interface IColorContrastFromOrigin {\n step: number;\n label: string;\n light: string;\n dark: string;\n}\n\nconst step = 20;\nconst percent = 0.05;\n\nexport const colorStepContrastFromOrigin = (color: string, stepNumber: number) => {\n return colorContrastFromOrigin(color).find((item) => item.step === stepNumber);\n};\n\nexport const colorContrastFromOrigin = (color: string): Array<IColorContrastFromOrigin> => {\n const parsedColorsArray = parseColorValues(color);\n const colors: any = [];\n let calculatedShades: Array<string> = [];\n let calculatedTints: Array<string> = [];\n\n if (parsedColorsArray !== null) {\n for (let i = 0; i < parsedColorsArray.length; i++) {\n calculatedShades = calculateShades(parsedColorsArray[i]);\n calculatedTints = calculateTints(parsedColorsArray[i]);\n }\n\n for (let i = 0; i <= step; i++) {\n colors.push({ step: i * 5, label: `${i * 5}%`, dark: `#${calculatedShades[i]}`, light: `#${calculatedTints[i]}` });\n }\n }\n\n return colors;\n};\n\nconst parseColorValues = (colorValues: any) => {\n let colorValuesArray = colorValues.match(/\\b[0-9A-Fa-f]{3}\\b|[0-9A-Fa-f]{6}\\b/g);\n\n if (colorValuesArray) {\n colorValuesArray = colorValuesArray.map((item: any) => {\n if (item.length === 3) {\n let newItem = item.toString().split('');\n\n newItem = newItem.reduce((acc: any, it: any) => {\n return acc + it + it;\n }, '');\n\n return newItem;\n }\n\n return item;\n });\n }\n\n return colorValuesArray;\n};\n\nconst calculateShades = (colorValue: any) => {\n return calculate(colorValue, rgbShade).concat('000000');\n};\n\nconst calculateTints = (colorValue: any) => {\n return calculate(colorValue, rgbTint).concat('ffffff');\n};\n\nconst calculate = (colorValue: any, shadeOrTint: any) => {\n const color = hexToRGB(colorValue);\n const shadeValues: Array<string> = [];\n\n for (let i = 0; i < step; i++) {\n shadeValues[i] = rgbToHex(shadeOrTint(color, i));\n }\n\n return shadeValues;\n};\n\nconst rgbShade = (rgb: any, i: any) => {\n return { red: rgb.red * (1 - percent * i), green: rgb.green * (1 - percent * i), blue: rgb.blue * (1 - percent * i) };\n};\nconst rgbTint = (rgb: any, i: any) => {\n return { red: rgb.red + (255 - rgb.red) * i * percent, green: rgb.green + (255 - rgb.green) * i * percent, blue: rgb.blue + (255 - rgb.blue) * i * percent };\n};\n\nexport const rgbToHex = (rgb: any) => {\n return intToHex(rgb.red) + intToHex(rgb.green) + intToHex(rgb.blue);\n};\nconst hexToRGB = (colorValue: any) => {\n return { red: parseInt(colorValue.substr(0, 2), 16), green: parseInt(colorValue.substr(2, 2), 16), blue: parseInt(colorValue.substr(4, 2), 16) };\n};\nconst intToHex = (rgbint: any) => {\n return pad(Math.min(Math.max(Math.round(rgbint), 0), 255).toString(16), 2);\n};\n\nconst pad = (number: any, length: any) => {\n let str = '' + number;\n\n while (str.length < length) {\n str = '0' + str;\n }\n\n return str;\n};\n\nexport const listColorDefine: Array<string> = [\n '#E62222',\n '#B81B1B',\n '#EB4E4E',\n '#F97316',\n '#C75C12',\n '#FA8F45',\n '#FFB700',\n '#CC9200',\n '#FFC533',\n '#84CC16',\n '#6AA312',\n '#9dd645',\n '#00BC62',\n '#00A757',\n '#33DA8A',\n '#06B6D4',\n '#1B59C4',\n '#4E8CF7',\n '#0EA5E9',\n '#1B59C4',\n '#4E8CF7',\n '#226FF5',\n '#1B59C4',\n '#4E8CF7',\n '#6366F1',\n '#4F52C1',\n '#8285F4',\n '#5B04B3',\n '#49038F',\n '#7C36C2',\n '#D946EF',\n '#AE38BF',\n '#E16BF2',\n '#EC4899',\n '#BD3A7A',\n '#F06DAD',\n '#F43F5E',\n '#C3324B',\n '#F6657E',\n '#757380',\n '#5E5C66',\n '#918F99',\n '#202020',\n '#1A1A1A',\n '#4D4D4D',\n];\n\nexport const getColorById = (str: string): string => {\n let hashString = 0;\n\n if (!str) {\n return '';\n }\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n\n hashString = (hashString << 5) - hashString + char;\n hashString = hashString & hashString;\n }\n\n return listColorDefine[Math.abs(hashString) % listColorDefine.length];\n};\n\nexport const detectAndCleanNearWhiteColors = (style: string): string => {\n if (!style) return style;\n\n const styleMap: Record<string, string> = {};\n const rules = style\n .split(';')\n .map((s) => s.trim())\n .filter(Boolean);\n\n for (const rule of rules) {\n const [keyRaw, valueRaw] = rule.split(':').map((s) => s.trim());\n if (!keyRaw || !valueRaw) continue;\n const key = keyRaw.toLowerCase();\n styleMap[key] = valueRaw;\n }\n\n const colorKeys = ['color', 'background', 'background-color', 'border-color'];\n for (const key of colorKeys) {\n const value = styleMap[key];\n if (value && isNearWhite(value)) {\n delete styleMap[key];\n }\n }\n\n return Object.entries(styleMap)\n .map(([k, v]) => `${k}: ${v}`)\n .join('; ');\n};\n\nexport const isNearWhite = (color: string): boolean => {\n if (!color) return false;\n color = color.trim().toLowerCase();\n\n // Chuyển HEX, RGB hoặc tên màu sang r,g,b\n const parseColor = (input: string): [number, number, number] | null => {\n if (input.startsWith('#')) {\n let hex = input.slice(1);\n if (hex.length === 3)\n hex = hex\n .split('')\n .map((c) => c + c)\n .join('');\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n return [r, g, b];\n }\n\n const rgbMatch = input.match(/rgba?\\s*\\(([^)]+)\\)/);\n if (rgbMatch) {\n const [r, g, b] = rgbMatch[1]\n .split(',')\n .slice(0, 3)\n .map((v) => parseFloat(v.trim()));\n return [r, g, b];\n }\n\n const whiteNames = ['white', 'snow', 'ivory', 'ghostwhite', 'floralwhite', 'seashell', 'whitesmoke'];\n if (whiteNames.includes(input)) return [255, 255, 255];\n return null;\n };\n\n const rgb = parseColor(color);\n if (!rgb) return false;\n\n const [r, g, b] = rgb;\n\n // Tính luminance (độ sáng)\n const luminance = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;\n\n // Tính saturation (độ bão hòa)\n const max = Math.max(r, g, b) / 255;\n const min = Math.min(r, g, b) / 255;\n const saturation = max === 0 ? 0 : (max - min) / max;\n\n // Chỉ coi là \"gần trắng\" nếu:\n // 1. rất sáng (luminance > 0.95)\n // 2. và rất ít màu (saturation < 0.1)\n return luminance > 0.95 && saturation < 0.1;\n};\n","export abstract class UtilsKeyCodeConstant {\n static readonly MAC_ENTER = 3;\n static readonly BACKSPACE = 8;\n static readonly TAB = 9;\n static readonly NUM_CENTER = 12;\n static readonly ENTER = 13;\n static readonly SHIFT = 16;\n static readonly CONTROL = 17;\n static readonly ALT = 18;\n static readonly PAUSE = 19;\n static readonly CAPS_LOCK = 20;\n static readonly ESCAPE = 27;\n static readonly SPACE = 32;\n static readonly PAGE_UP = 33;\n static readonly PAGE_DOWN = 34;\n static readonly END = 35;\n static readonly HOME = 36;\n static readonly LEFT_ARROW = 37;\n static readonly UP_ARROW = 38;\n static readonly RIGHT_ARROW = 39;\n static readonly DOWN_ARROW = 40;\n static readonly PLUS_SIGN = 43;\n static readonly PRINT_SCREEN = 44;\n static readonly INSERT = 45;\n static readonly DELETE = 46;\n static readonly ZERO = 48;\n static readonly ONE = 49;\n static readonly TWO = 50;\n static readonly THREE = 51;\n static readonly FOUR = 52;\n static readonly FIVE = 53;\n static readonly SIX = 54;\n static readonly SEVEN = 55;\n static readonly EIGHT = 56;\n static readonly NINE = 57;\n static readonly FF_SEMICOLON = 59; // Firefox (Gecko) fires this for semicolon instead of 186\n static readonly FF_EQUALS = 61; // Firefox (Gecko) fires this for equals instead of 187\n static readonly QUESTION_MARK = 63;\n static readonly AT_SIGN = 64;\n static readonly A = 65;\n static readonly B = 66;\n static readonly C = 67;\n static readonly D = 68;\n static readonly E = 69;\n static readonly F = 70;\n static readonly G = 71;\n static readonly H = 72;\n static readonly I = 73;\n static readonly J = 74;\n static readonly K = 75;\n static readonly L = 76;\n static readonly M = 77;\n static readonly N = 78;\n static readonly O = 79;\n static readonly P = 80;\n static readonly Q = 81;\n static readonly R = 82;\n static readonly S = 83;\n static readonly T = 84;\n static readonly U = 85;\n static readonly V = 86;\n static readonly W = 87;\n static readonly X = 88;\n static readonly Y = 89;\n static readonly Z = 90;\n static readonly META = 91; // WIN_KEY_LEFT\n static readonly MAC_WK_CMD_LEFT = 91;\n static readonly MAC_WK_CMD_RIGHT = 93;\n static readonly CONTEXT_MENU = 93;\n static readonly NUMPAD_ZERO = 96;\n static readonly NUMPAD_ONE = 97;\n static readonly NUMPAD_TWO = 98;\n static readonly NUMPAD_THREE = 99;\n static readonly NUMPAD_FOUR = 100;\n static readonly NUMPAD_FIVE = 101;\n static readonly NUMPAD_SIX = 102;\n static readonly NUMPAD_SEVEN = 103;\n static readonly NUMPAD_EIGHT = 104;\n static readonly NUMPAD_NINE = 105;\n static readonly NUMPAD_MULTIPLY = 106;\n static readonly NUMPAD_PLUS = 107;\n static readonly NUMPAD_MINUS = 109;\n static readonly NUMPAD_PERIOD = 110;\n static readonly NUMPAD_DIVIDE = 111;\n static readonly F1 = 112;\n static readonly F2 = 113;\n static readonly F3 = 114;\n static readonly F4 = 115;\n static readonly F5 = 116;\n static readonly F6 = 117;\n static readonly F7 = 118;\n static readonly F8 = 119;\n static readonly F9 = 120;\n static readonly F10 = 121;\n static readonly F11 = 122;\n static readonly F12 = 123;\n static readonly NUM_LOCK = 144;\n static readonly SCROLL_LOCK = 145;\n static readonly FIRST_MEDIA = 166;\n static readonly FF_MINUS = 173;\n static readonly MUTE = 173; // Firefox (Gecko) fires 181 for MUTE\n static readonly VOLUME_DOWN = 174; // Firefox (Gecko) fires 182 for VOLUME_DOWN\n static readonly VOLUME_UP = 175; // Firefox (Gecko) fires 183 for VOLUME_UP\n static readonly FF_MUTE = 181;\n static readonly FF_VOLUME_DOWN = 182;\n static readonly LAST_MEDIA = 183;\n static readonly FF_VOLUME_UP = 183;\n static readonly SEMICOLON = 186; // Firefox (Gecko) fires 59 for SEMICOLON\n static readonly EQUALS = 187; // Firefox (Gecko) fires 61 for EQUALS\n static readonly COMMA = 188;\n static readonly DASH = 189; // Firefox (Gecko) fires 173 for DASH/MINUS\n static readonly PERIOD = 190;\n static readonly SLASH = 191;\n static readonly APOSTROPHE = 192;\n static readonly TILDE = 192;\n static readonly OPEN_SQUARE_BRACKET = 219;\n static readonly BACKSLASH = 220;\n static readonly CLOSE_SQUARE_BRACKET = 221;\n static readonly SINGLE_QUOTE = 222;\n static readonly MAC_META = 224;\n static readonly BUFFERED = 229;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParams } from '@angular/common/http';\nimport { md5 } from './crypto';\nimport { get } from './helpers';\n\nexport const getKeyCacheByArrayObject = (keyCache: string, argumentsValue?: Array<unknown>): string => {\n if (!keyCache || !argumentsValue) {\n return '';\n }\n let keyBuild = `${JSON.stringify(argumentsValue.slice(1))}-key-cache-plus`;\n\n argumentsValue.forEach((item: any) => {\n if (typeof item === 'object') {\n if (Array.isArray(item)) {\n keyBuild = `${keyBuild}${JSON.stringify(item)}`;\n return;\n }\n const keys = (item instanceof HttpParams ? item.keys() : Object.keys(item)).sort((str1: string, str2: string) => str1.localeCompare(str2)) as Array<string>;\n\n keys.forEach((key) => {\n if (key.toLocaleLowerCase() === 'pem') {\n return;\n }\n keyBuild = `${keyBuild}${JSON.stringify(get(item, key))}`;\n });\n return;\n }\n keyBuild = `${keyBuild}${item}`;\n });\n\n const keyCachePlus = md5(keyBuild);\n const keyCacheMD5 = md5(keyCache);\n\n return `${keyCacheMD5}-${md5(`${keyCacheMD5}-${keyCachePlus}`)}`;\n};\n","import { UtilsCache } from './cache';\nimport { isNil } from './helpers';\nimport { UtilsLanguageConstants } from './language';\n\nexport const formatNumber = (value: string | number): string => {\n const lang = UtilsCache.getLang();\n\n if (lang === UtilsLanguageConstants.EN) {\n return `${value}`.replace(/[,]/g, '');\n }\n\n return `${value}`.replace(/[.]/g, '').replace(/[,]/g, '.');\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const viewDataNumberByLanguage = (value: string | number, acceptNegativeValue: boolean | undefined, parseFixed = 1, ignoreFormatSeparator = false, ignoreParseFloat = false): any => {\n const lang = UtilsCache.getLang();\n\n if (!`${value}`.trim()) {\n return '';\n }\n if (isNil(value) || (!acceptNegativeValue && +value <= 0)) {\n return 0;\n }\n if (typeof value === 'string' && !ignoreFormatSeparator) {\n value = formatNumber(value);\n }\n\n const isFloat = value.toString().includes('.');\n const [intStr, floatStr] = value.toString().split('.');\n\n if (!floatStr?.length) {\n parseFixed = 0;\n }\n const round = (value: number, parseFixed: number) => {\n const fixed = Math.pow(10, parseFixed);\n\n return Math.round(value * fixed) / fixed;\n };\n\n if (parseFixed > (floatStr?.length || 0)) {\n const maxParseFixed = acceptNegativeValue && +value < 0 ? 17 : 16;\n const fixed = maxParseFixed - (intStr?.length || 0);\n\n parseFixed = parseFixed < fixed ? parseFixed : fixed;\n }\n\n if (isFloat && !ignoreParseFloat) {\n value = parseFloat(round(+value, parseFixed).toFixed(parseFixed));\n }\n\n // Xử lý không format dữ liệu phần thập phân\n const valueString = value.toString();\n const index = valueString.indexOf('.');\n\n if (index !== -1 && (parseFixed > 3 || ignoreParseFloat)) {\n let decimalPart = valueString.substring(index + 1, valueString.length);\n let int = valueString.substring(0, index + 1);\n\n if (ignoreParseFloat) {\n decimalPart = decimalPart.substring(0, parseFixed);\n }\n if (lang === UtilsLanguageConstants.EN) {\n int = int.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n\n return `${int}${decimalPart}`;\n }\n int = int.replace('.', ',').replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n\n return `${int}${decimalPart}`;\n }\n if (index === -1 || parseFixed <= 3) {\n if (lang === UtilsLanguageConstants.EN) {\n return value.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n\n return value\n .toString()\n .replace('.', ',')\n .replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n }\n};\n","/* eslint-disable no-useless-escape */\nexport const patternEmail = () => {\n return /^[A-z0-9]+[A-z0-9\\_\\.\\+\\-]*[A-z0-9]@[A-z0-9]+[A-z0-9\\_\\.\\+\\-]*[A-z0-9]\\.[A-z0-9]+[A-z0-9\\_\\.\\+\\-]*[A-z0-9]$/;\n};\n\nexport const patterProtocolUrl = () => {\n return /(http|https|ftp):/;\n};\n\nexport const patternUrl = () => {\n return /^(http|https|ftp):(\\/){2}[^\\s]+[.]{1}[^\\s]+$/;\n};\n\nexport const patternHostUrl = () => {\n return /^((https|http|ftp):[/]{2}[^/\\s]+)/;\n};\n\nexport const patternDomain = () => {\n return /^([a-zA-Z0-9])(([a-z0-9-]{1,61})?[a-z0-9]{1})?(\\.[a-z0-9](([a-z0-9-]{1,61})?[a-z0-9]{1})?)?(\\.[a-zA-Z]{2,4})+$/;\n};\n\nexport const patternMobilePhone = () => {\n return /^(\\+?84|0|84)([0-9]{9})$/;\n};\n\nexport const patternPhone = () => {\n return /^(\\+?84|[0-9]|84)([0-9]{2,9})$/;\n};\n\nexport const patternNumber = () => {\n return /\\d+/g;\n};\nexport const patternEncodeUri = () => {\n return /%([0-9A-F]{2})/g;\n};\nexport const patternName = () => {\n return /^\\w+[A-Za-z\\s\\d]+$/;\n};\nexport const patternNameUtf8 = () => {\n return /^[ àáảãạăắằẵặẳâầấậẫẩđèéẻẽẹêềếểễệìíỉĩịòóỏõọôồốổỗộơờớởỡợùúủũụưừứửữựỳýỷỹÀÁẢÃẠĂẮẰẴẶẲÂẦẤẬẪẨĐÈÉẺẼẸÊỀẾỂỄỆÌÍỈĨỊÒÓỎÕỌÔỒỐỔỖỘƠỜỚỞỠỢÙÚỦŨỤƯỪỨỬỮỰỲÝỶỸA-Za-z0-9]+$/;\n};\nexport const patternNameSpecial = () => {\n return /[~!@#$%^&*()-+=<>,?\\/\\\\:;\"']/;\n};\nexport const patternNameProfile = () => {\n return /([\\w\\W\\d\\s]+)+/;\n};\nexport const patternEmoji = () => {\n return /(\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff])/g;\n};\nexport const patternRuleFieldReplace = () => {\n return /[{]{2}[a-zA-Z_-]+[}]{2}/g;\n};\nexport const patternGetFieldByRuleFieldReplace = () => {\n return /[a-zA-Z_-]+/g;\n};\n\nexport const patternPem = () => {\n return /^(0|1):([0-9]{1,2}):(\\{\\{path-api\\}\\}):([a-zA-Z0-9\\/]+)$/g;\n};\n\nexport const patternTax = () => {\n return /^([0-9]){10}(-[0-9]{3})?$/;\n};\n\nexport const patternKey = () => {\n return /^([0-9]){10}(-[0-9]{3})?$/;\n};\n\nexport const patternAccount = () => {\n return /^(?=.*@)[a-z0-9@._-]{2,63}$/;\n};\n","//NOTE: Do là function truyền từ bên ngoài vào nên sẽ không có unit test\nexport type TYPE_FUNCTION_XSS = (data: string) => Promise<string>;\nlet functionXssFilter: TYPE_FUNCTION_XSS = async (value: string): Promise<string> => {\n return value;\n};\n\nexport const updateFunctionXssFilter = (functionCustom: TYPE_FUNCTION_XSS) => {\n functionXssFilter = functionCustom;\n};\n\nexport const xssFilter: TYPE_FUNCTION_XSS = async (data: string) => {\n return await functionXssFilter(data);\n};\n","import { TYPE_OBJECT } from '@libs-ui/interfaces-types';\nimport { omitBy } from './helpers';\nimport { isNil } from './helpers';\n\nexport const ENCODE_URI_PATTERN = /%([0-9A-F]{2})/g;\n\nexport const decodeURI = (value: string) => {\n return decodeURIComponent(\n value\n .split('')\n .map((c: string) => {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n })\n .join('')\n );\n};\n\nexport const encodeURI = (value: string) => {\n return encodeURIComponent(value).replace(ENCODE_URI_PATTERN, (match, p1) => {\n return String.fromCharCode(parseInt(p1, 16));\n });\n};\n\nexport const endCodeUrl = (params: TYPE_OBJECT, isBody: boolean): string => {\n params = omitBy(params, (param) => param === '' || isNil(param));\n let res = '';\n\n for (const p in params) {\n res += `&${p}=${encodeURIComponent(params[p])}`;\n }\n\n return res === '' ? '' : `${isBody ? '' : '?'}${res.substring(1)}`;\n};\n","import { encodeURI, decodeURI } from './uri';\n\nexport const base64Encode = (value: string) => {\n return btoa(encodeURI(value));\n};\n\nexport const base64Decode = (value: string) => {\n return decodeURI(atob(value));\n};\n\nexport const convertBase64ToBlob = (dataBase64: string) => {\n const BASE64_MARKER = ';base64,';\n\n if (dataBase64.indexOf(BASE64_MARKER) === -1) {\n const parts = dataBase64.split(',');\n const contentType = parts[0].split(':')[1];\n const raw = parts[1];\n const blob = new Blob([raw], { type: contentType });\n\n return blob;\n }\n const parts = dataBase64.split(BASE64_MARKER);\n const contentType = parts[0].split(':')[1];\n const raw = window.atob(parts[1]);\n const rawLength = raw.length;\n const uInt8Array = new Uint8Array(rawLength);\n\n for (let i = 0; i < rawLength; ++i) {\n uInt8Array[i] = raw.charCodeAt(i);\n }\n\n const blob = new Blob([uInt8Array], { type: contentType });\n\n return blob;\n};\n\nexport const convertFileToBase64_ObjectUrl = async (file: File): Promise<string | ArrayBuffer> => {\n if (!file.type.match(/image.*/)) {\n return URL.createObjectURL(file);\n }\n\n return await convertFileToBase64(file);\n};\n\nexport const convertFileToBase64 = (file: File): Promise<string | ArrayBuffer> => {\n return new Promise((resolve) => {\n const reader = new FileReader();\n\n reader.readAsDataURL(file);\n reader.onload = (event) => {\n resolve(event.target?.result ?? '');\n };\n });\n};\n","import { convertBase64ToBlob } from './base64';\n\nexport const downloadFileByUrlUseXmlRequest = (fileUrl: string, filename: string) => {\n const xmlRequest = new XMLHttpRequest();\n\n xmlRequest.open('GET', fileUrl, true);\n xmlRequest.responseType = 'blob';\n xmlRequest.onerror = () => {\n const url = window.URL.createObjectURL(xmlRequest.response);\n\n downloadFileByUrl(url, filename);\n };\n xmlRequest.onload = () => {\n const url = window.URL.createObjectURL(xmlRequest.response);\n\n downloadFileByUrl(url, filename);\n };\n xmlRequest.send();\n};\n\nexport const downloadFileByUrl = async (fileUrl: string, filename: string, onlyOpen?: boolean) => {\n const downloadFileElement = document.createElement('a');\n\n if (!onlyOpen) {\n const response = await fetch(fileUrl);\n\n if (response.ok) {\n const blob = await response.blob();\n\n fileUrl = URL.createObjectURL(blob);\n }\n }\n downloadFileElement.href = fileUrl;\n downloadFileElement.download = filename;\n downloadFileElement.target = '_blank';\n downloadFileElement.click();\n downloadFileElement.remove();\n};\n\nexport const downloadImageFromELement = (imageElement: HTMLImageElement, typeFileDownload?: string, nameFile?: string) => {\n const parentElement = imageElement?.src;\n const blobData = convertBase64ToBlob(parentElement);\n const blob = new Blob([blobData], { type: typeFileDownload || 'image/png' });\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n\n link.href = url;\n link.download = nameFile || 'barcode';\n link.click();\n};\n","import { InjectionToken } from '@angular/core';\n\n//NOTE: Đây là các hàm token inject để các module khác có thể inject vào để sử dụng\nexport const LINK_IMAGE_ERROR_TOKEN_INJECT = new InjectionToken<string>('LINK_IMAGE_ERROR_TOKEN_INJECT');\nexport const PROCESS_BAR_STANDARD_CONFIG_DEFAULT_TOKEN_INJECT = new InjectionToken<string>('PROCESS_BAR_STANDARD_CONFIG_DEFAULT_TOKEN_INJECT');\nexport const PROCESS_BAR_STEPS_CONFIG_DEFAULT_TOKEN_INJECT = new InjectionToken<string>('PROCESS_BAR_STEPS_CONFIG_DEFAULT_TOKEN_INJECT');\n","import { IFile } from '@libs-ui/interfaces-types';\nimport { convertBase64ToBlob } from './base64';\nimport { get, set } from './helpers';\nimport { uuid } from './uuid';\n\nexport const isTypeImage = (file: File | Blob) => (file.type.match(/image.*/) ? true : false);\nexport const isTypeVideo = (file: File | Blob) => (file.type.match(/video.*/) ? true : false);\nexport const isTypeAudio = (file: File | Blob) => (file.type.match(/audio.*/) ? true : false);\nexport const isTypeFile = (file: File) => (file instanceof File || Object.prototype.toString.call(file) === '[object File]' ? true : false);\n\nexport const ExcelExtList = ['xls', 'xlsx', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];\nexport const DocumentExtList = [\n 'doc',\n 'docx',\n 'xls',\n 'xlsx',\n 'ppt',\n 'pptx',\n 'pdf',\n 'json',\n 'xml',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/pdf',\n 'application/json',\n 'application/xml',\n];\nexport const isIncludeDocumentExtList = (ext: string, listExt: Array<string> = DocumentExtList) => listExt.includes(ext) || listExt.includes(`application/${ext}`);\n\nexport const ImageExtList = ['gif', 'jpg', 'jpeg', 'png', 'image/gif', 'image/jpeg', 'image/jpeg', 'image/png', 'webp'];\nexport const isIncludeImageExtList = (ext: string, listExt: Array<string> = ImageExtList) => listExt.includes(ext);\n\nexport const VideoExtList = ['mp4', 'mov', 'mpg', 'avi', 'wmv', 'video/mp4', 'video/quicktime', 'video/mpeg', 'video/x-msvideo', 'video/x-ms-wmv'];\nexport const isIncludeVideoExtList = (ext: string, listExt: Array<string> = VideoExtList) => listExt.includes(ext);\nexport const AudioExtList = ['mp3', 'wav', 'ogg', 'aac', 'm4a', 'flac', 'wma', 'audio/mpeg', 'audio/wav', 'audio/ogg', 'audio/aac', 'audio/mp4', 'audio/flac', 'audio/x-ms-wma'];\nexport const isIncludeAudioExtList = (ext: string, listExt: Array<string> = AudioExtList) => listExt.includes(ext);\n\nexport const getFileExtension = (file: IFile | File) => {\n if (file instanceof File && file.type) {\n return (file.type.split('/').pop() || '').toLowerCase();\n }\n file = file as IFile;\n if (file.mimetype || file.file?.type) {\n return file.mimetype || file.file?.type;\n }\n\n let fileName = file.name as string;\n const url = get(file, 'url') || get(file, 'origin_url');\n if (!fileName && !url) {\n return;\n }\n if (!fileName && url) {\n fileName = url.split('/').pop() || '';\n set(file, 'name', fileName);\n }\n const dots = fileName.split('.');\n\n if (!dots) {\n return;\n }\n\n return (dots.pop() || '').toLowerCase();\n};\n\nexport const getLabelBySizeFile = (size: number, toFixed = 2) => {\n if (size < 1024 * 1024) {\n return ` ${(size / 1024).toFixed(toFixed)} KB`;\n }\n\n return ` ${(size / (1024 * 1024)).toFixed(toFixed)} MB`;\n};\n\nexport const convertBlobToFile = (blob: Blob, fileName?: string): File => {\n const type = blob.type.split('/')[1];\n const name = fileName ? `${fileName.split('.')[0]}.${type}` : `${uuid()}.${type}`;\n\n return new File([blob], name, { type: blob.type, lastModified: Date.now() });\n};\n\nexport const convertUrlToFile = (url: string, fileName?: string) => {\n return new Promise<File | undefined>((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.onload = function () {\n const reader = new FileReader();\n reader.onloadend = () => {\n const file = convertBase64ToBlob(reader.result as string);\n resolve(convertBlobToFile(file, fileName || Date.now().toLocaleString()));\n };\n reader.onerror = () => resolve(undefined);\n reader.readAsDataURL(xhr.response);\n };\n xhr.onerror = (err) => {\n reject(err);\n };\n xhr.open('GET', url);\n xhr.responseType = 'blob';\n xhr.send();\n });\n};\n","import { ITextFormatOptions } from '@libs-ui/interfaces-types';\nimport { CHARACTER_DATA_EMPTY } from './constants';\nimport { patternEmoji } from './pattern';\n\nexport const highlightByKeyword = (value: string | undefined, search: string | undefined, ignoreHighlight?: boolean, classHightLight?: string) => {\n if (!value) {\n return CHARACTER_DATA_EMPTY;\n }\n try {\n if (!search || ignoreHighlight) {\n return value;\n }\n const keysReplace: Array<string> = getValueReplace(search, value);\n\n if (!keysReplace || !keysReplace.length) {\n return value;\n }\n if (!classHightLight) {\n classHightLight = 'bg-[#19344a] text-white';\n }\n keysReplace.forEach((key) => {\n const regExp = new RegExp(key, 'gi');\n\n value = value?.replace(regExp, `<span class=\"${classHightLight}\">$&</span>`);\n });\n } catch (error) {\n console.log(error);\n } finally {\n // eslint-disable-next-line no-unsafe-finally\n return value;\n }\n};\n\nconst getValueReplace = (search: string, value: string): string[] => {\n const searchConvert = deleteUnicode(search).toLowerCase();\n const valueConvert = deleteUnicode(value).toLowerCase();\n const keys: Set<string> = new Set();\n let i = 0;\n\n while ((i = valueConvert.indexOf(searchConvert, i)) >= 0) {\n const endIndex = i + search.length;\n\n keys.add(value.substring(i, endIndex));\n i += +valueConvert.length;\n }\n\n return Array.from(keys);\n};\n\nexport const formatTextCompare = (text: string, options?: ITextFormatOptions) => {\n if (!text) {\n return text;\n }\n\n text = text.normalize('NFC');\n\n return formatByOptions(text, options);\n};\n\nexport const fullNameFormat = (value: string) => {\n if (!value) {\n return value;\n }\n return capitalize(value, { lowercaseOtherCharacter: true, trim: true, removeMultipleSpace: true, removeEmoji: true });\n};\n\nexport const capitalize = (text: string, options?: ITextFormatOptions) => {\n if (!text) {\n return text;\n }\n text = formatByOptions(text, options);\n return text\n .split(' ')\n .map((word) => firstLetterToUpperCase(word))\n .join(' ');\n};\n\nexport const firstLetterToUpperCase = (text: string, options?: ITextFormatOptions) => {\n if (!text) {\n return text;\n }\n return uppercaseByPosition(text, 0, options);\n};\n\nexport const uppercaseByPosition = (text: string, position: number, options?: ITextFormatOptions) => {\n if (!text) {\n return text;\n }\n text = formatByOptions(text, options);\n return `${text.substring(0, position)}${text.charAt(position).toUpperCase()}${text.substring(position + 1)}`;\n};\n\nconst formatByOptions = (text: string, options?: ITextFormatOptions) => {\n if (!text || !options) {\n return text;\n }\n if (options?.uppercaseOtherCharacter) {\n text = text.toUpperCase();\n }\n\n if (options?.lowercaseOtherCharacter) {\n text = text.toLowerCase();\n }\n\n if (options?.removeMultipleSpace) {\n text = text.replace(/\\u200B|\\u00A0/g, '');\n text = text.replace(/\\s+/g, ' ');\n }\n\n if (options?.removeEmoji) {\n text = removeEmoji(text);\n }\n\n if (options?.removeUnicode) {\n text = deleteUnicode(text);\n }\n\n if (options?.trim) {\n text = text.trim();\n }\n\n return text;\n};\n\nexport const escapeHtml = (str: string): string => {\n if (!str || typeof str !== 'string') {\n return str;\n }\n\n return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&#039;');\n};\n\nexport const decodeEscapeHtml = (str: string): string => {\n const htmlTag = document.createElement('textarea');\n\n htmlTag.innerHTML = str;\n while (str) {\n if (str === htmlTag.value) {\n str = htmlTag.value;\n htmlTag.remove();\n break;\n }\n str = htmlTag.value;\n htmlTag.innerHTML = str;\n }\n\n return str;\n};\n\nexport const deleteUnicode = (str: string) => {\n str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a');\n str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ|ễ/g, 'e');\n str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i');\n str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o');\n str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u');\n str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y');\n str = str.replace(/đ/g, 'd');\n str = str.replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, 'A');\n str = str.replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, 'E');\n str = str.replace(/Ì|Í|Ị|Ỉ|Ĩ/g, 'I');\n str = str.replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, 'O');\n str = str.replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, 'U');\n str = str.replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, 'Y');\n str = str.replace(/Đ/g, 'D');\n\n str = str.replace(/\\u0300|\\u0301|\\u0303|\\u0309|\\u0323/g, ''); // ̀ ́ ̃ ̉ ̣ huyền, sắc, ngã, hỏi, nặng\n str = str.replace(/\\u02C6|\\u0306|\\u031B/g, ''); // ˆ ̆ ̛ Â, Ê, Ă, Ơ, Ư\n\n return str.normalize('NFC');\n};\n\nexport const removeEmoji = (text: string) => {\n if (!text || !text.trim()) {\n return text;\n }\n\n return text.replace(patternEmoji(), '');\n};\n","import { isNil } from './helpers';\nconst DEFAULT_MIN_TICK_COUNT = 5;\nconst DEFAULT_MAX_TICK_COUNT = 10;\nconst MIN_DISTANCE_TO_ZERO = 3;\nconst NEGATIVE_THRESHOLD = -5;\nconst FALLBACK_NEGATIVE_VALUE = -4;\nconst MAX_POW_NUMBER = 14;\nconst MAX_TEMPLATE_NUMBER = 10;\n\n// ✅ Thêm interfaces để tăng cường type safety\ninterface AxisScaleOptions {\n minTickCount?: number; // Số lượng tick tối thiểu\n maxTickCount?: number; // Số lượng tick tối đa\n stepCandidates?: number[]; // Danh sách các step candidates tùy chỉnh\n acceptNegative?: boolean; // Có chấp nhận giá trị âm không\n minNegative?: number; // Giá trị âm tối thiểu\n acceptStepIsTypeFloat?: boolean; // Có chấp nhận step là số thập phân không\n}\n\ninterface AxisScaleResult {\n stepSize: number; // Kích thước bước\n max: number; // Giá trị tối đa của trục\n min: number; // Giá trị tối thiểu của trục\n tickAmount: number; // Số lượng tick\n}\n\n/**\n * Tính toán smart axis scale cho biểu đồ\n *\n * @param maxData - Giá trị tối đa của dữ liệu\n * @param options - Các tùy chọn cấu hình axis scale\n * @returns Cấu hình axis scale bao gồm stepSize, max, min, tickAmount\n *\n * @throws {Error} INVALID_NEGATIVE_DATA - khi maxData < 0 mà acceptNegative = false\n * @throws {Error} MISSING_MIN_NEGATIVE - khi acceptNegative = true nhưng thiếu minNegative\n * @throws {Error} INVALID_RANGE - khi maxData < minNegative\n * @throws {Error} INVALID_MIN_NEGATIVE - khi minNegative >= 0\n *\n * @example\n * ```typescript\n * const result = getSmartAxisScale(100, { minTickCount: 5, maxTickCount: 10 });\n * // returns { stepSize: 20, max: 120, min: 0, tickAmount: 6 }\n * ```\n */\nexport const getSmartAxisScale = (originalMaxData: number, options?: AxisScaleOptions): AxisScaleResult => {\n let maxData = originalMaxData;\n\n validateInputs(maxData, options);\n const minTickCount = options?.minTickCount || DEFAULT_MIN_TICK_COUNT;\n const maxTickCount = options?.maxTickCount || DEFAULT_MAX_TICK_COUNT;\n\n let scaleDirection = 1;\n let rangeDistance = maxData;\n\n if (options?.acceptNegative && !isNil(options.minNegative)) {\n if (maxData === 0) {\n maxData = -1;\n }\n if (maxData <= 0) {\n rangeDistance = options.minNegative;\n }\n if (rangeDistance > NEGATIVE_THRESHOLD) {\n rangeDistance = FALLBACK_NEGATIVE_VALUE;\n }\n if (maxData > 0) {\n rangeDistance = maxData + Math.abs(options.minNegative);\n scaleDirection = -1;\n }\n }\n if (Math.abs(rangeDistance) < MIN_DISTANCE_TO_ZERO) {\n rangeDistance = MIN_DISTANCE_TO_ZERO;\n }\n\n const stepCandidates = getStepCandidates(maxData, minTickCount, options?.minNegative || 0, options?.acceptStepIsTypeFloat, options?.stepCandidates, options?.acceptNegative);\n for (const step of stepCandidates) {\n let tickCount = Math.abs(Math.ceil(rangeDistance / step)) + (scaleDirection === -1 ? 2 : 1);\n let maxValue = maxData <= 0 ? 0 : step * tickCount * scaleDirection;\n let minValue = 0;\n\n if (tickCount >= minTickCount && tickCount <= maxTickCount) {\n if (maxData < maxValue) {\n if (options?.acceptNegative) {\n let tick = 1;\n while (!isNil(options.minNegative) && tick <= tickCount && minValue >= options.minNegative) {\n minValue = tick * step;\n tick++;\n }\n }\n const maxValuePositive = maxValue - Math.abs(minValue);\n tickCount = maxValuePositive - originalMaxData > Math.abs(step) && tickCount - 1 >= minTickCount ? tickCount - 1 : tickCount;\n\n maxValue = step * tickCount * scaleDirection - minValue * scaleDirection;\n return {\n stepSize: Math.abs(step),\n max: maxValue,\n min: minValue,\n tickAmount: tickCount,\n };\n }\n }\n }\n\n let step = Math.ceil(rangeDistance / minTickCount) || 1;\n let maxValue = step * minTickCount;\n if (rangeDistance === maxValue) {\n step = step + Math.ceil(step / 10);\n maxValue = step * minTickCount;\n }\n return {\n stepSize: Math.abs(step),\n max: maxValue,\n min: 0,\n tickAmount: minTickCount,\n };\n};\n\n// Cache cho các giá trị lũy thừa 10 để tối ưu hiệu suất\nconst POWER_CACHE = new Map<number, number>();\n\n/**\n * Tạo danh sách các step candidates cho việc tính toán scale\n * @param maxData - Giá trị dữ liệu tối đa\n * @param minStep - Số bước tối thiểu\n * @param minNegative - Giá trị âm tối thiểu\n * @param acceptStepIsTypeFloat - Có chấp nhận step thập phân không\n * @param stepCandidatesByOptions - Step candidates do người dùng cung cấp\n * @param includeNegativeSteps - Có bao gồm các step âm không\n * @returns Danh sách các step candidates\n */\nconst getStepCandidates = (maxData: number, minStep: number, minNegative: number, acceptStepIsTypeFloat = false, stepCandidatesByOptions?: number[], includeNegativeSteps = false): number[] => {\n // Nếu có step candidates tùy chỉnh, sử dụng chúng\n if (stepCandidatesByOptions && stepCandidatesByOptions.length > 0) {\n return stepCandidatesByOptions;\n }\n\n const stepCandidates = new Array<number>();\n const maxValueStep = Math.abs(Math.max(maxData, Math.abs(minNegative || 0))) / minStep;\n\n // Tạo step candidates dựa trên lũy thừa của 10\n for (let powNumber = 0; powNumber <= MAX_POW_NUMBER; powNumber++) {\n // Sử dụng cache để tối ưu hiệu suất\n if (!POWER_CACHE.has(powNumber)) {\n POWER_CACHE.set(powNumber, Math.pow(10, powNumber));\n }\n const powValue = POWER_CACHE.get(powNumber) as number;\n\n for (let templateNumber = 1; templateNumber < MAX_TEMPLATE_NUMBER; templateNumber++) {\n // Thêm step thập phân nếu được chấp nhận\n if (acceptStepIsTypeFloat) {\n const step = powValue * (((templateNumber - 1) * 2 + 1) / 2);\n stepCandidates.push(step);\n }\n\n const step = powValue * templateNumber;\n stepCandidates.push(step);\n\n // Dừng khi step đã đủ lớn\n if (step >= maxValueStep) {\n checkAndSetNegativeSteps(stepCandidates, includeNegativeSteps, minNegative);\n return stepCandidates;\n }\n }\n }\n\n checkAndSetNegativeSteps(stepCandidates, includeNegativeSteps, minNegative);\n return stepCandidates;\n};\n\n/**\n * Kiểm tra và thêm các step âm vào danh sách candidates nếu cần\n * @param stepCandidates - Danh sách step candidates hiện tại\n * @param acceptNegative - Có chấp nhận giá trị âm không\n * @param minNegative - Giá trị âm tối thiểu\n */\nconst checkAndSetNegativeSteps = (stepCandidates: number[], acceptNegative: boolean, minNegative: number): void => {\n if (acceptNegative && minNegative < 0) {\n // Tạo các step âm và thêm vào đầu danh sách\n const negativeSteps = [...stepCandidates].map((step) => -step);\n stepCandidates.unshift(...negativeSteps);\n }\n};\n\n/**\n * Kiểm tra tính hợp lệ của các tham số đầu vào\n * @param maxData - Giá trị dữ liệu tối đa\n * @param options - Các tùy chọn cấu hình\n * @throws {Error} Khi các tham số không hợp lệ\n */\nconst validateInputs = (maxData: number, options?: AxisScaleOptions): void => {\n // Kiểm tra maxData âm khi không chấp nhận giá trị âm\n if (maxData < 0 && !options?.acceptNegative) {\n throw new Error('maxData is less than 0 and acceptNegative is false');\n }\n\n if (options?.acceptNegative) {\n // Kiểm tra minNegative có được cung cấp không\n if (isNil(options.minNegative)) {\n throw new Error('minNegative is required when acceptNegative is true');\n }\n\n // Kiểm tra maxData phải >= minNegative\n if (maxData < options.minNegative) {\n throw new Error('maxData is less than minNegative');\n }\n\n // Kiểm tra minNegative phải là số âm\n if (options.minNegative >= 0) {\n throw new Error('minNegative must be negative');\n }\n }\n};\n","export const protectString = (input: string): string => {\n const xorKey = 77;\n const encoded = input\n .split('')\n .map((char) => String.fromCharCode(char.charCodeAt(0) ^ xorKey))\n .reverse()\n .join('');\n return btoa(encoded);\n};\n\nexport const revealString = (encoded: string): string => {\n const xorKey = 77;\n const base = atob(encoded);\n const decoded = base\n .split('')\n .reverse()\n .map((c) => String.fromCharCode(c.charCodeAt(0) ^ xorKey))\n .join('');\n return decoded;\n};\n\nexport const createUniqueRandomIntGenerator = (min: number, max: number) => {\n if (max - min + 1 < min + 10) {\n throw new Error(`Range too small: need at least min + 10 unique values`);\n }\n\n const history: number[] = [];\n\n return (): number => {\n let num: number;\n let loop = 0;\n\n do {\n num = Math.floor(Math.random() * (max - min + 1)) + min;\n loop++;\n\n if (loop > 1000) {\n break;\n }\n } while (history.includes(num));\n\n history.push(num);\n\n if (history.length > 10) {\n history.shift();\n }\n\n return num;\n };\n};\n","export const addArrayToSet = <T>(setStore: Set<T>, data: T[]): Set<T> => {\n for (const value of data) {\n setStore.add(value);\n }\n return setStore;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const convertSetToArray = <T = any, U = any>(data: Set<T>, functionMap?: (value: T) => U): Array<U> => {\n if (functionMap) {\n return Array.from(data, functionMap);\n }\n\n return [...data] as unknown as Array<U>;\n};\n","/**\n * Tính dung lượng (ước tính) của 1 object trong bộ nhớ (bytes, KB, MB)\n * @param obj - Bất kỳ kiểu dữ liệu nào (object, array, map, set, primitive,...)\n * @param formatted - Nếu true, trả về chuỗi có đơn vị (vd: \"2.35 KB\")\n */\nexport const getObjectSize = (obj: unknown): string => {\n try {\n // Chuyển object sang chuỗi JSON (chính xác cho mọi loại dữ liệu tuần tự hóa được)\n const json = JSON.stringify(obj);\n\n // Tính kích thước byte dựa trên UTF-8 encoding\n const bytes = new Blob([json]).size;\n\n if (bytes < 1024) return `${bytes} bytes`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;\n } catch {\n // Nếu JSON.stringify lỗi (do circular reference)\n return 'N/A';\n }\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["key","keyStore"],"mappings":";;;;;;;;;;;;;;;AAAA;AAMA;;AAEG;AACH,MAAM,2BAA2B,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAU;AAExM;;AAEG;AACI,MAAM,qBAAqB,GAAG,CAAC,GAAQ,KAAsE;IAClH,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3C,QAAA,OAAO,KAAK;IACd;AACA,IAAA,OAAO,GAAG,YAAY,MAAM,IAAI,GAAG,YAAY,QAAQ,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,UAAU;AACrH;AAEA;;AAEG;AACI,MAAM,WAAW,GAAG,CAAC,GAAQ,KAAyC;IAC3E,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3C,QAAA,OAAO,KAAK;IACd;IACA,OAAO,GAAG,YAAY,WAAW,IAAI,GAAG,YAAY,IAAI,IAAI,GAAG,YAAY,OAAO;AACpF;AAEA;;AAEG;AACI,MAAM,kBAAkB,GAAG,CAAC,GAAQ,KAAa;AACtD,IAAA,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AAC5E,QAAA,OAAO,KAAK;IACd;IACA,OAAO,GAAG,KAAK,MAAM,CAAC,QAAQ,IAAI,GAAG,KAAK,MAAM,CAAC,SAAS,IAAI,GAAG,KAAK,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,MAAM,CAAC,OAAO,IAAI,GAAG,KAAK,MAAM,CAAC,YAAY,IAAI,GAAG,KAAK,MAAM,CAAC,cAAc,IAAI,GAAG,KAAK,MAAM,CAAC,OAAO,IAAI,GAAG,KAAK,MAAM,CAAC,WAAW;AACvO;AAEA;;AAEG;AACI,MAAM,2BAA2B,GAAG,CAAC,GAAQ,KAAa;IAC/D,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3C,QAAA,OAAO,KAAK;IACd;AACA,IAAA,MAAM,eAAe,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI;IAC7C,OAAO,eAAe,IAAI,2BAA2B,CAAC,QAAQ,CAAC,eAAsB,CAAC;AACxF;AAEA;;;AAGG;AACI,MAAM,iBAAiB,GAAG,CAAC,GAAQ,KAAa;IACrD,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3C,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,OAAO,qBAAqB,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,IAAI,2BAA2B,CAAC,GAAG,CAAC;AACtH;AAEA;;AAEG;AACI,MAAM,iBAAiB,GAAG,CAAU,GAAQ,KAA2C;IAC5F,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3C,QAAA,OAAO,KAAK;IACd;AACA,IAAA,OAAO,GAAG,YAAY,WAAW,IAAI,GAAG,YAAY,UAAU;AAChE;AAEA;;AAEG;AACI,MAAM,MAAM,GAAG,CAAC,GAAQ,KAAwB;IACrD,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3C,QAAA,OAAO,KAAK;IACd;IACA,OAAO,GAAG,YAAY,IAAI,IAAI,GAAG,YAAY,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,eAAe;AAC9G;AAEA;;AAEG;AACI,MAAM,eAAe,GAAG,CAAC,GAAQ,KAAuC;IAC7E,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3C,QAAA,OAAO,KAAK;IACd;IACA,OAAO,GAAG,YAAY,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,YAAY,UAAU,KAAK,gBAAgB,IAAI,GAAG,IAAI,eAAe,IAAI,GAAG,CAAC;AACjI;AAEA;;AAEG;AACI,MAAM,QAAQ,GAAG,CAAC,GAAQ,KAAmB;IAClD,OAAO,GAAG,YAAY,MAAM;AAC9B;AAEA;;AAEG;AACI,MAAM,aAAa,GAAG,CAAU,GAAQ,KAAuC;IACpF,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3C,QAAA,OAAO,KAAK;IACd;AACA,IAAA,OAAO,GAAG,YAAY,OAAO,IAAI,GAAG,YAAY,UAAU;AAC5D;AAEA;;;AAGG;AACI,MAAM,eAAe,GAAG,CAAC,GAAQ,KAAa;AACnD,IAAA,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC;AAC5F;AAEA;;AAEG;AACI,MAAM,aAAa,GAAG,CAAC,GAAQ,KAAkB;AACtD,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AAC3B;AAEA;;AAEG;AACI,MAAM,iBAAiB,GAAG,CAAC,GAAQ,KAAa;IACrD,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC;AACvD;AAEA;;AAEG;AACI,MAAM,KAAK,GAAG,CAAU,GAAQ,KAA2B;IAChE,OAAO,GAAG,YAAY,GAAG;AAC3B;AAEA;;AAEG;AACI,MAAM,KAAK,GAAG,CAAU,GAAQ,KAAmB;IACxD,OAAO,GAAG,YAAY,GAAG;AAC3B;AAEA;;AAEG;AACI,MAAM,OAAO,GAAG,CAAU,GAAQ,KAAqB;AAC5D,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AAC3B;AAEA;;;AAGG;AACI,MAAM,kBAAkB,GAAG,CAAC,GAAQ,KAAa;IACtD,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC;AACrD;AAEA;;AAEG;AACI,MAAM,eAAe,GAAG,CAAC,GAAQ,KAAa;AACnD,IAAA,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC;AAChC;;ACrKA,IAAIA,KAAG,GAAG,0BAA0B;AAEpC;;;AAGG;AACI,MAAM,YAAY,GAAG,CAAC,KAAa,KAAI;AAC5C,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE;QAC9C,MAAM,KAAK,CAAC,CAAA,aAAA,EAAgB,KAAK,CAAC,MAAM,CAAA,0CAAA,CAA4C,CAAC;IACvF;IACAA,KAAG,GAAG,KAAK;AACb;AAEA,MAAMC,UAAQ,GAAG,MAAK;AACpB,IAAA,OAAOD,KAAG;AACZ,CAAC;AAEM,MAAM,OAAO,GAAG,CAAC,SAAiB,KAAY;AACnD,IAAA,IAAI,CAACC,UAAQ,EAAE,EAAE;AACf,QAAA,MAAM,KAAK,CAAC,2BAA2B,CAAC;IAC1C;AACA,IAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAACA,UAAQ,EAAE,CAAC;AAC9C,IAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAACA,UAAQ,EAAE,CAAC;AAC7C,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG;AAC9B,IAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK;AAClC,IAAA,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;AAExD,IAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE;AACjE;AAEO,MAAM,OAAO,GAAG,CAAC,aAAqB,KAAY;AACvD,IAAA,IAAI,CAACA,UAAQ,EAAE,EAAE;AACf,QAAA,MAAM,KAAK,CAAC,2BAA2B,CAAC;IAC1C;AACA,IAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAACA,UAAQ,EAAE,CAAC;AAC9C,IAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAACA,UAAQ,EAAE,CAAC;AAC7C,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG;AAC9B,IAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK;AAClC,IAAA,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;IAExD,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACtF;AAEO,MAAM,GAAG,GAAG,CAAC,SAAiB,KAAI;IACvC,OAAO,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;AAC3C;;AC7CA,IAAI,GAAG,GAAG,0BAA0B;AAEpC;;;AAGG;AACI,MAAM,eAAe,GAAG,CAAC,KAAa,KAAI;AAC/C,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE;QAC9C,MAAM,KAAK,CAAC,CAAA,aAAA,EAAgB,KAAK,CAAC,MAAM,CAAA,0CAAA,CAA4C,CAAC;IACvF;IACA,GAAG,GAAG,KAAK;AACb;AAEA,MAAM,QAAQ,GAAG,MAAK;AACpB,IAAA,OAAO,GAAG;AACZ,CAAC;AAEM,MAAM,UAAU,GAAG,CAAC,SAAiB,KAAY;AACtD,IAAA,IAAI,CAAC,QAAQ,EAAE,EAAE;AACf,QAAA,MAAM,KAAK,CAAC,2BAA2B,CAAC;IAC1C;AACA,IAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC9C,IAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC7C,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG;AAC9B,IAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK;AAClC,IAAA,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;AAExD,IAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE;AACjE;AAEO,MAAM,UAAU,GAAG,CAAC,aAAqB,KAAY;AAC1D,IAAA,IAAI,CAAC,QAAQ,EAAE,EAAE;AACf,QAAA,MAAM,KAAK,CAAC,2BAA2B,CAAC;IAC1C;AACA,IAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC9C,IAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC7C,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG;AAC9B,IAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK;AAClC,IAAA,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;IAExD,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACtF;;AC3CA;AACA,IAAI,aAAa,GAAG,MAAK;AACvB,IAAA,OAAO,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG;AACrC,CAAC;AACM,MAAM,6BAA6B,GAAG,CAAC,cAA6B,KAAI;IAC7E,aAAa,GAAG,cAAc;AAChC;AAEO,MAAM,YAAY,GAAG,MAAc;IACxC,OAAO,aAAa,EAAE;AACxB;;ACVO,MAAM,yBAAyB,GAAG;AAClC,MAAM,0BAA0B,GAAG;AACnC,MAAM,uBAAuB,GAAG;AAChC,MAAM,uBAAuB,GAAG;AAChC,MAAM,wBAAwB,GAAG;AACjC,MAAM,wBAAwB,GAAG;AACjC,MAAM,oBAAoB,GAAG;AAC7B,MAAM,oBAAoB,GAAG;AAC7B,MAAM,6BAA6B,GAAG;AACtC,MAAM,qCAAqC,GAAG;;ACTrD;MASa,8BAA8B,CAAA;AAClC,IAAA,OAAO,iBAAiB,GAAG,qBAAqB;;MAG5C,qBAAqB,CAAA;IACxB,OAAO,UAAU;AACjB,IAAA,OAAO,IAAI,GAAuC,IAAI,GAAG,EAAE;AAC3D,IAAA,OAAO,aAAa,GAA0B,IAAI,OAAO,EAAE;AAE5D,IAAA,OAAO,SAAS,CAAC,aAAqB,EAAE,UAAsB,EAAA;AACnE,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB;QACF;AACA,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qCAAqC,CAAC,EAAE;YACzD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qCAAqC,EAAE,qBAAqB,CAAC,aAAa,CAAC;QAC3F;AAEA,QAAA,SAAS,CAAe,aAAa,EAAE,SAAS;AAC7C,aAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC;AACnC,aAAA,SAAS,CAAC,CAAC,CAAe,KAAI;AAC7B,YAAA,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAkB;AAErD,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI;AACvB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;YAEtB,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;YACvC;YACA,MAAM,GAAG,GAAG,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC;YAElD,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAC3B;YACF;AACA,YAAA,IAAI;AACF,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE;AAChD,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrD,oBAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;AACf,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;oBAE9B;gBACF;AACA,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,gBAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;AACf,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;YAChC;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAClB,gBAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;AACf,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;YAChC;AACF,QAAA,CAAC,CAAC;AAEJ,QAAA,qBAAqB,CAAC,UAAU,CAAC,UAAU,CAAC,wBAAwB;aACjE,IAAI,CACH,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC,SAAS,CAAC,EACvD,kBAAkB,CAAC,UAAU,CAAC;aAE/B,SAAS,CAAC,MAAK;AACd,YAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;YACvC,UAAU,CAAC,QAAQ,EAAE;AACvB,QAAA,CAAC,CAAC;IACN;IAEA,OAAO,mBAAmB,CAAC,IAAS,EAAA;AAClC,QAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI;YACF,IAAI,YAAY,EAAE,EAAE;gBAClB,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC;gBAEtC;YACF;YAEA,MAAM,EAAE,GAAG,EAAE,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC;QACrC;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QACpB;IACF;IAEA,OAAO,qBAAqB,CAAC,IAAS,EAAA;AACpC,QAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAEnD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YACrC,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC;AAC/C,QAAA,CAAC,CAAC;IACJ;IAEA,OAAO,mBAAmB,CAAC,IAAS,EAAA;AAClC,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAClB;QACF;AACA,QAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAE7B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC;IACtC;IAEQ,OAAO,WAAW,CAAC,IAAS,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACzC,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE;AAClB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AAEtB,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE;AAChD,YAAA,IAAI;gBACF,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAErC,gBAAA,OAAO,IAAI;YACb;YAAE,OAAO,CAAC,EAAE;AACV,gBAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAEzD,gBAAA,OAAO,IAAI;YACb;QACF;AACA,QAAA,IAAI;YACF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAElC,YAAA,OAAO,IAAI;QACb;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAEtD,YAAA,OAAO,IAAI;QACb;IACF;IAEA,OAAO,UAAU,CAAC,WAAmC,EAAA;AACnD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,qGAAqG,CAAC;QACpH;AACA,QAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;YACnC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;YAEpC,IAAI,CAAC,GAAG,EAAE;AACR,gBAAA,GAAG,GAAG,IAAI,OAAO,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC;AAE/B,gBAAA,OAAO,GAAG;YACZ;AAEA,YAAA,OAAO,GAAG;QACZ;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACtD,YAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;QACvC;AACA,QAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACxC;QACA,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;QAE1C,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QAE9B,IAAI,GAAG,EAAE;AACP,YAAA,OAAO,GAAG;QACZ;AAEA,QAAA,GAAG,GAAG,IAAI,OAAO,EAAE;QACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC;AAElC,QAAA,OAAO,GAAG;IACZ;AAEQ,IAAA,OAAO,WAAW,CAAC,OAA8B,EAAE,WAA0B,EAAA;AACnF,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACnC,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACjB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;;;MCjLW,sBAAsB,CAAA;AAC1B,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,KAAK,GAAG,OAAO,CAAC;AACvB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,GAAG,GAAG,KAAK,CAAC;AACnB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,IAAA,OAAO,EAAE,GAAG,IAAI,CAAC;;AAGjB,IAAA,OAAO,WAAW,GAAG,sBAAsB,CAAC,EAAE;;AAG9C,IAAA,OAAO,kBAAkB,GAAG,IAAI,GAAG,CAAC;AACzC,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,KAAK;AAC5B,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,GAAG;AAC1B,QAAA,sBAAsB,CAAC,EAAE;AACzB,QAAA,sBAAsB,CAAC,EAAE;AAC1B,KAAA,CAAC;AAEF;;;;AAIG;IACI,OAAO,WAAW,CAAC,IAAY,EAAA;QACpC,OAAO,sBAAsB,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5D;;;ACpEK,MAAM,IAAI,GAAG,MAAa;IAC/B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI;IAC1C,MAAM,KAAK,GAAG,4FAA4F;IAC1G,IAAI,YAAY,GAAG,EAAE;AAErB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1B,QAAA,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IACxE;AACA,IAAA,MAAM,UAAU,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE;IAC7D,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;AAEtC,IAAA,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC7C,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAE7C,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAC7D;IAEA,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AAEzC,IAAA,OAAO,GAAG,CAAC,cAAc,CAAC;AAC5B;;ACtBA;AACA;MAWa,UAAU,CAAA;AACd,IAAA,OAAgB,yBAAyB,GAAG,CAAC,GAAG,EAAE;AAClD,IAAA,OAAgB,iBAAiB,GAAG,CAAC,CAAC;AACtC,IAAA,OAAgB,SAAS,GAAG,IAAI,EAAE;AAClC,IAAA,OAAO,wBAAwB,GAAG,mCAAmC;AAEpE,IAAA,OAAO,gBAAgB,GAAG,wBAAwB;AAClD,IAAA,OAAO,wBAAwB,GAAG,KAAK,EAAU;IACjD,OAAO,UAAU;IACjB,OAAO,OAAO;AACd,IAAA,OAAO,MAAM,GAAG,eAAe;AAC/B,IAAA,OAAO,cAAc,GAAG,KAAK;AAC7B,IAAA,OAAO,SAAS,GAAG,CAAC;AACpB,IAAA,OAAO,EAAE,GAAuB,IAAI;IAErC,OAAO,IAAI,CAAC,MAAyI,EAAA;AAC1J,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB;QACF;AACA,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,MAAM,CAAC,aAAa,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa;QACpC;AACA,QAAA,IAAI,MAAM,CAAC,wBAAwB,EAAE;AACnC,YAAA,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC,wBAAwB;QACjE;AACA,QAAA,IAAI,MAAM,CAAC,uBAAuB,EAAE;AAClC,YAAA,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC,uBAAuB;QAChE;AACA,QAAA,IAAI,MAAM,CAAC,gBAAgB,EAAE;AAC3B,YAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB;QACjD;IACF;IAEO,OAAO,OAAO,CAAC,IAA2B,EAAA;QAC/C,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;AAC7C,YAAA,MAAM,KAAK,CAAC,CAAA,qBAAA,EAAwB,IAAI,CAAA,CAAE,CAAC;QAC7C;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC;IAC/D;AAEO,IAAA,OAAO,OAAO,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,WAAW,CAAC;IAC5E;AAEQ,IAAA,OAAO,MAAM,GAAA;AACnB,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,YAAA,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC;AAE3D,YAAA,OAAO,CAAC,eAAe,GAAG,CAAC,KAA4B,KAAI;AACzD,gBAAA,MAAM,EAAE,GAAI,KAAK,CAAC,MAA2B,CAAC,MAAM;AAEpD,gBAAA,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC9C,oBAAA,MAAM,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;AAEvF,oBAAA,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBACrF;AACF,YAAA,CAAC;AAED,YAAA,OAAO,CAAC,SAAS,GAAG,MAAK;AACvB,gBAAA,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM;gBACxB,OAAO,CAAC,IAAI,CAAC;AACf,YAAA,CAAC;AAED,YAAA,OAAO,CAAC,OAAO,GAAG,CAAC,KAAK,KAAI;AAC1B,gBAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;gBAChD,OAAO,CAAC,KAAK,CAAC;AAChB,YAAA,CAAC;AACH,QAAA,CAAC,CAAC;IACJ;IAEQ,aAAa,cAAc,GAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;AACZ,YAAA,MAAM,IAAI,CAAC,MAAM,EAAE;QACrB;AACA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;QACpE,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,IAAI;QACb;QAEA,OAAO,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;IAC7C;AAEQ,IAAA,WAAW,YAAY,GAAA;AAC7B,QAAA,IAAI;AACF,YAAA,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,WAAW,EAAE;AAC9C,gBAAA,IAAI,aAAa,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE;AACjD,oBAAA,OAAO,IAAI,CAAC,2BAA2B,EAAE;gBAC3C;AAEA,gBAAA,OAAO,YAAY;YACrB;AAEA,YAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE;QACnC;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC;AACrC,YAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE;QACnC;IACF;AAEQ,IAAA,OAAO,2BAA2B,GAAA;QACxC,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE;AACnG,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,YAAY,EAAE;QACpC;QAEA,OAAO;AACL,YAAA,OAAO,EAAE,CAAC,GAAW,EAAE,KAAa,KAAI;AACtC,gBAAA,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;AAChC,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK;YAC3B,CAAC;AACD,YAAA,OAAO,EAAE,CAAC,GAAW,KAAI;gBACvB,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;gBAEvC,IAAI,KAAK,EAAE;AACT,oBAAA,OAAO,KAAK;gBACd;AAEA,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE;AAC7C,oBAAA,OAAO,IAAI;gBACb;AAEA,gBAAA,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAW,CAAC;AAEtD,gBAAA,OAAO,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;YAC5B,CAAC;AACD,YAAA,UAAU,EAAE,CAAC,GAAW,KAAI;AAC1B,gBAAA,OAAO,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;AAC1B,gBAAA,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;YAC9B,CAAC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,OAAO,GAAG,EAAE;gBACjB,YAAY,CAAC,KAAK,EAAE;YACtB,CAAC;SACF;IACH;AAEQ,IAAA,OAAO,mBAAmB,GAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE;QACnB;QAEA,OAAO;AACL,YAAA,OAAO,EAAE,CAAC,GAAW,EAAE,KAAc,KAAI;AACvC,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK;YAC3B,CAAC;AACD,YAAA,OAAO,EAAE,CAAC,GAAW,KAAI;AACvB,gBAAA,OAAO,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;YAC5B,CAAC;AACD,YAAA,UAAU,EAAE,CAAC,GAAW,KAAI;AAC1B,gBAAA,OAAO,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;YAC5B,CAAC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,OAAO,GAAG,EAAE;YACnB,CAAC;SACF;IACH;IAEO,aAAa,QAAQ,CAAU,GAAW,EAAE,aAAmB,EAAE,QAAQ,GAAG,KAAK,EAAA;AACtF,QAAA,GAAG,GAAG,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AAE/B,QAAA,OAAO,IAAI,OAAO,CAAI,OAAO,OAAO,KAAI;AACtC,YAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;YAE/C,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,OAAO,OAAO,CAAC,aAAa,CAAC;YAC/B;YACA,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;AAEpC,YAAA,OAAO,CAAC,SAAS,GAAG,MAAK;AACvB,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACnB,oBAAA,OAAO,OAAO,CAAC,aAAa,CAAC;gBAC/B;AACA,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAEtD,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,iBAAiB,EAAE;AAC1C,oBAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC3B;gBACA,MAAM,kBAAkB,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI;AAEtD,gBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,kBAAkB,EAAE;AACpC,oBAAA,OAAO,OAAO,CAAC,aAAa,CAAC;gBAC/B;AAEA,gBAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,YAAA,CAAC;AAED,YAAA,OAAO,CAAC,OAAO,GAAG,MAAK;gBACrB,OAAO,CAAC,KAAK,CAAC,CAAA,QAAA,EAAW,GAAG,CAAA,8BAAA,EAAiC,aAAa,CAAA,CAAE,CAAC;AAC7E,gBAAA,OAAO,OAAO,CAAC,aAAa,CAAC;AAC/B,YAAA,CAAC;AACH,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,OAAO,GAAG,CAAU,GAAW,EAAE,aAAmB,EAAA;;QAEzD,IAAI,CAAC,GAAG,EAAE;YACR,OAAO,IAAI,CAAC,4BAA4B,CAAC,GAAG,EAAE,aAAa,CAAC;QAC9D;QACA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;QAEjD,IAAI,CAAC,UAAU,EAAE;YACf,OAAO,IAAI,CAAC,4BAA4B,CAAC,GAAG,EAAE,aAAa,CAAC;QAC9D;AACA,QAAA,IAAI;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE5C,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,iBAAiB,EAAE;AAC1C,gBAAA,OAAO,IAAI,CAAC,KAAK,IAAI,aAAa;YACpC;YACA,MAAM,kBAAkB,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI;AAEtD,YAAA,IAAI,IAAI,CAAC,MAAM,GAAG,kBAAkB,EAAE;gBACpC,OAAO,IAAI,CAAC,4BAA4B,CAAC,GAAG,EAAE,aAAa,CAAC;YAC9D;YAEA,OAAO,IAAI,CAAC,KAAK;QACnB;QAAE,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,CAAA,QAAA,EAAW,GAAG,CAAA,8BAAA,EAAiC,aAAa,CAAA,CAAE,EAAE,KAAK,CAAC;YAEpF,OAAO,IAAI,CAAC,4BAA4B,CAAC,GAAG,EAAE,aAAa,CAAC;QAC9D;IACF;AAEO,IAAA,OAAO,4BAA4B,CAAC,GAAW,EAAE,aAAkB,EAAA;AACxE,QAAA,OAAO,aAAa;IACtB;AAEO,IAAA,aAAa,QAAQ,CAAU,GAAW,EAAE,KAAU,EAAE,kBAAkB,GAAG,IAAI,CAAC,yBAAyB,EAAE,QAAQ,GAAG,KAAK,EAAA;;AAElI,QAAA,OAAO,IAAI,OAAO,CAAI,OAAO,OAAO,KAAI;AACtC,YAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;AAE/C,YAAA,GAAG,GAAG,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AAC/B,YAAA,IAAI;gBACF,MAAM,kBAAkB,GAAG,kBAAkB,KAAK,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,kBAAkB;AACpJ,gBAAA,MAAM,IAAI,GAAQ;AAChB,oBAAA,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;iBAC5E;AACD,gBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,GAAG;gBAE/B,IAAI,CAAC,WAAW,EAAE;AAChB,oBAAA,OAAO,CAAC,KAAK,CAAC,CAAA,yBAAA,CAA2B,CAAC;oBAC1C,OAAO,OAAO,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,2BAA2B,EAAS,CAAC;gBAC3E;gBACA,MAAM,OAAO,GAAG,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC;AACtC,gBAAA,OAAO,CAAC,SAAS,GAAG,MAAK;AACvB,oBAAA,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,CAAA,QAAA,CAAU,CAAC;AACrC,oBAAA,OAAO,CAAC,OAAO,CAAC,MAAa,CAAC;AAChC,gBAAA,CAAC;AAED,gBAAA,OAAO,CAAC,OAAO,GAAG,CAAC,KAAK,KAAI;AAC1B,oBAAA,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,CAAA,MAAA,CAAQ,CAAC;AACrC,oBAAA,OAAO,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,CAAC,KAAe,EAAE,SAAS,CAAC,EAAS,CAAC;AACxE,gBAAA,CAAC;YACH;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,CAAA,MAAA,CAAQ,CAAC;AACrC,gBAAA,OAAO,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,EAAS,CAAC;YAC9D;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,OAAO,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,kBAAkB,GAAG,IAAI,CAAC,yBAAyB,EAAA;;QAErF,MAAM,kBAAkB,GAAG,kBAAkB,KAAK,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,kBAAkB;AACpJ,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,kBAAkB;SAC3B;AAED,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7D,YAAA,OAAO,IAAI;QACb;QAAE,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,CAAA,QAAA,EAAW,GAAG,CAAA,MAAA,CAAQ,EAAE,KAAK,CAAC;AAC5C,YAAA,OAAO,KAAK;QACd;IACF;IAEO,aAAa,UAAU,CAAC,GAAW,EAAE,KAAK,GAAG,KAAK,EAAA;AACvD,QAAA,OAAO,IAAI,OAAO,CAAO,OAAO,OAAO,KAAI;AACzC,YAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;YAE/C,IAAI,CAAC,WAAW,EAAE;gBAChB,OAAO,OAAO,EAAE;YAClB;AACA,YAAA,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAE1D,YAAA,OAAO,CAAC,SAAS,GAAG,MAAK;AACvB,gBAAA,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,EAAS,CAAC;AACxC,YAAA,CAAC;AACD,YAAA,OAAO,CAAC,OAAO,GAAG,CAAC,KAAY,KAAI;AACjC,gBAAA,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAE,KAAK,CAAC,MAAqB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBACxF,OAAO,CAAC,EAAE,YAAY,EAAE,GAAG,CAAE,KAAK,CAAC,MAAqB,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,KAAK,EAAS,CAAC;AAC3G,YAAA,CAAC;AACH,QAAA,CAAC,CAAC;IACJ;IAEA,OAAO,KAAK,CAAC,GAAW,EAAA;AACtB,QAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;YAChC;QACF;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;IACnC;AAEO,IAAA,OAAO,aAAa,GAAA;AACzB,QAAA,OAAO,IAAI,OAAO,CAAO,OAAO,OAAO,KAAI;AACzC,YAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;YAE/C,IAAI,CAAC,WAAW,EAAE;gBAChB,OAAO,OAAO,EAAE;YAClB;AAEA,YAAA,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE;AACnC,YAAA,OAAO,CAAC,SAAS,GAAG,MAAK;AACvB,gBAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;AACrC,gBAAA,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,EAAS,CAAC;AACxC,YAAA,CAAC;AAED,YAAA,OAAO,CAAC,OAAO,GAAG,CAAC,KAAY,KAAI;AACjC,gBAAA,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAE,KAAK,CAAC,MAAqB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBACxF,OAAO,CAAC,EAAE,YAAY,EAAE,GAAG,CAAE,KAAK,CAAC,MAAqB,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,KAAK,EAAS,CAAC;AAC3G,YAAA,CAAC;AACH,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,OAAO,QAAQ,GAAA;QACb,IAAI,YAAY,EAAE,EAAE;AAClB,YAAA,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,IAAI,CAAC,wBAAwB;AACnC,gBAAA,QAAQ,EAAE;oBACR,OAAO,EAAE,IAAI,CAAC,SAAS;AACxB,iBAAA;aACF;AACD,YAAA,qBAAqB,CAAC,mBAAmB,CAAC,IAAI,CAAC;QACjD;QACA,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,wBAAwB,CAAC;AAC/C,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC7C,YAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;AAChC,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YAChB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEnD,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAEzB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAC3B;IAEQ,OAAO,aAAa,CAAC,IAAmB,EAAA;AAC9C,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE;AAExB,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;AAC3B,YAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;AAChC,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAE/C;YACF;AACA,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAChC,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,MAAM;IACf;IAEQ,OAAO,YAAY,CAAC,MAAwB,EAAA;QAClD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,GAAW,KAAI;AACzC,YAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;gBAChC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;gBAErC;YACF;AACA,YAAA,IAAI,GAAG,KAAK,IAAI,CAAC,gBAAgB,EAAE;AACjC,gBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAC5B;YACA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC;AAC9C,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,OAAO,uBAAuB,CAAC,iBAAyB,EAAE,QAAQ,GAAG,KAAK,EAAA;AAC/E,QAAA,OAAO,IAAI,OAAO,CAAC,OAAO,OAAO,KAAI;AACnC,YAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;YAE/C,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,OAAO,OAAO,CAAC,EAAE,CAAC;YACpB;;AAGA,YAAA,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE;AAEpC,YAAA,iBAAiB,GAAG,QAAQ,GAAG,iBAAiB,GAAG,GAAG,CAAC,iBAAiB,CAAC;AAEzE,YAAA,OAAO,CAAC,SAAS,GAAG,CAAC,CAAM,KAAI;AAC7B,gBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,MAAoB;gBAE1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACxB,oBAAA,OAAO,OAAO,CAAC,EAAE,CAAC;gBACpB;AAEA,gBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACnB,oBAAA,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE;AAC1D,wBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC;oBACjD;AACF,gBAAA,CAAC,CAAC;AAEF,gBAAA,OAAO,OAAO,CAAC,EAAE,CAAC;AACpB,YAAA,CAAC;AAED,YAAA,OAAO,CAAC,OAAO,GAAG,MAAK;AACrB,gBAAA,OAAO,OAAO,CAAC,EAAE,CAAC;AACpB,YAAA,CAAC;AACH,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,OAAO,kBAAkB,CAAC,QAAgB,EAAE,KAAK,GAAG,KAAK,EAAA;AAC9D,QAAA,QAAQ,GAAG,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ;QAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;QAE3C,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACzB;QACF;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACnB,YAAA,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AAC5B,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACjB;AACF,QAAA,CAAC,CAAC;IACJ;IAEO,OAAO,qBAAqB,CAAC,MAAe,EAAA;AACjD,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,MAAM,IAAI,MAAM,IAAI,IAAI,CAAC,MAAM,CAAW;YAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC,MAAgB,CAAC;AAE1D,YAAA,OAAO,CAAC,SAAS,GAAG,MAAK;AACvB,gBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC;AAC9C,gBAAA,OAAO,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAClC,YAAA,CAAC;AAED,YAAA,OAAO,CAAC,OAAO,GAAG,CAAC,KAAY,KAAI;AACjC,gBAAA,MAAM,KAAK,GAAI,KAAK,CAAC,MAAqB,CAAC,KAAK;AAChD,gBAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;AAChD,gBAAA,OAAO,CAAC,EAAE,YAAY,EAAE,GAAG,CAAE,KAA6B,IAAI,EAAE,EAAE,SAAS,CAAC,EAAE,aAAa,EAAE,KAAK,EAAS,CAAC;AAC9G,YAAA,CAAC;AAED,YAAA,OAAO,CAAC,SAAS,GAAG,MAAK;AACvB,gBAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC;gBAC1C,OAAO,CAAC,EAAE,YAAY,EAAE,2BAA2B,EAAE,aAAa,EAAE,KAAK,EAAS,CAAC;AACrF,YAAA,CAAC;AACH,QAAA,CAAC,CAAC;IACJ;;;AClcF,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;AACxB,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;AAC1B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;AACjB,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;AACtB,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC;AAC/B,IAAI,aAAa,GAAG,kBAAkB;AACtC,IAAI,mBAAmB,GAAuB,SAAS;MAE1C,kBAAkB,GAAG,CAAC,UAAU,GAAG,aAAa,KAAI;IAC/D,aAAa,GAAG,UAAU;AAC1B,IAAA,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;AACjC;AAEO,MAAM,sBAAsB,GAAG,CAAC,OAAe,KAAI;IACxD,mBAAmB,GAAG,OAAO;AAC/B;AAGA,IAAI,kBAAkB,GAA0C,SAAS;AAElE,MAAM,wBAAwB,GAAG,CAAC,cAAyC,KAAI;IACpF,kBAAkB,GAAG,cAAc;AACrC;AAEA;;;;;;;AAOG;AACI,MAAM,QAAQ,GAAG,CAAmD,MAAU,KAAuB;;IAE1G,MAAM,GAAG,GAAG,CAAC,CAAU,KAAK,CAAsB;IAClD,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;IAC1B;IACA,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,+BAA+B,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI;AACjG,IAAA,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;QACnC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IACvC;AACA,IAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAChB,QAAA,OAAO,GAAG,CAAC,SAAS,CAAC;IACvB;IACA,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,MAAqB;AAEvD,IAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE;QACrB,IAAI,GAAG,IAAI,EAAE;IACf;AACA,IAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE;QACpB,GAAG,GAAG,GAAG,EAAE;IACb;AACA,IAAA,OAAO,QAAQ,CAAC,YAAY,CAAC,EAAE;QAC7B,YAAY,GAAG,YAAY,EAAE;IAC/B;IAEA,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,mBAAmB,IAAI,IAAI,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACvG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,EAAE;IAC7F;IAEA,IAAI,GAAG,EAAE;QACP,IAAI,YAAY,EAAE;AAChB,YAAA,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7C;AACA,QAAA,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,OAAO,IAAI,KAAK,QAAQ,IAAK,IAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAE5H,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzB;QAEA,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAC/B;IAEA,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAE,IAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAE,IAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAClG,QAAA,OAAO,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,UAAU,IAAI,aAAa,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,IAAI,aAAa,CAAC,CAAC;IAClJ;IAEA,OAAO,GAAG,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;AAC3E;AAEA;;;;;AAKG;MACU,eAAe,GAAG,CAAC,KAAsB,EAAE,KAAsB,KAAI;AAChF,IAAA,IAAI,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AACnC,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE;AAC7C,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE;IAE7C,OAAO,IAAI,KAAK,IAAI;AACtB;AAEA;;;;;AAKG;MACU,iBAAiB,GAAG,CAAC,KAAsB,EAAE,KAAsB,KAAI;AAClF,IAAA,IAAI,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AAClC,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;AACjD,IAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;IAEjD,OAAO,MAAM,KAAK,MAAM;AAC1B;AAEA;;;;;AAKG;MACU,gBAAgB,GAAG,CAAC,KAAsB,EAAE,KAAsB,KAAI;AACjF,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE;AAC/C,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE;IAE/C,OAAO,KAAK,KAAK,KAAK;AACxB;AAEA;;;;;AAKG;AACI,MAAM,UAAU,GAAG,CAAC,IAAsB,EAAE,YAAY,GAAG,kBAAkB,EAAE,IAAa,EAAE,WAAoB,KAAY;IACnI,IAAI,CAAC,IAAI,EAAE;AACT,QAAA,OAAO,EAAE;IACX;AACA,IAAA,IAAI,GAAG,IAAI,IAAK,UAAU,CAAC,OAAO,EAAa;IAC/C,IAAI,kBAAkB,EAAE;QACtB,OAAO,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC;IACrD;AAEA,IAAA,IAAI,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;AACjE,IAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,QAAA,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE;AACvB,YAAA,WAAW,EAAE,4EAA4E,CAAC,KAAK,CAAC,GAAG,CAAC;AACrG,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE;AAC9E;AAEA,MAAM,eAAe,GAAG,CAAC,MAAc,KAAyG;AAC9I,IAAA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,UAAU,EAAE;AAC9N,QAAA,OAAO,MAAM;IACf;IAEA,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,YAAY,EAAE;AACvI,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,OAAO,EAAE;AAClE,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE;AACvE,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,MAAM,KAAK,qBAAqB,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,qBAAqB,EAAE;AAChG,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,IAAG,MAAM,CAAC,WAAW,EAAE,KAAK,wBAAwB,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,wBAAwB,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,wBAAwB,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,wBAAwB,EAAC;AAClN,QAAA,OAAO,UAAU;IACnB;IAEA,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,OAAO,EAAE;AAC5C,QAAA,OAAO,OAAO;IAChB;IAEA,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE;AAChD,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,OAAO,QAAQ;AACjB,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,IAAyG,EAAE,IAAY,KAAI;IAChJ,QAAQ,IAAI;AACV,QAAA,KAAK,IAAI;AACP,YAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,gBAAA,OAAO,OAAO;YAChB;AAEA,YAAA,OAAO,OAAO;AAEhB,QAAA,KAAK,KAAK;AACR,YAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,gBAAA,OAAO,aAAa;YACtB;AAEA,YAAA,OAAO,aAAa;AAEtB,QAAA,KAAK,QAAQ;AACX,YAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,gBAAA,OAAO,mBAAmB;YAC5B;AAEA,YAAA,OAAO,mBAAmB;AAE5B,QAAA,KAAK,IAAI;AACP,YAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,gBAAA,OAAO,WAAW;YACpB;AAEA,YAAA,OAAO,WAAW;AAEpB,QAAA,KAAK,SAAS;AACZ,YAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,gBAAA,OAAO,sBAAsB;YAC/B;AAEA,YAAA,OAAO,sBAAsB;AAE/B,QAAA,KAAK,OAAO;AACZ,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,OAAO;AAEhB,QAAA,KAAK,SAAS;AACd,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,SAAS;AAClB,QAAA,KAAK,UAAU;AACb,YAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,gBAAA,OAAO,0BAA0B;YACnC;AAEA,YAAA,OAAO,0BAA0B;;AAEvC,CAAC;;ACzPD;MAGa,8BAA8B,GAAG,CAAO,OAAiC,EAAE,QAAqB,KAAkC;AAC7I,IAAA,OAAO,IAAI,sBAAsB,CAAO,OAAO,EAAE,QAAQ,CAAC;AAC5D;AAEM,MAAO,sBAA+C,SAAQ,UAAU,CAAA;AAClE,IAAA,MAAM,GAAG,IAAI,UAAU,EAAE;IAEnC,WAAA,CAAY,OAAiC,EAAE,QAAqB,EAAA;QAClE,KAAK,CAAC,OAAc,CAAC;QAErB,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC;YAErC;QACF;AAEA,QAAA,IAAI,QAAQ,YAAY,sBAAsB,EAAE;AAC9C,YAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,WAAW,EAAE;YAEpC;QACF;AAEA,QAAA,IAAI,QAAQ,YAAY,UAAU,EAAE;AAClC,YAAA,IAAI,CAAC,MAAM,GAAG,QAAQ;YAEtB;QACF;IACF;IAEA,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA,IAAA,WAAW,CAAC,QAAoB,EAAA;AAC9B,QAAA,IAAI,QAAQ,YAAY,sBAAsB,EAAE;AAC9C,YAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,WAAW,EAAE;YAEpC;QACF;AAEA,QAAA,IAAI,QAAQ,YAAY,UAAU,EAAE;AAClC,YAAA,IAAI,CAAC,MAAM,GAAG,QAAQ;YAEtB;QACF;IACF;IAES,GAAG,CAAC,KAAa,EAAE,KAAgC,EAAA;AAC1D,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;AAE3C,QAAA,OAAO,IAA8B;IACvC;AAES,IAAA,GAAG,CAAC,KAAa,EAAA;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IAC/B;AAES,IAAA,GAAG,CAAC,KAAa,EAAA;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IAC/B;AAES,IAAA,MAAM,CAAC,KAAa,EAAA;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;IAClC;IAES,IAAI,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IAC3B;IAES,MAAM,CAAC,KAAa,EAAE,KAAgC,EAAA;AAC7D,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;AAE9C,QAAA,OAAO,IAAkB;IAC3B;AAES,IAAA,SAAS,CAAC,MAAiG,EAAA;QAClH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;AAE3C,QAAA,OAAO,IAAkB;IAC3B;IAES,MAAM,CAAC,KAAa,EAAE,KAAiC,EAAA;AAC9D,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;AAE9C,QAAA,OAAO,IAA8B;IACvC;IAES,QAAQ,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC/B;AACD;AAiBD;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;;AC5HA;AAKA;;;;;;;;;;;AAWG;AACI,MAAM,qBAAqB,GAAG,CAAU,IAAS,EAAE,oBAAoB,GAAG,IAAI,EAAE,qBAAqB,GAAG,KAAK,EAAE,sCAAsC,GAAG,KAAK,EAAE,IAAI,GAAG,IAAI,OAAO,EAAE,KAAO;AAC/L,IAAA,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAClE,QAAA,QAAQ,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI;IACrD;AACA,IAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAClB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;AAEA,IAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;QAClB,IAAI,CAAC,sCAAsC,EAAE;AAC3C,YAAA,OAAO,IAAS;QAClB;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,qBAAqB,CAAC,IAAI,EAAE,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,sCAAsC,EAAE,IAAI,CAAC,CAAC;AACxI,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;AAEA,IAAA,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,sCAAsC,EAAE,IAAI,CAAC,CAAC,CAAM,CAAC;AACvK,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;AAEA,IAAA,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;AACf,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE;AACzB,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACtC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,sCAAsC,CAAC,CAAC;AAC7I,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAM,CAAC;AACpC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;;AAGA,IAAA,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;AACvB,QAAA,OAAO,IAAS;IAClB;AAEA,IAAA,IAAI,GAAG,MAAM,CAAC,oBAAoB,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;AACxD,IAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;AACpB,IAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,EAAE;AACxB,QAAA,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC;;AAEzB,QAAA,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE;YAC7B;QACF;AACA,QAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE;AACrD,YAAA,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,sCAAsC,CAAC;QACjI;IACF;AAEA,IAAA,OAAO,IAAS;AAClB;AAEO,MAAM,qBAAqB,GAAG,CAAU,IAAS,EAAE,WAAW,GAAG,IAAI,EAAE,IAAI,GAAG,IAAI,OAAO,EAAE,EAAE,OAA4D,KAAO;IACrK,IAAI,gCAAgC,GAAG,KAAK;AAC5C,IAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACxC,QAAA,MAAM,WAAW,GAAI,IAAgC,EAAE;AACvD,QAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;YACnC,IAAI,WAAW,KAAK,IAAI,IAAI,kBAAkB,CAAC,WAAW,CAAC,EAAE;AAC3D,gBAAA,OAAO,WAAgB;YACzB;AACA,YAAA,IAAI,CAAC,GAAG,CAAC,WAAqB,EAAE,WAAW,CAAC;YAC5C,IAAI,GAAG,WAAW;YAClB,gCAAgC,GAAG,IAAI;YACvC;QACF;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC;QAC3B,IAAI,GAAG,WAAW;IACpB;AAEA,IAAA,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,UAAU,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE;AACvG,QAAA,OAAO,IAAI;IACb;IAEA,IAAI,CAAC,gCAAgC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACvD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;AAEA,IAAA,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;AACjB,QAAA,IAAI,CAAC,OAAO,EAAE,oCAAoC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AACxE,YAAA,OAAO,IAAS;QAClB;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAS,KAAK,qBAAqB,CAAC,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAM,CAAC;AACrI,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;AAEA,IAAA,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;AACf,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE;AACzB,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACtC,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,qBAAqB,CAAC,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7H,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAY,CAAC;AAC5B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;AAEA,IAAA,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;AACf,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE;AACzB,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YAC1C,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACxG,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAY,CAAC;AAC5B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;;AAGA,IAAA,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE;AAC5B,QAAA,OAAO,IAAS;IAClB;IAEA,MAAM,MAAM,GAAwB,WAAW,GAAG,EAAE,GAAG,IAAI;AAC3D,IAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;AACtB,IAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;AACvB,QAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;;AAEnD,YAAA,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE;AAC7B,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK;gBACnB;YACF;YACA,MAAM,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC;QACzG;IACF;AAEA,IAAA,OAAO,MAAW;AACpB;AAEO,MAAM,YAAY,GAAG,CAAC,IAAS,KAAI;AACxC,IAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE;QACrB,IAAI,GAAG,IAAI,EAAE;IACf;AACA,IAAA,OAAO,IAAI;AACb;;AClJA;AAUA;AACA;;;;;;;;;AASG;MACU,KAAK,GAAG,CAAC,KAAc,EAAE,OAA0C,KAA+B;AAC7G,IAAA,IAAI,CAAC,OAAO,EAAE,kBAAkB,EAAE;AAChC,QAAA,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;IAC7B;AACA,IAAA,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AAC9C;AAEA;;;;;;;;;;;;AAYG;MACU,OAAO,GAAG,CAAC,KAAU,EAAE,OAA2G,KAAwC;AACrL,IAAA,IAAI,CAAC,OAAO,EAAE,kBAAkB,EAAE;AAChC,QAAA,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;IAC7B;IACA,IAAI,OAAO,EAAE,iBAAiB,IAAI,KAAK,KAAK,EAAE,EAAE;AAC9C,QAAA,OAAO,KAAK;IACd;AACA,IAAA,IAAI,OAAO,EAAE,wBAAwB,EAAE;QACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,iBAAiB,CAAC,KAAK,CAAC;IAC9D;AAEA,IAAA,OAAO,iBAAiB,CAAC,KAAK,CAAC;AACjC;AAEA;;;;;;;AAOG;AACH,MAAM,iBAAiB,GAAG,CAAW,KAAU,KAAgB;AAC7D,IAAA,IAAI;AACF,QAAA,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,EAAE;AAC9D,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;QAC3B;QAEA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;IACxC;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AACpB,QAAA,OAAO,KAAK;IACd;AACF,CAAC;AAED;;;;;;;;;;;;;AAaG;MAEU,QAAQ,GAAG,CAAI,KAAQ,EAAE,OAA6F,KAA6B;AAC9J,IAAA,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;AACjC;AAEA;;;;;;;;;;;;;AAaG;MACU,OAAO,GAAG,CAAC,KAAc,EAAE,OAA6F,KAAwC;AAC3K,IAAA,IAAI,CAAC,OAAO,EAAE,kBAAkB,EAAE;AAChC,QAAA,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;IAC7B;IAEA,IAAI,OAAO,EAAE,UAAU,IAAI,KAAK,KAAK,CAAC,EAAE;AACtC,QAAA,OAAO,KAAK;IACd;IAEA,IAAI,OAAO,EAAE,iBAAiB,IAAI,KAAK,KAAK,EAAE,EAAE;AAC9C,QAAA,OAAO,KAAK;IACd;IAEA,OAAO,CAAC,KAAK;AACf;AAEA;;;;;;;;AAQG;MACU,MAAM,GAAG,CAAI,OAA4B,EAAE,SAAgC,KAAO;AAC7F,IAAA,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACrE,QAAA,OAAO,OAAY;IACrB;IACA,MAAM,MAAM,GAAG,EAAO;IAEtB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;QACnC,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;AACpC,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;AAC1B,YAAA,GAAG,CAAC,MAAM,EAAE,GAAgB,EAAE,UAAU,CAAC;QAC3C;AACF,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,MAAM;AACf;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DG;AACI,MAAM,GAAG,GAAG,CACjB,GAAkB,EAClB,IAAO,EACP,YAAgB,EAChB,qBAA0B,KACI;;IAE9B,MAAM,GAAG,GAAG,CAAC,CAAU,KAAK,CAA+B;AAE3D,IAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;AACd,QAAA,OAAO,GAAG,CAAC,YAAY,CAAC;IAC1B;AACA,IAAA,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC;AACvB,IAAA,IAAI,IAAI,KAAK,EAAE,EAAE;AACf,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC;IACjB;AACA,IAAA,IAAI,GAAG,YAAY,UAAU,EAAE;AAC7B,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAA,CAAE,CAAC,IAAI,YAAY,CAAC;IAChD;AACA,IAAA,IAAI,GAAG,YAAY,OAAO,EAAE;AAC1B,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,IAAqB,CAAC,CAAC;IACxC;AAEA,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI;AAC9B,UAAE;AACF,UAAG;AACE,aAAA,OAAO,CAAC,WAAW,EAAE,KAAK;aAC1B,KAAK,CAAC,GAAG;aACT,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;AAE3B,IAAA,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AACzB,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,GAAG,YAAY,mBAAmB,EAAE;AACtC,YAAA,GAAG,GAAG,GAAG,CAAC,GAAgC,CAAM;YAChD;QACF;AAEA,QAAA,IAAI,GAAG,YAAY,WAAW,EAAE;AAC9B,YAAA,GAAG,GAAG,GAAG,CAAC,GAAwB,CAAM;YACxC;QACF;AACA,QAAA,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC;AACvB,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;AACjE,YAAA,OAAO,GAAG,CAAC,YAAY,CAAC;QAC1B;QACA,MAAM,GAAG,GAAG,QAAQ,CAAE,GAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAqB,GAAI,GAAW,CAAC,GAAG,CAAC,EAAE,GAAI,GAAW,CAAC,GAAG,CAAC;QAE3G,GAAG,GAAG,GAAQ;IAChB;AAEA,IAAA,OAAO,GAAG,CAAC,GAAG,IAAI,YAAY,CAAC;AACjC;AAEA;;;;;;;;;;AAUG;AACI,MAAM,GAAG,GAAG,CACjB,GAAkB,EAClB,IAAO,EACP,KAAQ,EACR,OAAyF,KACpF;AACL,IAAA,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE,KAAK,QAAQ,CAAC,EAAE;AAC7G,QAAA,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC;IACzD;AAEA,IAAA,IAAI,GAAG,YAAY,UAAU,EAAE;QAC7B,OAAO,GAAG,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAA,CAAE,EAAE,KAAe,CAAM;IACjD;AAEA,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI;AAClC,UAAE;AACF,UAAG;AACE,aAAA,OAAO,CAAC,WAAW,EAAE,OAAO;aAC5B,KAAK,CAAC,GAAG;aACT,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;AAE3B,IAAA,IAAI,kBAAkB,GAAQ,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG;IACzD,IAAI,cAAc,GAAG,GAAG;IAExB,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;QAC/B,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAChC,IAAI,EAAE,GAAG,IAAI,kBAAkB,CAAC,KAAK,OAAO,kBAAkB,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACvH,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;gBACpC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;gBACpC,IAAI,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE;AAClC,oBAAA,kBAAkB,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,EAAE,8BAA8B,IAAI,EAAE,KAAK,OAAO,EAAE,+BAA+B,IAAI,EAAE,CAAC;gBAC1J;YACF;AACA,YAAA,kBAAkB,GAAG,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,kBAAkB;YACvE,cAAc,GAAG,kBAAkB;AACnC,YAAA,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,EAAE,GAAG,kBAAkB;YAC7F;QACF;AAEA,QAAA,IAAI,OAAO,kBAAkB,KAAK,QAAQ,EAAE;YAC1C;QACF;;QAGA,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;AACpC,QAAA,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC;AAC1C,QAAA,MAAM,kBAAkB,GAAG,QAAQ,CAAC,UAAU,CAAC;AAE/C,QAAA,IAAI,kBAAkB,KAAK,OAAO,UAAU,EAAE,KAAK,QAAQ,IAAI,UAAU,EAAE,KAAK,IAAI,CAAC,EAAE;AACpF,YAAA,UAAkC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;YAC1E;QACF;AACA,QAAA,IAAI,QAAQ,CAAC,cAAc,CAAC,EAAE;AAC3B,YAAA,cAAsC,CAAC,MAAM,CAAC,CAAC,IAAS,KAAI;AAC3D,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC;gBAC3B,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC3C,oBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK;gBACnB;gBAEA,IAAI,kBAAkB,EAAE;AACrB,oBAAA,UAAkC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;gBAC5E;AAEA,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,oBAAA,OAAO,CAAC,GAAG,IAAI,CAAC;gBAClB;AACA,gBAAA,OAAO,EAAE,GAAG,IAAI,EAAE;AACpB,YAAA,CAAC,CAAC;YACF;QACF;QACA,IAAI,kBAAkB,EAAE;AACrB,YAAA,UAAkC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;YAC1E;QACF;AACA,QAAA,kBAAkB,CAAC,GAAG,CAAC,GAAG,KAAK;AACjC,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,GAAQ;AACjB;AAEA;;;;;;;;;;;;;;;AAeG;MACU,SAAS,GAAG,CAAU,IAAS,EAAE,OAAO,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,IAAI,GAAG,IAAI,OAAO,EAAE,KAAO;IAC1G,IAAI,IAAI,KAAK,IAAI,KAAK,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE;AAC7F,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAClB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;AAEA,IAAA,IAAI,IAAI,YAAY,UAAU,EAAE;AAC9B,QAAA,OAAO,IAAI,sBAAsB,CAAC,SAAS,EAAE,IAAI,CAAM;IACzD;AAEA,IAAA,IAAI,IAAI,YAAY,IAAI,EAAE;QACxB,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAM;IACtC;AAEA,IAAA,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;QACvB,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAM;IAChD;AAEA,IAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;QAClB,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAM;IACjD;AAEA,IAAA,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;AACf,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;YACxB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC3E,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,OAAY;IACrB;AAEA,IAAA,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;AACf,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACnB,YAAA,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC5C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,OAAY;IACrB;AAEA,IAAA,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;QACjB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAM,CAAC;AACvE,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAM;IAC5B;AAEA,IAAA,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE;AAC5B,QAAA,OAAO,IAAS;IAClB;AAEA,IAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;AAClB,QAAA,IAAI,OAAO,EAAE,YAAY,EAAE;AACzB,YAAA,OAAO,IAAS;QAClB;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;AACxD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAM;IAC5B;IAEA,MAAM,MAAM,GAAwB,EAAE;AACtC,IAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;AACtB,IAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;AACvB,QAAA,IAAI,KAAK,YAAY,UAAU,EAAE;YAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAM;YAC/D;QACF;AAEA,QAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AACzB,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAM;YAC5C;QACF;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CAAM;YACtD;QACF;AAEA,QAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;AAClB,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAM;YACxD;QACF;AACA,QAAA,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE;AAC5B,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK;YACnB;QACF;AAEA,QAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;AACnD,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC;QAC/C;IACF;AAEA,IAAA,OAAO,MAAW;AACpB;AAEA;;;;;;;;;;;;;;;AAeG;MACU,KAAK,GAAG,CAAC,IAAwB,EAAE,GAAW,KAAiB;IAC1E,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE;AACjC,QAAA,OAAO,EAAE;IACX;IACA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAI;QACnC,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,EAAE,GAA0B,CAAC;AAC5D,QAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,OAAO,UAAU,KAAK,SAAS,EAAE;AACvG,YAAA,OAAO,GAAG;QACZ;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA,EAAG,UAAU,CAAA,CAAE,CAAC,EAAE;AAC/C,YAAA,GAAG,CAAC,CAAA,EAAG,UAAU,EAAE,CAAC,GAAG,QAAQ;QACjC;AACA,QAAA,OAAO,GAAG;IACZ,CAAC,EAAE,EAAE,CAAC;AACR;AAEA;;;;;;;;;;;;;;;;;;;;AAoBG;MACU,OAAO,GAAG,CAAC,IAAwB,EAAE,GAAW,KAAiB;IAC5E,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE;AAC1E,QAAA,OAAO,EAAE;IACX;IACA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAI;QACnC,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,EAAE,GAA0B,CAAC;AAC5D,QAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,OAAO,UAAU,KAAK,SAAS,EAAE;AACvG,YAAA,OAAO,GAAG;QACZ;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA,EAAG,UAAU,CAAA,CAAE,CAAC,EAAE;AAC/C,YAAA,GAAG,CAAC,CAAA,EAAG,UAAU,EAAE,CAAC,GAAG,EAAE;QAC3B;QACA,GAAG,CAAC,CAAA,EAAG,UAAU,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnC,QAAA,OAAO,GAAG;IACZ,CAAC,EAAE,EAAE,CAAC;AACR;AAEA;;;;;;;;;;;AAWG;AACI,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,GAAY,EAAE,IAAa,KAAmB;IACjF,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE;QACrC,GAAG,GAAG,KAAK;QACX,KAAK,GAAG,CAAC;IACX;IAEA,IAAI,CAAC,IAAI,EAAE;AACT,QAAA,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;IACzB;IAEA,IAAI,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE;QAC3B,IAAI,IAAI,CAAC,CAAC;IACZ;AAEA,IAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,KAAK;AACrC,IAAA,MAAM,SAAS,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,MAAM;AAC9C,IAAA,IAAI,CAAC,SAAS,KAAK,KAAK,KAAK,gBAAgB,GAAG,KAAK,IAAI,gBAAgB,GAAG,GAAG,CAAC,MAAM,SAAS,KAAK,MAAM,KAAK,gBAAgB,GAAG,KAAK,IAAI,gBAAgB,GAAG,GAAG,CAAC,CAAC,EAAE;QACnK,OAAO,CAAC,KAAK,CAAC;IAChB;AAEA,IAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAU;AAE/B,IAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE;AAC1D,QAAA,IAAI,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI;AAChC,QAAA,IAAI,KAAK,KAAK,CAAC,EAAE;YACf,KAAK,GAAG,KAAK;QACf;AAEA,QAAA,IAAI,CAAC,SAAS,KAAK,KAAK,KAAK,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,SAAS,KAAK,MAAM,KAAK,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE;AACvH,YAAA,OAAO,GAAG;QACZ;AAEA,QAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;IACjB;AAEA,IAAA,OAAO,GAAG;AACZ;AAEA;;;;;;;;;;;AAWG;AACI,MAAM,OAAO,GAAG,CACrB,MAAW,EACX,MAAW,EACX,OAIC,KACU;;AAEX,IAAA,IAAI,CAAC,OAAO,EAAE,kBAAkB,EAAE;AAChC,QAAA,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;AAC7B,QAAA,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IAC/B;AACA,IAAA,MAAM,EAAE,eAAe,GAAG,KAAK,EAAE,qBAAqB,GAAG,KAAK,EAAE,GAAG,OAAO,IAAI,EAAE;IAEhF,IAAI,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,CAAC,KAAK,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,CAAC,EAAE;AAC/G,QAAA,OAAO,IAAI;IACb;IAEA,IAAI,qBAAqB,EAAE;AACzB,QAAA,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,GAAG,MAAM,CAAA,CAAE,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,CAAA,EAAG,MAAM,CAAA,CAAE,CAAC;IAClG;IAEA,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE;AACtK,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAClD,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;AACnC,YAAA,OAAO,KAAK;QACd;QACA,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAS,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5D;QAEA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,KAAa,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3F;AAEA,IAAA,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;AAC7D,QAAA,OAAO,KAAK;IACd;AACA,IAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AACxF;AAEA;;;;;;;;;;;;;;;;;;AAkBG;MACU,MAAM,GAAG,CAAI,IAAc,EAAE,GAAY,KAAc;AAClE,IAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,OAAO,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,QAAQ,EAAE;;AAEjE,QAAA,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAChC,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAE9B,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;gBAC1B,MAAM,KAAK,GAAG,CAAA,EAAG,GAAG,CAAM,IAAI,EAAE,EAAE,CAAC,CAAA,CAAE;AACrC,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACnB,oBAAA,OAAO,KAAK;gBACd;AACA,gBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACf,gBAAA,OAAO,IAAI;AACb,YAAA,CAAC,CAAC;QACJ;;QAEA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC;IAEA,MAAM,UAAU,GAAG,KAAK,CAAC,IAAkC,EAAE,GAAG,CAAC;AAEjE,IAAA,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC;AAC9D;MAEa,iBAAiB,GAAG,CAAC,GAAQ,EAAE,aAAqB,KAAY;AAC3E,IAAA,MAAM,YAAY,GAAG,CAAC,KAAU,KAAY;AAC1C,QAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,YAAA,OAAO,MAAM;QACf;AACA,QAAA,MAAM,IAAI,GAAG,OAAO,KAAK;AAEzB,QAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AACrB,YAAA,OAAO,QAAQ;QACjB;AACA,QAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AACrB,YAAA,OAAO,QAAQ;QACjB;AACA,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,IAAI,IAAI,KAAK,WAAW,EAAE;AACxB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AACzB,YAAA,OAAO,MAAM;QACf;AAEA,QAAA,IAAI,KAAK,YAAY,MAAM,EAAE;AAC3B,YAAA,OAAO,QAAQ;QACjB;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,gBAAA,OAAO,YAAY;YACrB;YACA,OAAO,CAAA,MAAA,EAAS,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG;QAC3C;AAEA,QAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;YACrB,IAAI,YAAY,GAAG,KAAK;AACxB,YAAA,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;AACvB,gBAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;oBACpD,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC1C,oBAAA,YAAY,IAAI,CAAA,EAAA,EAAK,GAAG,CAAA,EAAA,EAAK,SAAS,KAAK;gBAC7C;YACF;YACA,YAAY,IAAI,GAAG;AACnB,YAAA,OAAO,YAAY;QACrB;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;IAED,MAAM,YAAY,GAAG,CAAA,UAAA,EAAa,aAAa,CAAA,CAAA,EAAI,YAAY,CAAC,GAAG,CAAC,CAAA,CAAE;AACtE,IAAA,OAAO,YAAY;AACrB;;ACnuBA,IAAI,MAAM,GAAqB,IAAI;AACnC,IAAI,YAAY,GAAgC,IAAI;AAE7C,MAAM,aAAa,GAAG,MAAK;IAChC,IAAI,CAAC,YAAY,EAAE;QACjB,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;IAC7D;AACA,IAAA,OAAO,YAAY;AACrB;AAEO,MAAM,aAAa,GAAG,MAAe,CAAC,eAAe,IAAI,SAAS,IAAI,SAAS,CAAC,cAAc,GAAG,CAAC,KAAK,cAAc,IAAI,MAAM,KAAK,MAAM,CAAC,UAAU,GAAG,mBAAmB,CAAC,CAAC,OAAO,IAAI,KAAK;AAE7L,MAAM,uBAAuB,GAAG,CAAC,MAAK;IAC3C,IAAI,aAAa,EAAE,EAAE;AACnB,QAAA,OAAO,aAAa;IACtB;AACA,IAAA,MAAM,UAAU,GAAG,aAAa,EAAE;AAElC,IAAA,OAAO,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,OAAO,GAAG,YAAY;AAClE,CAAC;AAEM,MAAM,mBAAmB,GAAG,CAAC,OAAe,KAAc;IAC/D,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,MAAM,GAAG,IAAI,SAAS,EAAE;IAC1B;IACA,OAAO,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC;AACrD;AAEO,MAAM,wBAAwB,GAAG,CAAC,IAAyB,KAAyB;IACzF,OAAO;AACL,QAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC;AAChB,QAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;AAClB,QAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;AACpB,QAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;AACtB,QAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;KACvB;AACH;MAEa,gBAAgB,GAAG,CAAC,EAAe,EAAE,MAA8B,KAAU;IACxF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAW,KAAK,GAAG,CAAC,EAAE,EAAE,CAAA,MAAA,EAAS,GAAG,CAAA,CAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACpF;MAEa,WAAW,GAAG,CAAC,GAAA,GAAc,MAAM,KAAuC;IACrF,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,eAAe,EACtC,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACnD,CAAC,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,EACzD,CAAC,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY;IAE9D,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;AAChC;MAEa,gBAAgB,GAAG,CAAC,OAA+C,EAAE,QAAgB,KAAU;IAC1G,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;QAC1C;IACF;IACA,OAAO,CAAC,KAAK,EAAE;AACf,IAAA,OAAO,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC/C;AAEO,MAAM,iBAAiB,GAAG,CAAC,SAAsB,EAAE,OAAoB,EAAE,aAA2B,EAAE,UAA4C,KAAa;AACpK,IAAA,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE;AAC1B,QAAA,OAAO,KAAK;IACd;IAEA,MAAM,aAAa,GAAG,wBAAwB,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC;IAEjF,IAAI,aAAa,EAAE;AACjB,QAAA,MAAM,iBAAiB,GAAG,aAAa,CAAC,qBAAqB,EAAE;AAE/D,QAAA,aAAa,CAAC,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI;AAC9C,QAAA,aAAa,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC,GAAG;IAC9C;AAEA,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,qBAAqB,EAAE;AACnD,IAAA,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,WAAW;AACjC,IAAA,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC;AACzC,IAAA,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC;AAC3C,IAAA,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC;AAC7C,IAAA,MAAM,eAAe,GAAG,aAAa,CAAC,QAAQ,CAAC;AAC/C,IAAA,MAAM,kBAAkB,GAAG,SAAS,CAAC,SAAS;AAC9C,IAAA,MAAM,mBAAmB,GAAG,SAAS,CAAC,UAAU;AAChD,IAAA,MAAM,QAAQ,GAAG,YAAY,GAAG,kBAAkB,GAAG,eAAe;AACpE,IAAA,MAAM,SAAS,GAAG,aAAa,GAAG,mBAAmB,GAAG,cAAc;IAEtE,MAAM,UAAU,GAAG,GAAG,IAAI,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,IAAI,IAAI,UAAU,EAAE,IAAI,IAAI,CAAC,CAAC;AAElD,IAAA,IAAI,YAAY,IAAI,UAAU,IAAI,UAAU,IAAI,QAAQ,IAAI,aAAa,IAAI,WAAW,IAAI,WAAW,IAAI,SAAS,EAAE;AACpH,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,OAAO,KAAK;AACd;AAEO,MAAM,yBAAyB,GAAG,CAAC,aAAmD,EAAE,OAAqB,EAAE,IAAc,KAAa;AAC/I,IAAA,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE;AACrB,QAAA,OAAO,KAAK;IACd;IACA,MAAM,WAAW,GAAG,IAAI,IAAI,OAAO,EAAE,qBAAqB,EAAE,IAAK,EAAc;IAC/E,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW;AAChD,IAAA,MAAM,SAAS,GAAG,IAAI,GAAG,KAAK;AAC9B,IAAA,MAAM,QAAQ,GAAG,GAAG,GAAG,MAAM;AAC7B,IAAA,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,aAAa;AAC1C,IAAA,IAAI,IAAI,IAAI,OAAO,IAAI,OAAO,IAAI,SAAS,IAAI,GAAG,IAAI,OAAO,IAAI,OAAO,IAAI,QAAQ,EAAE;AACpF,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,OAAO,KAAK;AACd;AAEO,MAAM,qBAAqB,GAAG,CAAC,MASrC,KAAI;AACH,IAAA,IAAI,KAAoC;IACxC,MAAM,QAAQ,GAAG,MAAK;AACpB,QAAA,KAAK,GAAG,UAAU,CAAC,MAAK;YACtB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACjD,CAAC,EAAE,GAAG,CAAC;AACT,IAAA,CAAC;IACD,MAAM,WAAW,GAAG,MAAK;QACvB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC;QAC9C,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC;QAClD,YAAY,CAAC,KAAK,CAAC;AACrB,IAAA,CAAC;AACD,IAAA,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,YAAY;SAC5C,IAAI,CACH,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAC3D,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC;AAEtC,SAAA,SAAS,EAAE;AACd,IAAA,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,YAAY;SAC5C,IAAI,CACH,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,EACxD,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC;AAEtC,SAAA,SAAS,EAAE;AAEd,IAAA,MAAM,SAAS,GAAG,SAAS,CAAa,MAAM,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC,IAAI,CAChF,GAAG,CAAC,CAAC,CAAC,KAAI;QACR,CAAC,CAAC,eAAe,EAAE;AACnB,QAAA,QAAQ,EAAE;AACV,QAAA,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH;IACD,MAAM,OAAO,GAAG,SAAS,CAAa,MAAM,CAAC,cAAc,IAAI,QAAQ,EAAE,SAAS,CAAC,CAAC,IAAI,CACtF,GAAG,CAAC,CAAC,CAAC,KAAI;QACR,CAAC,CAAC,eAAe,EAAE;AACnB,QAAA,WAAW,EAAE;AACb,QAAA,MAAM,CAAC,eAAe,GAAG,CAAC,CAAC;IAC7B,CAAC,CAAC,CACH;IAED,MAAM,SAAS,GAAG,SAAS,CAAa,MAAM,CAAC,gBAAgB,IAAI,QAAQ,EAAE,WAAW,CAAC,CAAC,IAAI,CAC5F,GAAG,CAAC,CAAC,CAAC,KAAI;QACR,CAAC,CAAC,eAAe,EAAE;AACnB,QAAA,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC;AAC/B,IAAA,CAAC,CAAC,EACF,SAAS,CAAC,OAAO,CAAC,CACnB;IAED,OAAO,SAAS,CAAC,IAAI,CACnB,QAAQ,CAAC,CAAC,CAAa,MAAM,MAAM,CAAC,yBAAyB,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAC1G,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,EACrC,QAAQ,CAAC,WAAW,CAAC,CACtB;AACH;;MCrLa,oBAAoB,CAAA;IACvB,OAAO,QAAQ;AACf,IAAA,MAAM;AACd,IAAA,WAAA,CAAY,WAAmB,EAAA;AAC7B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,EAAkC;AACzD,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACpD;AAEA,IAAA,OAAO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,oBAAoB,CAAC,EAAE,CAAC;QAC9C;QAEA,OAAO,IAAI,CAAC,QAAQ;IACtB;IAEO,OAAO,mBAAmB,CAAC,MAAmC,EAAA;AACnE,QAAA,MAAM,SAAS,GAA0C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YACvF,OAAO;gBACL,GAAG;AACH,gBAAA,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;aACnB;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC;IACjD;IAEO,OAAO,QAAQ,CAAC,MAA6C,EAAA;QAClE,IAAI,SAAS,GAAG,EAAE;QAElB;AACG,aAAA,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;AACzD,aAAA,OAAO,CAAC,CAAC,IAAI,KAAI;AAChB,YAAA,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI;AAE3B,YAAA,SAAS,GAAG,CAAA,EAAG,SAAS,GAAG,SAAS,GAAG,GAAG,GAAG,EAAE,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,EAAE;AAClE,QAAA,CAAC,CAAC;AAEJ,QAAA,OAAO,SAAS;IAClB;AAEQ,IAAA,WAAW,CAAC,WAAmB,EAAA;AACrC,QAAA,MAAM,WAAW,GAAG,IAAI,KAAK,EAAkC;QAE/D,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,WAAW;QACpB;QAEA,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;AAE1C,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,WAAW,GAAG,CAAA,EAAG,WAAW,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,WAAW,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE;QACvF;AAEA,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAE5D,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;gBACvB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBAC1B;gBACF;AACA,gBAAA,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;gBAEnC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC/B,gBAAA,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACrD,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE;oBACnD,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;gBAClC;AACF,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,OAAO,WAAW;IACpB;IAEO,GAAG,CAAC,GAAW,EAAE,KAAa,EAAA;AACnC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,CAA2B;QAE3F,IAAI,CAAC,UAAU,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;YAE/E;QACF;AAEA,QAAA,UAAU,CAAC,OAAO,CAAC,GAAG,KAAK;IAC7B;AAEO,IAAA,GAAG,CAAC,GAAW,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK;IAC9D;AAEO,IAAA,GAAG,CAAC,GAAW,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;IACvD;AAEO,IAAA,MAAM,CAAC,GAAW,EAAA;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;AAEjE,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9B;IACF;IAEO,MAAM,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM;IAC3B;AAEO,IAAA,QAAQ,CAAC,MAA8C,EAAA;AAC5D,QAAA,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,MAAM;AAE9B,QAAA,OAAO,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9C;IAEO,cAAc,GAAA;QACnB,MAAM,MAAM,GAAG,EAA4B;QAE3C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK;AAC/B,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,MAAM;IACf;IAEO,aAAa,CAAC,MAAc,EAAE,MAAc,EAAA;AACjD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACvD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEvD,OAAO,OAAO,KAAK,OAAO;IAC5B;AACD;;ACzHD,MAAM,IAAI,GAAG,EAAE;AACf,MAAM,OAAO,GAAG,IAAI;MAEP,2BAA2B,GAAG,CAAC,KAAa,EAAE,UAAkB,KAAI;AAC/E,IAAA,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;AAChF;AAEO,MAAM,uBAAuB,GAAG,CAAC,KAAa,KAAqC;AACxF,IAAA,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,KAAK,CAAC;IACjD,MAAM,MAAM,GAAQ,EAAE;IACtB,IAAI,gBAAgB,GAAkB,EAAE;IACxC,IAAI,eAAe,GAAkB,EAAE;AAEvC,IAAA,IAAI,iBAAiB,KAAK,IAAI,EAAE;AAC9B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjD,gBAAgB,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACxD,eAAe,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACxD;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE;AAC9B,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,EAAE,IAAI,EAAE,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAA,CAAA,EAAI,eAAe,CAAC,CAAC,CAAC,CAAA,CAAE,EAAE,CAAC;QACpH;IACF;AAEA,IAAA,OAAO,MAAM;AACf;AAEA,MAAM,gBAAgB,GAAG,CAAC,WAAgB,KAAI;IAC5C,IAAI,gBAAgB,GAAG,WAAW,CAAC,KAAK,CAAC,sCAAsC,CAAC;IAEhF,IAAI,gBAAgB,EAAE;QACpB,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAS,KAAI;AACpD,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrB,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;gBAEvC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,EAAO,KAAI;AAC7C,oBAAA,OAAO,GAAG,GAAG,EAAE,GAAG,EAAE;gBACtB,CAAC,EAAE,EAAE,CAAC;AAEN,gBAAA,OAAO,OAAO;YAChB;AAEA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,OAAO,gBAAgB;AACzB,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,UAAe,KAAI;IAC1C,OAAO,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;AACzD,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,UAAe,KAAI;IACzC,OAAO,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;AACxD,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,UAAe,EAAE,WAAgB,KAAI;AACtD,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC;IAClC,MAAM,WAAW,GAAkB,EAAE;AAErC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;AAC7B,QAAA,WAAW,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAClD;AAEA,IAAA,OAAO,WAAW;AACpB,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAE,CAAM,KAAI;AACpC,IAAA,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,EAAE;AACvH,CAAC;AACD,MAAM,OAAO,GAAG,CAAC,GAAQ,EAAE,CAAM,KAAI;IACnC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,OAAO,EAAE;AAC9J,CAAC;AAEM,MAAM,QAAQ,GAAG,CAAC,GAAQ,KAAI;IACnC,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACrE;AACA,MAAM,QAAQ,GAAG,CAAC,UAAe,KAAI;IACnC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AAClJ,CAAC;AACD,MAAM,QAAQ,GAAG,CAAC,MAAW,KAAI;AAC/B,IAAA,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,GAAG,GAAG,CAAC,MAAW,EAAE,MAAW,KAAI;AACvC,IAAA,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;AAErB,IAAA,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE;AAC1B,QAAA,GAAG,GAAG,GAAG,GAAG,GAAG;IACjB;AAEA,IAAA,OAAO,GAAG;AACZ,CAAC;AAEM,MAAM,eAAe,GAAkB;IAC5C,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;;AAGJ,MAAM,YAAY,GAAG,CAAC,GAAW,KAAY;IAClD,IAAI,UAAU,GAAG,CAAC;IAElB,IAAI,CAAC,GAAG,EAAE;AACR,QAAA,OAAO,EAAE;IACX;AACA,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QAE9B,UAAU,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,UAAU,GAAG,IAAI;AAClD,QAAA,UAAU,GAAG,UAAU,GAAG,UAAU;IACtC;AAEA,IAAA,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC;AACvE;AAEO,MAAM,6BAA6B,GAAG,CAAC,KAAa,KAAY;AACrE,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,KAAK;IAExB,MAAM,QAAQ,GAA2B,EAAE;IAC3C,MAAM,KAAK,GAAG;SACX,KAAK,CAAC,GAAG;SACT,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;SACnB,MAAM,CAAC,OAAO,CAAC;AAElB,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/D,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ;YAAE;AAC1B,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE;AAChC,QAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ;IAC1B;IAEA,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,CAAC;AAC7E,IAAA,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;AAC3B,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC;AAC3B,QAAA,IAAI,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;AAC/B,YAAA,OAAO,QAAQ,CAAC,GAAG,CAAC;QACtB;IACF;AAEA,IAAA,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ;AAC3B,SAAA,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAA,EAAG,CAAC,CAAA,EAAA,EAAK,CAAC,EAAE;SAC5B,IAAI,CAAC,IAAI,CAAC;AACf;AAEO,MAAM,WAAW,GAAG,CAAC,KAAa,KAAa;AACpD,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,KAAK;IACxB,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;;AAGlC,IAAA,MAAM,UAAU,GAAG,CAAC,KAAa,KAAqC;AACpE,QAAA,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACzB,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACxB,YAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAClB,gBAAA,GAAG,GAAG;qBACH,KAAK,CAAC,EAAE;qBACR,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;qBAChB,IAAI,CAAC,EAAE,CAAC;AACb,YAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACvC,YAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACvC,YAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACvC,YAAA,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAClB;QAEA,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC;QACnD,IAAI,QAAQ,EAAE;YACZ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;iBACzB,KAAK,CAAC,GAAG;AACT,iBAAA,KAAK,CAAC,CAAC,EAAE,CAAC;AACV,iBAAA,GAAG,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACnC,YAAA,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAClB;AAEA,QAAA,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,CAAC;AACpG,QAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACtD,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;AAED,IAAA,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC;AAC7B,IAAA,IAAI,CAAC,GAAG;AAAE,QAAA,OAAO,KAAK;IAEtB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG;;AAGrB,IAAA,MAAM,SAAS,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,GAAG;;AAG9D,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG;AACnC,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG;AACnC,IAAA,MAAM,UAAU,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG;;;;AAKpD,IAAA,OAAO,SAAS,GAAG,IAAI,IAAI,UAAU,GAAG,GAAG;AAC7C;;MCtPsB,oBAAoB,CAAA;AACxC,IAAA,OAAgB,SAAS,GAAG,CAAC;AAC7B,IAAA,OAAgB,SAAS,GAAG,CAAC;AAC7B,IAAA,OAAgB,GAAG,GAAG,CAAC;AACvB,IAAA,OAAgB,UAAU,GAAG,EAAE;AAC/B,IAAA,OAAgB,KAAK,GAAG,EAAE;AAC1B,IAAA,OAAgB,KAAK,GAAG,EAAE;AAC1B,IAAA,OAAgB,OAAO,GAAG,EAAE;AAC5B,IAAA,OAAgB,GAAG,GAAG,EAAE;AACxB,IAAA,OAAgB,KAAK,GAAG,EAAE;AAC1B,IAAA,OAAgB,SAAS,GAAG,EAAE;AAC9B,IAAA,OAAgB,MAAM,GAAG,EAAE;AAC3B,IAAA,OAAgB,KAAK,GAAG,EAAE;AAC1B,IAAA,OAAgB,OAAO,GAAG,EAAE;AAC5B,IAAA,OAAgB,SAAS,GAAG,EAAE;AAC9B,IAAA,OAAgB,GAAG,GAAG,EAAE;AACxB,IAAA,OAAgB,IAAI,GAAG,EAAE;AACzB,IAAA,OAAgB,UAAU,GAAG,EAAE;AAC/B,IAAA,OAAgB,QAAQ,GAAG,EAAE;AAC7B,IAAA,OAAgB,WAAW,GAAG,EAAE;AAChC,IAAA,OAAgB,UAAU,GAAG,EAAE;AAC/B,IAAA,OAAgB,SAAS,GAAG,EAAE;AAC9B,IAAA,OAAgB,YAAY,GAAG,EAAE;AACjC,IAAA,OAAgB,MAAM,GAAG,EAAE;AAC3B,IAAA,OAAgB,MAAM,GAAG,EAAE;AAC3B,IAAA,OAAgB,IAAI,GAAG,EAAE;AACzB,IAAA,OAAgB,GAAG,GAAG,EAAE;AACxB,IAAA,OAAgB,GAAG,GAAG,EAAE;AACxB,IAAA,OAAgB,KAAK,GAAG,EAAE;AAC1B,IAAA,OAAgB,IAAI,GAAG,EAAE;AACzB,IAAA,OAAgB,IAAI,GAAG,EAAE;AACzB,IAAA,OAAgB,GAAG,GAAG,EAAE;AACxB,IAAA,OAAgB,KAAK,GAAG,EAAE;AAC1B,IAAA,OAAgB,KAAK,GAAG,EAAE;AAC1B,IAAA,OAAgB,IAAI,GAAG,EAAE;AACzB,IAAA,OAAgB,YAAY,GAAG,EAAE,CAAC;AAClC,IAAA,OAAgB,SAAS,GAAG,EAAE,CAAC;AAC/B,IAAA,OAAgB,aAAa,GAAG,EAAE;AAClC,IAAA,OAAgB,OAAO,GAAG,EAAE;AAC5B,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,CAAC,GAAG,EAAE;AACtB,IAAA,OAAgB,IAAI,GAAG,EAAE,CAAC;AAC1B,IAAA,OAAgB,eAAe,GAAG,EAAE;AACpC,IAAA,OAAgB,gBAAgB,GAAG,EAAE;AACrC,IAAA,OAAgB,YAAY,GAAG,EAAE;AACjC,IAAA,OAAgB,WAAW,GAAG,EAAE;AAChC,IAAA,OAAgB,UAAU,GAAG,EAAE;AAC/B,IAAA,OAAgB,UAAU,GAAG,EAAE;AAC/B,IAAA,OAAgB,YAAY,GAAG,EAAE;AACjC,IAAA,OAAgB,WAAW,GAAG,GAAG;AACjC,IAAA,OAAgB,WAAW,GAAG,GAAG;AACjC,IAAA,OAAgB,UAAU,GAAG,GAAG;AAChC,IAAA,OAAgB,YAAY,GAAG,GAAG;AAClC,IAAA,OAAgB,YAAY,GAAG,GAAG;AAClC,IAAA,OAAgB,WAAW,GAAG,GAAG;AACjC,IAAA,OAAgB,eAAe,GAAG,GAAG;AACrC,IAAA,OAAgB,WAAW,GAAG,GAAG;AACjC,IAAA,OAAgB,YAAY,GAAG,GAAG;AAClC,IAAA,OAAgB,aAAa,GAAG,GAAG;AACnC,IAAA,OAAgB,aAAa,GAAG,GAAG;AACnC,IAAA,OAAgB,EAAE,GAAG,GAAG;AACxB,IAAA,OAAgB,EAAE,GAAG,GAAG;AACxB,IAAA,OAAgB,EAAE,GAAG,GAAG;AACxB,IAAA,OAAgB,EAAE,GAAG,GAAG;AACxB,IAAA,OAAgB,EAAE,GAAG,GAAG;AACxB,IAAA,OAAgB,EAAE,GAAG,GAAG;AACxB,IAAA,OAAgB,EAAE,GAAG,GAAG;AACxB,IAAA,OAAgB,EAAE,GAAG,GAAG;AACxB,IAAA,OAAgB,EAAE,GAAG,GAAG;AACxB,IAAA,OAAgB,GAAG,GAAG,GAAG;AACzB,IAAA,OAAgB,GAAG,GAAG,GAAG;AACzB,IAAA,OAAgB,GAAG,GAAG,GAAG;AACzB,IAAA,OAAgB,QAAQ,GAAG,GAAG;AAC9B,IAAA,OAAgB,WAAW,GAAG,GAAG;AACjC,IAAA,OAAgB,WAAW,GAAG,GAAG;AACjC,IAAA,OAAgB,QAAQ,GAAG,GAAG;AAC9B,IAAA,OAAgB,IAAI,GAAG,GAAG,CAAC;AAC3B,IAAA,OAAgB,WAAW,GAAG,GAAG,CAAC;AAClC,IAAA,OAAgB,SAAS,GAAG,GAAG,CAAC;AAChC,IAAA,OAAgB,OAAO,GAAG,GAAG;AAC7B,IAAA,OAAgB,cAAc,GAAG,GAAG;AACpC,IAAA,OAAgB,UAAU,GAAG,GAAG;AAChC,IAAA,OAAgB,YAAY,GAAG,GAAG;AAClC,IAAA,OAAgB,SAAS,GAAG,GAAG,CAAC;AAChC,IAAA,OAAgB,MAAM,GAAG,GAAG,CAAC;AAC7B,IAAA,OAAgB,KAAK,GAAG,GAAG;AAC3B,IAAA,OAAgB,IAAI,GAAG,GAAG,CAAC;AAC3B,IAAA,OAAgB,MAAM,GAAG,GAAG;AAC5B,IAAA,OAAgB,KAAK,GAAG,GAAG;AAC3B,IAAA,OAAgB,UAAU,GAAG,GAAG;AAChC,IAAA,OAAgB,KAAK,GAAG,GAAG;AAC3B,IAAA,OAAgB,mBAAmB,GAAG,GAAG;AACzC,IAAA,OAAgB,SAAS,GAAG,GAAG;AAC/B,IAAA,OAAgB,oBAAoB,GAAG,GAAG;AAC1C,IAAA,OAAgB,YAAY,GAAG,GAAG;AAClC,IAAA,OAAgB,QAAQ,GAAG,GAAG;AAC9B,IAAA,OAAgB,QAAQ,GAAG,GAAG;;;ACxHhC;MAKa,wBAAwB,GAAG,CAAC,QAAgB,EAAE,cAA+B,KAAY;AACpG,IAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,cAAc,EAAE;AAChC,QAAA,OAAO,EAAE;IACX;AACA,IAAA,IAAI,QAAQ,GAAG,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,iBAAiB;AAE1E,IAAA,cAAc,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;AACnC,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACvB,QAAQ,GAAG,CAAA,EAAG,QAAQ,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA,CAAE;gBAC/C;YACF;AACA,YAAA,MAAM,IAAI,GAAG,CAAC,IAAI,YAAY,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,IAAY,EAAE,IAAY,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAkB;AAE3J,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACnB,gBAAA,IAAI,GAAG,CAAC,iBAAiB,EAAE,KAAK,KAAK,EAAE;oBACrC;gBACF;AACA,gBAAA,QAAQ,GAAG,CAAA,EAAG,QAAQ,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3D,YAAA,CAAC,CAAC;YACF;QACF;AACA,QAAA,QAAQ,GAAG,CAAA,EAAG,QAAQ,CAAA,EAAG,IAAI,EAAE;AACjC,IAAA,CAAC,CAAC;AAEF,IAAA,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC;AAClC,IAAA,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC;AAEjC,IAAA,OAAO,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,GAAG,CAAC,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,CAAC,CAAA,CAAE;AAClE;;AC9BO,MAAM,YAAY,GAAG,CAAC,KAAsB,KAAY;AAC7D,IAAA,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE;AAEjC,IAAA,IAAI,IAAI,KAAK,sBAAsB,CAAC,EAAE,EAAE;QACtC,OAAO,CAAA,EAAG,KAAK,CAAA,CAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IACvC;AAEA,IAAA,OAAO,GAAG,KAAK,CAAA,CAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;AAC5D;AAEA;MACa,wBAAwB,GAAG,CAAC,KAAsB,EAAE,mBAAwC,EAAE,UAAU,GAAG,CAAC,EAAE,qBAAqB,GAAG,KAAK,EAAE,gBAAgB,GAAG,KAAK,KAAS;AACzL,IAAA,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE;IAEjC,IAAI,CAAC,GAAG,KAAK,CAAA,CAAE,CAAC,IAAI,EAAE,EAAE;AACtB,QAAA,OAAO,EAAE;IACX;AACA,IAAA,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE;AACzD,QAAA,OAAO,CAAC;IACV;IACA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,qBAAqB,EAAE;AACvD,QAAA,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;IAC7B;IAEA,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC9C,IAAA,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AAEtD,IAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;QACrB,UAAU,GAAG,CAAC;IAChB;AACA,IAAA,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,UAAkB,KAAI;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC;QAEtC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK;AAC1C,IAAA,CAAC;IAED,IAAI,UAAU,IAAI,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE;AACxC,QAAA,MAAM,aAAa,GAAG,mBAAmB,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;QACjE,MAAM,KAAK,GAAG,aAAa,IAAI,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC;AAEnD,QAAA,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK;IACtD;AAEA,IAAA,IAAI,OAAO,IAAI,CAAC,gBAAgB,EAAE;AAChC,QAAA,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACnE;;AAGA,IAAA,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE;IACpC,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC;AAEtC,IAAA,IAAI,KAAK,KAAK,CAAC,CAAC,KAAK,UAAU,GAAG,CAAC,IAAI,gBAAgB,CAAC,EAAE;AACxD,QAAA,IAAI,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC;AACtE,QAAA,IAAI,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;QAE7C,IAAI,gBAAgB,EAAE;YACpB,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC;QACpD;AACA,QAAA,IAAI,IAAI,KAAK,sBAAsB,CAAC,EAAE,EAAE;YACtC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC;AAE/C,YAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,WAAW,EAAE;QAC/B;AACA,QAAA,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC;AAEjE,QAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,WAAW,EAAE;IAC/B;IACA,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE;AACnC,QAAA,IAAI,IAAI,KAAK,sBAAsB,CAAC,EAAE,EAAE;YACtC,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC;QAC/D;AAEA,QAAA,OAAO;AACJ,aAAA,QAAQ;AACR,aAAA,OAAO,CAAC,GAAG,EAAE,GAAG;AAChB,aAAA,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC;IAC1C;AACF;;ACjFA;AACO,MAAM,YAAY,GAAG,MAAK;AAC/B,IAAA,OAAO,6GAA6G;AACtH;AAEO,MAAM,iBAAiB,GAAG,MAAK;AACpC,IAAA,OAAO,mBAAmB;AAC5B;AAEO,MAAM,UAAU,GAAG,MAAK;AAC7B,IAAA,OAAO,8CAA8C;AACvD;AAEO,MAAM,cAAc,GAAG,MAAK;AACjC,IAAA,OAAO,mCAAmC;AAC5C;AAEO,MAAM,aAAa,GAAG,MAAK;AAChC,IAAA,OAAO,gHAAgH;AACzH;AAEO,MAAM,kBAAkB,GAAG,MAAK;AACrC,IAAA,OAAO,0BAA0B;AACnC;AAEO,MAAM,YAAY,GAAG,MAAK;AAC/B,IAAA,OAAO,gCAAgC;AACzC;AAEO,MAAM,aAAa,GAAG,MAAK;AAChC,IAAA,OAAO,MAAM;AACf;AACO,MAAM,gBAAgB,GAAG,MAAK;AACnC,IAAA,OAAO,iBAAiB;AAC1B;AACO,MAAM,WAAW,GAAG,MAAK;AAC9B,IAAA,OAAO,oBAAoB;AAC7B;AACO,MAAM,eAAe,GAAG,MAAK;AAClC,IAAA,OAAO,qJAAqJ;AAC9J;AACO,MAAM,kBAAkB,GAAG,MAAK;AACrC,IAAA,OAAO,8BAA8B;AACvC;AACO,MAAM,kBAAkB,GAAG,MAAK;AACrC,IAAA,OAAO,gBAAgB;AACzB;AACO,MAAM,YAAY,GAAG,MAAK;AAC/B,IAAA,OAAO,oGAAoG;AAC7G;AACO,MAAM,uBAAuB,GAAG,MAAK;AAC1C,IAAA,OAAO,0BAA0B;AACnC;AACO,MAAM,iCAAiC,GAAG,MAAK;AACpD,IAAA,OAAO,cAAc;AACvB;AAEO,MAAM,UAAU,GAAG,MAAK;AAC7B,IAAA,OAAO,2DAA2D;AACpE;AAEO,MAAM,UAAU,GAAG,MAAK;AAC7B,IAAA,OAAO,2BAA2B;AACpC;AAEO,MAAM,UAAU,GAAG,MAAK;AAC7B,IAAA,OAAO,2BAA2B;AACpC;AAEO,MAAM,cAAc,GAAG,MAAK;AACjC,IAAA,OAAO,6BAA6B;AACtC;;ACrEA,IAAI,iBAAiB,GAAsB,OAAO,KAAa,KAAqB;AAClF,IAAA,OAAO,KAAK;AACd,CAAC;AAEM,MAAM,uBAAuB,GAAG,CAAC,cAAiC,KAAI;IAC3E,iBAAiB,GAAG,cAAc;AACpC;MAEa,SAAS,GAAsB,OAAO,IAAY,KAAI;AACjE,IAAA,OAAO,MAAM,iBAAiB,CAAC,IAAI,CAAC;AACtC;;ACRO,MAAM,kBAAkB,GAAG;AAE3B,MAAM,SAAS,GAAG,CAAC,KAAa,KAAI;IACzC,OAAO,kBAAkB,CACvB;SACG,KAAK,CAAC,EAAE;AACR,SAAA,GAAG,CAAC,CAAC,CAAS,KAAI;QACjB,OAAO,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9D,IAAA,CAAC;AACA,SAAA,IAAI,CAAC,EAAE,CAAC,CACZ;AACH;AAEO,MAAM,SAAS,GAAG,CAAC,KAAa,KAAI;AACzC,IAAA,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE,KAAI;QACzE,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC9C,IAAA,CAAC,CAAC;AACJ;MAEa,UAAU,GAAG,CAAC,MAAmB,EAAE,MAAe,KAAY;AACzE,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,KAAK,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAChE,IAAI,GAAG,GAAG,EAAE;AAEZ,IAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AACtB,QAAA,GAAG,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE;IACjD;AAEA,IAAA,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,CAAA,EAAG,MAAM,GAAG,EAAE,GAAG,GAAG,CAAA,EAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA,CAAE;AACpE;;AC9BO,MAAM,YAAY,GAAG,CAAC,KAAa,KAAI;AAC5C,IAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B;AAEO,MAAM,YAAY,GAAG,CAAC,KAAa,KAAI;AAC5C,IAAA,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B;AAEO,MAAM,mBAAmB,GAAG,CAAC,UAAkB,KAAI;IACxD,MAAM,aAAa,GAAG,UAAU;IAEhC,IAAI,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE;QAC5C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AACnC,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAEnD,QAAA,OAAO,IAAI;IACb;IACA,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC;AAC7C,IAAA,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACjC,IAAA,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM;AAC5B,IAAA,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC;AAE5C,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE;QAClC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IACnC;AAEA,IAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAE1D,IAAA,OAAO,IAAI;AACb;MAEa,6BAA6B,GAAG,OAAO,IAAU,KAAmC;IAC/F,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;AAC/B,QAAA,OAAO,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;IAClC;AAEA,IAAA,OAAO,MAAM,mBAAmB,CAAC,IAAI,CAAC;AACxC;AAEO,MAAM,mBAAmB,GAAG,CAAC,IAAU,KAAmC;AAC/E,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAE/B,QAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1B,QAAA,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,KAAI;YACxB,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC;AACrC,QAAA,CAAC;AACH,IAAA,CAAC,CAAC;AACJ;;MCnDa,8BAA8B,GAAG,CAAC,OAAe,EAAE,QAAgB,KAAI;AAClF,IAAA,MAAM,UAAU,GAAG,IAAI,cAAc,EAAE;IAEvC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC;AACrC,IAAA,UAAU,CAAC,YAAY,GAAG,MAAM;AAChC,IAAA,UAAU,CAAC,OAAO,GAAG,MAAK;AACxB,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC;AAE3D,QAAA,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC;AAClC,IAAA,CAAC;AACD,IAAA,UAAU,CAAC,MAAM,GAAG,MAAK;AACvB,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC;AAE3D,QAAA,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC;AAClC,IAAA,CAAC;IACD,UAAU,CAAC,IAAI,EAAE;AACnB;AAEO,MAAM,iBAAiB,GAAG,OAAO,OAAe,EAAE,QAAgB,EAAE,QAAkB,KAAI;IAC/F,MAAM,mBAAmB,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;IAEvD,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;AAErC,QAAA,IAAI,QAAQ,CAAC,EAAE,EAAE;AACf,YAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;AAElC,YAAA,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;QACrC;IACF;AACA,IAAA,mBAAmB,CAAC,IAAI,GAAG,OAAO;AAClC,IAAA,mBAAmB,CAAC,QAAQ,GAAG,QAAQ;AACvC,IAAA,mBAAmB,CAAC,MAAM,GAAG,QAAQ;IACrC,mBAAmB,CAAC,KAAK,EAAE;IAC3B,mBAAmB,CAAC,MAAM,EAAE;AAC9B;AAEO,MAAM,wBAAwB,GAAG,CAAC,YAA8B,EAAE,gBAAyB,EAAE,QAAiB,KAAI;AACvH,IAAA,MAAM,aAAa,GAAG,YAAY,EAAE,GAAG;AACvC,IAAA,MAAM,QAAQ,GAAG,mBAAmB,CAAC,aAAa,CAAC;AACnD,IAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,gBAAgB,IAAI,WAAW,EAAE,CAAC;IAC5E,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;IAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AAExC,IAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AACf,IAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,SAAS;IACrC,IAAI,CAAC,KAAK,EAAE;AACd;;AC/CA;MACa,6BAA6B,GAAG,IAAI,cAAc,CAAS,+BAA+B;MAC1F,gDAAgD,GAAG,IAAI,cAAc,CAAS,kDAAkD;MAChI,6CAA6C,GAAG,IAAI,cAAc,CAAS,+CAA+C;;ACAhI,MAAM,WAAW,GAAG,CAAC,IAAiB,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,KAAK;AACrF,MAAM,WAAW,GAAG,CAAC,IAAiB,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,KAAK;AACrF,MAAM,WAAW,GAAG,CAAC,IAAiB,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,KAAK;AACrF,MAAM,UAAU,GAAG,CAAC,IAAU,MAAM,IAAI,YAAY,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,eAAe,GAAG,IAAI,GAAG,KAAK;AAEnI,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,0BAA0B,EAAE,mEAAmE;AACpI,MAAM,eAAe,GAAG;IAC7B,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,oBAAoB;IACpB,yEAAyE;IACzE,0BAA0B;IAC1B,mEAAmE;IACnE,+BAA+B;IAC/B,2EAA2E;IAC3E,iBAAiB;IACjB,kBAAkB;IAClB,iBAAiB;;AAEZ,MAAM,wBAAwB,GAAG,CAAC,GAAW,EAAE,OAAA,GAAyB,eAAe,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAA,YAAA,EAAe,GAAG,CAAA,CAAE;MAEpJ,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM;AAC/G,MAAM,qBAAqB,GAAG,CAAC,GAAW,EAAE,OAAA,GAAyB,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG;AAE1G,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB;AAC1I,MAAM,qBAAqB,GAAG,CAAC,GAAW,EAAE,OAAA,GAAyB,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG;AAC1G,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB;AACxK,MAAM,qBAAqB,GAAG,CAAC,GAAW,EAAE,OAAA,GAAyB,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG;AAE1G,MAAM,gBAAgB,GAAG,CAAC,IAAkB,KAAI;IACrD,IAAI,IAAI,YAAY,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;AACrC,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE;IACzD;IACA,IAAI,GAAG,IAAa;IACpB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;QACpC,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI;IACzC;AAEA,IAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAc;AAClC,IAAA,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC;AACvD,IAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE;QACrB;IACF;AACA,IAAA,IAAI,CAAC,QAAQ,IAAI,GAAG,EAAE;AACpB,QAAA,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE;AACrC,QAAA,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC;IAC7B;IACA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;IAEhC,IAAI,CAAC,IAAI,EAAE;QACT;IACF;IAEA,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE;AACzC;AAEO,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,OAAO,GAAG,CAAC,KAAI;AAC9D,IAAA,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE;AACtB,QAAA,OAAO,CAAA,CAAA,EAAI,CAAC,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA,GAAA,CAAK;IAChD;AAEA,IAAA,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;AACzD;MAEa,iBAAiB,GAAG,CAAC,IAAU,EAAE,QAAiB,KAAU;AACvE,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpC,IAAA,MAAM,IAAI,GAAG,QAAQ,GAAG,CAAA,EAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,GAAG,CAAA,EAAG,IAAI,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;IAEjF,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AAC9E;MAEa,gBAAgB,GAAG,CAAC,GAAW,EAAE,QAAiB,KAAI;IACjE,OAAO,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,MAAM,KAAI;AACvD,QAAA,MAAM,GAAG,GAAG,IAAI,cAAc,EAAE;QAChC,GAAG,CAAC,MAAM,GAAG,YAAA;AACX,YAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,YAAA,MAAM,CAAC,SAAS,GAAG,MAAK;gBACtB,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAgB,CAAC;AACzD,gBAAA,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;AAC3E,YAAA,CAAC;YACD,MAAM,CAAC,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC;AACzC,YAAA,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;AACpC,QAAA,CAAC;AACD,QAAA,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,KAAI;YACpB,MAAM,CAAC,GAAG,CAAC;AACb,QAAA,CAAC;AACD,QAAA,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;AACpB,QAAA,GAAG,CAAC,YAAY,GAAG,MAAM;QACzB,GAAG,CAAC,IAAI,EAAE;AACZ,IAAA,CAAC,CAAC;AACJ;;AClGO,MAAM,kBAAkB,GAAG,CAAC,KAAyB,EAAE,MAA0B,EAAE,eAAyB,EAAE,eAAwB,KAAI;IAC/I,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,oBAAoB;IAC7B;AACA,IAAA,IAAI;AACF,QAAA,IAAI,CAAC,MAAM,IAAI,eAAe,EAAE;AAC9B,YAAA,OAAO,KAAK;QACd;QACA,MAAM,WAAW,GAAkB,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;QAEjE,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACvC,YAAA,OAAO,KAAK;QACd;QACA,IAAI,CAAC,eAAe,EAAE;YACpB,eAAe,GAAG,yBAAyB;QAC7C;AACA,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YAC1B,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC;YAEpC,KAAK,GAAG,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAA,aAAA,EAAgB,eAAe,CAAA,WAAA,CAAa,CAAC;AAC9E,QAAA,CAAC,CAAC;IACJ;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IACpB;YAAU;;AAER,QAAA,OAAO,KAAK;IACd;AACF;AAEA,MAAM,eAAe,GAAG,CAAC,MAAc,EAAE,KAAa,KAAc;IAClE,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;IACzD,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;AACvD,IAAA,MAAM,IAAI,GAAgB,IAAI,GAAG,EAAE;IACnC,IAAI,CAAC,GAAG,CAAC;AAET,IAAA,OAAO,CAAC,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;AACxD,QAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM;AAElC,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACtC,QAAA,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM;IAC3B;AAEA,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,CAAC;MAEY,iBAAiB,GAAG,CAAC,IAAY,EAAE,OAA4B,KAAI;IAC9E,IAAI,CAAC,IAAI,EAAE;AACT,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAE5B,IAAA,OAAO,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC;AACvC;AAEO,MAAM,cAAc,GAAG,CAAC,KAAa,KAAI;IAC9C,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,KAAK;IACd;IACA,OAAO,UAAU,CAAC,KAAK,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACvH;MAEa,UAAU,GAAG,CAAC,IAAY,EAAE,OAA4B,KAAI;IACvE,IAAI,CAAC,IAAI,EAAE;AACT,QAAA,OAAO,IAAI;IACb;AACA,IAAA,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC;AACrC,IAAA,OAAO;SACJ,KAAK,CAAC,GAAG;SACT,GAAG,CAAC,CAAC,IAAI,KAAK,sBAAsB,CAAC,IAAI,CAAC;SAC1C,IAAI,CAAC,GAAG,CAAC;AACd;MAEa,sBAAsB,GAAG,CAAC,IAAY,EAAE,OAA4B,KAAI;IACnF,IAAI,CAAC,IAAI,EAAE;AACT,QAAA,OAAO,IAAI;IACb;IACA,OAAO,mBAAmB,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC;AAC9C;AAEO,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAE,OAA4B,KAAI;IAClG,IAAI,CAAC,IAAI,EAAE;AACT,QAAA,OAAO,IAAI;IACb;AACA,IAAA,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC;AACrC,IAAA,OAAO,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE;AAC9G;AAEA,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,OAA4B,KAAI;AACrE,IAAA,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AACrB,QAAA,OAAO,IAAI;IACb;AACA,IAAA,IAAI,OAAO,EAAE,uBAAuB,EAAE;AACpC,QAAA,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;IAC3B;AAEA,IAAA,IAAI,OAAO,EAAE,uBAAuB,EAAE;AACpC,QAAA,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;IAC3B;AAEA,IAAA,IAAI,OAAO,EAAE,mBAAmB,EAAE;QAChC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;QACzC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;IAClC;AAEA,IAAA,IAAI,OAAO,EAAE,WAAW,EAAE;AACxB,QAAA,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;IAC1B;AAEA,IAAA,IAAI,OAAO,EAAE,aAAa,EAAE;AAC1B,QAAA,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;IAC5B;AAEA,IAAA,IAAI,OAAO,EAAE,IAAI,EAAE;AACjB,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;IACpB;AAEA,IAAA,OAAO,IAAI;AACb,CAAC;AAEM,MAAM,UAAU,GAAG,CAAC,GAAW,KAAY;IAChD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AACnC,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC/H;AAEO,MAAM,gBAAgB,GAAG,CAAC,GAAW,KAAY;IACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;AAElD,IAAA,OAAO,CAAC,SAAS,GAAG,GAAG;IACvB,OAAO,GAAG,EAAE;AACV,QAAA,IAAI,GAAG,KAAK,OAAO,CAAC,KAAK,EAAE;AACzB,YAAA,GAAG,GAAG,OAAO,CAAC,KAAK;YACnB,OAAO,CAAC,MAAM,EAAE;YAChB;QACF;AACA,QAAA,GAAG,GAAG,OAAO,CAAC,KAAK;AACnB,QAAA,OAAO,CAAC,SAAS,GAAG,GAAG;IACzB;AAEA,IAAA,OAAO,GAAG;AACZ;AAEO,MAAM,aAAa,GAAG,CAAC,GAAW,KAAI;IAC3C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,oCAAoC,EAAE,GAAG,CAAC;IAC5D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,2BAA2B,EAAE,GAAG,CAAC;IACnD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;IACpC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,oCAAoC,EAAE,GAAG,CAAC;IAC5D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC;IAChD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;IACpC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;IAC5B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,oCAAoC,EAAE,GAAG,CAAC;IAC5D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC;IAChD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;IACpC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,oCAAoC,EAAE,GAAG,CAAC;IAC5D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC;IAChD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;IACpC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;IAE5B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAC;IAC7D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;AAE/C,IAAA,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC;AAC7B;AAEO,MAAM,WAAW,GAAG,CAAC,IAAY,KAAI;IAC1C,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;AACzB,QAAA,OAAO,IAAI;IACb;IAEA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC;AACzC;;AChLA,MAAM,sBAAsB,GAAG,CAAC;AAChC,MAAM,sBAAsB,GAAG,EAAE;AACjC,MAAM,oBAAoB,GAAG,CAAC;AAC9B,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAClC,MAAM,cAAc,GAAG,EAAE;AACzB,MAAM,mBAAmB,GAAG,EAAE;AAmB9B;;;;;;;;;;;;;;;;;AAiBG;MACU,iBAAiB,GAAG,CAAC,eAAuB,EAAE,OAA0B,KAAqB;IACxG,IAAI,OAAO,GAAG,eAAe;AAE7B,IAAA,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC;AAChC,IAAA,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,sBAAsB;AACpE,IAAA,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,sBAAsB;IAEpE,IAAI,cAAc,GAAG,CAAC;IACtB,IAAI,aAAa,GAAG,OAAO;AAE3B,IAAA,IAAI,OAAO,EAAE,cAAc,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AAC1D,QAAA,IAAI,OAAO,KAAK,CAAC,EAAE;YACjB,OAAO,GAAG,CAAC,CAAC;QACd;AACA,QAAA,IAAI,OAAO,IAAI,CAAC,EAAE;AAChB,YAAA,aAAa,GAAG,OAAO,CAAC,WAAW;QACrC;AACA,QAAA,IAAI,aAAa,GAAG,kBAAkB,EAAE;YACtC,aAAa,GAAG,uBAAuB;QACzC;AACA,QAAA,IAAI,OAAO,GAAG,CAAC,EAAE;YACf,aAAa,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;YACvD,cAAc,GAAG,CAAC,CAAC;QACrB;IACF;IACA,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,oBAAoB,EAAE;QAClD,aAAa,GAAG,oBAAoB;IACtC;IAEA,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,IAAI,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,CAAC;AAC5K,IAAA,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE;AACjC,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,IAAI,cAAc,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3F,QAAA,IAAI,QAAQ,GAAG,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,cAAc;QACnE,IAAI,QAAQ,GAAG,CAAC;QAEhB,IAAI,SAAS,IAAI,YAAY,IAAI,SAAS,IAAI,YAAY,EAAE;AAC1D,YAAA,IAAI,OAAO,GAAG,QAAQ,EAAE;AACtB,gBAAA,IAAI,OAAO,EAAE,cAAc,EAAE;oBAC3B,IAAI,IAAI,GAAG,CAAC;AACZ,oBAAA,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,IAAI,SAAS,IAAI,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE;AAC1F,wBAAA,QAAQ,GAAG,IAAI,GAAG,IAAI;AACtB,wBAAA,IAAI,EAAE;oBACR;gBACF;gBACA,MAAM,gBAAgB,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACtD,SAAS,GAAG,gBAAgB,GAAG,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,YAAY,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS;gBAE5H,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,cAAc,GAAG,QAAQ,GAAG,cAAc;gBACxE,OAAO;AACL,oBAAA,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,oBAAA,GAAG,EAAE,QAAQ;AACb,oBAAA,GAAG,EAAE,QAAQ;AACb,oBAAA,UAAU,EAAE,SAAS;iBACtB;YACH;QACF;IACF;AAEA,IAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC;AACvD,IAAA,IAAI,QAAQ,GAAG,IAAI,GAAG,YAAY;AAClC,IAAA,IAAI,aAAa,KAAK,QAAQ,EAAE;QAC9B,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AAClC,QAAA,QAAQ,GAAG,IAAI,GAAG,YAAY;IAChC;IACA,OAAO;AACL,QAAA,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,GAAG,EAAE,QAAQ;AACb,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,UAAU,EAAE,YAAY;KACzB;AACH;AAEA;AACA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB;AAE7C;;;;;;;;;AASG;AACH,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAAE,OAAe,EAAE,WAAmB,EAAE,qBAAqB,GAAG,KAAK,EAAE,uBAAkC,EAAE,oBAAoB,GAAG,KAAK,KAAc;;IAE7L,IAAI,uBAAuB,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE;AACjE,QAAA,OAAO,uBAAuB;IAChC;AAEA,IAAA,MAAM,cAAc,GAAG,IAAI,KAAK,EAAU;IAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;;AAGtF,IAAA,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,IAAI,cAAc,EAAE,SAAS,EAAE,EAAE;;QAEhE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAC/B,YAAA,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACrD;QACA,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAW;AAErD,QAAA,KAAK,IAAI,cAAc,GAAG,CAAC,EAAE,cAAc,GAAG,mBAAmB,EAAE,cAAc,EAAE,EAAE;;YAEnF,IAAI,qBAAqB,EAAE;AACzB,gBAAA,MAAM,IAAI,GAAG,QAAQ,IAAI,CAAC,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5D,gBAAA,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3B;AAEA,YAAA,MAAM,IAAI,GAAG,QAAQ,GAAG,cAAc;AACtC,YAAA,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGzB,YAAA,IAAI,IAAI,IAAI,YAAY,EAAE;AACxB,gBAAA,wBAAwB,CAAC,cAAc,EAAE,oBAAoB,EAAE,WAAW,CAAC;AAC3E,gBAAA,OAAO,cAAc;YACvB;QACF;IACF;AAEA,IAAA,wBAAwB,CAAC,cAAc,EAAE,oBAAoB,EAAE,WAAW,CAAC;AAC3E,IAAA,OAAO,cAAc;AACvB,CAAC;AAED;;;;;AAKG;AACH,MAAM,wBAAwB,GAAG,CAAC,cAAwB,EAAE,cAAuB,EAAE,WAAmB,KAAU;AAChH,IAAA,IAAI,cAAc,IAAI,WAAW,GAAG,CAAC,EAAE;;AAErC,QAAA,MAAM,aAAa,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;AAC9D,QAAA,cAAc,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC;IAC1C;AACF,CAAC;AAED;;;;;AAKG;AACH,MAAM,cAAc,GAAG,CAAC,OAAe,EAAE,OAA0B,KAAU;;IAE3E,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE;AAC3C,QAAA,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC;IACvE;AAEA,IAAA,IAAI,OAAO,EAAE,cAAc,EAAE;;AAE3B,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AAC9B,YAAA,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC;QACxE;;AAGA,QAAA,IAAI,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE;AACjC,YAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC;QACrD;;AAGA,QAAA,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;AAC5B,YAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;QACjD;IACF;AACF,CAAC;;AClNM,MAAM,aAAa,GAAG,CAAC,KAAa,KAAY;IACrD,MAAM,MAAM,GAAG,EAAE;IACjB,MAAM,OAAO,GAAG;SACb,KAAK,CAAC,EAAE;AACR,SAAA,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAC9D,SAAA,OAAO;SACP,IAAI,CAAC,EAAE,CAAC;AACX,IAAA,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB;AAEO,MAAM,YAAY,GAAG,CAAC,OAAe,KAAY;IACtD,MAAM,MAAM,GAAG,EAAE;AACjB,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;IAC1B,MAAM,OAAO,GAAG;SACb,KAAK,CAAC,EAAE;AACR,SAAA,OAAO;AACP,SAAA,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;SACxD,IAAI,CAAC,EAAE,CAAC;AACX,IAAA,OAAO,OAAO;AAChB;MAEa,8BAA8B,GAAG,CAAC,GAAW,EAAE,GAAW,KAAI;IACzE,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE;AAC5B,QAAA,MAAM,IAAI,KAAK,CAAC,CAAA,qDAAA,CAAuD,CAAC;IAC1E;IAEA,MAAM,OAAO,GAAa,EAAE;AAE5B,IAAA,OAAO,MAAa;AAClB,QAAA,IAAI,GAAW;QACf,IAAI,IAAI,GAAG,CAAC;AAEZ,QAAA,GAAG;YACD,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;AACvD,YAAA,IAAI,EAAE;AAEN,YAAA,IAAI,IAAI,GAAG,IAAI,EAAE;gBACf;YACF;AACF,QAAA,CAAC,QAAQ,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;AAE9B,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAEjB,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE;YACvB,OAAO,CAAC,KAAK,EAAE;QACjB;AAEA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC;AACH;;MCjDa,aAAa,GAAG,CAAI,QAAgB,EAAE,IAAS,KAAY;AACtE,IAAA,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE;AACxB,QAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IACrB;AACA,IAAA,OAAO,QAAQ;AACjB;AAEA;MACa,iBAAiB,GAAG,CAAmB,IAAY,EAAE,WAA6B,KAAc;IAC3G,IAAI,WAAW,EAAE;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;IACtC;AAEA,IAAA,OAAO,CAAC,GAAG,IAAI,CAAwB;AACzC;;ACdA;;;;AAIG;AACI,MAAM,aAAa,GAAG,CAAC,GAAY,KAAY;AACpD,IAAA,IAAI;;QAEF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;;QAGhC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QAEnC,IAAI,KAAK,GAAG,IAAI;YAAE,OAAO,CAAA,EAAG,KAAK,CAAA,MAAA,CAAQ;AACzC,QAAA,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;AAAE,YAAA,OAAO,CAAA,EAAG,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA,GAAA,CAAK;AACjE,QAAA,OAAO,GAAG,CAAC,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK;IACnD;AAAE,IAAA,MAAM;;AAEN,QAAA,OAAO,KAAK;IACd;AACF;;ACpBA;;AAEG;;;;"}
1
+ {"version":3,"file":"libs-ui-utils.mjs","sources":["../../../../libs-ui/utils/src/dangerous-object.ts","../../../../libs-ui/utils/src/crypto.ts","../../../../libs-ui/utils/src/crypto-3rd.ts","../../../../libs-ui/utils/src/function-check-embed-frame.ts","../../../../libs-ui/utils/src/constants.ts","../../../../libs-ui/utils/src/communicate-micro.ts","../../../../libs-ui/utils/src/language.ts","../../../../libs-ui/utils/src/uuid.ts","../../../../libs-ui/utils/src/cache.ts","../../../../libs-ui/utils/src/date.ts","../../../../libs-ui/utils/src/http-params.ts","../../../../libs-ui/utils/src/two-way-signal-object.ts","../../../../libs-ui/utils/src/helpers.ts","../../../../libs-ui/utils/src/dom.ts","../../../../libs-ui/utils/src/url-search-params.ts","../../../../libs-ui/utils/src/color.ts","../../../../libs-ui/utils/src/key-code.ts","../../../../libs-ui/utils/src/key-cache.ts","../../../../libs-ui/utils/src/format-number.ts","../../../../libs-ui/utils/src/pattern.ts","../../../../libs-ui/utils/src/xss-filter.ts","../../../../libs-ui/utils/src/uri.ts","../../../../libs-ui/utils/src/base64.ts","../../../../libs-ui/utils/src/download.ts","../../../../libs-ui/utils/src/inject-token.ts","../../../../libs-ui/utils/src/file.ts","../../../../libs-ui/utils/src/format-text.ts","../../../../libs-ui/utils/src/get-smart-axis-scale.ts","../../../../libs-ui/utils/src/random.ts","../../../../libs-ui/utils/src/collection.ts","../../../../libs-ui/utils/src/data.ts","../../../../libs-ui/utils/src/url.ts","../../../../libs-ui/utils/src/trace.ts","../../../../libs-ui/utils/src/libs-ui-utils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParams } from '@angular/common/http';\nimport { TemplateRef, ElementRef } from '@angular/core';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { Observable } from 'rxjs';\n\n/**\n * Danh sách các constructor name nguy hiểm\n */\nconst DANGEROUS_CONSTRUCTOR_NAMES = ['Window', 'Document', 'HTMLDocument', 'HTMLElement', 'Element', 'Node', 'Location', 'Navigator', 'Screen', 'History', 'Storage', 'Console', 'Performance'] as const;\n\n/**\n * Kiểm tra xem đối tượng có phải là browser global object không\n */\nexport const isBrowserGlobalObject = (obj: any): obj is Window | Document | Window | Document | typeof globalThis => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof Window || obj instanceof Document || obj === window || obj === document || obj === globalThis;\n};\n\n/**\n * Kiểm tra xem đối tượng có phải là DOM object không\n */\nexport const isDOMObject = (obj: any): obj is HTMLElement | Node | Element => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof HTMLElement || obj instanceof Node || obj instanceof Element;\n};\n\n/**\n * Kiểm tra xem đối tượng có phải là browser API object không\n */\nexport const isBrowserAPIObject = (obj: any): boolean => {\n if (obj === null || typeof obj !== 'object' || typeof window === 'undefined') {\n return false;\n }\n return obj === window.location || obj === window.navigator || obj === window.screen || obj === window.history || obj === window.localStorage || obj === window.sessionStorage || obj === window.console || obj === window.performance;\n};\n\n/**\n * Kiểm tra constructor name có nằm trong danh sách nguy hiểm không\n */\nexport const hasDangerousConstructorName = (obj: any): boolean => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n const constructorName = obj.constructor?.name;\n return constructorName && DANGEROUS_CONSTRUCTOR_NAMES.includes(constructorName as any);\n};\n\n/**\n * Kiểm tra xem đối tượng có phải là DOM object hoặc browser object nguy hiểm không\n * Những đối tượng này có thể gây ra circular reference và maximum call stack\n */\nexport const isDangerousObject = (obj: any): boolean => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n\n return isBrowserGlobalObject(obj) || isDOMObject(obj) || isBrowserAPIObject(obj) || hasDangerousConstructorName(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là Angular/Framework object không\n */\nexport const isFrameworkObject = <T = any>(obj: any): obj is TemplateRef<T> | ElementRef<T> => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof TemplateRef || obj instanceof ElementRef;\n};\n\n/**\n * Kiểm tra đối tượng có phải là File/Blob object không\n */\nexport const isFile = (obj: any): obj is File | Blob => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof File || obj instanceof Blob || Object.prototype.toString.call(obj) === '[object File]';\n};\n\n/**\n * Kiểm tra đối tượng có phải là Built-in object không\n */\nexport const isBuiltInObject = (obj: any): obj is Date | RegExp | HttpParams => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof Date || isRegExp(obj) || obj instanceof HttpParams || ('hasOwnProperty' in obj && '__ngContext__' in obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là RegExp object không\n */\nexport const isRegExp = (obj: any): obj is RegExp => {\n return obj instanceof RegExp;\n};\n\n/**\n * Kiểm tra đối tượng có phải là Async object không\n */\nexport const isAsyncObject = <T = any>(obj: any): obj is Promise<T> | Observable<T> => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return obj instanceof Promise || obj instanceof Observable;\n};\n\n/**\n * Kiểm tra đối tượng có phải là Special object cần bỏ qua không\n * Bao gồm: Framework objects, File objects, Built-in objects, Async objects\n */\nexport const isSpecialObject = (obj: any): boolean => {\n return isFrameworkObject(obj) || isFile(obj) || isBuiltInObject(obj) || isAsyncObject(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là dayjs object không\n */\nexport const isDayjsObject = (obj: any): obj is Dayjs => {\n return dayjs.isDayjs(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là object cần bỏ qua trong quá trình convert không\n */\nexport const isSkippableObject = (obj: any): boolean => {\n return isDangerousObject(obj) || isSpecialObject(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là Map object không\n */\nexport const isMap = <T = any>(obj: any): obj is Map<string, T> => {\n return obj instanceof Map;\n};\n\n/**\n * Kiểm tra đối tượng có phải là Set object không\n */\nexport const isSet = <T = any>(obj: any): obj is Set<T> => {\n return obj instanceof Set;\n};\n\n/**\n * Kiểm tra đối tượng có phải là Array object không\n */\nexport const isArray = <T = any>(obj: any): obj is Array<T> => {\n return Array.isArray(obj);\n};\n\n/**\n * Kiểm tra đối tượng có phải là object cần trả về nguyên trạng không\n * Bao gồm: dangerous objects, special objects, dayjs objects\n */\nexport const isReturnAsIsObject = (obj: any): boolean => {\n return isSkippableObject(obj) || isDayjsObject(obj);\n};\n\n/**\n * Kiểm tra xem đối tượng có an toàn để clone/convert không\n */\nexport const isSafeToProcess = (obj: any): boolean => {\n return !isDangerousObject(obj);\n};\n","import CryptoES from 'crypto-es';\n\nlet key = '12~@#loqwsxacva(3rdhaq12';\n\n/**\n * @description Thiết lập key mã hóa\n * @param value key mã hóa, độ dài bằng 24 hoặc 32 ký tự.\n */\nexport const setKeyCrypto = (value: string) => {\n if (value.length !== 24 && value.length !== 32) {\n throw Error(`key.length = ${value.length}; Key phải là 1 chuỗi dài 24 hoặc 32 ký tự`);\n }\n key = value;\n};\n\nconst keyStore = () => {\n return key;\n};\n\nexport const encrypt = (plainData: string): string => {\n if (!keyStore()) {\n throw Error('lỗi chưa setup key mã hóa');\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.encrypt(plainData, key, options).toString();\n};\n\nexport const decrypt = (encryptedData: string): string => {\n if (!keyStore()) {\n throw Error('lỗi chưa setup key mã hóa');\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.decrypt(encryptedData, key, options).toString(CryptoES.enc.Utf8);\n};\n\nexport const md5 = (plainData: string) => {\n return CryptoES.MD5(plainData).toString();\n};\n","import CryptoES from 'crypto-es';\n\nlet key = '12~@#loqwsxacva(3rdhaq12';\n\n/**\n * @description Thiết lập key mã hóa\n * @param value key mã hóa, độ dài bằng 24 hoặc 32 ký tự.\n */\nexport const setKeyCrypto3rd = (value: string) => {\n if (value.length !== 24 && value.length !== 32) {\n throw Error(`key.length = ${value.length}; Key phải là 1 chuỗi dài 24 hoặc 32 ký tự`);\n }\n key = value;\n};\n\nconst keyStore = () => {\n return key;\n};\n\nexport const encrypt3rd = (plainData: string): string => {\n if (!keyStore()) {\n throw Error('lỗi chưa setup key mã hóa');\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.encrypt(plainData, key, options).toString();\n};\n\nexport const decrypt3rd = (encryptedData: string): string => {\n if (!keyStore()) {\n throw Error('lỗi chưa setup key mã hóa');\n }\n const key = CryptoES.enc.Hex.parse(keyStore());\n const iv = CryptoES.enc.Hex.parse(keyStore());\n const mode = CryptoES.mode.CBC;\n const padding = CryptoES.pad.Pkcs7;\n const options = { iv: iv, mode: mode, padding: padding };\n\n return CryptoES.AES.decrypt(encryptedData, key, options).toString(CryptoES.enc.Utf8);\n};\n","//NOTE: Do là function truyền từ bên ngoài vào nên sẽ không có unit test\nlet functionCheck = () => {\n return window.parent !== window.top;\n};\nexport const updateFunctionCheckEmbedFrame = (functionCustom: () => boolean) => {\n functionCheck = functionCustom;\n};\n\nexport const isEmbedFrame = (): boolean => {\n return functionCheck();\n};\n","export const ERROR_MESSAGE_EMPTY_VALID = 'i18n_valid_empty_message';\nexport const ERROR_MESSAGE_PATTEN_VALID = 'i18n_valid_pattern_message';\nexport const ERROR_MESSAGE_MIN_VALID = 'i18n_message_error_input_min_value';\nexport const ERROR_MESSAGE_MAX_VALID = 'i18n_message_error_input_max_value';\nexport const ERROR_MESSAGE_MIN_LENGTH = 'i18n_message_error_input_min_length';\nexport const ERROR_MESSAGE_MAX_LENGTH = 'i18n_message_error_input_max_length';\nexport const CHARACTER_DATA_EMPTY = '__';\nexport const DEFAULT_START_PAGE_0 = 'defaultStartPage0';\nexport const COMMUNICATE_MICRO_PREFIX_TYPE = '3RD_INTEGRATE_MICRO_SITE_';\nexport const COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE = 'MICRO_SITES_ALL_MESSAGE';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Subject, filter, fromEvent, takeUntil } from 'rxjs';\nimport { decrypt, encrypt } from './crypto';\nimport { decrypt3rd, encrypt3rd } from './crypto-3rd';\nimport { isEmbedFrame } from './function-check-embed-frame';\nimport { UtilsCache } from './cache';\nimport { COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE, COMMUNICATE_MICRO_PREFIX_TYPE } from './constants';\nimport { DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nexport class UtilsCommunicateMicroKeyGlobal {\n public static KEY_MESSAGE_MODAL = 'LIBS_UI_MODEL_EVENT';\n}\n\nexport class UtilsCommunicateMicro {\n private static initdEvent?: boolean;\n private static subs: Map<string, Subject<MessageEvent>> = new Map();\n private static allMessageSub: Subject<MessageEvent> = new Subject();\n\n public static initEvent(currentWindow: Window, destroyRef: DestroyRef) {\n if (this.initdEvent) {\n return;\n }\n this.initdEvent = true;\n if (!this.subs.get(COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE)) {\n this.subs.set(COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE, UtilsCommunicateMicro.allMessageSub);\n }\n\n fromEvent<MessageEvent>(currentWindow, 'message')\n .pipe(takeUntilDestroyed(destroyRef))\n .subscribe((e: MessageEvent) => {\n const event = { data: { ...e.data } } as MessageEvent;\n\n const data = event.data;\n const type = data.type;\n\n if (!type) {\n return this.allMessageSub.next(event);\n }\n const sub = UtilsCommunicateMicro.GetMessage(type);\n\n if (!type || !data.response) {\n return;\n }\n try {\n if (type.includes(COMMUNICATE_MICRO_PREFIX_TYPE)) {\n data.response = JSON.parse(decrypt3rd(data.response));\n sub.next(event);\n this.allMessageSub.next(event);\n\n return;\n }\n data.response = JSON.parse(decrypt(data.response));\n sub.next(event);\n this.allMessageSub.next(event);\n } catch (error) {\n console.log(error);\n sub.next(event);\n this.allMessageSub.next(event);\n }\n });\n\n UtilsCommunicateMicro.GetMessage(UtilsCache.typeKeyClearLocalStorage)\n .pipe(\n filter((e) => e.data.response !== UtilsCache.idService),\n takeUntilDestroyed(destroyRef)\n )\n .subscribe(() => {\n console.log('clear all cache by event');\n UtilsCache.ClearAll();\n });\n }\n\n static PostMessageToParent(data: any) {\n data = this.convertData(data);\n try {\n if (isEmbedFrame()) {\n window?.parent?.postMessage(data, '*');\n\n return;\n }\n\n window?.top?.postMessage(data, '*');\n } catch (error) {\n console.log(error);\n }\n }\n\n static PostMessageToChildren(data: any) {\n data = this.convertData(data);\n const iframes = document.querySelectorAll('iframe');\n\n Array.from(iframes).forEach((iframe) => {\n iframe?.contentWindow?.postMessage(data, '*');\n });\n }\n\n static PostMessageToOpener(data: any) {\n if (!window.opener) {\n return;\n }\n data = this.convertData(data);\n\n window.opener.postMessage(data, '*');\n }\n\n private static convertData(data: any) {\n if (!data || !data.type || !data.response) {\n return data;\n }\n data = { ...data };\n const type = data.type;\n\n if (type.includes(COMMUNICATE_MICRO_PREFIX_TYPE)) {\n try {\n JSON.parse(decrypt3rd(data.response));\n\n return data;\n } catch (_) {\n data.response = encrypt3rd(JSON.stringify(data.response));\n\n return data;\n }\n }\n try {\n JSON.parse(decrypt(data.response));\n\n return data;\n } catch (_) {\n data.response = encrypt(JSON.stringify(data.response));\n\n return data;\n }\n }\n\n static GetMessage(messageType: string | Array<string>): Subject<MessageEvent> {\n if (!this.initdEvent) {\n throw Error('chưa khơi tạo hàm lắng nghe sự kiện, gọi UtilsCommunicateMicro.initEvent(window) tại root component');\n }\n if (typeof messageType === 'string') {\n let sub = this.subs.get(messageType);\n\n if (!sub) {\n sub = new Subject();\n this.subs.set(messageType, sub);\n\n return sub;\n }\n\n return sub;\n }\n if (!Array.isArray(messageType) || !messageType.length) {\n throw new Error('message type empty');\n }\n if (messageType.length === 1) {\n return this.GetMessage(messageType[0]);\n }\n const types = messageType.sort().join(';');\n\n let sub = this.subs.get(types);\n\n if (sub) {\n return sub;\n }\n\n sub = new Subject();\n this.subs.set(types, sub);\n this.initSubject(sub, messageType);\n\n return sub;\n }\n\n private static initSubject(subRoot: Subject<MessageEvent>, messageType: Array<string>) {\n messageType.forEach((key) => {\n this.GetMessage(key).subscribe((e) => {\n subRoot.next(e);\n });\n });\n }\n}\n","export class UtilsLanguageConstants {\n public static VI = 'vi'; // Tiếng Việt\n public static EN = 'en'; // Tiếng Anh\n public static FR = 'fr'; // Tiếng Pháp\n public static DE = 'de'; // Tiếng Đức\n public static ES = 'es'; // Tiếng Tây Ban Nha\n public static ZH = 'zh'; // Tiếng Trung (Giản thể)\n public static ZH_TW = 'zh-TW'; // Tiếng Trung (Phồn thể)\n public static JA = 'ja'; // Tiếng Nhật\n public static KO = 'ko'; // Tiếng Hàn\n public static RU = 'ru'; // Tiếng Nga\n public static IT = 'it'; // Tiếng Ý\n public static PT = 'pt'; // Tiếng Bồ Đào Nha\n public static TH = 'th'; // Tiếng Thái\n public static ID = 'id'; // Tiếng Indonesia\n public static MS = 'ms'; // Tiếng Malaysia\n public static AR = 'ar'; // Tiếng Ả Rập\n public static HI = 'hi'; // Tiếng Hindi\n public static BN = 'bn'; // Tiếng Bengal\n public static TR = 'tr'; // Tiếng Thổ Nhĩ Kỳ\n public static NL = 'nl'; // Tiếng Hà Lan\n public static KM = 'km'; // Tiếng Khmer (Campuchia)\n public static LO = 'lo'; // Tiếng Lào\n public static MY = 'my'; // Tiếng Miến Điện (Myanmar)\n public static TL = 'tl'; // Tiếng Tagalog (Philippines)\n public static CEB = 'ceb'; // Tiếng Cebuano (Philippines)\n public static JV = 'jv'; // Tiếng Java (Indonesia)\n public static SU = 'su'; // Tiếng Sundanese (Indonesia)\n\n // Ngôn ngữ mặc định\n public static defaultLang = UtilsLanguageConstants.VI;\n\n // Danh sách các ngôn ngữ được hỗ trợ\n public static supportedLanguages = new Set([\n UtilsLanguageConstants.VI,\n UtilsLanguageConstants.EN,\n UtilsLanguageConstants.FR,\n UtilsLanguageConstants.DE,\n UtilsLanguageConstants.ES,\n UtilsLanguageConstants.ZH,\n UtilsLanguageConstants.ZH_TW,\n UtilsLanguageConstants.JA,\n UtilsLanguageConstants.KO,\n UtilsLanguageConstants.RU,\n UtilsLanguageConstants.IT,\n UtilsLanguageConstants.PT,\n UtilsLanguageConstants.TH,\n UtilsLanguageConstants.ID,\n UtilsLanguageConstants.MS,\n UtilsLanguageConstants.AR,\n UtilsLanguageConstants.HI,\n UtilsLanguageConstants.BN,\n UtilsLanguageConstants.TR,\n UtilsLanguageConstants.NL,\n UtilsLanguageConstants.KM,\n UtilsLanguageConstants.LO,\n UtilsLanguageConstants.MY,\n UtilsLanguageConstants.TL,\n UtilsLanguageConstants.CEB,\n UtilsLanguageConstants.JV,\n UtilsLanguageConstants.SU,\n ]);\n\n /**\n * Kiểm tra xem ngôn ngữ đầu vào có được hỗ trợ không\n * @param lang Mã ngôn ngữ cần kiểm tra\n * @returns True nếu được hỗ trợ, False nếu không\n */\n public static isSupported(lang: string): boolean {\n return UtilsLanguageConstants.supportedLanguages.has(lang);\n }\n}\n","import { md5 } from './crypto';\n\nexport const uuid = (): string => {\n const timestamp = performance.now() * 1000;\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+-=[]{}|;:,.<>?/~';\n let randomString = '';\n\n for (let i = 0; i < 5; i++) {\n randomString += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n const baseString = `${Math.floor(timestamp)}-${randomString}`;\n const charArray = baseString.split('');\n\n for (let i = charArray.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n\n [charArray[i], charArray[j]] = [charArray[j], charArray[i]];\n }\n\n const shuffledString = charArray.join('');\n\n return md5(shuffledString);\n};\n","/* eslint-disable no-async-promise-executor */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { IEvent, TYPE_LANGUAGE_SUPPORT } from '@libs-ui/interfaces-types';\nimport { UtilsCommunicateMicro } from './communicate-micro';\nimport { decrypt, encrypt, md5 } from './crypto';\nimport { getDeviceInfo } from './dom';\nimport { isEmbedFrame } from './function-check-embed-frame';\nimport { get, isNil } from './helpers';\nimport { UtilsLanguageConstants } from './language';\nimport { uuid } from './uuid';\n\nexport class UtilsCache {\n public static readonly CACHE_EXPIRE_TIME_DEFAULT = 5 * 60;\n public static readonly CACHE_EXPIRE_NONE = -1;\n public static readonly idService = uuid();\n public static typeKeyClearLocalStorage = 'LIBS_UI_CLEAR_LOCAL_STORAGE_EVENT';\n\n private static languageKeyCache = 'SR3xQKxHgffiCevPQRralg';\n private static listKeyKeepWhenClearALll = Array<string>();\n private static initdEvent?: boolean;\n private static storage: { [key: string]: unknown };\n private static dbName = 'libs-ui-cache';\n private static itemIndexByKey = 'key';\n private static dbVersion = 1;\n private static db: IDBDatabase | null = null;\n\n public static init(config: { indexedDBName?: string; languageKeyCache?: string; typeKeyClearLocalStorage?: string; listKeyKeepWhenClearAll?: Array<string> }) {\n if (this.initdEvent) {\n return;\n }\n this.initdEvent = true;\n if (config.indexedDBName) {\n this.dbName = config.indexedDBName;\n }\n if (config.typeKeyClearLocalStorage) {\n this.typeKeyClearLocalStorage = config.typeKeyClearLocalStorage;\n }\n if (config.listKeyKeepWhenClearAll) {\n this.listKeyKeepWhenClearALll = config.listKeyKeepWhenClearAll;\n }\n if (config.languageKeyCache) {\n this.languageKeyCache = config.languageKeyCache;\n }\n }\n\n public static setLang(lang: TYPE_LANGUAGE_SUPPORT) {\n if (!UtilsLanguageConstants.isSupported(lang)) {\n throw Error(`Language not support ${lang}`);\n }\n this.Set(this.languageKeyCache, lang, this.CACHE_EXPIRE_NONE);\n }\n\n public static getLang(): TYPE_LANGUAGE_SUPPORT {\n return this.Get(this.languageKeyCache, UtilsLanguageConstants.defaultLang);\n }\n\n private static openDB() {\n return new Promise((resolve) => {\n const request = indexedDB.open(this.dbName, this.dbVersion);\n\n request.onupgradeneeded = (event: IDBVersionChangeEvent) => {\n const db = (event.target as IDBOpenDBRequest).result;\n\n if (!db.objectStoreNames.contains(this.dbName)) {\n const objectStore = db.createObjectStore(this.dbName, { keyPath: this.itemIndexByKey });\n\n objectStore.createIndex(this.itemIndexByKey, this.itemIndexByKey, { unique: true });\n }\n };\n\n request.onsuccess = () => {\n this.db = request.result;\n resolve(true);\n };\n\n request.onerror = (event) => {\n console.trace('Error opening IndexedDB:', event);\n resolve(false);\n };\n });\n }\n\n private static async getObjectStore() {\n if (!this.db) {\n await this.openDB();\n }\n const transaction = this.db?.transaction([this.dbName], 'readwrite');\n if (!transaction) {\n return null;\n }\n\n return transaction.objectStore(this.dbName);\n }\n\n private static get LocalStorage(): any {\n try {\n if (typeof window.localStorage !== 'undefined') {\n if (getDeviceInfo().satisfies({ safari: '>=16' })) {\n return this.getLocalStorageFakeOnSafari();\n }\n\n return localStorage;\n }\n\n return this.getLocalStorageFake();\n } catch (error) {\n console.trace(`LocalStorage `, error);\n return this.getLocalStorageFake();\n }\n }\n\n private static getLocalStorageFakeOnSafari() {\n if (typeof window.localStorage !== 'undefined' && !this.storage && Object.keys(localStorage).length) {\n this.storage = { ...localStorage };\n }\n\n return {\n setItem: (key: string, value: string) => {\n localStorage.setItem(key, value);\n this.storage[key] = value;\n },\n getItem: (key: string) => {\n const value = localStorage.getItem(key);\n\n if (value) {\n return value;\n }\n\n if (!this.storage || isNil(this.storage[key])) {\n return null;\n }\n\n localStorage.setItem(key, this.storage[key] as string);\n\n return this.storage?.[key];\n },\n removeItem: (key: string) => {\n delete this.storage?.[key];\n localStorage.removeItem(key);\n },\n clear: () => {\n this.storage = {};\n localStorage.clear();\n },\n };\n }\n\n private static getLocalStorageFake() {\n if (!this.storage) {\n this.storage = {};\n }\n\n return {\n setItem: (key: string, value: unknown) => {\n this.storage[key] = value;\n },\n getItem: (key: string) => {\n return this.storage?.[key];\n },\n removeItem: (key: string) => {\n delete this.storage?.[key];\n },\n clear: () => {\n this.storage = {};\n },\n };\n }\n\n public static async GetAsync<T = any>(key: string, default_value?: any, isKeyMD5 = false): Promise<T> {\n key = isKeyMD5 ? key : md5(key);\n\n return new Promise<T>(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n if (!objectStore) {\n return resolve(default_value);\n }\n const request = objectStore.get(key);\n\n request.onsuccess = () => {\n if (!request.result) {\n return resolve(default_value);\n }\n const data = JSON.parse(decrypt(request.result.value));\n\n if (data.expire === this.CACHE_EXPIRE_NONE) {\n return resolve(data.json);\n }\n const currentMillisecond = new Date().valueOf() / 1000;\n\n if (data.expire < currentMillisecond) {\n return resolve(default_value);\n }\n\n return resolve(data.json);\n };\n\n request.onerror = () => {\n console.trace(`Get key ${key} Error, return default value: ${default_value}`);\n return resolve(default_value);\n };\n });\n }\n\n public static Get<T = any>(key: string, default_value?: any): T {\n // support cho những file không thể inject UtilsCache\n if (!key) {\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n const cachedData = this.LocalStorage.getItem(key);\n\n if (!cachedData) {\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n try {\n const data = JSON.parse(decrypt(cachedData));\n\n if (data.expire === this.CACHE_EXPIRE_NONE) {\n return data.value ?? default_value;\n }\n const currentMillisecond = new Date().valueOf() / 1000;\n\n if (data.expire < currentMillisecond) {\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n\n return data.value;\n } catch (error) {\n console.trace(`Get key ${key} Error, return default value: ${default_value}`, error);\n\n return this.GetDefaultValueBySpecificKey(key, default_value);\n }\n }\n\n public static GetDefaultValueBySpecificKey(key: string, default_value: any) {\n return default_value;\n }\n\n public static async SetAsync<T = any>(key: string, value: any, expireTimeBySecond = this.CACHE_EXPIRE_TIME_DEFAULT, isKeyMD5 = false): Promise<T> {\n // support inject UtilsCache\n return new Promise<T>(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n key = isKeyMD5 ? key : md5(key);\n try {\n const currentMillisecond = expireTimeBySecond === this.CACHE_EXPIRE_NONE ? this.CACHE_EXPIRE_NONE : new Date().valueOf() / 1000 + expireTimeBySecond;\n const data: any = {\n value: encrypt(JSON.stringify({ json: value, expire: currentMillisecond })),\n };\n data[this.itemIndexByKey] = key;\n\n if (!objectStore) {\n console.trace(`Can not open object store`);\n return resolve({ key, messageError: 'Can not open object store' } as any);\n }\n const request = objectStore?.put(data);\n request.onsuccess = () => {\n console.log(`Set key ${key} Success`);\n resolve(request.result as any);\n };\n\n request.onerror = (error) => {\n console.trace(`Set key ${key} Error`);\n resolve({ key, messageError: get(error as IEvent, 'message') } as any);\n };\n } catch (error) {\n console.trace(`Set key ${key} Error`);\n resolve({ key, messageError: get(error, 'message') } as any);\n }\n });\n }\n\n static Set(key: string, value: any, expireTimeBySecond = this.CACHE_EXPIRE_TIME_DEFAULT): boolean {\n // support cho những file không inject UtilsCache\n const currentMillisecond = expireTimeBySecond === this.CACHE_EXPIRE_NONE ? this.CACHE_EXPIRE_NONE : new Date().valueOf() / 1000 + expireTimeBySecond;\n const data = {\n value: value,\n expire: currentMillisecond,\n };\n\n try {\n this.LocalStorage.setItem(key, encrypt(JSON.stringify(data)));\n return true;\n } catch (error) {\n console.trace(`Set key ${key} Error`, error);\n return false;\n }\n }\n\n public static async ClearAsync(key: string, isMD5 = false) {\n return new Promise<void>(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n if (!objectStore) {\n return resolve();\n }\n const request = objectStore.delete(isMD5 ? key : md5(key));\n\n request.onsuccess = () => {\n resolve({ clearSuccess: true } as any);\n };\n request.onerror = (event: Event) => {\n console.trace('Error deleting Key:', get((event.target as IDBRequest).error, 'message'));\n resolve({ messageError: get((event.target as IDBRequest).error, 'message'), clearSuccess: false } as any);\n };\n });\n }\n\n static Clear(key: string) {\n if (key.includes('kc-callback-')) {\n return;\n }\n this.LocalStorage.removeItem(key);\n }\n\n public static ClearAllAsync() {\n return new Promise<void>(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n if (!objectStore) {\n return resolve();\n }\n\n const request = objectStore.clear();\n request.onsuccess = () => {\n console.log('clear all successfully');\n resolve({ clearSuccess: true } as any);\n };\n\n request.onerror = (event: Event) => {\n console.trace('Error deleting key:', get((event.target as IDBRequest).error, 'message'));\n resolve({ messageError: get((event.target as IDBRequest).error, 'message'), clearSuccess: false } as any);\n };\n });\n }\n\n static ClearAll() {\n if (isEmbedFrame()) {\n const data = {\n type: this.typeKeyClearLocalStorage,\n response: {\n idEvent: this.idService,\n },\n };\n UtilsCommunicateMicro.PostMessageToParent(data);\n }\n const keys = [...this.listKeyKeepWhenClearALll];\n Object.keys(this.LocalStorage).forEach((key) => {\n if (key.includes('kc-callback-')) {\n keys.push(key);\n }\n });\n\n const stores = this.GetDataByKeys(Array.from(keys));\n\n this.LocalStorage.clear();\n\n this.SetDataByKey(stores);\n }\n\n private static GetDataByKeys(keys: Array<string>) {\n const stores = new Map();\n\n keys.forEach((key: string) => {\n if (key.includes('kc-callback-')) {\n stores.set(key, this.LocalStorage.getItem(key));\n\n return;\n }\n stores.set(key, this.Get(key));\n });\n\n return stores;\n }\n\n private static SetDataByKey(stores: Map<string, any>) {\n stores.forEach((value: any, key: string) => {\n if (key.includes('kc-callback-')) {\n this.LocalStorage.setItem(key, value);\n\n return;\n }\n if (key === this.languageKeyCache) {\n return this.setLang(value);\n }\n this.Set(key, value, this.CACHE_EXPIRE_NONE);\n });\n }\n\n public static DeleteKeyStartWithAsync(keyCacheStartWith: string, isKeyMD5 = false) {\n return new Promise(async (resolve) => {\n const objectStore = await this.getObjectStore();\n\n if (!objectStore) {\n return resolve({});\n }\n\n // Lấy tất cả các keys từ index\n const request = objectStore.getAll();\n\n keyCacheStartWith = isKeyMD5 ? keyCacheStartWith : md5(keyCacheStartWith);\n\n request.onsuccess = (e: any) => {\n const data = e.target.result as Array<any>;\n\n if (!Array.isArray(data)) {\n return resolve({});\n }\n\n data.forEach((obj) => {\n if (obj[this.itemIndexByKey].startsWith(keyCacheStartWith)) {\n this.ClearAsync(obj[this.itemIndexByKey], true);\n }\n });\n\n return resolve({});\n };\n\n request.onerror = () => {\n return resolve({});\n };\n });\n }\n\n public static DeleteKeyStartWith(keyCache: string, isMD5 = false) {\n keyCache = isMD5 ? md5(keyCache) : keyCache;\n const keys = Object.keys(this.LocalStorage);\n\n if (!keys || !keys.length) {\n return;\n }\n\n keys.forEach((key) => {\n if (key.startsWith(keyCache)) {\n this.Clear(key);\n }\n });\n }\n\n public static DeleteDatabaseIndexDB(dbName?: string) {\n return new Promise((resolve) => {\n dbName = (dbName || this.dbName) as string;\n const request = indexedDB.deleteDatabase(dbName as string);\n\n request.onsuccess = () => {\n console.trace('Database deleted successfully');\n resolve({ deleteSuccess: true });\n };\n\n request.onerror = (event: Event) => {\n const error = (event.target as IDBRequest).error;\n console.trace('Error deleting database:', error);\n resolve({ messageError: get((error as Record<string, any>) || {}, 'message'), deleteSuccess: false } as any);\n };\n\n request.onblocked = () => {\n console.trace('Delete request is blocked');\n resolve({ messageError: 'Delete request is blocked', deleteSuccess: false } as any);\n };\n });\n }\n}\n","import { isSignal } from '@angular/core';\nimport { GetDayjsConfig, GetDayjsReturn, NonNullableDate, TYPE_OBJECT } from '@libs-ui/interfaces-types';\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/en';\nimport 'dayjs/locale/vi';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport localeData from 'dayjs/plugin/localeData';\nimport timezone from 'dayjs/plugin/timezone';\nimport updateLocale from 'dayjs/plugin/updateLocale';\nimport utc from 'dayjs/plugin/utc';\nimport { UtilsCache } from './cache';\ndayjs.extend(localeData);\ndayjs.extend(updateLocale);\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(customParseFormat);\nlet timeZoneSetup = 'Asia/Ho_Chi_Minh';\nlet patternCheckTimeUTC: RegExp | undefined = undefined;\n\nexport const setDefaultTimeZone = (localeZone = timeZoneSetup) => {\n timeZoneSetup = localeZone;\n dayjs.tz.setDefault(localeZone);\n};\n\nexport const setPatternCheckTimeUTC = (pattern: RegExp) => {\n patternCheckTimeUTC = pattern;\n};\n\nexport type TYPE_FUNCTION_FORMAT_DATE = (time: dayjs.ConfigType, formatOutput: string, lang?: string) => string;\nlet functionFormatDate: TYPE_FUNCTION_FORMAT_DATE | undefined = undefined;\n\nexport const updateFunctionFormatDate = (functionCustom: TYPE_FUNCTION_FORMAT_DATE) => {\n functionFormatDate = functionCustom;\n};\n\n/**\n * @description Lấy đối tượng dayjs theo config\n * @param config nếu không có config sẽ trả về đối tượng dayjs là thời gian hiện tại\n * @param config.date thời gian cần lấy\n * @param config.returnDayjsIfConfigDateNotExist true nếu muốn trả về đối tượng dayjs nếu config.date không có\n * @param config.utc true nếu muốn lấy thời gian UTC\n * @param config.formatOfDate định dạng thời gian đang được truyền vào\n */\nexport const getDayjs = <C extends GetDayjsConfig | undefined = undefined>(config?: C): GetDayjsReturn<C> => {\n // helper cast để tránh lặp lại kiểu điều kiện ở các return\n const out = (v: unknown) => v as GetDayjsReturn<C>;\n if (!config) {\n return out(dayjs().tz());\n }\n config.date = !config.date && config.returnDayjsIfConfigDateNotExist ? dayjs().tz() : config.date;\n if (typeof config.date === 'number') {\n config.date = dayjs.unix(config.date);\n }\n if (!config.date) {\n return out(undefined);\n }\n let { date, utc, formatOfDate } = config as TYPE_OBJECT;\n\n while (isSignal(date)) {\n date = date();\n }\n while (isSignal(utc)) {\n utc = utc();\n }\n while (isSignal(formatOfDate)) {\n formatOfDate = formatOfDate();\n }\n\n if (typeof date === 'string' && patternCheckTimeUTC && new RegExp(patternCheckTimeUTC, 'gi').test(date)) {\n date = dayjs(date.replace(new RegExp(patternCheckTimeUTC, 'gi'), '$1$2$3T$5$6$7$8Z')).utc();\n }\n\n if (utc) {\n if (formatOfDate) {\n return out(dayjs(date, formatOfDate).utc());\n }\n const dateInputIsUTC = (dayjs.isDayjs(date) && date.isUTC()) || (typeof date === 'string' && (date as string).includes('Z'));\n\n if (dateInputIsUTC) {\n return out(dayjs(date));\n }\n\n return out(dayjs(date).utc());\n }\n\n if (typeof date === 'string' && !(date as string).includes('Z') && !(date as string).includes('+')) {\n return out(formatOfDate ? dayjs.tz(date, formatOfDate, config.localeZone || timeZoneSetup) : dayjs.tz(date, config.localeZone || timeZoneSetup));\n }\n\n return out((formatOfDate ? dayjs(date, formatOfDate) : dayjs(date)).tz());\n};\n\n/**\n * @description Kiểm tra xem hai ngày có khác nhau không (khác ngày trong tuần)\n * @param date1 ngày thứ nhất cần so sánh\n * @param date2 ngày thứ hai cần so sánh\n * @returns true nếu hai ngày khác nhau, false nếu giống nhau hoặc không thể so sánh\n */\nexport const isDifferenceDay = (date1: NonNullableDate, date2: NonNullableDate) => {\n if (isDifferenceMonth(date1, date2)) {\n return true;\n }\n const day1 = getDayjs({ date: date1 })?.day();\n const day2 = getDayjs({ date: date2 })?.day();\n\n return day1 !== day2;\n};\n\n/**\n * @description Kiểm tra xem hai ngày có khác tháng không\n * @param date1 ngày thứ nhất cần so sánh\n * @param date2 ngày thứ hai cần so sánh\n * @returns true nếu hai ngày khác tháng, false nếu cùng tháng hoặc không thể so sánh\n */\nexport const isDifferenceMonth = (date1: NonNullableDate, date2: NonNullableDate) => {\n if (isDifferenceYear(date1, date2)) {\n return true;\n }\n const month1 = getDayjs({ date: date1 })?.month();\n const month2 = getDayjs({ date: date2 })?.month();\n\n return month1 !== month2;\n};\n\n/**\n * @description Kiểm tra xem hai ngày có khác năm không\n * @param date1 ngày thứ nhất cần so sánh\n * @param date2 ngày thứ hai cần so sánh\n * @returns true nếu hai ngày khác năm, false nếu cùng năm hoặc không thể so sánh\n */\nexport const isDifferenceYear = (date1: NonNullableDate, date2: NonNullableDate) => {\n const year1 = getDayjs({ date: date1 })?.year();\n const year2 = getDayjs({ date: date2 })?.year();\n\n return year1 !== year2;\n};\n\n/**\n * @description Lấy ra chuỗi thời gian hiển thị theo định dạng và ngôn ngữ\n * @param date thời gian cần định dạng\n * @param format định dạng thời gian muốn lấy ra\n * @param lang lấy theo ngôn ngữ\n */\nexport const formatDate = (date: dayjs.ConfigType, formatOutput = 'YYYY/MM/DD HH:mm', lang?: string, formatInput?: string): string => {\n if (!date) {\n return '';\n }\n lang = lang || (UtilsCache.getLang() as string);\n if (functionFormatDate) {\n return functionFormatDate(date, formatOutput, lang);\n }\n\n date = getDayjs({ date, formatOfDate: formatInput }).locale(lang);\n if (lang === 'vi') {\n dayjs.updateLocale('vi', {\n monthsShort: 'Thg 1_Thg 2_Thg 3_Thg 4_Thg 5_Thg 6_Thg 7_Thg 8_Thg 9_Thg 10_Thg 11_Thg 12'.split('_'),\n });\n }\n\n return date.format(getFormatData(getTypeByFormat(formatOutput), lang)) || '';\n};\n\nconst getTypeByFormat = (format: string): 'dm' | 'dmy' | 'dmy hm' | 'my' | 'dmy hms' | 'hh:mm' | 'HH:mm' | 'hh:mm A' | 'HH:mm A' | 'dmy hmsS' => {\n if (format === 'dm' || format === 'dmy' || format === 'dmy hm' || format === 'my' || format === 'dmy hms' || format === 'hh:mm' || format === 'HH:mm' || format === 'hh:mm A' || format === 'HH:mm A' || format === 'dmy hmsS') {\n return format;\n }\n\n if (format === 'DD/MM/YYYY' || format === 'YYYY-MM-DD' || format === 'dd/MM/yyyy' || format === 'dd-MM-yyyy' || format === 'dd/mm/yyyy') {\n return 'dmy';\n }\n\n if (format === 'MM-DD' || format === 'dd/MM' || format === 'dd/mm') {\n return 'dm';\n }\n\n if (format === 'M/YYYY' || format === 'YYYY-MM' || format === 'MM/yyyy') {\n return 'my';\n }\n\n if (format === 'YYYY/MM/DD hh:mm:ss' || format === 'dmy hms' || format === 'dd/mm/yyyy hh:mm:ss') {\n return 'dmy hms';\n }\n\n if(format.toLowerCase() === 'dd/mm/yyyy hh:mm:ss:ss' || format.toLowerCase() === 'yyyy/mm/dd hh:mm:ss:ss' || format.toLowerCase() === 'yyyy-mm-dd hh:mm:ss:ss' || format.toLowerCase() === 'dd-mm-yyyy hh:mm:ss:ss'){\n return 'dmy hmsS';\n }\n\n if (format === 'hh:mm' || format === 'HH:mm') {\n return 'hh:mm';\n }\n\n if (format === 'hh:mm A' || format === 'HH:mm A') {\n return 'hh:mm A';\n }\n\n return 'dmy hm';\n};\n\nconst getFormatData = (type: 'dm' | 'dmy' | 'dmy hm' | 'my' | 'dmy hms' | 'hh:mm' | 'hh:mm A' | 'HH:mm' | 'HH:mm A' | 'dmy hmsS', lang: string) => {\n switch (type) {\n case 'dm':\n if (lang === 'vi') {\n return 'D MMM';\n }\n\n return 'MMM D';\n\n case 'dmy':\n if (lang === 'vi') {\n return 'D MMM, YYYY';\n }\n\n return 'MMM D, YYYY';\n\n case 'dmy hm':\n if (lang === 'vi') {\n return 'D MMM, YYYY HH:mm';\n }\n\n return 'MMM D, YYYY HH:mm';\n\n case 'my':\n if (lang === 'vi') {\n return 'MMM, YYYY';\n }\n\n return 'MMM YYYY ';\n\n case 'dmy hms':\n if (lang === 'vi') {\n return 'D MMM, YYYY HH:mm:ss';\n }\n\n return 'MMM D, YYYY HH:mm:ss';\n\n case 'hh:mm':\n case 'HH:mm':\n return 'HH:mm';\n\n case 'hh:mm A':\n case 'HH:mm A':\n return 'HH:mm A';\n case 'dmy hmsS':\n if (lang === 'vi') {\n return 'D MMM, YYYY HH:mm:ss:SSS';\n }\n\n return 'MMM D, YYYY HH:mm:ss:SSS';\n }\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParameterCodec, HttpParams } from '@angular/common/http';\n\nexport const UtilsHttpParamsRequestInstance = <Type>(options?: HttpParamsOptions<Type>, instance?: HttpParams): UtilsHttpParamsRequest<Type> => {\n return new UtilsHttpParamsRequest<Type>(options, instance);\n};\n\nexport class UtilsHttpParamsRequest<Type = { pem: string }> extends HttpParams {\n protected params = new HttpParams();\n\n constructor(options?: HttpParamsOptions<Type>, instance?: HttpParams) {\n super(options as any);\n\n if (!instance) {\n this.params = new HttpParams(options);\n\n return;\n }\n\n if (instance instanceof UtilsHttpParamsRequest) {\n this.params = instance.getInstance();\n\n return;\n }\n\n if (instance instanceof HttpParams) {\n this.params = instance;\n\n return;\n }\n }\n\n getInstance(): HttpParams {\n return this.params;\n }\n\n setInstance(instance: HttpParams) {\n if (instance instanceof UtilsHttpParamsRequest) {\n this.params = instance.getInstance();\n\n return;\n }\n\n if (instance instanceof HttpParams) {\n this.params = instance;\n\n return;\n }\n }\n\n override set(param: string, value: string | number | boolean): UtilsHttpParamsRequest {\n this.params = this.params.set(param, value);\n\n return this as UtilsHttpParamsRequest;\n }\n\n override has(param: string): boolean {\n return this.params.has(param);\n }\n\n override get(param: string): string | null {\n return this.params.get(param);\n }\n\n override getAll(param: string): string[] | null {\n return this.params.getAll(param);\n }\n\n override keys(): string[] {\n return this.params.keys();\n }\n\n override append(param: string, value: string | number | boolean): HttpParams {\n this.params = this.params.append(param, value);\n\n return this as HttpParams;\n }\n\n override appendAll(params: { [param: string]: string | number | boolean | ReadonlyArray<string | number | boolean> }): HttpParams {\n this.params = this.params.appendAll(params);\n\n return this as HttpParams;\n }\n\n override delete(param: string, value?: string | number | boolean): UtilsHttpParamsRequest {\n this.params = this.params.delete(param, value);\n\n return this as UtilsHttpParamsRequest;\n }\n\n override toString(): string {\n return this.params.toString();\n }\n}\n\nexport declare interface HttpParamsOptions<Type> {\n fromString?: string;\n fromObject?: TYPE_FROM_OBJECT<Type>;\n encoder?: HttpParameterCodec;\n}\nexport type GET_PATH_VARIABLE<TypePath, TypeOther = unknown> = {\n [Property in keyof TypePath as `pathVariable-${Lowercase<string & Property>}`]: TypePath[Property];\n} & TypeOther;\n\ntype TYPE_FROM_OBJECT<Type> = Type extends undefined | null\n ? { pem: string }\n : { pem?: string } & {\n [Property in keyof Type]?: Type[Property];\n };\n\n// Demo su dung GET_PATH_VARIABLE\n\n// interface Person {\n// name: string;\n// age: number;\n// location: string;\n// }\n\n// type c = GET_PATH_VARIABLE<Person, unknown>;\n\n// const a: c = {\n// \"pathVariable-age\": 1,\n// \"pathVariable-location\": '12',\n// \"pathVariable-name\": '124',\n// };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isSignal, signal, WritableSignal } from '@angular/core';\nimport { isArray, isAsyncObject, isMap, isReturnAsIsObject, isSet } from './dangerous-object';\nimport { cloneDeep } from './helpers';\n\n/**\n * Chuyển đổi một đối tượng hoặc giá trị thành signal\n * @param data Dữ liệu cần chuyển đổi thành signal\n * @param cloneDeepIfNotSignal Có thực hiện sao chép sâu dữ liệu trước khi chuyển đổi hay không nếu data không phải signal. Mặc định là true.\n * Đặt false nếu muốn giữ nguyên tham chiếu đến dữ liệu gốc.\n * Nếu muốn sao chép sâu đối tượng signal thì đặt cloneDeepIfNotSignal là true và acceptConvertObjectInnerWritableSignal là true.\n * @param isSignalPrimitiveType Có chuyển đổi các giá trị nguyên thủy (string, number, boolean) thành signal hay không. Mặc định là false.\n * Đặt true nếu muốn bọc các giá trị nguyên thủy trong signal.\n * @param acceptConvertObjectInnerWritableSignal Có tiếp tục tìm kiếm và chuyển đổi các đối tượng bên trong signal hay không. Mặc định là false.\n * Đặt true nếu muốn tìm và chuyển đổi các đối tượng bên trong signal hoặc chính nó thành signal mới.\n * @returns Dữ liệu đã được chuyển đổi theo kiểu T\n */\nexport const convertObjectToSignal = <T = any>(data: any, cloneDeepIfNotSignal = true, isSignalPrimitiveType = false, acceptConvertObjectInnerWritableSignal = false, seen = new WeakMap()): T => {\n if ((data === null || typeof data !== 'object') && !isSignal(data)) {\n return (isSignalPrimitiveType ? signal(data) : data) as T;\n }\n if (seen.has(data)) {\n return seen.get(data);\n }\n\n if (isSignal(data)) {\n if (!acceptConvertObjectInnerWritableSignal) {\n return data as T;\n }\n seen.set(data, convertObjectToSignal(data(), cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal, seen));\n return seen.get(data);\n }\n\n if (isArray(data)) {\n seen.set(data, signal(data.map((item) => convertObjectToSignal(item, cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal, seen))) as T);\n return seen.get(data);\n }\n\n if (isMap(data)) {\n const mapCopy = new Map();\n Array.from(data.keys()).forEach((key) => {\n mapCopy.set(key, convertObjectToSignal(data.get(key), cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal));\n });\n seen.set(data, signal(mapCopy) as T);\n return seen.get(data);\n }\n\n // Bỏ qua các đối tượng async\n if (isAsyncObject(data)) {\n return data as T;\n }\n\n data = signal(cloneDeepIfNotSignal ? { ...data } : data);\n seen.set(data, data);\n for (const key in data()) {\n const value = data()[key];\n // Bỏ qua các đối tượng nguy hiểm và đặc biệt\n if (isReturnAsIsObject(value)) {\n continue;\n }\n if (Object.prototype.hasOwnProperty.call(data(), key)) {\n data()[key] = convertObjectToSignal(value, cloneDeepIfNotSignal, isSignalPrimitiveType, acceptConvertObjectInnerWritableSignal);\n }\n }\n\n return data as T;\n};\n\nexport const convertSignalToObject = <T = any>(data: any, isCloneDeep = true, seen = new WeakMap(), options?: { convertWhenFirstItemArrayNotIsSignal?: boolean }): T => {\n let ignoreCheckSeenHasDataAfterWhile = false;\n while (isSignal(data) && !seen.has(data)) {\n const dataConvert = (data as WritableSignal<unknown>)();\n if (typeof dataConvert === 'object') {\n if (dataConvert === null || isReturnAsIsObject(dataConvert)) {\n return dataConvert as T;\n }\n seen.set(dataConvert as object, dataConvert);\n data = dataConvert;\n ignoreCheckSeenHasDataAfterWhile = true;\n break;\n }\n seen.set(data, dataConvert);\n data = dataConvert;\n }\n\n if (data === null || typeof data === 'function' || typeof data !== 'object' || isReturnAsIsObject(data)) {\n return data;\n }\n\n if (!ignoreCheckSeenHasDataAfterWhile && seen.has(data)) {\n return seen.get(data);\n }\n\n if (isArray(data)) {\n if (!options?.convertWhenFirstItemArrayNotIsSignal && !isSignal(data[0])) {\n return data as T;\n }\n seen.set(data, data.map((item: any) => convertSignalToObject(isCloneDeep ? cloneDeep(item) : item, isCloneDeep, seen, options)) as T);\n return seen.get(data);\n }\n\n if (isMap(data)) {\n const mapCopy = new Map();\n Array.from(data.keys()).forEach((key) => {\n mapCopy.set(key, convertSignalToObject(isCloneDeep ? cloneDeep(data.get(key)) : data.get(key), isCloneDeep, seen, options));\n });\n seen.set(data, mapCopy as T);\n return seen.get(data);\n }\n\n if (isSet(data)) {\n const setCopy = new Set();\n Array.from(data.values()).forEach((value) => {\n setCopy.add(convertSignalToObject(isCloneDeep ? cloneDeep(value) : value, isCloneDeep, seen, options));\n });\n seen.set(data, setCopy as T);\n return seen.get(data);\n }\n\n // Bỏ qua các đối tượng nguy hiểm và đặc biệt\n if (isReturnAsIsObject(data)) {\n return data as T;\n }\n\n const result: Record<string, any> = isCloneDeep ? {} : data;\n seen.set(data, result);\n for (const key in data) {\n const value = data[key];\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n // Bỏ qua các đối tượng nguy hiểm để tránh maximum call stack\n if (isReturnAsIsObject(value)) {\n result[key] = value;\n continue;\n }\n result[key] = convertSignalToObject(isCloneDeep ? cloneDeep(value) : value, isCloneDeep, seen, options);\n }\n }\n\n return result as T;\n};\n\nexport const unwrapSignal = (data: any) => {\n while (isSignal(data)) {\n data = data();\n }\n return data;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParams } from '@angular/common/http';\nimport { Signal, WritableSignal, isSignal, signal } from '@angular/core';\nimport { GetReturnType, GetValueAtPath, PathOf, TYPE_OBJECT } from '@libs-ui/interfaces-types';\nimport dayjs from 'dayjs';\nimport { isArray, isDangerousObject, isDayjsObject, isMap, isRegExp, isReturnAsIsObject, isSet } from './dangerous-object';\nimport { getDayjs } from './date';\nimport { UtilsHttpParamsRequest } from './http-params';\nimport { unwrapSignal } from './two-way-signal-object';\n\n/**Các hàm tương tự thư viện lodash */\n/**\n * Kiểm tra xem một giá trị có phải là null hoặc undefined hay không\n * @param value Giá trị cần kiểm tra\n * @returns true nếu giá trị là null hoặc undefined, false nếu không\n * @example\n * isNil(null); // true\n * isNil(undefined); // true\n * isNil(0); // false\n * isNil('hello'); // false\n */\nexport const isNil = (value: unknown, options?: { ignoreUnWrapSignal?: boolean }): value is null | undefined => {\n if (!options?.ignoreUnWrapSignal) {\n value = unwrapSignal(value);\n }\n return value === null || value === undefined;\n};\n\n/**\n * Kiểm tra xem một giá trị có phải là rỗng hay không\n * @param value Giá trị cần kiểm tra\n * @returns true nếu giá trị là null, rỗng hoặc undefined, false nếu không\n * @example\n * isEmpty(null); // true\n * isEmpty(''); // true\n * isEmpty(undefined); // true\n * isEmpty({}); // true\n * isEmpty([]); // true\n * isEmpty([1, 2, 3]); // false\n * isEmpty({ a: 1 }); // false\n */\nexport const isEmpty = (value: any, options?: { ignoreCheckTypePrimitive?: boolean; ignoreUnWrapSignal?: boolean; ignoreCheckString?: boolean }): value is null | undefined | '' | 0 => {\n if (!options?.ignoreUnWrapSignal) {\n value = unwrapSignal(value);\n }\n if (options?.ignoreCheckString && value === '') {\n return false;\n }\n if (options?.ignoreCheckTypePrimitive) {\n return typeof value === 'object' && isEmptyTypeObject(value);\n }\n\n return isEmptyTypeObject(value);\n};\n\n/**\n * Kiểm tra xem một giá trị có phải là object rỗng hay không\n * @param value Giá trị cần kiểm tra\n * @returns true nếu giá trị là object rỗng, false nếu không\n * @example\n * isEmptyTypeObject({}); // true\n * isEmptyTypeObject({ a: 1 }); // false\n */\nconst isEmptyTypeObject = <T = null>(value: any): value is T => {\n try {\n if (isNil(value, { ignoreUnWrapSignal: true }) || value === '') {\n return true;\n }\n if (typeof value !== 'object') {\n return false;\n }\n\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n\n return Object.keys(value).length === 0;\n } catch (error) {\n console.error(error);\n return false;\n }\n};\n\n/**\n * Kiểm tra xem một giá trị có phải là null, rỗng, undefined hoặc 0 hay không\n * @param value Giá trị cần kiểm tra\n * @param options Cấu hình tùy chọn\n * @param options.ignoreZero Nếu true, sẽ không kiểm tra giá trị 0\n * @returns true nếu giá trị là null, rỗng, undefined hoặc 0, false nếu không\n * @example\n * isTruthy(null); // false\n * isTruthy(''); // false\n * isTruthy(undefined); // false\n * isTruthy(0); // false\n * isTruthy({}); // true\n * isTruthy(0, { ignoreZero: true }); // true\n */\n\nexport const isTruthy = <T>(value: T, options?: { ignoreZero?: boolean; ignoreCheckString?: boolean; ignoreUnWrapSignal?: boolean }): value is NonNullable<T> => {\n return !isFalsy(value, options);\n};\n\n/**\n * Kiểm tra xem một giá trị có phải là null, rỗng, undefined hoặc 0 hay không\n * @param value Giá trị cần kiểm tra\n * @param options Cấu hình tùy chọn\n * @param options.ignoreZero Nếu true, sẽ không kiểm tra giá trị 0\n * @returns true nếu giá trị là null, rỗng, undefined hoặc 0, false nếu không\n * @example\n * isFalsy(null); // true\n * isFalsy(''); // true\n * isFalsy(undefined); // true\n * isFalsy(0); // true\n * isFalsy({}); // false\n * isFalsy(0, { ignoreZero: true }); // false\n */\nexport const isFalsy = (value: unknown, options?: { ignoreZero?: boolean; ignoreCheckString?: boolean; ignoreUnWrapSignal?: boolean }): value is null | undefined | '' | 0 => {\n if (!options?.ignoreUnWrapSignal) {\n value = unwrapSignal(value);\n }\n\n if (options?.ignoreZero && value === 0) {\n return false;\n }\n\n if (options?.ignoreCheckString && value === '') {\n return false;\n }\n\n return !value;\n};\n\n/**\n * Loại bỏ các thuộc tính của đối tượng dựa trên một hàm điều kiện\n * @param objData Đối tượng cần xử lý\n * @param predicate Hàm điều kiện để kiểm tra giá trị của thuộc tính. Nếu hàm trả về true thì thuộc tính đó sẽ bị loại bỏ\n * @returns Đối tượng mới sau khi đã loại bỏ các thuộc tính thỏa mãn điều kiện\n * @example\n * const obj = { a: 1, b: null, c: 3, d: undefined };\n * omitBy(obj, isNil); // { a: 1, c: 3 }\n */\nexport const omitBy = <T>(objData: Record<string, any>, predicate: (val: any) => boolean): T => {\n if (!objData || typeof objData !== 'object' || Array.isArray(objData)) {\n return objData as T;\n }\n const newObj = {} as T;\n\n Object.keys(objData).forEach((key) => {\n const valueOfKey = get(objData, key);\n if (!predicate(valueOfKey)) {\n set(newObj, key as PathOf<T>, valueOfKey);\n }\n });\n return newObj;\n};\n\n/**\n * Lấy giá trị từ đối tượng theo đường dẫn chỉ định\n *\n * Hàm này giúp bạn truy cập vào các thuộc tính sâu bên trong một đối tượng một cách an toàn,\n * tránh lỗi khi thuộc tính không tồn tại.\n *\n * @param obj Đối tượng nguồn cần lấy giá trị\n * @param path Đường dẫn đến thuộc tính cần lấy. Có thể là:\n * - Chuỗi: 'user.profile.name' hoặc 'items[0].title'\n * - Mảng: ['user', 'profile', 'name'] hoặc ['items', '0', 'title']\n * - Chuỗi rỗng '': trả về chính đối tượng gốc\n * @param defaultValue Giá trị mặc định trả về khi không tìm thấy thuộc tính (mặc định: undefined)\n * @param keepLastValueIfSignal Có giữ nguyên signal cuối cùng hay không (mặc định: false - sẽ gọi signal())\n * @returns Giá trị tìm được hoặc giá trị mặc định\n *\n * @example\n * // Ví dụ cơ bản\n * const user = { name: 'John', age: 30 };\n * get(user, 'name'); // 'John'\n * get(user, 'email'); // undefined\n * get(user, 'email', 'no-email'); // 'no-email'\n *\n * @example\n * // Truyền path rỗng - trả về chính đối tượng gốc\n * const data = { name: 'Alice', age: 25 };\n * get(data, ''); // { name: 'Alice', age: 25 } (chính đối tượng data)\n * get(data, '', 'default'); // { name: 'Alice', age: 25 } (bỏ qua defaultValue)\n *\n * @example\n * // Truy cập thuộc tính sâu\n * const data = {\n * user: {\n * profile: {\n * name: 'Alice',\n * settings: { theme: 'dark' }\n * }\n * }\n * };\n * get(data, 'user.profile.name'); // 'Alice'\n * get(data, 'user.profile.settings.theme'); // 'dark'\n * get(data, 'user.profile.avatar', 'default.jpg'); // 'default.jpg'\n *\n * @example\n * // Truy cập mảng\n * const items = [\n * { name: 'Item 1', price: 100 },\n * { name: 'Item 2', price: 200 }\n * ];\n * get(items, '[0].name'); // 'Item 1'\n * get(items, '[1].name'); // 'Item 2'\n * get(items, '[2].name', 'Not found'); // 'Not found'\n *\n * @example\n * // Sử dụng với mảng path\n * const nested = { a: { b: { c: 'deep value' } } };\n * get(nested, ['a', 'b', 'c']); // 'deep value'\n * get(nested, ['a', 'b', 'd'], 'default'); // 'default'\n *\n * @example\n * // Trường hợp đặc biệt\n * get(null, 'any.path'); // undefined\n * get(undefined, 'any.path', 'fallback'); // 'fallback'\n */\nexport const get = <O, P extends PathOf<O> = PathOf<O>, KS extends boolean = false, D extends GetValueAtPath<O, P, KS> | undefined = undefined>(\n obj: Signal<O> | O,\n path: P,\n defaultValue?: D,\n keepLastValueIfSignal?: KS\n): GetReturnType<O, P, KS, D> => {\n // helper cast để tránh lặp lại kiểu điều kiện ở các return\n const out = (v: unknown) => v as GetReturnType<O, P, KS, D>;\n\n if (isNil(obj)) {\n return out(defaultValue);\n }\n obj = unwrapSignal(obj);\n if (path === '') {\n return out(obj);\n }\n if (obj instanceof HttpParams) {\n return out(obj.get(`${path}`) ?? defaultValue);\n }\n if (obj instanceof DOMRect) {\n return out(obj[path as keyof DOMRect]);\n }\n\n const paths = Array.isArray(path)\n ? path\n : (path as string)\n .replace(/\\[(\\d+)]/g, '.$1')\n .split('.')\n .filter((key) => key);\n\n for (const index in paths) {\n const key = paths[index];\n if (obj instanceof CSSStyleDeclaration) {\n obj = obj[key as keyof CSSStyleDeclaration] as O;\n continue;\n }\n\n if (obj instanceof HTMLElement) {\n obj = obj[key as keyof HTMLElement] as O;\n continue;\n }\n obj = unwrapSignal(obj);\n if (isNil(obj) || !Object.prototype.hasOwnProperty.call(obj, key)) {\n return out(defaultValue);\n }\n const val = isSignal((obj as any)[key]) && !keepLastValueIfSignal ? (obj as any)[key]() : (obj as any)[key];\n\n obj = val as O;\n }\n\n return out(obj ?? defaultValue);\n};\n\n/**\n * Thiết lập giá trị cho một thuộc tính trong đối tượng theo đường dẫn chỉ định\n * @param obj Đối tượng cần thiết lập giá trị\n * @param path Đường dẫn đến thuộc tính, có thể là chuỗi (vd: 'a.b.c') hoặc mảng (vd: ['a', 'b', 'c'])\n * @param value Giá trị cần thiết lập\n * @returns Đối tượng sau khi đã thiết lập giá trị\n * @throws Error nếu tham số đầu tiên không phải là đối tượng\n * @example\n * const obj = { a: { b: 1 } };\n * set(obj, 'a.b', 2); // { a: { b: 2 } }\n */\nexport const set = <O, P extends PathOf<O> = PathOf<O>, T extends GetValueAtPath<O, P, true> = GetValueAtPath<O, P, true>>(\n obj: Signal<O> | O,\n path: P,\n value: T,\n options?: { valueDefaultPathObjectUndefined?: any; valueDefaultPathArrayUndefined?: any }\n): O => {\n if (isNil(obj) || (typeof obj !== 'object' && !isSignal(obj)) || (isSignal(obj) && typeof obj() !== 'object')) {\n throw new Error('The first argument must be an object');\n }\n\n if (obj instanceof HttpParams) {\n return obj.set(`${path}`, value as string) as O;\n }\n\n const pathArray = Array.isArray(path)\n ? path\n : (path as string)\n .replace(/\\[(\\d+)]/g, '.[$1]')\n .split('.')\n .filter((key) => key);\n\n let currentObjectByKey: any = isSignal(obj) ? obj() : obj;\n let preObjectByKey = obj;\n\n pathArray.forEach((key, index) => {\n if (index < pathArray.length - 1) {\n if (!(key in currentObjectByKey) || (typeof currentObjectByKey[key] !== 'object' && !isSignal(currentObjectByKey[key]))) {\n const nextKey = pathArray[index + 1];\n key = key.replace(/\\[(\\d+)]/g, '$1');\n if (isNil(currentObjectByKey[key])) {\n currentObjectByKey[key] = /\\[(\\d+)]/g.test(nextKey) ? (options?.valueDefaultPathArrayUndefined ?? []) : (options?.valueDefaultPathObjectUndefined ?? {});\n }\n }\n currentObjectByKey = key ? currentObjectByKey[key] : currentObjectByKey;\n preObjectByKey = currentObjectByKey;\n currentObjectByKey = isSignal(currentObjectByKey) ? currentObjectByKey() : currentObjectByKey;\n return;\n }\n\n if (typeof currentObjectByKey !== 'object') {\n return;\n }\n\n // Gán giá trị ở cuối đường dẫn\n key = key.replace(/\\[(\\d+)]/g, '$1');\n const valueOfKey = currentObjectByKey[key];\n const valueOfKeyIsSignal = isSignal(valueOfKey);\n\n if (valueOfKeyIsSignal && (typeof valueOfKey() !== 'object' || valueOfKey() === null)) {\n (valueOfKey as WritableSignal<any>).set(isSignal(value) ? value() : value);\n return;\n }\n if (isSignal(preObjectByKey)) {\n (preObjectByKey as WritableSignal<any>).update((data: any) => {\n const dataOfKey = data[key];\n if (isNil(dataOfKey) || !valueOfKeyIsSignal) {\n data[key] = value;\n }\n\n if (valueOfKeyIsSignal) {\n (valueOfKey as WritableSignal<any>).set(isSignal(value) ? value() : value);\n }\n\n if (Array.isArray(data)) {\n return [...data];\n }\n return { ...data };\n });\n return;\n }\n if (valueOfKeyIsSignal) {\n (valueOfKey as WritableSignal<any>).set(isSignal(value) ? value() : value);\n return;\n }\n currentObjectByKey[key] = value;\n });\n\n return obj as O;\n};\n\n/**\n * Tạo một bản sao sâu của một đối tượng hoặc giá trị bất kỳ\n * @param data Dữ liệu cần sao chép\n * @param options Tùy chọn cấu hình\n * @param options.ignoreSignal Nếu true, sẽ không sao chép các signal mà trả về signal gốc\n * @param seen WeakMap để theo dõi các tham chiếu đã được sao chép, tránh lặp vô hạn với các tham chiếu vòng\n * @returns Bản sao sâu của dữ liệu đầu vào\n * @example\n * const obj = {\n * a: 1,\n * b: { c: 2 },\n * d: [1, 2, 3]\n * };\n * const clone = cloneDeep(obj);\n * // clone là một bản sao hoàn toàn độc lập của obj\n */\nexport const cloneDeep = <T = any>(data: any, options = { ignoreSignal: false }, seen = new WeakMap()): T => {\n if (data === null || (typeof data !== 'object' && !isSignal(data)) || isDangerousObject(data)) {\n return data;\n }\n\n if (seen.has(data)) {\n return seen.get(data);\n }\n\n if (data instanceof HttpParams) {\n return new UtilsHttpParamsRequest(undefined, data) as T;\n }\n\n if (data instanceof Date) {\n return new Date(data.getTime()) as T;\n }\n\n if (isDayjsObject(data)) {\n return getDayjs({ date: data.valueOf() }) as T;\n }\n\n if (isRegExp(data)) {\n return new RegExp(data.source, data.flags) as T;\n }\n\n if (isMap(data)) {\n const mapCopy = new Map();\n seen.set(data, mapCopy);\n data.forEach((val, key) => {\n mapCopy.set(cloneDeep(key, options, seen), cloneDeep(val, options, seen));\n });\n return mapCopy as T;\n }\n\n if (isSet(data)) {\n const setCopy = new Set();\n seen.set(data, setCopy);\n data.forEach((val) => {\n setCopy.add(cloneDeep(val, options, seen));\n });\n return setCopy as T;\n }\n\n if (isArray(data)) {\n seen.set(data, data.map((item) => cloneDeep(item, options, seen)) as T);\n return seen.get(data) as T;\n }\n\n if (isReturnAsIsObject(data)) {\n return data as T;\n }\n\n if (isSignal(data)) {\n if (options?.ignoreSignal) {\n return data as T;\n }\n seen.set(data, signal(cloneDeep(data(), options, seen)));\n return seen.get(data) as T;\n }\n\n const result: Record<string, any> = {};\n seen.set(data, result);\n for (const key in data) {\n const value = data[key];\n if (value instanceof HttpParams) {\n result[key] = new UtilsHttpParamsRequest(undefined, value) as T;\n continue;\n }\n\n if (value instanceof Date) {\n result[key] = new Date(value.getTime()) as T;\n continue;\n }\n\n if (dayjs.isDayjs(value)) {\n result[key] = getDayjs({ date: value.valueOf() }) as T;\n continue;\n }\n\n if (isRegExp(data)) {\n result[key] = new RegExp(value.source, value.flags) as T;\n continue;\n }\n if (isReturnAsIsObject(data)) {\n result[key] = value;\n continue;\n }\n\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n result[key] = cloneDeep(value, options, seen);\n }\n }\n\n return result as T;\n};\n\n/**\n * Chuyển đổi một mảng các đối tượng thành một đối tượng với khóa được chỉ định\n * @param data Mảng các đối tượng cần chuyển đổi\n * @param key Tên thuộc tính được sử dụng làm khóa trong đối tượng kết quả\n * @returns Đối tượng với các giá trị từ mảng được đánh key theo thuộc tính đã chỉ định\n * @example\n * const data = [\n * { id: 1, name: 'John' },\n * { id: 2, name: 'Jane' }\n * ];\n * keyBy(data, 'id');\n * // Kết quả: {\n * // '1': { id: 1, name: 'John' },\n * // '2': { id: 2, name: 'Jane' }\n * // }\n */\nexport const keyBy = (data: Array<TYPE_OBJECT>, key: string): TYPE_OBJECT => {\n if (!data || !data.length || !key) {\n return {};\n }\n return data.reduce((dir, nextItem) => {\n const valueOfKey = get(nextItem, key as PathOf<TYPE_OBJECT>);\n if (typeof valueOfKey !== 'string' && typeof valueOfKey !== 'number' && typeof valueOfKey !== 'boolean') {\n return dir;\n }\n if (!Object.keys(dir).includes(`${valueOfKey}`)) {\n dir[`${valueOfKey}`] = nextItem;\n }\n return dir;\n }, {});\n};\n\n/**\n * Nhóm các đối tượng trong một mảng thành các nhóm dựa trên một thuộc tính cụ thể\n * @param data Mảng các đối tượng cần nhóm\n * @param key Tên thuộc tính được sử dụng làm khóa nhóm\n * @returns Đối tượng với các giá trị từ mảng được nhóm theo thuộc tính đã chỉ định\n * @example\n * const data = [\n * { id: 1, name: 'John' },\n * { id: 2, name: 'Jane' },\n * { id: 1, name: 'John' }\n * ];\n * groupBy(data, 'id');\n * // Kết quả: {\n * // '1': [\n * // { id: 1, name: 'John' },\n * // { id: 1, name: 'John' }\n * // ],\n * // '2': [\n * // { id: 2, name: 'Jane' }\n * // }\n */\nexport const groupBy = (data: Array<TYPE_OBJECT>, key: string): TYPE_OBJECT => {\n if (!data || !data.length || !Object.keys(get(data, '[0]')).length || !key) {\n return {};\n }\n return data.reduce((dir, nextItem) => {\n const valueOfKey = get(nextItem, key as PathOf<TYPE_OBJECT>);\n if (typeof valueOfKey !== 'string' && typeof valueOfKey !== 'number' && typeof valueOfKey !== 'boolean') {\n return dir;\n }\n if (!Object.keys(dir).includes(`${valueOfKey}`)) {\n dir[`${valueOfKey}`] = [];\n }\n dir[`${valueOfKey}`].push(nextItem);\n return dir;\n }, {});\n};\n\n/**\n * Tạo một mảng các số từ giá trị bắt đầu đến giá trị kết thúc với bước nhảy tùy chọn\n * @param start Giá trị bắt đầu của dãy số. Nếu chỉ có một tham số, đây sẽ là giá trị kết thúc và giá trị bắt đầu sẽ là 0\n * @param end Giá trị kết thúc của dãy số (tùy chọn)\n * @param step Bước nhảy giữa các số trong dãy (tùy chọn). Mặc định là 1 nếu end > start, -1 nếu end < start\n * @returns Mảng các số từ start đến end với bước nhảy step\n * @example\n * range(4); // [0, 1, 2, 3]\n * range(1, 5); // [1, 2, 3, 4]\n * range(0, 20, 5); // [0, 5, 10, 15]\n * range(5, 2); // [5, 4, 3]\n */\nexport const range = (start: number, end?: number, step?: number): Array<number> => {\n if (end === undefined || end === null) {\n end = start;\n start = 0;\n }\n\n if (!step) {\n step = end < 0 ? -1 : 1;\n }\n\n if (end < start && step > 0) {\n step *= -1;\n }\n\n const valueStartByStep = step + start;\n const direction = start < end ? 'asc' : 'desc';\n if ((direction === 'asc' && (valueStartByStep < start || valueStartByStep > end)) || (direction === 'desc' && (valueStartByStep > start || valueStartByStep < end))) {\n return [start];\n }\n\n const arr = new Array<number>();\n\n for (let index = 0; index < Math.abs(end - start); index++) {\n let value = start + index * step;\n if (index === 0) {\n value = start;\n }\n\n if ((direction === 'asc' && (value < start || value > end)) || (direction === 'desc' && (value > start || value < end))) {\n return arr;\n }\n\n arr.push(value);\n }\n\n return arr;\n};\n\n/**\n * So sánh hai giá trị bất kỳ có bằng nhau hay không\n * @param value1 Giá trị thứ nhất cần so sánh\n * @param value2 Giá trị thứ hai cần so sánh\n * @param exactlyPosition Có so sánh chính xác vị trí các phần tử trong mảng hay không\n * @returns true nếu hai giá trị bằng nhau, false nếu không bằng nhau\n * @example\n * isEqual([1,2,3], [1,2,3]); // true\n * isEqual([1,2,3], [3,2,1]); // true khi exactlyPosition = false\n * isEqual([1,2,3], [3,2,1]); // false khi exactlyPosition = true\n * isEqual({a:1}, {a:1}); // true\n */\nexport const isEqual = (\n value1: any,\n value2: any,\n options?: {\n exactlyPosition?: boolean;\n ignoreExactlyDataType?: boolean;\n ignoreUnWrapSignal?: boolean;\n }\n): boolean => {\n // Handle signals\n if (!options?.ignoreUnWrapSignal) {\n value1 = unwrapSignal(value1);\n value2 = unwrapSignal(value2);\n }\n const { exactlyPosition = false, ignoreExactlyDataType = false } = options || {};\n\n if (value1 === value2 || (value1 === null && value2 === null) || (value1 === undefined && value2 === undefined)) {\n return true;\n }\n\n if (ignoreExactlyDataType) {\n return isEqual(isNil(value1) ? undefined : `${value1}`, isNil(value2) ? undefined : `${value2}`);\n }\n\n if (typeof value1 !== 'object' || typeof value2 !== 'object' || (Array.isArray(value1) && !Array.isArray(value2)) || (!Array.isArray(value1) && Array.isArray(value2))) {\n return false;\n }\n\n if (Array.isArray(value1) || Array.isArray(value2)) {\n if (value1.length !== value2.length) {\n return false;\n }\n if (!exactlyPosition) {\n return !value1.some((item: any) => !value2.includes(item));\n }\n\n return !value1.some((item: any, index: number) => !isEqual(item, value2[index], options));\n }\n\n if (Object.keys(value1).length !== Object.keys(value2).length) {\n return false;\n }\n return !Object.keys(value1).some((key) => !isEqual(value1[key], value2[key], options));\n};\n\n/**\n * Loại bỏ các phần tử trùng lặp trong mảng dựa trên một thuộc tính chỉ định\n * @param data Mảng dữ liệu cần xử lý\n * @param key Tên thuộc tính dùng để so sánh trùng lặp. Nếu không có key thì so sánh trực tiếp giá trị\n * @returns Mảng mới chứa các phần tử không trùng lặp\n * @example\n * const arr = [\n * { id: 1, name: 'A' },\n * { id: 2, name: 'B' },\n * { id: 1, name: 'C' }\n * ];\n * uniqBy(arr, 'id'); // [{ id: 1, name: 'A' }, { id: 2, name: 'B' }]\n *\n * const numbers = [1, 2, 2, 3, 3];\n * uniqBy(numbers); // [1, 2, 3]\n *\n * const numbersSignal = [signal(1), signal(2), signal(3), signal(2), signal(5), signal(4), signal(1), signal(6), signal(7), signal(6)];\n * uniqBy(numbersSignal); // [signal(1), signal(2), signal(3), signal(5), signal(4), signal(6), signal(7)]\n */\nexport const uniqBy = <T>(data: Array<T>, key?: string): Array<T> => {\n if (!key || !data?.length || typeof get(data, '[0]') !== 'object') {\n // Xử lý mảng chứa signal values\n if (data[0] && isSignal(data[0])) {\n const seen = new Set<string>();\n\n return data.filter((item) => {\n const value = `${get<any>(item, '')}`;\n if (seen.has(value)) {\n return false;\n }\n seen.add(value);\n return true;\n });\n }\n // Xử lý mảng primitive values\n return Array.from(new Set(data));\n }\n\n const dataUnique = keyBy(data as Array<Record<string, any>>, key);\n\n return Object.keys(dataUnique).map((key) => dataUnique[key]);\n};\n\nexport const generateInterface = (obj: any, interfaceName: string): string => {\n const generateType = (value: any): string => {\n if (value === null) {\n return 'null';\n }\n const type = typeof value;\n\n if (type === 'string') {\n return 'string';\n }\n if (type === 'number') {\n return 'number';\n }\n if (type === 'boolean') {\n return 'boolean';\n }\n if (type === 'undefined') {\n return 'any';\n }\n\n if (value instanceof Date) {\n return 'Date';\n }\n\n if (value instanceof RegExp) {\n return 'RegExp';\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return 'Array<any>';\n }\n return `Array<${generateType(value[0])}>`;\n }\n\n if (type === 'object') {\n let interfaceStr = '{\\n';\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n const valueType = generateType(value[key]);\n interfaceStr += ` ${key}: ${valueType};\\n`;\n }\n }\n interfaceStr += '}';\n return interfaceStr;\n }\n\n return 'any';\n };\n\n const interfaceStr = `interface ${interfaceName} ${generateType(obj)}`;\n return interfaceStr;\n};\n","import { DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IBoundingClientRect } from '@libs-ui/interfaces-types';\n\nimport Bowser from 'bowser';\nimport { finalize, fromEvent, mergeMap, startWith, takeUntil, tap } from 'rxjs';\nimport { set } from './helpers';\n\nlet parser: DOMParser | null = null;\nlet bowserParser: Bowser.Parser.Parser | null = null;\n\nexport const getDeviceInfo = () => {\n if (!bowserParser) {\n bowserParser = Bowser.getParser(window.navigator.userAgent);\n }\n return bowserParser;\n};\n\nexport const isTouchDevice = (): boolean => ('onpointerdown' in navigator && navigator.maxTouchPoints > 0) || 'ontouchstart' in window || (window.matchMedia?.('(pointer: coarse)').matches ?? false);\n\nexport const getEventNameHandleClick = (() => {\n if (isTouchDevice()) {\n return 'pointerdown';\n }\n const deviceInfo = getDeviceInfo();\n\n return deviceInfo.isPlatform('desktop') ? 'click' : 'touchstart';\n})();\n\nexport const getDocumentByString = (htmlStr: string): Document => {\n if (!parser) {\n parser = new DOMParser();\n }\n return parser.parseFromString(htmlStr, 'text/html');\n};\n\nexport const cloneIBoundingClientRect = (rect: IBoundingClientRect): IBoundingClientRect => {\n return {\n top: rect['top'],\n left: rect['left'],\n width: rect['width'],\n height: rect['height'],\n bottom: rect['bottom'],\n };\n};\n\nexport const setStylesElement = (el: HTMLElement, styles: Record<string, string>): void => {\n Object.keys(styles).forEach((key: string) => set(el, `style.${key}`, styles[key]));\n};\n\nexport const getViewport = (win: Window = window): { width: number; height: number } => {\n const doc = win.document.documentElement,\n body = win.document.getElementsByTagName('body')[0],\n w = win.innerWidth || doc.clientWidth || body.clientWidth,\n h = win.innerHeight || doc.clientHeight || body.clientHeight;\n\n return { width: w, height: h };\n};\n\nexport const setCaretPosition = (element: HTMLTextAreaElement | HTMLInputElement, position: number): void => {\n if (!element || !element.setSelectionRange) {\n return;\n }\n element.focus();\n element.setSelectionRange(position, position);\n};\n\nexport const checkViewInScreen = (container: HTMLElement, element: HTMLElement, elementScroll?: HTMLElement, maxTopLeft?: { top?: number; left?: number }): boolean => {\n if (!container || !element) {\n return false;\n }\n\n const rectContainer = cloneIBoundingClientRect(container.getBoundingClientRect());\n\n if (elementScroll) {\n const rectElementScroll = elementScroll.getBoundingClientRect();\n\n rectContainer['left'] = rectElementScroll.left;\n rectContainer['top'] = rectElementScroll.top;\n }\n\n const rectElement = element.getBoundingClientRect();\n const { left, top } = rectElement;\n const topContainer = rectContainer['top'];\n const leftContainer = rectContainer['left'];\n const widthContainer = rectContainer['width'];\n const heightContainer = rectContainer['height'];\n const scrollTopContainer = container.scrollTop;\n const scrollLeftContainer = container.scrollLeft;\n const limitTop = topContainer + scrollTopContainer + heightContainer;\n const limitLeft = leftContainer + scrollLeftContainer + widthContainer;\n\n const maxTopItem = top + (maxTopLeft?.top || 0);\n const maxLeftItem = left + (maxTopLeft?.left || 0);\n\n if (topContainer <= maxTopItem && maxTopItem <= limitTop && leftContainer <= maxLeftItem && maxLeftItem <= limitLeft) {\n return true;\n }\n\n return false;\n};\n\nexport const checkMouseOverInContainer = (mousePosition: { clientX: number; clientY: number }, element?: HTMLElement, rect?: DOMRect): boolean => {\n if (!element && !rect) {\n return false;\n }\n const rectElement = rect || element?.getBoundingClientRect() || ({} as DOMRect);\n const { left, top, width, height } = rectElement;\n const limitLeft = left + width;\n const limitTop = top + height;\n const { clientX, clientY } = mousePosition;\n if (left <= clientX && clientX <= limitLeft && top <= clientY && clientY <= limitTop) {\n return true;\n }\n\n return false;\n};\n\nexport const getDragEventByElement = (config: {\n elementMouseDown: HTMLElement;\n functionMouseDown?: (event: MouseEvent) => void;\n isStartWithMouseDownEvent?: boolean;\n elementMouseMove?: HTMLElement;\n functionMouseMove?: (event: MouseEvent) => void;\n elementMouseUp?: HTMLElement;\n functionMouseUp?: (event: MouseEvent) => void;\n destroyRef: DestroyRef;\n}) => {\n let timer: ReturnType<typeof setTimeout>;\n const addClass = () => {\n timer = setTimeout(() => {\n document.body.classList.add('!select-none');\n document.body.classList.add('!cursor-grabbing');\n }, 250);\n };\n const removeClass = () => {\n document.body.classList.remove('!select-none');\n document.body.classList.remove('!cursor-grabbing');\n clearTimeout(timer);\n };\n fromEvent(config.elementMouseDown, 'mouseleave')\n .pipe(\n tap(() => document.body.classList.remove('cursor-pointer')),\n takeUntilDestroyed(config.destroyRef)\n )\n .subscribe();\n fromEvent(config.elementMouseDown, 'mouseenter')\n .pipe(\n tap(() => document.body.classList.add('cursor-pointer')),\n takeUntilDestroyed(config.destroyRef)\n )\n .subscribe();\n\n const mouseDown = fromEvent<MouseEvent>(config.elementMouseDown, 'mousedown').pipe(\n tap((e) => {\n e.stopPropagation();\n addClass();\n config.functionMouseDown?.(e);\n })\n );\n const mouseup = fromEvent<MouseEvent>(config.elementMouseUp || document, 'mouseup').pipe(\n tap((e) => {\n e.stopPropagation();\n removeClass();\n config.functionMouseUp?.(e);\n })\n );\n\n const mousemove = fromEvent<MouseEvent>(config.elementMouseMove || document, 'mousemove').pipe(\n tap((e) => {\n e.stopPropagation();\n config.functionMouseMove?.(e);\n }),\n takeUntil(mouseup)\n );\n\n return mouseDown.pipe(\n mergeMap((e: MouseEvent) => (config.isStartWithMouseDownEvent ? mousemove.pipe(startWith(e)) : mousemove)),\n takeUntilDestroyed(config.destroyRef),\n finalize(removeClass)\n );\n};\n","export class UtilsUrlSearchParams {\n private static instance: UtilsUrlSearchParams;\n private params: Array<{ key: string; value: string }>;\n constructor(paramString: string) {\n this.params = new Array<{ key: string; value: string }>();\n this.params.length = 0;\n this.params.push(...this.buildParams(paramString));\n }\n\n static getInstance() {\n if (!this.instance) {\n this.instance = new UtilsUrlSearchParams('');\n }\n\n return this.instance;\n }\n\n public static toStringParamObject(params: { [key in string]: string }) {\n const paramsArr: Array<{ key: string; value: string }> = Object.keys(params).map((key) => {\n return {\n key,\n value: params[key],\n };\n });\n\n return UtilsUrlSearchParams.ToString(paramsArr);\n }\n\n public static ToString(params: Array<{ key: string; value: string }>) {\n let paramsStr = '';\n\n params\n .sort((item1, item2) => item1.key.localeCompare(item2.key))\n .forEach((item) => {\n const { key, value } = item;\n\n paramsStr = `${paramsStr}${paramsStr ? '&' : ''}${key}=${value}`;\n });\n\n return paramsStr;\n }\n\n private buildParams(paramString: string): Array<{ key: string; value: string }> {\n const paramsBuild = new Array<{ key: string; value: string }>();\n\n if (!paramString) {\n return paramsBuild;\n }\n\n const paramsError = paramString.split('?');\n\n if (paramsError.length > 2) {\n paramString = `${paramsError[0]}?${paramsError[1]}&${paramsError.slice(2).join('&')}`;\n }\n\n const params = paramString.replace(/\\S+[?]/g, '').split('&');\n\n if (params) {\n params.forEach((param) => {\n if (param.indexOf('=') < 0) {\n return;\n }\n let [key, value] = param.split('=');\n\n key = key.replace(/[?&]+/g, '');\n value = decodeURIComponent(value.replace(/\\+/g, ' '));\n if (!paramsBuild.some((param) => param.key === key)) {\n paramsBuild.push({ key, value });\n }\n });\n }\n\n return paramsBuild;\n }\n\n public set(key: string, value: string) {\n const paramByKey = this.params.find((param) => param.key === key) as Record<string, string>;\n\n if (!paramByKey) {\n this.params.push({ key, value: decodeURIComponent(value.replace(/\\+/g, ' ')) });\n\n return;\n }\n\n paramByKey['value'] = value;\n }\n\n public get(key: string) {\n return this.params.find((param) => param.key === key)?.value;\n }\n\n public has(key: string) {\n return this.params.some((param) => param.key === key);\n }\n\n public delete(key: string) {\n const index = this.params.findIndex((param) => param.key === key);\n\n if (index >= 0) {\n this.params.splice(index, 1);\n }\n }\n\n public length() {\n return this.params.length;\n }\n\n public toString(params?: Array<{ key: string; value: string }>) {\n params = params || this.params;\n\n return UtilsUrlSearchParams.ToString(params);\n }\n\n public getParamObject() {\n const params = {} as Record<string, string>;\n\n this.params.forEach((item) => {\n params[item.key] = item.value;\n });\n\n return params;\n }\n\n public compareParams(param1: string, param2: string) {\n const params1 = this.toString(this.buildParams(param1));\n const params2 = this.toString(this.buildParams(param2));\n\n return params1 === params2;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport interface IColorContrastFromOrigin {\n step: number;\n label: string;\n light: string;\n dark: string;\n}\n\nconst step = 20;\nconst percent = 0.05;\n\nexport const colorStepContrastFromOrigin = (color: string, stepNumber: number) => {\n return colorContrastFromOrigin(color).find((item) => item.step === stepNumber);\n};\n\nexport const colorContrastFromOrigin = (color: string): Array<IColorContrastFromOrigin> => {\n const parsedColorsArray = parseColorValues(color);\n const colors: any = [];\n let calculatedShades: Array<string> = [];\n let calculatedTints: Array<string> = [];\n\n if (parsedColorsArray !== null) {\n for (let i = 0; i < parsedColorsArray.length; i++) {\n calculatedShades = calculateShades(parsedColorsArray[i]);\n calculatedTints = calculateTints(parsedColorsArray[i]);\n }\n\n for (let i = 0; i <= step; i++) {\n colors.push({ step: i * 5, label: `${i * 5}%`, dark: `#${calculatedShades[i]}`, light: `#${calculatedTints[i]}` });\n }\n }\n\n return colors;\n};\n\nconst parseColorValues = (colorValues: any) => {\n let colorValuesArray = colorValues.match(/\\b[0-9A-Fa-f]{3}\\b|[0-9A-Fa-f]{6}\\b/g);\n\n if (colorValuesArray) {\n colorValuesArray = colorValuesArray.map((item: any) => {\n if (item.length === 3) {\n let newItem = item.toString().split('');\n\n newItem = newItem.reduce((acc: any, it: any) => {\n return acc + it + it;\n }, '');\n\n return newItem;\n }\n\n return item;\n });\n }\n\n return colorValuesArray;\n};\n\nconst calculateShades = (colorValue: any) => {\n return calculate(colorValue, rgbShade).concat('000000');\n};\n\nconst calculateTints = (colorValue: any) => {\n return calculate(colorValue, rgbTint).concat('ffffff');\n};\n\nconst calculate = (colorValue: any, shadeOrTint: any) => {\n const color = hexToRGB(colorValue);\n const shadeValues: Array<string> = [];\n\n for (let i = 0; i < step; i++) {\n shadeValues[i] = rgbToHex(shadeOrTint(color, i));\n }\n\n return shadeValues;\n};\n\nconst rgbShade = (rgb: any, i: any) => {\n return { red: rgb.red * (1 - percent * i), green: rgb.green * (1 - percent * i), blue: rgb.blue * (1 - percent * i) };\n};\nconst rgbTint = (rgb: any, i: any) => {\n return { red: rgb.red + (255 - rgb.red) * i * percent, green: rgb.green + (255 - rgb.green) * i * percent, blue: rgb.blue + (255 - rgb.blue) * i * percent };\n};\n\nexport const rgbToHex = (rgb: any) => {\n return intToHex(rgb.red) + intToHex(rgb.green) + intToHex(rgb.blue);\n};\nconst hexToRGB = (colorValue: any) => {\n return { red: parseInt(colorValue.substr(0, 2), 16), green: parseInt(colorValue.substr(2, 2), 16), blue: parseInt(colorValue.substr(4, 2), 16) };\n};\nconst intToHex = (rgbint: any) => {\n return pad(Math.min(Math.max(Math.round(rgbint), 0), 255).toString(16), 2);\n};\n\nconst pad = (number: any, length: any) => {\n let str = '' + number;\n\n while (str.length < length) {\n str = '0' + str;\n }\n\n return str;\n};\n\nexport const listColorDefine: Array<string> = [\n '#E62222',\n '#B81B1B',\n '#EB4E4E',\n '#F97316',\n '#C75C12',\n '#FA8F45',\n '#FFB700',\n '#CC9200',\n '#FFC533',\n '#84CC16',\n '#6AA312',\n '#9dd645',\n '#00BC62',\n '#00A757',\n '#33DA8A',\n '#06B6D4',\n '#1B59C4',\n '#4E8CF7',\n '#0EA5E9',\n '#1B59C4',\n '#4E8CF7',\n '#226FF5',\n '#1B59C4',\n '#4E8CF7',\n '#6366F1',\n '#4F52C1',\n '#8285F4',\n '#5B04B3',\n '#49038F',\n '#7C36C2',\n '#D946EF',\n '#AE38BF',\n '#E16BF2',\n '#EC4899',\n '#BD3A7A',\n '#F06DAD',\n '#F43F5E',\n '#C3324B',\n '#F6657E',\n '#757380',\n '#5E5C66',\n '#918F99',\n '#202020',\n '#1A1A1A',\n '#4D4D4D',\n];\n\nexport const getColorById = (str: string): string => {\n let hashString = 0;\n\n if (!str) {\n return '';\n }\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n\n hashString = (hashString << 5) - hashString + char;\n hashString = hashString & hashString;\n }\n\n return listColorDefine[Math.abs(hashString) % listColorDefine.length];\n};\n\nexport const detectAndCleanNearWhiteColors = (style: string): string => {\n if (!style) return style;\n\n const styleMap: Record<string, string> = {};\n const rules = style\n .split(';')\n .map((s) => s.trim())\n .filter(Boolean);\n\n for (const rule of rules) {\n const [keyRaw, valueRaw] = rule.split(':').map((s) => s.trim());\n if (!keyRaw || !valueRaw) continue;\n const key = keyRaw.toLowerCase();\n styleMap[key] = valueRaw;\n }\n\n const colorKeys = ['color', 'background', 'background-color', 'border-color'];\n for (const key of colorKeys) {\n const value = styleMap[key];\n if (value && isNearWhite(value)) {\n delete styleMap[key];\n }\n }\n\n return Object.entries(styleMap)\n .map(([k, v]) => `${k}: ${v}`)\n .join('; ');\n};\n\nexport const isNearWhite = (color: string): boolean => {\n if (!color) return false;\n color = color.trim().toLowerCase();\n\n // Chuyển HEX, RGB hoặc tên màu sang r,g,b\n const parseColor = (input: string): [number, number, number] | null => {\n if (input.startsWith('#')) {\n let hex = input.slice(1);\n if (hex.length === 3)\n hex = hex\n .split('')\n .map((c) => c + c)\n .join('');\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n return [r, g, b];\n }\n\n const rgbMatch = input.match(/rgba?\\s*\\(([^)]+)\\)/);\n if (rgbMatch) {\n const [r, g, b] = rgbMatch[1]\n .split(',')\n .slice(0, 3)\n .map((v) => parseFloat(v.trim()));\n return [r, g, b];\n }\n\n const whiteNames = ['white', 'snow', 'ivory', 'ghostwhite', 'floralwhite', 'seashell', 'whitesmoke'];\n if (whiteNames.includes(input)) return [255, 255, 255];\n return null;\n };\n\n const rgb = parseColor(color);\n if (!rgb) return false;\n\n const [r, g, b] = rgb;\n\n // Tính luminance (độ sáng)\n const luminance = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;\n\n // Tính saturation (độ bão hòa)\n const max = Math.max(r, g, b) / 255;\n const min = Math.min(r, g, b) / 255;\n const saturation = max === 0 ? 0 : (max - min) / max;\n\n // Chỉ coi là \"gần trắng\" nếu:\n // 1. rất sáng (luminance > 0.95)\n // 2. và rất ít màu (saturation < 0.1)\n return luminance > 0.95 && saturation < 0.1;\n};\n","export abstract class UtilsKeyCodeConstant {\n static readonly MAC_ENTER = 3;\n static readonly BACKSPACE = 8;\n static readonly TAB = 9;\n static readonly NUM_CENTER = 12;\n static readonly ENTER = 13;\n static readonly SHIFT = 16;\n static readonly CONTROL = 17;\n static readonly ALT = 18;\n static readonly PAUSE = 19;\n static readonly CAPS_LOCK = 20;\n static readonly ESCAPE = 27;\n static readonly SPACE = 32;\n static readonly PAGE_UP = 33;\n static readonly PAGE_DOWN = 34;\n static readonly END = 35;\n static readonly HOME = 36;\n static readonly LEFT_ARROW = 37;\n static readonly UP_ARROW = 38;\n static readonly RIGHT_ARROW = 39;\n static readonly DOWN_ARROW = 40;\n static readonly PLUS_SIGN = 43;\n static readonly PRINT_SCREEN = 44;\n static readonly INSERT = 45;\n static readonly DELETE = 46;\n static readonly ZERO = 48;\n static readonly ONE = 49;\n static readonly TWO = 50;\n static readonly THREE = 51;\n static readonly FOUR = 52;\n static readonly FIVE = 53;\n static readonly SIX = 54;\n static readonly SEVEN = 55;\n static readonly EIGHT = 56;\n static readonly NINE = 57;\n static readonly FF_SEMICOLON = 59; // Firefox (Gecko) fires this for semicolon instead of 186\n static readonly FF_EQUALS = 61; // Firefox (Gecko) fires this for equals instead of 187\n static readonly QUESTION_MARK = 63;\n static readonly AT_SIGN = 64;\n static readonly A = 65;\n static readonly B = 66;\n static readonly C = 67;\n static readonly D = 68;\n static readonly E = 69;\n static readonly F = 70;\n static readonly G = 71;\n static readonly H = 72;\n static readonly I = 73;\n static readonly J = 74;\n static readonly K = 75;\n static readonly L = 76;\n static readonly M = 77;\n static readonly N = 78;\n static readonly O = 79;\n static readonly P = 80;\n static readonly Q = 81;\n static readonly R = 82;\n static readonly S = 83;\n static readonly T = 84;\n static readonly U = 85;\n static readonly V = 86;\n static readonly W = 87;\n static readonly X = 88;\n static readonly Y = 89;\n static readonly Z = 90;\n static readonly META = 91; // WIN_KEY_LEFT\n static readonly MAC_WK_CMD_LEFT = 91;\n static readonly MAC_WK_CMD_RIGHT = 93;\n static readonly CONTEXT_MENU = 93;\n static readonly NUMPAD_ZERO = 96;\n static readonly NUMPAD_ONE = 97;\n static readonly NUMPAD_TWO = 98;\n static readonly NUMPAD_THREE = 99;\n static readonly NUMPAD_FOUR = 100;\n static readonly NUMPAD_FIVE = 101;\n static readonly NUMPAD_SIX = 102;\n static readonly NUMPAD_SEVEN = 103;\n static readonly NUMPAD_EIGHT = 104;\n static readonly NUMPAD_NINE = 105;\n static readonly NUMPAD_MULTIPLY = 106;\n static readonly NUMPAD_PLUS = 107;\n static readonly NUMPAD_MINUS = 109;\n static readonly NUMPAD_PERIOD = 110;\n static readonly NUMPAD_DIVIDE = 111;\n static readonly F1 = 112;\n static readonly F2 = 113;\n static readonly F3 = 114;\n static readonly F4 = 115;\n static readonly F5 = 116;\n static readonly F6 = 117;\n static readonly F7 = 118;\n static readonly F8 = 119;\n static readonly F9 = 120;\n static readonly F10 = 121;\n static readonly F11 = 122;\n static readonly F12 = 123;\n static readonly NUM_LOCK = 144;\n static readonly SCROLL_LOCK = 145;\n static readonly FIRST_MEDIA = 166;\n static readonly FF_MINUS = 173;\n static readonly MUTE = 173; // Firefox (Gecko) fires 181 for MUTE\n static readonly VOLUME_DOWN = 174; // Firefox (Gecko) fires 182 for VOLUME_DOWN\n static readonly VOLUME_UP = 175; // Firefox (Gecko) fires 183 for VOLUME_UP\n static readonly FF_MUTE = 181;\n static readonly FF_VOLUME_DOWN = 182;\n static readonly LAST_MEDIA = 183;\n static readonly FF_VOLUME_UP = 183;\n static readonly SEMICOLON = 186; // Firefox (Gecko) fires 59 for SEMICOLON\n static readonly EQUALS = 187; // Firefox (Gecko) fires 61 for EQUALS\n static readonly COMMA = 188;\n static readonly DASH = 189; // Firefox (Gecko) fires 173 for DASH/MINUS\n static readonly PERIOD = 190;\n static readonly SLASH = 191;\n static readonly APOSTROPHE = 192;\n static readonly TILDE = 192;\n static readonly OPEN_SQUARE_BRACKET = 219;\n static readonly BACKSLASH = 220;\n static readonly CLOSE_SQUARE_BRACKET = 221;\n static readonly SINGLE_QUOTE = 222;\n static readonly MAC_META = 224;\n static readonly BUFFERED = 229;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpParams } from '@angular/common/http';\nimport { md5 } from './crypto';\nimport { get } from './helpers';\n\nexport const getKeyCacheByArrayObject = (keyCache: string, argumentsValue?: Array<unknown>): string => {\n if (!keyCache || !argumentsValue) {\n return '';\n }\n let keyBuild = `${JSON.stringify(argumentsValue.slice(1))}-key-cache-plus`;\n\n argumentsValue.forEach((item: any) => {\n if (typeof item === 'object') {\n if (Array.isArray(item)) {\n keyBuild = `${keyBuild}${JSON.stringify(item)}`;\n return;\n }\n const keys = (item instanceof HttpParams ? item.keys() : Object.keys(item)).sort((str1: string, str2: string) => str1.localeCompare(str2)) as Array<string>;\n\n keys.forEach((key) => {\n if (key.toLocaleLowerCase() === 'pem') {\n return;\n }\n keyBuild = `${keyBuild}${JSON.stringify(get(item, key))}`;\n });\n return;\n }\n keyBuild = `${keyBuild}${item}`;\n });\n\n const keyCachePlus = md5(keyBuild);\n const keyCacheMD5 = md5(keyCache);\n\n return `${keyCacheMD5}-${md5(`${keyCacheMD5}-${keyCachePlus}`)}`;\n};\n","import { UtilsCache } from './cache';\nimport { isNil } from './helpers';\nimport { UtilsLanguageConstants } from './language';\n\nexport const formatNumber = (value: string | number): string => {\n const lang = UtilsCache.getLang();\n\n if (lang === UtilsLanguageConstants.EN) {\n return `${value}`.replace(/[,]/g, '');\n }\n\n return `${value}`.replace(/[.]/g, '').replace(/[,]/g, '.');\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const viewDataNumberByLanguage = (value: string | number, acceptNegativeValue: boolean | undefined, parseFixed = 1, ignoreFormatSeparator = false, ignoreParseFloat = false): any => {\n const lang = UtilsCache.getLang();\n\n if (!`${value}`.trim()) {\n return '';\n }\n if (isNil(value) || (!acceptNegativeValue && +value <= 0)) {\n return 0;\n }\n if (typeof value === 'string' && !ignoreFormatSeparator) {\n value = formatNumber(value);\n }\n\n const isFloat = value.toString().includes('.');\n const [intStr, floatStr] = value.toString().split('.');\n\n if (!floatStr?.length) {\n parseFixed = 0;\n }\n const round = (value: number, parseFixed: number) => {\n const fixed = Math.pow(10, parseFixed);\n\n return Math.round(value * fixed) / fixed;\n };\n\n if (parseFixed > (floatStr?.length || 0)) {\n const maxParseFixed = acceptNegativeValue && +value < 0 ? 17 : 16;\n const fixed = maxParseFixed - (intStr?.length || 0);\n\n parseFixed = parseFixed < fixed ? parseFixed : fixed;\n }\n\n if (isFloat && !ignoreParseFloat) {\n value = parseFloat(round(+value, parseFixed).toFixed(parseFixed));\n }\n\n // Xử lý không format dữ liệu phần thập phân\n const valueString = value.toString();\n const index = valueString.indexOf('.');\n\n if (index !== -1 && (parseFixed > 3 || ignoreParseFloat)) {\n let decimalPart = valueString.substring(index + 1, valueString.length);\n let int = valueString.substring(0, index + 1);\n\n if (ignoreParseFloat) {\n decimalPart = decimalPart.substring(0, parseFixed);\n }\n if (lang === UtilsLanguageConstants.EN) {\n int = int.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n\n return `${int}${decimalPart}`;\n }\n int = int.replace('.', ',').replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n\n return `${int}${decimalPart}`;\n }\n if (index === -1 || parseFixed <= 3) {\n if (lang === UtilsLanguageConstants.EN) {\n return value.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n\n return value\n .toString()\n .replace('.', ',')\n .replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n }\n};\n","/* eslint-disable no-useless-escape */\nexport const patternEmail = () => {\n return /^[A-z0-9]+[A-z0-9\\_\\.\\+\\-]*[A-z0-9]@[A-z0-9]+[A-z0-9\\_\\.\\+\\-]*[A-z0-9]\\.[A-z0-9]+[A-z0-9\\_\\.\\+\\-]*[A-z0-9]$/;\n};\n\nexport const patterProtocolUrl = () => {\n return /(http|https|ftp):/;\n};\n\nexport const patternUrl = () => {\n return /^(http|https|ftp):(\\/){2}[^\\s]+[.]{1}[^\\s]+$/;\n};\n\nexport const patternHostUrl = () => {\n return /^((https|http|ftp):[/]{2}[^/\\s]+)/;\n};\n\nexport const patternDomain = () => {\n return /^([a-zA-Z0-9])(([a-z0-9-]{1,61})?[a-z0-9]{1})?(\\.[a-z0-9](([a-z0-9-]{1,61})?[a-z0-9]{1})?)?(\\.[a-zA-Z]{2,4})+$/;\n};\n\nexport const patternMobilePhone = () => {\n return /^(\\+?84|0|84)([0-9]{9})$/;\n};\n\nexport const patternPhone = () => {\n return /^(\\+?84|[0-9]|84)([0-9]{2,9})$/;\n};\n\nexport const patternNumber = () => {\n return /\\d+/g;\n};\nexport const patternEncodeUri = () => {\n return /%([0-9A-F]{2})/g;\n};\nexport const patternName = () => {\n return /^\\w+[A-Za-z\\s\\d]+$/;\n};\nexport const patternNameUtf8 = () => {\n return /^[ àáảãạăắằẵặẳâầấậẫẩđèéẻẽẹêềếểễệìíỉĩịòóỏõọôồốổỗộơờớởỡợùúủũụưừứửữựỳýỷỹÀÁẢÃẠĂẮẰẴẶẲÂẦẤẬẪẨĐÈÉẺẼẸÊỀẾỂỄỆÌÍỈĨỊÒÓỎÕỌÔỒỐỔỖỘƠỜỚỞỠỢÙÚỦŨỤƯỪỨỬỮỰỲÝỶỸA-Za-z0-9]+$/;\n};\nexport const patternNameSpecial = () => {\n return /[~!@#$%^&*()-+=<>,?\\/\\\\:;\"']/;\n};\nexport const patternNameProfile = () => {\n return /([\\w\\W\\d\\s]+)+/;\n};\nexport const patternEmoji = () => {\n return /(\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff])/g;\n};\nexport const patternRuleFieldReplace = () => {\n return /[{]{2}[a-zA-Z_-]+[}]{2}/g;\n};\nexport const patternGetFieldByRuleFieldReplace = () => {\n return /[a-zA-Z_-]+/g;\n};\n\nexport const patternPem = () => {\n return /^(0|1):([0-9]{1,2}):(\\{\\{path-api\\}\\}):([a-zA-Z0-9\\/]+)$/g;\n};\n\nexport const patternTax = () => {\n return /^([0-9]){10}(-[0-9]{3})?$/;\n};\n\nexport const patternKey = () => {\n return /^([0-9]){10}(-[0-9]{3})?$/;\n};\n\nexport const patternAccount = () => {\n return /^(?=.*@)[a-z0-9@._-]{2,63}$/;\n};\n","//NOTE: Do là function truyền từ bên ngoài vào nên sẽ không có unit test\nexport type TYPE_FUNCTION_XSS = (data: string) => Promise<string>;\nlet functionXssFilter: TYPE_FUNCTION_XSS = async (value: string): Promise<string> => {\n return value;\n};\n\nexport const updateFunctionXssFilter = (functionCustom: TYPE_FUNCTION_XSS) => {\n functionXssFilter = functionCustom;\n};\n\nexport const xssFilter: TYPE_FUNCTION_XSS = async (data: string) => {\n return await functionXssFilter(data);\n};\n","import { TYPE_OBJECT } from '@libs-ui/interfaces-types';\nimport { omitBy } from './helpers';\nimport { isNil } from './helpers';\n\nexport const ENCODE_URI_PATTERN = /%([0-9A-F]{2})/g;\n\nexport const decodeURI = (value: string) => {\n return decodeURIComponent(\n value\n .split('')\n .map((c: string) => {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n })\n .join('')\n );\n};\n\nexport const encodeURI = (value: string) => {\n return encodeURIComponent(value).replace(ENCODE_URI_PATTERN, (match, p1) => {\n return String.fromCharCode(parseInt(p1, 16));\n });\n};\n\nexport const endCodeUrl = (params: TYPE_OBJECT, isBody: boolean): string => {\n params = omitBy(params, (param) => param === '' || isNil(param));\n let res = '';\n\n for (const p in params) {\n res += `&${p}=${encodeURIComponent(params[p])}`;\n }\n\n return res === '' ? '' : `${isBody ? '' : '?'}${res.substring(1)}`;\n};\n","import { encodeURI, decodeURI } from './uri';\n\nexport const base64Encode = (value: string) => {\n return btoa(encodeURI(value));\n};\n\nexport const base64Decode = (value: string) => {\n return decodeURI(atob(value));\n};\n\nexport const convertBase64ToBlob = (dataBase64: string) => {\n const BASE64_MARKER = ';base64,';\n\n if (dataBase64.indexOf(BASE64_MARKER) === -1) {\n const parts = dataBase64.split(',');\n const contentType = parts[0].split(':')[1];\n const raw = parts[1];\n const blob = new Blob([raw], { type: contentType });\n\n return blob;\n }\n const parts = dataBase64.split(BASE64_MARKER);\n const contentType = parts[0].split(':')[1];\n const raw = window.atob(parts[1]);\n const rawLength = raw.length;\n const uInt8Array = new Uint8Array(rawLength);\n\n for (let i = 0; i < rawLength; ++i) {\n uInt8Array[i] = raw.charCodeAt(i);\n }\n\n const blob = new Blob([uInt8Array], { type: contentType });\n\n return blob;\n};\n\nexport const convertFileToBase64_ObjectUrl = async (file: File): Promise<string | ArrayBuffer> => {\n if (!file.type.match(/image.*/)) {\n return URL.createObjectURL(file);\n }\n\n return await convertFileToBase64(file);\n};\n\nexport const convertFileToBase64 = (file: File): Promise<string | ArrayBuffer> => {\n return new Promise((resolve) => {\n const reader = new FileReader();\n\n reader.readAsDataURL(file);\n reader.onload = (event) => {\n resolve(event.target?.result ?? '');\n };\n });\n};\n","import { convertBase64ToBlob } from './base64';\n\nexport const downloadFileByUrlUseXmlRequest = (fileUrl: string, filename: string) => {\n const xmlRequest = new XMLHttpRequest();\n\n xmlRequest.open('GET', fileUrl, true);\n xmlRequest.responseType = 'blob';\n xmlRequest.onerror = () => {\n const url = window.URL.createObjectURL(xmlRequest.response);\n\n downloadFileByUrl(url, filename);\n };\n xmlRequest.onload = () => {\n const url = window.URL.createObjectURL(xmlRequest.response);\n\n downloadFileByUrl(url, filename);\n };\n xmlRequest.send();\n};\n\nexport const downloadFileByUrl = async (fileUrl: string, filename: string, onlyOpen?: boolean) => {\n const downloadFileElement = document.createElement('a');\n\n if (!onlyOpen) {\n const response = await fetch(fileUrl);\n\n if (response.ok) {\n const blob = await response.blob();\n\n fileUrl = URL.createObjectURL(blob);\n }\n }\n downloadFileElement.href = fileUrl;\n downloadFileElement.download = filename;\n downloadFileElement.target = '_blank';\n downloadFileElement.click();\n downloadFileElement.remove();\n};\n\nexport const downloadImageFromELement = (imageElement: HTMLImageElement, typeFileDownload?: string, nameFile?: string) => {\n const parentElement = imageElement?.src;\n const blobData = convertBase64ToBlob(parentElement);\n const blob = new Blob([blobData], { type: typeFileDownload || 'image/png' });\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n\n link.href = url;\n link.download = nameFile || 'barcode';\n link.click();\n};\n","import { InjectionToken } from '@angular/core';\n\n//NOTE: Đây là các hàm token inject để các module khác có thể inject vào để sử dụng\nexport const LINK_IMAGE_ERROR_TOKEN_INJECT = new InjectionToken<string>('LINK_IMAGE_ERROR_TOKEN_INJECT');\nexport const PROCESS_BAR_STANDARD_CONFIG_DEFAULT_TOKEN_INJECT = new InjectionToken<string>('PROCESS_BAR_STANDARD_CONFIG_DEFAULT_TOKEN_INJECT');\nexport const PROCESS_BAR_STEPS_CONFIG_DEFAULT_TOKEN_INJECT = new InjectionToken<string>('PROCESS_BAR_STEPS_CONFIG_DEFAULT_TOKEN_INJECT');\n","import { IFile } from '@libs-ui/interfaces-types';\nimport { convertBase64ToBlob } from './base64';\nimport { get, set } from './helpers';\nimport { uuid } from './uuid';\n\nexport const isTypeImage = (file: File | Blob) => (file.type.match(/image.*/) ? true : false);\nexport const isTypeVideo = (file: File | Blob) => (file.type.match(/video.*/) ? true : false);\nexport const isTypeAudio = (file: File | Blob) => (file.type.match(/audio.*/) ? true : false);\nexport const isTypeFile = (file: File) => (file instanceof File || Object.prototype.toString.call(file) === '[object File]' ? true : false);\n\nexport const ExcelExtList = ['xls', 'xlsx', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];\nexport const DocumentExtList = [\n 'doc',\n 'docx',\n 'xls',\n 'xlsx',\n 'ppt',\n 'pptx',\n 'pdf',\n 'json',\n 'xml',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/pdf',\n 'application/json',\n 'application/xml',\n];\nexport const isIncludeDocumentExtList = (ext: string, listExt: Array<string> = DocumentExtList) => listExt.includes(ext) || listExt.includes(`application/${ext}`);\n\nexport const ImageExtList = ['gif', 'jpg', 'jpeg', 'png', 'image/gif', 'image/jpeg', 'image/jpeg', 'image/png', 'webp'];\nexport const isIncludeImageExtList = (ext: string, listExt: Array<string> = ImageExtList) => listExt.includes(ext);\n\nexport const VideoExtList = ['mp4', 'mov', 'mpg', 'avi', 'wmv', 'video/mp4', 'video/quicktime', 'video/mpeg', 'video/x-msvideo', 'video/x-ms-wmv'];\nexport const isIncludeVideoExtList = (ext: string, listExt: Array<string> = VideoExtList) => listExt.includes(ext);\nexport const AudioExtList = ['mp3', 'wav', 'ogg', 'aac', 'm4a', 'flac', 'wma', 'audio/mpeg', 'audio/wav', 'audio/ogg', 'audio/aac', 'audio/mp4', 'audio/flac', 'audio/x-ms-wma'];\nexport const isIncludeAudioExtList = (ext: string, listExt: Array<string> = AudioExtList) => listExt.includes(ext);\n\nexport const getFileExtension = (file: IFile | File) => {\n if (file instanceof File && file.type) {\n return (file.type.split('/').pop() || '').toLowerCase();\n }\n file = file as IFile;\n if (file.mimetype || file.file?.type) {\n return file.mimetype || file.file?.type;\n }\n\n let fileName = file.name as string;\n const url = get(file, 'url') || get(file, 'origin_url');\n if (!fileName && !url) {\n return;\n }\n if (!fileName && url) {\n fileName = url.split('/').pop() || '';\n set(file, 'name', fileName);\n }\n const dots = fileName.split('.');\n\n if (!dots) {\n return;\n }\n\n return (dots.pop() || '').toLowerCase();\n};\n\nexport const getLabelBySizeFile = (size: number, toFixed = 2) => {\n if (size < 1024 * 1024) {\n return ` ${(size / 1024).toFixed(toFixed)} KB`;\n }\n\n return ` ${(size / (1024 * 1024)).toFixed(toFixed)} MB`;\n};\n\nexport const convertBlobToFile = (blob: Blob, fileName?: string): File => {\n const type = blob.type.split('/')[1];\n const name = fileName ? `${fileName.split('.')[0]}.${type}` : `${uuid()}.${type}`;\n\n return new File([blob], name, { type: blob.type, lastModified: Date.now() });\n};\n\nexport const convertUrlToFile = (url: string, fileName?: string) => {\n return new Promise<File | undefined>((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.onload = function () {\n const reader = new FileReader();\n reader.onloadend = () => {\n const file = convertBase64ToBlob(reader.result as string);\n resolve(convertBlobToFile(file, fileName || Date.now().toLocaleString()));\n };\n reader.onerror = () => resolve(undefined);\n reader.readAsDataURL(xhr.response);\n };\n xhr.onerror = (err) => {\n reject(err);\n };\n xhr.open('GET', url);\n xhr.responseType = 'blob';\n xhr.send();\n });\n};\n","import { ITextFormatOptions } from '@libs-ui/interfaces-types';\nimport { CHARACTER_DATA_EMPTY } from './constants';\nimport { patternEmoji } from './pattern';\n\nexport const highlightByKeyword = (value: string | undefined, search: string | undefined, ignoreHighlight?: boolean, classHightLight?: string) => {\n if (!value) {\n return CHARACTER_DATA_EMPTY;\n }\n try {\n if (!search || ignoreHighlight) {\n return value;\n }\n const keysReplace: Array<string> = getValueReplace(search, value);\n\n if (!keysReplace || !keysReplace.length) {\n return value;\n }\n if (!classHightLight) {\n classHightLight = 'bg-[#19344a] text-white';\n }\n keysReplace.forEach((key) => {\n const regExp = new RegExp(key, 'gi');\n\n value = value?.replace(regExp, `<span class=\"${classHightLight}\">$&</span>`);\n });\n } catch (error) {\n console.log(error);\n } finally {\n // eslint-disable-next-line no-unsafe-finally\n return value;\n }\n};\n\nconst getValueReplace = (search: string, value: string): string[] => {\n const searchConvert = deleteUnicode(search).toLowerCase();\n const valueConvert = deleteUnicode(value).toLowerCase();\n const keys: Set<string> = new Set();\n let i = 0;\n\n while ((i = valueConvert.indexOf(searchConvert, i)) >= 0) {\n const endIndex = i + search.length;\n\n keys.add(value.substring(i, endIndex));\n i += +valueConvert.length;\n }\n\n return Array.from(keys);\n};\n\nexport const formatTextCompare = (text: string, options?: ITextFormatOptions) => {\n if (!text) {\n return text;\n }\n\n text = text.normalize('NFC');\n\n return formatByOptions(text, options);\n};\n\nexport const fullNameFormat = (value: string) => {\n if (!value) {\n return value;\n }\n return capitalize(value, { lowercaseOtherCharacter: true, trim: true, removeMultipleSpace: true, removeEmoji: true });\n};\n\nexport const capitalize = (text: string, options?: ITextFormatOptions) => {\n if (!text) {\n return text;\n }\n text = formatByOptions(text, options);\n return text\n .split(' ')\n .map((word) => firstLetterToUpperCase(word))\n .join(' ');\n};\n\nexport const firstLetterToUpperCase = (text: string, options?: ITextFormatOptions) => {\n if (!text) {\n return text;\n }\n return uppercaseByPosition(text, 0, options);\n};\n\nexport const uppercaseByPosition = (text: string, position: number, options?: ITextFormatOptions) => {\n if (!text) {\n return text;\n }\n text = formatByOptions(text, options);\n return `${text.substring(0, position)}${text.charAt(position).toUpperCase()}${text.substring(position + 1)}`;\n};\n\nconst formatByOptions = (text: string, options?: ITextFormatOptions) => {\n if (!text || !options) {\n return text;\n }\n if (options?.uppercaseOtherCharacter) {\n text = text.toUpperCase();\n }\n\n if (options?.lowercaseOtherCharacter) {\n text = text.toLowerCase();\n }\n\n if (options?.removeMultipleSpace) {\n text = text.replace(/\\u200B|\\u00A0/g, '');\n text = text.replace(/\\s+/g, ' ');\n }\n\n if (options?.removeEmoji) {\n text = removeEmoji(text);\n }\n\n if (options?.removeUnicode) {\n text = deleteUnicode(text);\n }\n\n if (options?.trim) {\n text = text.trim();\n }\n\n return text;\n};\n\nexport const escapeHtml = (str: string): string => {\n if (!str || typeof str !== 'string') {\n return str;\n }\n\n return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&#039;');\n};\n\nexport const decodeEscapeHtml = (str: string): string => {\n const htmlTag = document.createElement('textarea');\n\n htmlTag.innerHTML = str;\n while (str) {\n if (str === htmlTag.value) {\n str = htmlTag.value;\n htmlTag.remove();\n break;\n }\n str = htmlTag.value;\n htmlTag.innerHTML = str;\n }\n\n return str;\n};\n\nexport const deleteUnicode = (str: string) => {\n str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a');\n str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ|ễ/g, 'e');\n str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i');\n str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o');\n str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u');\n str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y');\n str = str.replace(/đ/g, 'd');\n str = str.replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, 'A');\n str = str.replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, 'E');\n str = str.replace(/Ì|Í|Ị|Ỉ|Ĩ/g, 'I');\n str = str.replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, 'O');\n str = str.replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, 'U');\n str = str.replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, 'Y');\n str = str.replace(/Đ/g, 'D');\n\n str = str.replace(/\\u0300|\\u0301|\\u0303|\\u0309|\\u0323/g, ''); // ̀ ́ ̃ ̉ ̣ huyền, sắc, ngã, hỏi, nặng\n str = str.replace(/\\u02C6|\\u0306|\\u031B/g, ''); // ˆ ̆ ̛ Â, Ê, Ă, Ơ, Ư\n\n return str.normalize('NFC');\n};\n\nexport const removeEmoji = (text: string) => {\n if (!text || !text.trim()) {\n return text;\n }\n\n return text.replace(patternEmoji(), '');\n};\n","import { isNil } from './helpers';\nconst DEFAULT_MIN_TICK_COUNT = 5;\nconst DEFAULT_MAX_TICK_COUNT = 10;\nconst MIN_DISTANCE_TO_ZERO = 3;\nconst NEGATIVE_THRESHOLD = -5;\nconst FALLBACK_NEGATIVE_VALUE = -4;\nconst MAX_POW_NUMBER = 14;\nconst MAX_TEMPLATE_NUMBER = 10;\n\n// ✅ Thêm interfaces để tăng cường type safety\ninterface AxisScaleOptions {\n minTickCount?: number; // Số lượng tick tối thiểu\n maxTickCount?: number; // Số lượng tick tối đa\n stepCandidates?: number[]; // Danh sách các step candidates tùy chỉnh\n acceptNegative?: boolean; // Có chấp nhận giá trị âm không\n minNegative?: number; // Giá trị âm tối thiểu\n acceptStepIsTypeFloat?: boolean; // Có chấp nhận step là số thập phân không\n}\n\ninterface AxisScaleResult {\n stepSize: number; // Kích thước bước\n max: number; // Giá trị tối đa của trục\n min: number; // Giá trị tối thiểu của trục\n tickAmount: number; // Số lượng tick\n}\n\n/**\n * Tính toán smart axis scale cho biểu đồ\n *\n * @param maxData - Giá trị tối đa của dữ liệu\n * @param options - Các tùy chọn cấu hình axis scale\n * @returns Cấu hình axis scale bao gồm stepSize, max, min, tickAmount\n *\n * @throws {Error} INVALID_NEGATIVE_DATA - khi maxData < 0 mà acceptNegative = false\n * @throws {Error} MISSING_MIN_NEGATIVE - khi acceptNegative = true nhưng thiếu minNegative\n * @throws {Error} INVALID_RANGE - khi maxData < minNegative\n * @throws {Error} INVALID_MIN_NEGATIVE - khi minNegative >= 0\n *\n * @example\n * ```typescript\n * const result = getSmartAxisScale(100, { minTickCount: 5, maxTickCount: 10 });\n * // returns { stepSize: 20, max: 120, min: 0, tickAmount: 6 }\n * ```\n */\nexport const getSmartAxisScale = (originalMaxData: number, options?: AxisScaleOptions): AxisScaleResult => {\n let maxData = originalMaxData;\n\n validateInputs(maxData, options);\n const minTickCount = options?.minTickCount || DEFAULT_MIN_TICK_COUNT;\n const maxTickCount = options?.maxTickCount || DEFAULT_MAX_TICK_COUNT;\n\n let scaleDirection = 1;\n let rangeDistance = maxData;\n\n if (options?.acceptNegative && !isNil(options.minNegative)) {\n if (maxData === 0) {\n maxData = -1;\n }\n if (maxData <= 0) {\n rangeDistance = options.minNegative;\n }\n if (rangeDistance > NEGATIVE_THRESHOLD) {\n rangeDistance = FALLBACK_NEGATIVE_VALUE;\n }\n if (maxData > 0) {\n rangeDistance = maxData + Math.abs(options.minNegative);\n scaleDirection = -1;\n }\n }\n if (Math.abs(rangeDistance) < MIN_DISTANCE_TO_ZERO) {\n rangeDistance = MIN_DISTANCE_TO_ZERO;\n }\n\n const stepCandidates = getStepCandidates(maxData, minTickCount, options?.minNegative || 0, options?.acceptStepIsTypeFloat, options?.stepCandidates, options?.acceptNegative);\n for (const step of stepCandidates) {\n let tickCount = Math.abs(Math.ceil(rangeDistance / step)) + (scaleDirection === -1 ? 2 : 1);\n let maxValue = maxData <= 0 ? 0 : step * tickCount * scaleDirection;\n let minValue = 0;\n\n if (tickCount >= minTickCount && tickCount <= maxTickCount) {\n if (maxData < maxValue) {\n if (options?.acceptNegative) {\n let tick = 1;\n while (!isNil(options.minNegative) && tick <= tickCount && minValue >= options.minNegative) {\n minValue = tick * step;\n tick++;\n }\n }\n const maxValuePositive = maxValue - Math.abs(minValue);\n tickCount = maxValuePositive - originalMaxData > Math.abs(step) && tickCount - 1 >= minTickCount ? tickCount - 1 : tickCount;\n\n maxValue = step * tickCount * scaleDirection - minValue * scaleDirection;\n return {\n stepSize: Math.abs(step),\n max: maxValue,\n min: minValue,\n tickAmount: tickCount,\n };\n }\n }\n }\n\n let step = Math.ceil(rangeDistance / minTickCount) || 1;\n let maxValue = step * minTickCount;\n if (rangeDistance === maxValue) {\n step = step + Math.ceil(step / 10);\n maxValue = step * minTickCount;\n }\n return {\n stepSize: Math.abs(step),\n max: maxValue,\n min: 0,\n tickAmount: minTickCount,\n };\n};\n\n// Cache cho các giá trị lũy thừa 10 để tối ưu hiệu suất\nconst POWER_CACHE = new Map<number, number>();\n\n/**\n * Tạo danh sách các step candidates cho việc tính toán scale\n * @param maxData - Giá trị dữ liệu tối đa\n * @param minStep - Số bước tối thiểu\n * @param minNegative - Giá trị âm tối thiểu\n * @param acceptStepIsTypeFloat - Có chấp nhận step thập phân không\n * @param stepCandidatesByOptions - Step candidates do người dùng cung cấp\n * @param includeNegativeSteps - Có bao gồm các step âm không\n * @returns Danh sách các step candidates\n */\nconst getStepCandidates = (maxData: number, minStep: number, minNegative: number, acceptStepIsTypeFloat = false, stepCandidatesByOptions?: number[], includeNegativeSteps = false): number[] => {\n // Nếu có step candidates tùy chỉnh, sử dụng chúng\n if (stepCandidatesByOptions && stepCandidatesByOptions.length > 0) {\n return stepCandidatesByOptions;\n }\n\n const stepCandidates = new Array<number>();\n const maxValueStep = Math.abs(Math.max(maxData, Math.abs(minNegative || 0))) / minStep;\n\n // Tạo step candidates dựa trên lũy thừa của 10\n for (let powNumber = 0; powNumber <= MAX_POW_NUMBER; powNumber++) {\n // Sử dụng cache để tối ưu hiệu suất\n if (!POWER_CACHE.has(powNumber)) {\n POWER_CACHE.set(powNumber, Math.pow(10, powNumber));\n }\n const powValue = POWER_CACHE.get(powNumber) as number;\n\n for (let templateNumber = 1; templateNumber < MAX_TEMPLATE_NUMBER; templateNumber++) {\n // Thêm step thập phân nếu được chấp nhận\n if (acceptStepIsTypeFloat) {\n const step = powValue * (((templateNumber - 1) * 2 + 1) / 2);\n stepCandidates.push(step);\n }\n\n const step = powValue * templateNumber;\n stepCandidates.push(step);\n\n // Dừng khi step đã đủ lớn\n if (step >= maxValueStep) {\n checkAndSetNegativeSteps(stepCandidates, includeNegativeSteps, minNegative);\n return stepCandidates;\n }\n }\n }\n\n checkAndSetNegativeSteps(stepCandidates, includeNegativeSteps, minNegative);\n return stepCandidates;\n};\n\n/**\n * Kiểm tra và thêm các step âm vào danh sách candidates nếu cần\n * @param stepCandidates - Danh sách step candidates hiện tại\n * @param acceptNegative - Có chấp nhận giá trị âm không\n * @param minNegative - Giá trị âm tối thiểu\n */\nconst checkAndSetNegativeSteps = (stepCandidates: number[], acceptNegative: boolean, minNegative: number): void => {\n if (acceptNegative && minNegative < 0) {\n // Tạo các step âm và thêm vào đầu danh sách\n const negativeSteps = [...stepCandidates].map((step) => -step);\n stepCandidates.unshift(...negativeSteps);\n }\n};\n\n/**\n * Kiểm tra tính hợp lệ của các tham số đầu vào\n * @param maxData - Giá trị dữ liệu tối đa\n * @param options - Các tùy chọn cấu hình\n * @throws {Error} Khi các tham số không hợp lệ\n */\nconst validateInputs = (maxData: number, options?: AxisScaleOptions): void => {\n // Kiểm tra maxData âm khi không chấp nhận giá trị âm\n if (maxData < 0 && !options?.acceptNegative) {\n throw new Error('maxData is less than 0 and acceptNegative is false');\n }\n\n if (options?.acceptNegative) {\n // Kiểm tra minNegative có được cung cấp không\n if (isNil(options.minNegative)) {\n throw new Error('minNegative is required when acceptNegative is true');\n }\n\n // Kiểm tra maxData phải >= minNegative\n if (maxData < options.minNegative) {\n throw new Error('maxData is less than minNegative');\n }\n\n // Kiểm tra minNegative phải là số âm\n if (options.minNegative >= 0) {\n throw new Error('minNegative must be negative');\n }\n }\n};\n","export const protectString = (input: string): string => {\n const xorKey = 77;\n const encoded = input\n .split('')\n .map((char) => String.fromCharCode(char.charCodeAt(0) ^ xorKey))\n .reverse()\n .join('');\n return btoa(encoded);\n};\n\nexport const revealString = (encoded: string): string => {\n const xorKey = 77;\n const base = atob(encoded);\n const decoded = base\n .split('')\n .reverse()\n .map((c) => String.fromCharCode(c.charCodeAt(0) ^ xorKey))\n .join('');\n return decoded;\n};\n\nexport const createUniqueRandomIntGenerator = (min: number, max: number) => {\n if (max - min + 1 < min + 10) {\n throw new Error(`Range too small: need at least min + 10 unique values`);\n }\n\n const history: number[] = [];\n\n return (): number => {\n let num: number;\n let loop = 0;\n\n do {\n num = Math.floor(Math.random() * (max - min + 1)) + min;\n loop++;\n\n if (loop > 1000) {\n break;\n }\n } while (history.includes(num));\n\n history.push(num);\n\n if (history.length > 10) {\n history.shift();\n }\n\n return num;\n };\n};\n","export const addArrayToSet = <T>(setStore: Set<T>, data: T[]): Set<T> => {\n for (const value of data) {\n setStore.add(value);\n }\n return setStore;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const convertSetToArray = <T = any, U = any>(data: Set<T>, functionMap?: (value: T) => U): Array<U> => {\n if (functionMap) {\n return Array.from(data, functionMap);\n }\n\n return [...data] as unknown as Array<U>;\n};\n","/**\n * Tính dung lượng (ước tính) của 1 object trong bộ nhớ (bytes, KB, MB)\n * @param obj - Bất kỳ kiểu dữ liệu nào (object, array, map, set, primitive,...)\n * @param formatted - Nếu true, trả về chuỗi có đơn vị (vd: \"2.35 KB\")\n */\nexport const getObjectSize = (obj: unknown): string => {\n try {\n // Chuyển object sang chuỗi JSON (chính xác cho mọi loại dữ liệu tuần tự hóa được)\n const json = JSON.stringify(obj);\n\n // Tính kích thước byte dựa trên UTF-8 encoding\n const bytes = new Blob([json]).size;\n\n if (bytes < 1024) return `${bytes} bytes`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;\n } catch {\n // Nếu JSON.stringify lỗi (do circular reference)\n return 'N/A';\n }\n};\n","export const normalizeUrl = (rawUrl: string): string => {\n const url = new URL(rawUrl);\n url.pathname = url.pathname.replace(/\\/{2,}/g, '/');\n return url.toString();\n};\n","const ignorePatterns = [\n // RxJS / async internals\n /^at\\s+Object\\.(next|error|complete|subscribe|unsubscribe)\\b/,\n /^at\\s+Subscriber\\./,\n /^at\\s+SafeSubscriber\\./,\n\n // TS helpers\n /^at\\s+__\\w+/,\n\n // Zone.js / Angular\n /ZoneAwarePromise/,\n /^at\\s+new\\s+ZoneAwarePromise/,\n /^at\\s+Zone/,\n /zone\\.js/,\n /core\\.mjs/,\n /platform-browser/,\n\n // Browser / DOM\n /^at\\s+HTML/,\n /^at\\s+Promise/,\n /<anonymous>/,\n\n // Bundler\n /webpack/,\n /vite/,\n /node_modules/,\n] as const;\n\nexport const traceStack = (): string[] => {\n const stack = new Error().stack;\n if (!stack) return [];\n\n return (\n stack\n .split('\\n')\n .slice(2) // bỏ Error + current function\n .map((line) => line.trim())\n .filter((line) => !ignorePatterns.some((pattern) => pattern.test(line)))\n .map((line) => {\n // Chrome / Edge\n // at functionName (file:line:col)\n let match = line.match(/at\\s+(.*?)\\s+\\(/);\n if (match?.[1]) return match[1];\n\n // Safari\n // functionName@file:line:col\n match = line.match(/^(.*?)@/);\n if (match?.[1]) return match[1];\n\n return 'anonymous';\n })\n // loại duplicate & anonymous rác\n .filter((fn, idx, arr) => fn !== 'anonymous' && arr.indexOf(fn) === idx)\n .reverse()\n );\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["key","keyStore"],"mappings":"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"}