{"version":3,"file":"alfresco-adf-core-api.mjs","sources":["../../../../lib/core/api/src/lib/types.ts","../../../../lib/core/api/src/lib/alfresco-api/alfresco-api.utils.ts","../../../../lib/core/api/src/lib/alfresco-api/alfresco-api.param-encoder.ts","../../../../lib/core/api/src/lib/alfresco-api/alfresco-api.response-error.ts","../../../../lib/core/api/src/lib/adf-http-client.service.ts","../../../../lib/core/api/src/lib/interfaces.ts","../../../../lib/core/api/src/index.ts","../../../../lib/core/api/src/alfresco-adf-core-api.ts"],"sourcesContent":["/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface Dictionary<T> {\n    [key: string]: T;\n}\n\nexport type Constructor<T> = new (...args: any[]) => T;\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n    HttpEvent,\n    HttpUploadProgressEvent,\n    HttpEventType,\n    HttpResponse,\n    HttpParams,\n    HttpParameterCodec,\n    HttpUrlEncodingCodec\n} from '@angular/common/http';\nimport { Constructor } from '../types';\n\nexport const isHttpUploadProgressEvent = <T>(val: HttpEvent<T>): val is HttpUploadProgressEvent => val.type === HttpEventType.UploadProgress;\nexport const isHttpResponseEvent = <T>(val: HttpEvent<T>): val is HttpResponse<T> => val.type === HttpEventType.Response;\nexport const isDate = (value: unknown): value is Date => value instanceof Date;\nexport const isXML = (value: unknown): boolean => typeof value === 'string' && value.startsWith('<?xml');\nexport const isBlobResponse = (response: HttpResponse<any>, returnType: Constructor<unknown> | 'blob'): response is HttpResponse<Blob> =>\n    returnType === 'blob' || response.body instanceof Blob;\nexport const isConstructor = <T = unknown>(value: any): value is Constructor<T> =>\n    typeof value === 'function' && !!value?.prototype?.constructor.name;\n\nconst convertParamsToString = (value: any): any => (isDate(value) ? value.toISOString() : value);\nexport const getQueryParamsWithCustomEncoder = (\n    obj: Record<string | number, unknown>,\n    encoder: HttpParameterCodec = new HttpUrlEncodingCodec()\n): HttpParams | undefined => {\n    if (!obj) {\n        return undefined;\n    }\n\n    let httpParams = new HttpParams({\n        encoder\n    });\n\n    const params = removeNilValues(obj);\n\n    for (const key in params) {\n        if (Object.prototype.hasOwnProperty.call(params, key)) {\n            const value = params[key];\n            if (value instanceof Array) {\n                const array = value.map(convertParamsToString).filter(Boolean);\n                httpParams = httpParams.appendAll({\n                    [key]: array\n                });\n            } else {\n                httpParams = httpParams.append(key, convertParamsToString(value));\n            }\n        }\n    }\n\n    return httpParams;\n};\n\n/**\n * Removes null and undefined values from an object.\n *\n * @param obj object to process\n * @returns object with updated values\n */\nexport const removeNilValues = (obj: Record<string | number, unknown>) => {\n    if (!obj) {\n        return {};\n    }\n\n    return Object.keys(obj).reduce((acc, key) => {\n        const value = obj[key];\n        const isNil = value === undefined || value === null;\n        return isNil ? acc : { ...acc, [key]: value };\n    }, {});\n};\n\nexport const convertObjectToFormData = (formParams: Record<string | number, string | Blob | Array<string | Blob>>): FormData => {\n    const formData = new FormData();\n\n    for (const key in formParams) {\n        if (Object.prototype.hasOwnProperty.call(formParams, key)) {\n            const value = formParams[key];\n            if (value instanceof File) {\n                formData.append(key, value, value.name);\n            } else if (Array.isArray(value)) {\n                value.forEach((item) => formData.append(key, item));\n            } else {\n                formData.append(key, value);\n            }\n        }\n    }\n\n    return formData;\n};\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { HttpParameterCodec } from '@angular/common/http';\n\n// The default implementation of HttpParameterCodec from angular\n// does not encode some special characters like + with is causing issues with the alfresco js API and returns 500 error\n\nexport class AlfrescoApiParamEncoder implements HttpParameterCodec {\n    encodeKey(key: string): string {\n        return encodeURIComponent(key);\n    }\n\n    encodeValue(value: string): string {\n        return encodeURIComponent(value);\n    }\n\n    decodeKey(key: string): string {\n        return decodeURIComponent(key);\n    }\n\n    decodeValue(value: string): string {\n        return decodeURIComponent(value);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class AlfrescoApiResponseError extends Error {\n    public name = 'AlfrescoApiResponseError';\n\n    constructor(msg: string, public status: number, public response: Record<string, any>) {\n        super(msg);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SHOULD_ADD_AUTH_TOKEN } from '@alfresco/adf-core/auth';\nimport { Emitters as JsApiEmitters, HttpClient as JsApiHttpClient, EventEmitterInstance, EventEmitterEvents } from '@alfresco/js-api';\nimport { HttpClient, HttpContext, HttpErrorResponse, HttpEvent, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { lastValueFrom, Observable, of, Subject, throwError } from 'rxjs';\nimport { catchError, map, takeUntil } from 'rxjs/operators';\nimport {\n    convertObjectToFormData,\n    getQueryParamsWithCustomEncoder,\n    isBlobResponse,\n    isConstructor,\n    isHttpResponseEvent,\n    isHttpUploadProgressEvent,\n    removeNilValues\n} from './alfresco-api/alfresco-api.utils';\nimport { AlfrescoApiParamEncoder } from './alfresco-api/alfresco-api.param-encoder';\nimport { AlfrescoApiResponseError } from './alfresco-api/alfresco-api.response-error';\nimport { Constructor } from './types';\nimport { RequestOptions, SecurityOptions } from './interfaces';\nimport { EventEmitter } from 'eventemitter3';\n\nexport interface Emitters {\n    readonly eventEmitter: EventEmitterInstance;\n    readonly apiClientEmitter: EventEmitterInstance;\n}\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class AdfHttpClient implements JsApiHttpClient {\n    private readonly httpClient = inject(HttpClient);\n\n    private readonly eventEmitter = new EventEmitter();\n\n    _disableCsrf: boolean;\n\n    get disableCsrf(): boolean {\n        return this._disableCsrf;\n    }\n\n    set disableCsrf(disableCsrf: boolean) {\n        this._disableCsrf = disableCsrf;\n    }\n\n    private defaultSecurityOptions = {\n        withCredentials: true,\n        isBpmRequest: false,\n        authentications: {},\n        defaultHeaders: {}\n    };\n\n    // EventEmitter delegation methods\n    on(event: EventEmitterEvents, fn: (...args: any[]) => void, context?: any): this {\n        this.eventEmitter.on(event, fn, context);\n        return this;\n    }\n\n    off(event: EventEmitterEvents, fn?: (...args: any[]) => void, context?: any): this {\n        this.eventEmitter.off(event, fn, context);\n        return this;\n    }\n\n    once(event: EventEmitterEvents, fn: (...args: any[]) => void, context?: any): this {\n        this.eventEmitter.once(event, fn, context);\n        return this;\n    }\n\n    emit(event: EventEmitterEvents, ...args: any[]): boolean {\n        return this.eventEmitter.emit(event, ...args);\n    }\n\n    setDefaultSecurityOption(options: any) {\n        this.defaultSecurityOptions = this.merge(this.defaultSecurityOptions, options);\n    }\n\n    merge(...objects): any {\n        const result = {};\n\n        objects.forEach((source) => {\n            Object.keys(source).forEach((prop) => {\n                if (prop in result && Array.isArray(result[prop])) {\n                    result[prop] = result[prop].concat(source[prop]);\n                } else if (prop in result && typeof result[prop] === 'object') {\n                    result[prop] = this.merge(result[prop], source[prop]);\n                } else {\n                    result[prop] = source[prop];\n                }\n            });\n        });\n\n        return result;\n    }\n\n    request<T = any>(url: string, options?: RequestOptions, sc: SecurityOptions = this.defaultSecurityOptions, emitters?: JsApiEmitters): Promise<T> {\n        const body = AdfHttpClient.getBody(options);\n        const params = getQueryParamsWithCustomEncoder(options.queryParams, new AlfrescoApiParamEncoder());\n        const responseType = AdfHttpClient.getResponseType(options);\n        const context = new HttpContext().set(SHOULD_ADD_AUTH_TOKEN, true);\n        const security: SecurityOptions = { ...this.defaultSecurityOptions, ...sc };\n        const headers = this.getHeaders(options);\n        if (!emitters) {\n            emitters = this.getEventEmitters();\n        }\n\n        const request = this.httpClient.request(options.httpMethod, url, {\n            context,\n            ...(body && { body }),\n            ...(responseType && { responseType }),\n            ...security,\n            ...(params && { params }),\n            headers,\n            observe: 'events',\n            reportProgress: true\n        });\n\n        return this.requestWithLegacyEventEmitters<T>(request, emitters, options.returnType);\n    }\n\n    post<T = any>(url: string, options?: RequestOptions, sc?: SecurityOptions, emitters?: JsApiEmitters): Promise<T> {\n        return this.request<T>(url, { ...options, httpMethod: 'POST' }, sc, emitters);\n    }\n\n    put<T = any>(url: string, options?: RequestOptions, sc?: SecurityOptions, emitters?: JsApiEmitters): Promise<T> {\n        return this.request<T>(url, { ...options, httpMethod: 'PUT' }, sc, emitters);\n    }\n\n    get<T = any>(url: string, options?: RequestOptions, sc?: SecurityOptions, emitters?: JsApiEmitters): Promise<T> {\n        return this.request<T>(url, { ...options, httpMethod: 'GET' }, sc, emitters);\n    }\n\n    delete<T = void>(url: string, options?: RequestOptions, sc?: SecurityOptions, emitters?: JsApiEmitters): Promise<T> {\n        return this.request<T>(url, { ...options, httpMethod: 'DELETE' }, sc, emitters);\n    }\n\n    private addPromiseListeners<T = any>(promise: Promise<T>, eventEmitter: any) {\n        const eventPromise = Object.assign(promise, {\n            on<K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any) {\n                eventEmitter.on(event, fn, context);\n                return this;\n            },\n            once<K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any) {\n                eventEmitter.once(event, fn, context);\n                return this;\n            },\n            emit<K extends string | symbol>(event: K, ...args: any[]): boolean {\n                return eventEmitter.emit(event, ...args);\n            },\n            off<K extends string | symbol>(event: K, fn?: (...args: any[]) => void, context?: any) {\n                eventEmitter.off(event, fn, context);\n                return this;\n            }\n        });\n\n        return eventPromise;\n    }\n\n    private getEventEmitters(): Emitters {\n        const apiClientEmitter: EventEmitterInstance = new EventEmitter();\n\n        // Bind this instance's methods to the apiClientEmitter for backward compatibility\n        apiClientEmitter.on = this.on.bind(this);\n        apiClientEmitter.off = this.off.bind(this);\n        apiClientEmitter.once = this.once.bind(this);\n        apiClientEmitter.emit = this.emit.bind(this);\n\n        return {\n            apiClientEmitter,\n            eventEmitter: new EventEmitter()\n        };\n    }\n\n    private requestWithLegacyEventEmitters<T = any>(request$: Observable<HttpEvent<T>>, emitters: JsApiEmitters, returnType: any): Promise<T> {\n        const abort$ = new Subject<void>();\n        const { eventEmitter, apiClientEmitter } = emitters;\n\n        const promise = lastValueFrom(\n            request$.pipe(\n                map((res) => {\n                    if (isHttpUploadProgressEvent(res)) {\n                        const percent = Math.round((res.loaded / res.total) * 100);\n                        eventEmitter.emit('progress', { loaded: res.loaded, total: res.total, percent });\n                    }\n\n                    if (isHttpResponseEvent(res)) {\n                        eventEmitter.emit('success', res.body);\n                        return AdfHttpClient.deserialize(res, returnType);\n                    }\n                }),\n                catchError((err: HttpErrorResponse): Observable<AlfrescoApiResponseError> => {\n                    // since we can't always determinate ahead of time if the response is going to be xml or plain text response\n                    // we need to handle false positive cases here.\n\n                    if (err.status === 200) {\n                        eventEmitter.emit('success', err.error.text);\n                        return of(err.error.text);\n                    }\n\n                    eventEmitter.emit('error', err);\n                    apiClientEmitter.emit('error', { ...err, response: { req: err } });\n\n                    if (err.status === 401) {\n                        eventEmitter.emit('unauthorized');\n                        apiClientEmitter.emit('unauthorized');\n                    }\n\n                    // for backwards compatibility we need to convert it to error class as the HttpErrorResponse only implements Error interface, not extending it,\n                    // and we need to be able to correctly pass instanceof Error conditions used inside repository\n                    // we also need to pass error as Stringify string as we are detecting statusCodes using JSON.parse(error.message) in some places\n                    const msg = typeof err.error === 'string' ? err.error : JSON.stringify(err.error);\n\n                    // for backwards compatibility to handle cases in code where we try read response.error.response.body;\n\n                    const error = {\n                        ...err,\n                        body: err.error\n                    };\n\n                    const alfrescoApiError = new AlfrescoApiResponseError(msg, err.status, error);\n                    return throwError(alfrescoApiError);\n                }),\n                takeUntil(abort$)\n            )\n        );\n\n        (promise as any).abort = function () {\n            eventEmitter.emit('abort');\n            abort$.next();\n            abort$.complete();\n            return this;\n        };\n\n        return this.addPromiseListeners(promise, eventEmitter);\n    }\n\n    private static getBody(options: RequestOptions): any {\n        const contentType = options.contentType ? options.contentType : AdfHttpClient.jsonPreferredMime(options.contentTypes);\n        const isFormData = contentType === 'multipart/form-data';\n        const isFormUrlEncoded = contentType === 'application/x-www-form-urlencoded';\n        const body = options.bodyParam;\n\n        if (isFormData) {\n            return convertObjectToFormData(options.formParams);\n        }\n\n        if (isFormUrlEncoded) {\n            return new HttpParams({ fromObject: removeNilValues(options.formParams) });\n        }\n\n        return body;\n    }\n\n    private getHeaders(options: RequestOptions): HttpHeaders {\n        const contentType = options.contentType || AdfHttpClient.jsonPreferredMime(options.contentTypes);\n        const accept = options.accept || AdfHttpClient.jsonPreferredMime(options.accepts);\n\n        const optionsHeaders = {\n            ...options.headerParams,\n            ...(accept && { Accept: accept }),\n            ...(contentType && { 'Content-Type': contentType })\n        };\n\n        if (!this.disableCsrf) {\n            this.setCsrfToken(optionsHeaders);\n        }\n\n        return new HttpHeaders(optionsHeaders);\n    }\n\n    /**\n     * Chooses a content type from the given array, with JSON preferred; i.e. return JSON if included, otherwise return the first.\n     *\n     * @param contentTypes a contentType array\n     * @returns  The chosen content type, preferring JSON.\n     */\n    private static jsonPreferredMime(contentTypes: readonly string[]): string {\n        if (!contentTypes?.length) {\n            return 'application/json';\n        }\n\n        for (let i = 0; i < contentTypes.length; i++) {\n            if (AdfHttpClient.isJsonMime(contentTypes[i])) {\n                return contentTypes[i];\n            }\n        }\n        return contentTypes[0];\n    }\n\n    /**\n     * Checks whether the given content type represents JSON.<br>\n     * JSON content type examples:<br>\n     * <ul>\n     * <li>application/json</li>\n     * <li>application/json; charset=UTF8</li>\n     * <li>APPLICATION/JSON</li>\n     * </ul>\n     *\n     * @param contentType The MIME content type to check.\n     * @returns <code>true</code> if <code>contentType</code> represents JSON, otherwise <code>false</code>.\n     */\n    private static isJsonMime(contentType: string): boolean {\n        return Boolean(contentType?.match(/^application\\/json(;.*)?$/i));\n    }\n\n    private setCsrfToken(optionsHeaders: any) {\n        const token = this.createCSRFToken();\n        optionsHeaders['X-CSRF-TOKEN'] = token;\n\n        try {\n            document.cookie = 'CSRF-TOKEN=' + token + ';path=/';\n        } catch {\n            /* continue regardless of error */\n        }\n    }\n\n    private createCSRFToken(a?: any): string {\n        const randomValue = AdfHttpClient.getSecureRandomValue();\n        return a ? (a ^ ((randomValue * 16) >> (a / 4))).toString(16) : ([1e16] + (1e16).toString()).replace(/[01]/g, this.createCSRFToken);\n    }\n\n    private static getSecureRandomValue(): number {\n        const max = Math.pow(2, 32);\n        return window.crypto.getRandomValues(new Uint32Array(1))[0] / max;\n    }\n\n    private static getResponseType(options: RequestOptions): 'blob' | 'json' | 'text' {\n        const isBlobType = options.returnType?.toString().toLowerCase() === 'blob' || options.responseType?.toString().toLowerCase() === 'blob';\n\n        if (isBlobType) {\n            return 'blob';\n        }\n\n        if (options.returnType === 'String') {\n            return 'text';\n        }\n\n        return 'json';\n    }\n\n    /**\n     * Deserialize an HTTP response body into a value of the specified type.\n     *\n     * @param response response object\n     * @param returnType return type\n     * @returns deserialized object\n     */\n    private static deserialize<T>(response: HttpResponse<T>, returnType?: Constructor<unknown> | 'blob'): any {\n        if (response === null) {\n            return null;\n        }\n\n        const body = response.body;\n\n        if (!returnType) {\n            // for backwards compatibility we need to return empty string instead of null,\n            // to avoid issues when accessing null response would break application [C309878]\n            // cannot read property 'entry' of null in cases like\n            // return this.post(apiUrl, saveFormRepresentation).pipe(map((res: any) => res.entry))\n\n            return body !== null ? body : '';\n        }\n\n        if (isBlobResponse(response, returnType)) {\n            return AdfHttpClient.deserializeBlobResponse(response);\n        }\n\n        if (!isConstructor(returnType)) {\n            return body;\n        }\n\n        if (Array.isArray(body)) {\n            return body.map((element) => new returnType(element));\n        }\n\n        return new returnType(body);\n    }\n\n    private static deserializeBlobResponse(response: HttpResponse<Blob>) {\n        return new Blob([response.body], { type: response.headers.get('Content-Type') });\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface SecurityOptions {\n    readonly withCredentials?: boolean;\n    readonly authentications?: Authentication;\n    readonly defaultHeaders?: Record<string, string>;\n}\n\nexport interface Oauth2 {\n    refreshToken?: string;\n    accessToken?: string;\n}\n\nexport interface BasicAuth {\n    username?: string;\n    password?: string;\n    ticket?: string;\n}\n\nexport interface Authentication {\n    basicAuth?: BasicAuth;\n    oauth2?: Oauth2;\n    cookie?: string;\n    type?: string;\n}\n\nexport interface RequestOptions {\n    httpMethod?: string;\n    pathParams?: any;\n    queryParams?: any;\n    headerParams?: any;\n    formParams?: any;\n    bodyParam?: any;\n    returnType?: any;\n    responseType?: string;\n    accepts?: string[];\n    contentTypes?: string[];\n    readonly accept?: string;\n    readonly contentType?: string;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './lib/types';\nexport * from './lib/adf-http-client.service';\nexport * from './lib/interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;AAAA;;;;;;;;;;;;;;;AAeG;;ACfH;;;;;;;;;;;;;;;AAeG;AAaI,MAAM,yBAAyB,GAAG,CAAI,GAAiB,KAAqC,GAAG,CAAC,IAAI,KAAK,aAAa,CAAC,cAAc;AACrI,MAAM,mBAAmB,GAAG,CAAI,GAAiB,KAA6B,GAAG,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ;AACjH,MAAM,MAAM,GAAG,CAAC,KAAc,KAAoB,KAAK,YAAY,IAAI;AACvE,MAAM,KAAK,GAAG,CAAC,KAAc,KAAc,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;AACjG,MAAM,cAAc,GAAG,CAAC,QAA2B,EAAE,UAAyC,KACjG,UAAU,KAAK,MAAM,IAAI,QAAQ,CAAC,IAAI,YAAY,IAAI;AACnD,MAAM,aAAa,GAAG,CAAc,KAAU,KACjD,OAAO,KAAK,KAAK,UAAU,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,IAAI;AAEvE,MAAM,qBAAqB,GAAG,CAAC,KAAU,MAAW,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC;AACzF,MAAM,+BAA+B,GAAG,CAC3C,GAAqC,EACrC,OAAA,GAA8B,IAAI,oBAAoB,EAAE,KAChC;IACxB,IAAI,CAAC,GAAG,EAAE;AACN,QAAA,OAAO,SAAS;;AAGpB,IAAA,IAAI,UAAU,GAAG,IAAI,UAAU,CAAC;QAC5B;AACH,KAAA,CAAC;AAEF,IAAA,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC;AAEnC,IAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;AACtB,QAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;AACnD,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AACzB,YAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AACxB,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAC9D,gBAAA,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC;oBAC9B,CAAC,GAAG,GAAG;AACV,iBAAA,CAAC;;iBACC;AACH,gBAAA,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,qBAAqB,CAAC,KAAK,CAAC,CAAC;;;;AAK7E,IAAA,OAAO,UAAU;AACrB,CAAC;AAED;;;;;AAKG;AACI,MAAM,eAAe,GAAG,CAAC,GAAqC,KAAI;IACrE,IAAI,CAAC,GAAG,EAAE;AACN,QAAA,OAAO,EAAE;;AAGb,IAAA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;AACxC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;QACtB,MAAM,KAAK,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;AACnD,QAAA,OAAO,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE;KAChD,EAAE,EAAE,CAAC;AACV,CAAC;AAEM,MAAM,uBAAuB,GAAG,CAAC,UAAyE,KAAc;AAC3H,IAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAE/B,IAAA,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;AAC1B,QAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;AACvD,YAAA,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC;AAC7B,YAAA,IAAI,KAAK,YAAY,IAAI,EAAE;gBACvB,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;;AACpC,iBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC7B,gBAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;;iBAChD;AACH,gBAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;;;;AAKvC,IAAA,OAAO,QAAQ;AACnB,CAAC;;ACxGD;;;;;;;;;;;;;;;AAeG;AAIH;AACA;MAEa,uBAAuB,CAAA;AAChC,IAAA,SAAS,CAAC,GAAW,EAAA;AACjB,QAAA,OAAO,kBAAkB,CAAC,GAAG,CAAC;;AAGlC,IAAA,WAAW,CAAC,KAAa,EAAA;AACrB,QAAA,OAAO,kBAAkB,CAAC,KAAK,CAAC;;AAGpC,IAAA,SAAS,CAAC,GAAW,EAAA;AACjB,QAAA,OAAO,kBAAkB,CAAC,GAAG,CAAC;;AAGlC,IAAA,WAAW,CAAC,KAAa,EAAA;AACrB,QAAA,OAAO,kBAAkB,CAAC,KAAK,CAAC;;AAEvC;;ACtCD;;;;;;;;;;;;;;;AAeG;AAEG,MAAO,wBAAyB,SAAQ,KAAK,CAAA;AAG/C,IAAA,WAAA,CAAY,GAAW,EAAS,MAAc,EAAS,QAA6B,EAAA;QAChF,KAAK,CAAC,GAAG,CAAC;QADkB,IAAM,CAAA,MAAA,GAAN,MAAM;QAAiB,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAFxD,IAAI,CAAA,IAAA,GAAG,0BAA0B;;AAK3C;;ACvBD;;;;;;;;;;;;;;;AAeG;MA+BU,aAAa,CAAA;AAH1B,IAAA,WAAA,GAAA;AAIqB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAE/B,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE;AAY1C,QAAA,IAAA,CAAA,sBAAsB,GAAG;AAC7B,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,cAAc,EAAE;SACnB;AA0UJ;AAvVG,IAAA,IAAI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC,YAAY;;IAG5B,IAAI,WAAW,CAAC,WAAoB,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW;;;AAWnC,IAAA,EAAE,CAAC,KAAyB,EAAE,EAA4B,EAAE,OAAa,EAAA;QACrE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC;AACxC,QAAA,OAAO,IAAI;;AAGf,IAAA,GAAG,CAAC,KAAyB,EAAE,EAA6B,EAAE,OAAa,EAAA;QACvE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC;AACzC,QAAA,OAAO,IAAI;;AAGf,IAAA,IAAI,CAAC,KAAyB,EAAE,EAA4B,EAAE,OAAa,EAAA;QACvE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC;AAC1C,QAAA,OAAO,IAAI;;AAGf,IAAA,IAAI,CAAC,KAAyB,EAAE,GAAG,IAAW,EAAA;QAC1C,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC;;AAGjD,IAAA,wBAAwB,CAAC,OAAY,EAAA;AACjC,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,EAAE,OAAO,CAAC;;IAGlF,KAAK,CAAC,GAAG,OAAO,EAAA;QACZ,MAAM,MAAM,GAAG,EAAE;AAEjB,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YACvB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACjC,gBAAA,IAAI,IAAI,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;AAC/C,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;;AAC7C,qBAAA,IAAI,IAAI,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;AAC3D,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;;qBAClD;oBACH,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;;AAEnC,aAAC,CAAC;AACN,SAAC,CAAC;AAEF,QAAA,OAAO,MAAM;;IAGjB,OAAO,CAAU,GAAW,EAAE,OAAwB,EAAE,KAAsB,IAAI,CAAC,sBAAsB,EAAE,QAAwB,EAAA;QAC/H,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC;AAC3C,QAAA,MAAM,MAAM,GAAG,+BAA+B,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,uBAAuB,EAAE,CAAC;QAClG,MAAM,YAAY,GAAG,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC;AAC3D,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC;QAClE,MAAM,QAAQ,GAAoB,EAAE,GAAG,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE,EAAE;QAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;;AAGtC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE;YAC7D,OAAO;AACP,YAAA,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;AACrB,YAAA,IAAI,YAAY,IAAI,EAAE,YAAY,EAAE,CAAC;AACrC,YAAA,GAAG,QAAQ;AACX,YAAA,IAAI,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC;YACzB,OAAO;AACP,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,cAAc,EAAE;AACnB,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI,CAAC,8BAA8B,CAAI,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC;;AAGxF,IAAA,IAAI,CAAU,GAAW,EAAE,OAAwB,EAAE,EAAoB,EAAE,QAAwB,EAAA;AAC/F,QAAA,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC;;AAGjF,IAAA,GAAG,CAAU,GAAW,EAAE,OAAwB,EAAE,EAAoB,EAAE,QAAwB,EAAA;AAC9F,QAAA,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC;;AAGhF,IAAA,GAAG,CAAU,GAAW,EAAE,OAAwB,EAAE,EAAoB,EAAE,QAAwB,EAAA;AAC9F,QAAA,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC;;AAGhF,IAAA,MAAM,CAAW,GAAW,EAAE,OAAwB,EAAE,EAAoB,EAAE,QAAwB,EAAA;AAClG,QAAA,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC;;IAG3E,mBAAmB,CAAU,OAAmB,EAAE,YAAiB,EAAA;AACvE,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;AACxC,YAAA,EAAE,CAA4B,KAAQ,EAAE,EAA4B,EAAE,OAAa,EAAA;gBAC/E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC;AACnC,gBAAA,OAAO,IAAI;aACd;AACD,YAAA,IAAI,CAA4B,KAAQ,EAAE,EAA4B,EAAE,OAAa,EAAA;gBACjF,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC;AACrC,gBAAA,OAAO,IAAI;aACd;AACD,YAAA,IAAI,CAA4B,KAAQ,EAAE,GAAG,IAAW,EAAA;gBACpD,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC;aAC3C;AACD,YAAA,GAAG,CAA4B,KAAQ,EAAE,EAA6B,EAAE,OAAa,EAAA;gBACjF,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC;AACpC,gBAAA,OAAO,IAAI;;AAElB,SAAA,CAAC;AAEF,QAAA,OAAO,YAAY;;IAGf,gBAAgB,GAAA;AACpB,QAAA,MAAM,gBAAgB,GAAyB,IAAI,YAAY,EAAE;;QAGjE,gBAAgB,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QACxC,gBAAgB,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1C,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5C,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAE5C,OAAO;YACH,gBAAgB;YAChB,YAAY,EAAE,IAAI,YAAY;SACjC;;AAGG,IAAA,8BAA8B,CAAU,QAAkC,EAAE,QAAuB,EAAE,UAAe,EAAA;AACxH,QAAA,MAAM,MAAM,GAAG,IAAI,OAAO,EAAQ;AAClC,QAAA,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,QAAQ;AAEnD,QAAA,MAAM,OAAO,GAAG,aAAa,CACzB,QAAQ,CAAC,IAAI,CACT,GAAG,CAAC,CAAC,GAAG,KAAI;AACR,YAAA,IAAI,yBAAyB,CAAC,GAAG,CAAC,EAAE;AAChC,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC;gBAC1D,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;;AAGpF,YAAA,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE;gBAC1B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC;gBACtC,OAAO,aAAa,CAAC,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC;;AAEzD,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,GAAsB,KAA0C;;;AAIxE,YAAA,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;gBACpB,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5C,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;;AAG7B,YAAA,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;AAC/B,YAAA,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AAElE,YAAA,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AACpB,gBAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AACjC,gBAAA,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC;;;;;YAMzC,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;;AAIjF,YAAA,MAAM,KAAK,GAAG;AACV,gBAAA,GAAG,GAAG;gBACN,IAAI,EAAE,GAAG,CAAC;aACb;AAED,YAAA,MAAM,gBAAgB,GAAG,IAAI,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;AAC7E,YAAA,OAAO,UAAU,CAAC,gBAAgB,CAAC;SACtC,CAAC,EACF,SAAS,CAAC,MAAM,CAAC,CACpB,CACJ;QAEA,OAAe,CAAC,KAAK,GAAG,YAAA;AACrB,YAAA,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;YAC1B,MAAM,CAAC,IAAI,EAAE;YACb,MAAM,CAAC,QAAQ,EAAE;AACjB,YAAA,OAAO,IAAI;AACf,SAAC;QAED,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC;;IAGlD,OAAO,OAAO,CAAC,OAAuB,EAAA;QAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,GAAG,aAAa,CAAC,iBAAiB,CAAC,OAAO,CAAC,YAAY,CAAC;AACrH,QAAA,MAAM,UAAU,GAAG,WAAW,KAAK,qBAAqB;AACxD,QAAA,MAAM,gBAAgB,GAAG,WAAW,KAAK,mCAAmC;AAC5E,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS;QAE9B,IAAI,UAAU,EAAE;AACZ,YAAA,OAAO,uBAAuB,CAAC,OAAO,CAAC,UAAU,CAAC;;QAGtD,IAAI,gBAAgB,EAAE;AAClB,YAAA,OAAO,IAAI,UAAU,CAAC,EAAE,UAAU,EAAE,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;;AAG9E,QAAA,OAAO,IAAI;;AAGP,IAAA,UAAU,CAAC,OAAuB,EAAA;AACtC,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,aAAa,CAAC,iBAAiB,CAAC,OAAO,CAAC,YAAY,CAAC;AAChG,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC;AAEjF,QAAA,MAAM,cAAc,GAAG;YACnB,GAAG,OAAO,CAAC,YAAY;YACvB,IAAI,MAAM,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YACjC,IAAI,WAAW,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE;SACrD;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;;AAGrC,QAAA,OAAO,IAAI,WAAW,CAAC,cAAc,CAAC;;AAG1C;;;;;AAKG;IACK,OAAO,iBAAiB,CAAC,YAA+B,EAAA;AAC5D,QAAA,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE;AACvB,YAAA,OAAO,kBAAkB;;AAG7B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3C,gBAAA,OAAO,YAAY,CAAC,CAAC,CAAC;;;AAG9B,QAAA,OAAO,YAAY,CAAC,CAAC,CAAC;;AAG1B;;;;;;;;;;;AAWG;IACK,OAAO,UAAU,CAAC,WAAmB,EAAA;QACzC,OAAO,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,4BAA4B,CAAC,CAAC;;AAG5D,IAAA,YAAY,CAAC,cAAmB,EAAA;AACpC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE;AACpC,QAAA,cAAc,CAAC,cAAc,CAAC,GAAG,KAAK;AAEtC,QAAA,IAAI;YACA,QAAQ,CAAC,MAAM,GAAG,aAAa,GAAG,KAAK,GAAG,SAAS;;AACrD,QAAA,MAAM;;;;AAKJ,IAAA,eAAe,CAAC,CAAO,EAAA;AAC3B,QAAA,MAAM,WAAW,GAAG,aAAa,CAAC,oBAAoB,EAAE;QACxD,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC;;AAG/H,IAAA,OAAO,oBAAoB,GAAA;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;AAC3B,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;;IAG7D,OAAO,eAAe,CAAC,OAAuB,EAAA;QAClD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,MAAM;QAEvI,IAAI,UAAU,EAAE;AACZ,YAAA,OAAO,MAAM;;AAGjB,QAAA,IAAI,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE;AACjC,YAAA,OAAO,MAAM;;AAGjB,QAAA,OAAO,MAAM;;AAGjB;;;;;;AAMG;AACK,IAAA,OAAO,WAAW,CAAI,QAAyB,EAAE,UAA0C,EAAA;AAC/F,QAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACnB,YAAA,OAAO,IAAI;;AAGf,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI;QAE1B,IAAI,CAAC,UAAU,EAAE;;;;;YAMb,OAAO,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;;AAGpC,QAAA,IAAI,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE;AACtC,YAAA,OAAO,aAAa,CAAC,uBAAuB,CAAC,QAAQ,CAAC;;AAG1D,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE;AAC5B,YAAA,OAAO,IAAI;;AAGf,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;;AAGzD,QAAA,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC;;IAGvB,OAAO,uBAAuB,CAAC,QAA4B,EAAA;QAC/D,OAAO,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;;+GA5V3E,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFV,MAAM,EAAA,CAAA,CAAA;;4FAET,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;AC7CD;;;;;;;;;;;;;;;AAeG;;ACfH;;;;;;;;;;;;;;;AAeG;;ACfH;;AAEG;;;;"}