{"version":3,"file":"hslayers-ng-services-add-data.mjs","sources":["../../../projects/hslayers/services/add-data/add-data.service.ts","../../../projects/hslayers/services/add-data/url/add-data-url.service.ts","../../../projects/hslayers/services/add-data/common.service.ts","../../../projects/hslayers/services/add-data/url/arcgis.service.ts","../../../projects/hslayers/services/add-data/url/wfs.service.ts","../../../projects/hslayers/services/add-data/url/wms.service.ts","../../../projects/hslayers/services/add-data/url/wmts.service.ts","../../../projects/hslayers/services/add-data/url/xyz.service.ts","../../../projects/hslayers/services/add-data/url/wms-layman.service.ts","../../../projects/hslayers/services/add-data/url/wfs-layman.service.ts","../../../projects/hslayers/services/add-data/url/add-data-ows.service.ts","../../../projects/hslayers/services/add-data/common-file.service.ts","../../../projects/hslayers/services/add-data/catalogue/layman.service.ts","../../../projects/hslayers/services/add-data/catalogue/catalogue-map.service.ts","../../../projects/hslayers/services/add-data/vector/vector-utils.service.ts","../../../projects/hslayers/services/add-data/vector/vector.service.ts","../../../projects/hslayers/services/add-data/catalogue/micka.service.ts","../../../projects/hslayers/services/add-data/catalogue/catalogue.service.ts","../../../projects/hslayers/services/add-data/vector/vector-upload.service.ts","../../../projects/hslayers/services/add-data/hslayers-ng-services-add-data.ts"],"sourcesContent":["import {Injectable, inject} from '@angular/core';\n\nimport {BehaviorSubject, Subject} from 'rxjs';\nimport {Layer} from 'ol/layer';\nimport {Source} from 'ol/source';\n\nimport {DatasetType} from 'hslayers-ng/types';\nimport {HsCommonEndpointsService} from 'hslayers-ng/services/endpoints';\nimport {HsCommonLaymanService} from 'hslayers-ng/common/layman';\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {getBase} from 'hslayers-ng/common/extensions';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsAddDataService {\n  hsMapService = inject(HsMapService);\n  hsConfig = inject(HsConfig);\n  hsCommonEndpointsService = inject(HsCommonEndpointsService);\n  hsCommonLaymanService = inject(HsCommonLaymanService);\n\n  sidebarLoad: Subject<void> = new Subject();\n  datasetSelected: BehaviorSubject<DatasetType> = new BehaviorSubject(\n    undefined,\n  );\n  datasetTypeSelected = this.datasetSelected.asObservable();\n\n  addLayer(layer: Layer<Source>, underLayer?: Layer<Source>): void {\n    if (underLayer) {\n      const layers = this.hsMapService.getLayersArray();\n      const underZ = underLayer.getZIndex();\n      layer.setZIndex(underZ);\n      for (const iLayer of layers.filter((l) => !getBase(l))) {\n        if (iLayer.getZIndex() >= underZ) {\n          iLayer.setZIndex(iLayer.getZIndex() + 1);\n        }\n      }\n      const ix = layers.indexOf(underLayer);\n      this.hsMapService.getMap().getLayers().insertAt(ix, layer);\n    } else {\n      this.hsMapService.getMap().addLayer(layer);\n    }\n  }\n\n  selectType(type: DatasetType): void {\n    this.datasetSelected.next(type);\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport {Layer} from 'ol/layer';\nimport {Source} from 'ol/source';\nimport {transform} from 'ol/proj';\n\nimport {AddDataUrlType, UrlDataObject} from 'hslayers-ng/types';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsToastService} from 'hslayers-ng/common/toast';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsAddDataUrlService {\n  hsLog = inject(HsLogService);\n  hsLanguageService = inject(HsLanguageService);\n  hsLayoutService = inject(HsLayoutService);\n  private hsMapService = inject(HsMapService);\n  private hsToastService = inject(HsToastService);\n\n  typeSelected: AddDataUrlType;\n  addingAllowed: boolean;\n  connectFromParams = true;\n\n  /**\n   * Selects a service layer to be added (WMS | WMTS | ArcGIS Map Server)\n   * @param services - Layer group of a service to select a layer from\n   * @param layerToSelect - Layer to be selected (checked = true)\n   * @param selector - Layer selector. Can be either 'Name' or 'Title'. Differs in between different services\n   */\n  selectLayerByName(\n    layerToSelect: string,\n    services,\n    selector: 'Title' | 'Name',\n  ): any {\n    if (!layerToSelect) {\n      return;\n    }\n    let selectedLayer;\n    if (Array.isArray(services)) {\n      for (const serviceLayer of services) {\n        selectedLayer = this.selectSubLayerByName(\n          layerToSelect,\n          serviceLayer,\n          selector,\n        );\n        if (selectedLayer && serviceLayer[selector] == layerToSelect) {\n          return selectedLayer;\n        }\n      }\n    } else {\n      return this.selectSubLayerByName(layerToSelect, services, selector);\n    }\n  }\n\n  /**\n   * Helper function for selectLayerByName()\n   */\n  private selectSubLayerByName(\n    layerToSelect: string,\n    serviceLayer,\n    selector: 'Title' | 'Name',\n  ): any {\n    let selectedLayer;\n    if (serviceLayer.Layer && serviceLayer[selector] != layerToSelect) {\n      selectedLayer = this.selectLayerByName(\n        layerToSelect,\n        serviceLayer.Layer,\n        selector,\n      );\n    }\n    if (serviceLayer[selector] == layerToSelect) {\n      selectedLayer = this.setLayerCheckedTrue(\n        layerToSelect,\n        serviceLayer,\n        selector,\n      );\n    }\n    return selectedLayer;\n  }\n\n  /**\n   * Helper function for selectLayerByName()\n   * Does the actual selection (checked = true)\n   */\n  private setLayerCheckedTrue(\n    layerToSelect: string,\n    serviceLayer,\n    selector: 'Title' | 'Name',\n  ): any {\n    if (serviceLayer[selector] == layerToSelect) {\n      serviceLayer.checked = true;\n    }\n    return serviceLayer;\n  }\n\n  searchForChecked(records: Array<any>): void {\n    this.addingAllowed =\n      records?.some((l) => l.checked) ?? this.typeSelected == 'arcgis';\n  }\n\n  /**\n   * Display layers extent parsing error\n   */\n  private layerExtentParsingError(): void {\n    this.hsToastService.createToastPopupMessage(\n      'ADDLAYERS.capabilitiesParsingProblem',\n      'ADDLAYERS.layerExtentParsingProblem',\n      {\n        serviceCalledFrom: 'HsAddDataUrlService',\n        type: 'warning',\n      },\n    );\n  }\n\n  /**\n   * Calculate cumulative bounding box which encloses all the provided layers (service layer definitions)\n   * Common for WMS/WMTS (WFS has its own implementation)\n   */\n  calcAllLayersExtent(layers: Layer<Source>[]): any {\n    if (layers.length == 0) {\n      return undefined;\n    }\n    try {\n      const layerExtents = layers.map((lyr) => [...(lyr?.getExtent() || [])]); //Spread need to not create reference\n      return this.calcCombinedExtent(layerExtents);\n    } catch (error) {\n      this.layerExtentParsingError();\n      return undefined;\n    }\n  }\n\n  /**\n   * For given array of layers (service layer definitions) it calculates a cumulative bounding box which encloses all the layers\n   */\n  calcCombinedExtent(extents: number[][]): number[] {\n    try {\n      const currentMapProj = this.hsMapService.getCurrentProj();\n      const bounds = transform([180, 90], 'EPSG:4326', currentMapProj);\n\n      const extent = extents.reduce((acc, curr) => {\n        //some services define layer bboxes beyond the canonical 180/90 degrees intervals, the checks are necessary then\n        const [west, south, east, north] = curr;\n        //minimum easting\n        if (bounds[1] * -1 <= west && west < acc[0]) {\n          acc[0] = west;\n        }\n        //minimum northing\n        if (bounds[0] * -1 <= south && south < acc[1]) {\n          acc[1] = south;\n        }\n        //maximum easting\n        if (bounds[1] >= east && east > acc[2]) {\n          acc[2] = east;\n        }\n        //maximum northing\n        if (bounds[0] >= north && north > acc[3]) {\n          acc[3] = north;\n        }\n        return acc;\n      });\n      return extent.length > 0 ? extent : undefined;\n    } catch (error) {\n      this.layerExtentParsingError();\n      return undefined;\n    }\n  }\n\n  /**\n   * Zoom map to one layers or combined layer list extent\n   */\n  zoomToLayers(data: UrlDataObject) {\n    if (data.extent) {\n      this.hsMapService.fitExtent(data.extent);\n    }\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport {Subject} from 'rxjs';\n\nimport {HsAddDataService} from './add-data.service';\nimport {HsAddDataUrlService} from './url/add-data-url.service';\nimport {HsDimensionService} from 'hslayers-ng/services/get-capabilities';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {OwsType} from 'hslayers-ng/types';\n\n@Injectable({providedIn: 'root'})\nexport class HsAddDataCommonService {\n  hsMapService = inject(HsMapService);\n  hsAddDataUrlService = inject(HsAddDataUrlService);\n  hsToastService = inject(HsToastService);\n  hsAddDataService = inject(HsAddDataService);\n  hsDimensionService = inject(HsDimensionService);\n  hsEventBusService = inject(HsEventBusService);\n\n  layerToSelect: string | string[];\n  loadingInfo = false;\n  showDetails = false;\n  url: string;\n\n  //TODO: all dimension related things need to be refactored into separate module\n  getDimensionValues = this.hsDimensionService.getDimensionValues;\n  serviceLayersCalled: Subject<string> = new Subject();\n\n  constructor() {\n    this.hsEventBusService.cancelAddDataUrlRequest.subscribe(() => {\n      this.clearParams();\n    });\n  }\n\n  clearParams(): void {\n    this.layerToSelect = '';\n    this.loadingInfo = false;\n    this.showDetails = false;\n    this.url = '';\n    this.hsAddDataUrlService.typeSelected = null;\n  }\n\n  setPanelToCatalogue(): void {\n    this.hsAddDataService.selectType('catalogue');\n  }\n\n  /**\n   * For the sake of possible future implementation changes\n   * @param url - URL to be set\n   */\n  updateUrl(url: string): void {\n    this.url = url;\n  }\n\n  checkTheSelectedLayer(services: any, serviceType: OwsType['type']): void {\n    if (!services) {\n      return;\n    }\n    const nameOrTitle = serviceType !== 'wmts';\n    for (const layer of services) {\n      const layerName = nameOrTitle\n        ? (layer.Name?.toLowerCase() ??\n          layer.name?.toLowerCase() ??\n          layer.Title?.toLowerCase() ??\n          layer.title?.toLowerCase())\n        : layer.Identifier?.toLowerCase();\n\n      if (serviceType === 'arcgis') {\n        layer.checked = Array.isArray(this.layerToSelect)\n          ? this.layerToSelect.some(\n              (lt) =>\n                layerName === lt.toLowerCase() ||\n                layer.id?.toString().toLowerCase() === lt.toLowerCase(),\n            )\n          : layerName === this.layerToSelect.toLowerCase() ||\n            layer.id?.toString().toLowerCase() ===\n              this.layerToSelect.toLowerCase();\n      } else {\n        const singleLayerSelected = !this.layerToSelect.includes(',');\n\n        /**\n         * If single layer is selected, check if the layer name matches the selected layer\n         * If multiple layers are selected (group), check if the layer name matches any of the selected layers\n         */\n        layer.checked = singleLayerSelected\n          ? layerName === (this.layerToSelect as string).toLowerCase()\n          : (this.layerToSelect as string)\n              .split(',')\n              .some((lt) => layerName === lt.toLowerCase());\n      }\n    }\n  }\n\n  displayParsingError(e: any): void {\n    let errorMessage = 'ADDLAYERS.capabilitiesParsingProblem';\n    const errorDetails = e?.message || e?.toString() || 'Unknown error';\n\n    if (e?.status === 401) {\n      errorMessage = 'ADDLAYERS.unauthorizedAccess';\n    } else if (errorDetails && errorDetails.includes('Unsuccessful OAuth2')) {\n      errorMessage = 'COMMON.Authentication failed. Login to the catalogue.';\n    } else if (errorDetails.includes('property')) {\n      errorMessage = 'ADDLAYERS.serviceTypeNotMatching';\n    } else if (errorDetails.startsWith('ADDLAYERS.')) {\n      errorMessage = errorDetails;\n    } else {\n      errorMessage = `ADDLAYERS.${errorDetails}`;\n    }\n\n    this.hsToastService.createToastPopupMessage(\n      'ADDLAYERS.capabilitiesParsingProblem',\n      errorMessage,\n      {serviceCalledFrom: 'HsAddDataCommonService', customDelay: 10000},\n    );\n  }\n\n  throwParsingError(e): void {\n    this.clearParams();\n    this.displayParsingError(e);\n  }\n\n  //NOTE* - Is this method even needed?\n  srsChanged(srs): any {\n    setTimeout(() => {\n      return !this.currentProjectionSupported([srs]);\n    }, 0);\n  }\n\n  /**\n   * Test if current map projection is in supported projection list\n   *\n   * @param srss - List of supported projections\n   * @returns True if map projection is in list, false otherwise\n   */\n  currentProjectionSupported(srss: string[]): boolean {\n    if (!srss || srss.length === 0) {\n      return false;\n    }\n    let found = false;\n    for (const val of srss) {\n      if (!val) {\n        found = false;\n      } else {\n        if (\n          this.hsMapService\n            .getMap()\n            .getView()\n            .getProjection()\n            .getCode()\n            .toUpperCase() == val.toUpperCase()\n        ) {\n          found = true;\n        }\n      }\n    }\n    return found;\n  }\n\n  /**\n   * Constructs body of LAYER parameter for getMap request for grouped layer e.g.\n   * for a basemap or thematic layer with property group set to true\n   * @param layerOrLayers - layer object or layers received from capabilities. If no layer is provided\n   * merge all checked layer ids into one string\n   * @param property - layer property\n   */\n  getGroupedLayerNames(\n    layerOrLayers: any | Array<any>,\n    property: string,\n  ): string {\n    const baseNameParts = [];\n    if (Array.isArray(layerOrLayers)) {\n      for (const layer of layerOrLayers) {\n        if (layer.checked) {\n          baseNameParts.push(layer[property]);\n        } else if (layer.Layer) {\n          const nested = this.getGroupedLayerNames(layer.Layer, property);\n          if (nested.length > 0) {\n            baseNameParts.push(nested);\n          }\n        }\n      }\n    } else {\n      baseNameParts[0] = layerOrLayers[property];\n    }\n    return baseNameParts.join();\n  }\n\n  getSublayerNames(service): string {\n    if (service.Layer) {\n      return service.Layer.map((l) => {\n        let tmp: string[] = [];\n        if (l.Name) {\n          tmp.push(l.Name);\n        }\n        if (l.Layer) {\n          const children = this.getSublayerNames(l);\n          tmp = tmp.concat(children);\n        }\n        return tmp.join(',');\n      });\n    }\n    return '';\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport TileGrid from 'ol/tilegrid/TileGrid';\nimport {createXYZ} from 'ol/tilegrid';\nimport {Layer, Tile, VectorImage} from 'ol/layer';\nimport {\n  Source,\n  TileArcGISRest,\n  XYZ,\n  Tile as TileSource,\n  Vector as VectorSource,\n} from 'ol/source';\nimport {Options as TileOptions} from 'ol/layer/BaseTile';\nimport {transformExtent} from 'ol/proj';\nimport {EsriJSON} from 'ol/format';\nimport {tile as tileStrategy} from 'ol/loadingstrategy.js';\n\nimport {\n  ArcGISRestResponseLayer,\n  ArcGISRestResponseLayerExtent,\n  CapabilitiesResponseWrapper,\n  HsUrlTypeServiceModel,\n  Service,\n  LayerOptions,\n  UrlDataObject,\n} from 'hslayers-ng/types';\nimport {DuplicateHandling, HsMapService} from 'hslayers-ng/services/map';\nimport {HsAddDataCommonService} from '../common.service';\nimport {HsAddDataUrlService} from './add-data-url.service';\nimport {HsArcgisGetCapabilitiesService} from 'hslayers-ng/services/get-capabilities';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {\n  undefineEmptyString,\n  addAnchors,\n  getPreferredFormat,\n  bufferExtent,\n} from 'hslayers-ng/services/utils';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {HsToastService} from 'hslayers-ng/common/toast';\n\n@Injectable({providedIn: 'root'})\nexport class HsUrlArcGisService implements HsUrlTypeServiceModel {\n  hsArcgisGetCapabilitiesService = inject(HsArcgisGetCapabilitiesService);\n  hsLayoutService = inject(HsLayoutService);\n  hsMapService = inject(HsMapService);\n  hsAddDataUrlService = inject(HsAddDataUrlService);\n  hsAddDataCommonService = inject(HsAddDataCommonService);\n  hsToastService = inject(HsToastService);\n  private hsLanguageService = inject(HsLanguageService);\n\n  data: UrlDataObject;\n  hasCachedTiles = false;\n  tileGrid: TileGrid;\n\n  constructor() {\n    this.setDataToDefault();\n  }\n\n  /**\n   * Sets data to default values\n   */\n  setDataToDefault() {\n    this.data = {\n      serviceExpanded: false,\n      map_projection: '',\n      queryable: true,\n      tile_size: 512,\n      use_resampling: false,\n      useTiles: true,\n      title: 'Arcgis layer',\n      table: {\n        trackBy: 'id',\n        nameProperty: 'name',\n      },\n      base: false,\n    };\n  }\n\n  /**\n   * List and return layers from Arcgis getCapabilities response\n   * @param wrapper - Capabilities response wrapper\n   */\n  async listLayerFromCapabilities(\n    wrapper: CapabilitiesResponseWrapper,\n    options?: LayerOptions,\n  ): Promise<Layer<Source>[]> {\n    if (!wrapper.response && !wrapper.error) {\n      return;\n    }\n    if (wrapper.error) {\n      this.hsAddDataCommonService.throwParsingError(wrapper.response.message);\n      return;\n    }\n    try {\n      await this.createLayer(wrapper.response);\n      if (this.hsAddDataCommonService.layerToSelect) {\n        this.hsAddDataCommonService.checkTheSelectedLayer(\n          this.data.layers,\n          'arcgis',\n        );\n        return this.getLayers(undefined, undefined, options);\n      }\n    } catch (e) {\n      this.hsAddDataCommonService.throwParsingError(e);\n    }\n  }\n\n  /**\n   * Parse information received in Arcgis getCapabilities response\n   * @param response - getCapabilities response\n   */\n  async createLayer(response): Promise<void> {\n    try {\n      const caps = response;\n      if (caps.error) {\n        this.hsToastService.createToastPopupMessage(\n          'ADDLAYERS.capabilitiesParsingProblem',\n          this.hsLanguageService.getTranslationIgnoreNonExisting(\n            'ERRORMESSAGES',\n            caps.error.code || '4O4',\n            {url: this.data.get_map_url},\n          ),\n          {\n            serviceCalledFrom: 'HsUrlArcGisService',\n          },\n        );\n        this.hsAddDataCommonService.loadingInfo = false;\n        return;\n      }\n      this.data.map_projection = this.hsMapService\n        .getMap()\n        .getView()\n        .getProjection()\n        .getCode()\n        .toUpperCase();\n\n      // Determine the layer title with fallback priority\n      this.data.title =\n        caps.name || caps.mapName || caps.documentInfo?.Title || 'Arcgis layer';\n      if (this.data.title === 'Arcgis layer' && caps.supportedQueryFormats) {\n        this.data.title = caps.layers?.[0]?.name;\n      }\n      this.data.description = addAnchors(caps.description);\n      this.data.version = caps.currentVersion;\n      this.data.image_formats = caps.supportedImageFormatTypes\n        ? caps.supportedImageFormatTypes.split(',')\n        : [];\n      this.data.query_formats = caps.supportedQueryFormats\n        ? caps.supportedQueryFormats.split(',')\n        : [];\n      this.data.srss = caps.spatialReference?.latestWkid\n        ? [caps.spatialReference.latestWkid.toString()]\n        : [];\n      this.data.services = caps.services?.reduce((acc, s: Service) => {\n        if (this.isValidService(s.type)) {\n          acc.push({\n            ...s,\n            icon: s.type === 'FeatureServer' ? 'fa-draw-polygon' : 'fa-image',\n          });\n        }\n        return acc;\n      }, []);\n\n      /**\n       * Prioritize cached tiles eg. ignore layer structure\n       */\n      this.hasCachedTiles = !!caps.tileInfo;\n      this.data.layers = this.hasCachedTiles\n        ? [\n            {\n              name: caps.mapName || caps.name,\n              id: 0,\n              defaultVisibility: true,\n              icon: 'fa-image',\n            },\n          ]\n        : caps.layers;\n      if (this.data.layers?.length > 0) {\n        this.data.layers = this.data.layers.map((l) => ({\n          ...l,\n          icon: l.type === 'Feature Layer' ? 'fa-draw-polygon' : 'fa-image',\n        }));\n      }\n      this.hsAddDataUrlService.searchForChecked(\n        this.data.layers ?? this.data.services,\n      );\n      this.data.srs =\n        this.data.srss.find((srs) =>\n          srs.includes(this.hsMapService.getCurrentProj().getCode()),\n        ) || this.data.srss[0];\n\n      this.data.extent = caps.fullExtent;\n      if (this.hasCachedTiles || (caps.tileInfo && this.isImageService())) {\n        /**\n         * Tile grid definition in layers source srs\n         * */\n        this.tileGrid = new TileGrid({\n          origin: Object.values(caps.tileInfo.origin),\n          resolutions: caps.tileInfo.lods.map((lod) => lod.resolution),\n          extent: [\n            caps.fullExtent.xmin,\n            caps.fullExtent.ymin,\n            caps.fullExtent.xmax,\n            caps.fullExtent.ymax,\n          ],\n        });\n      }\n      this.data.resample_warning = this.hsAddDataCommonService.srsChanged(\n        this.data.srs,\n      );\n      this.data.image_format = getPreferredFormat(this.data.image_formats, [\n        'PNG32',\n        'PNG',\n        'GIF',\n        'JPG',\n      ]);\n      this.data.query_format = getPreferredFormat(this.data.query_formats, [\n        'geoJSON',\n        'JSON',\n      ]);\n      this.hsAddDataCommonService.loadingInfo = false;\n    } catch (e) {\n      throw new Error(e);\n    }\n  }\n\n  /**\n   * Loop through the list of layers and call getLayer\n   * layerOptions - used to propagate props when loading a layers from composition\n   */\n  async getLayers(\n    checkedOnly?: boolean,\n    shallow?: boolean,\n    layerOptions?: LayerOptions,\n  ): Promise<Layer<Source>[]> {\n    if (\n      this.data.layers === undefined &&\n      this.data.services === undefined &&\n      !this.isImageService() &&\n      !this.isFeatureService()\n    ) {\n      return;\n    }\n    /*\n     * - When checkedOnly is explicitly false (not just falsy): use all layers (needed for FeatureServer type)\n     * - Otherwise: only use layers that have been checked by the user\n     * Important because FeatureServer requires explicit layer IDs,\n     * while MapServer and ImageServer can serve all layers when no specific IDs are provided.\n     */\n    const checkedLayers =\n      checkedOnly === false\n        ? this.data.layers\n        : this.data.layers?.filter((l) => l.checked);\n    const collection = [\n      await this.getLayer(checkedLayers, {\n        title: this.data.title.replace(/\\//g, '&#47;'),\n        path: undefineEmptyString(this.data.folder_name) || layerOptions?.path,\n        imageFormat: this.data.image_format,\n        queryFormat: this.data.query_format,\n        tileSize: this.data.tile_size,\n        crs: this.data.srs,\n        base: this.data.base,\n        ...layerOptions,\n      }),\n    ];\n    if (!layerOptions?.fromComposition) {\n      this.hsAddDataUrlService.zoomToLayers(this.data);\n    }\n    this.data.base = false;\n    this.hsAddDataCommonService.clearParams();\n    this.setDataToDefault();\n    this.hsAddDataCommonService.setPanelToCatalogue();\n    if (collection.length > 0 && !layerOptions?.fromComposition) {\n      this.hsLayoutService.setMainPanel('layerManager');\n    }\n    return collection;\n  }\n\n  /**\n   * Get selected layer\n   * @param layer - capabilities layer object\n   * @param layerTitle - layer name in the map\n   * @param path - Path name\n   * @param imageFormat - Format in which to serve image. Usually: image/png\n   * @param queryFormat - See info_format in https://docs.geoserver.org/stable/en/user/services/wms/reference.html\n   * @param tileSize - Tile size in pixels\n   * @param crs - of the layer\n   * @param subLayers - Static sub-layers of the layer\n   */\n  async getLayer(\n    layers: ArcGISRestResponseLayer[],\n    options: LayerOptions,\n  ): Promise<Layer<Source>> {\n    const attributions = [];\n    const dimensions = {};\n    //Not being used right now\n    // const legends = [];\n\n    // Handle FeatureServer\n    if (this.isFeatureService()) {\n      return this.getFeatureLayer(layers, options);\n    }\n\n    // MapServer and ImageServer\n    const sourceParams: any = {\n      /**\n       * Cached tiles or image-service with cached tiles.\n       * Difference is in source type that will be used to create layer.\n       * image-service is currently being displayed using TileArcGISRest not XYZ\n       */\n      url: this.hasCachedTiles\n        ? this.isImageService()\n          ? this.data.get_map_url\n          : this.createXYZUrl()\n        : this.data.get_map_url,\n      attributions,\n      projection: `EPSG:${this.data.srs}`,\n      params: Object.assign(\n        {\n          FORMAT: options.imageFormat,\n        },\n        {},\n      ),\n      crossOrigin: 'anonymous',\n    };\n    if (this.hasCachedTiles) {\n      sourceParams.tileGrid = this.tileGrid;\n    } else if (!this.hasCachedTiles && !this.isImageService()) {\n      const LAYERS =\n        layers.length > 0\n          ? `show:${layers.map((l) => l.id).join(',')}`\n          : undefined;\n      Object.assign(sourceParams.params, {LAYERS});\n    }\n    const source = this.hasCachedTiles\n      ? this.isImageService()\n        ? new TileArcGISRest(sourceParams)\n        : new XYZ(sourceParams)\n      : new TileArcGISRest(sourceParams);\n    /**\n     * Use provided extent when displaying more than 3 layers or no layer are defined(all layers)\n     * calculate extent otherwise\n     */\n    this.data.extent =\n      layers.length > 3 || layers.length === 0\n        ? this.transformLayerExtent(this.data.extent, this.data)\n        : await this.calcAllLayersExtent(layers, options);\n\n    const layerParams = {\n      opacity: options.opacity ?? 1,\n      properties: {\n        title: options.title,\n        name: options.title,\n        removable: true,\n        path: options.path,\n        base: this.data.base,\n        extent: this.data.extent,\n        dimensions,\n        ...options,\n      },\n      minResolution: options.minResolution,\n      maxResolution: options.maxResolution,\n      source,\n    };\n    if (!this.isImageService()) {\n      Object.assign(layerParams.properties, {\n        subLayers: layers?.map((l) => l.id).join(','),\n      });\n    }\n    return new Tile(layerParams as TileOptions<TileSource>);\n  }\n\n  /**\n   * Create a vector layer for feature service\n   * @param layers - layers to be displayed\n   * @param options - layer options\n   * @returns vector layer\n   */\n  getFeatureLayer(\n    layers: ArcGISRestResponseLayer[],\n    options: LayerOptions,\n  ): Layer<Source> {\n    const layerIds = layers.length > 0 ? layers.map((l) => l.id) : [0];\n    const queryUrl =\n      layerIds.length === 1\n        ? `${this.data.get_map_url}/${layerIds[0]}/query`\n        : `${this.data.get_map_url}/query`;\n\n    const vectorSource = new VectorSource({\n      format: new EsriJSON(),\n      url: (extent, resolution, projection) => {\n        if (!resolution) {\n          return `${queryUrl}?f=json`;\n        }\n        // ArcGIS Server only wants the numeric portion of the projection ID.\n        const srid = projection\n          .getCode()\n          .split(/:(?=\\d+$)/)\n          .pop();\n\n        const params = new URLSearchParams({\n          f: 'json',\n          returnGeometry: 'true',\n          spatialRel: 'esriSpatialRelIntersects',\n          geometry: `${extent.join(',')}`,\n          geometryType: 'esriGeometryEnvelope',\n          inSR: srid,\n          outFields: '*',\n          outSR: srid,\n        });\n        return `${queryUrl}?${params.toString()}`;\n      },\n      strategy: tileStrategy(\n        createXYZ({\n          tileSize: 512,\n        }),\n      ),\n    });\n\n    this.data.extent = bufferExtent(\n      this.transformLayerExtent(this.data.extent, this.data),\n      this.hsMapService.getMap().getView().getProjection(),\n    );\n\n    const layerParams = {\n      opacity: options.opacity ?? 1,\n      properties: {\n        title: options.title,\n        name: options.title,\n        removable: true,\n        path: options.path,\n        base: this.data.base,\n        extent: this.data.extent,\n        showInLayerManager: true,\n        ...options,\n      },\n      source: vectorSource,\n    };\n\n    return new VectorImage(layerParams);\n  }\n\n  /**\n   * Create XYZ layer URL\n   */\n  private createXYZUrl(): string {\n    return `${this.data.get_map_url}/tile/{z}/{y}/{x}`;\n  }\n\n  /**\n   * Calculate cumulative bounding box which encloses all the checked layers (ArcGISRestResponseLayer)\n   */\n  async calcAllLayersExtent(\n    layers: ArcGISRestResponseLayer[],\n    options: LayerOptions,\n  ) {\n    try {\n      const layersCaps = await Promise.all(\n        layers.map(async (l) => {\n          return await this.hsArcgisGetCapabilitiesService.request(\n            `${this.data.get_map_url}/${l.id}`,\n          );\n        }),\n      );\n      const layersExtents = layersCaps\n        .map((l) => {\n          if (\n            Object.values(l.response.extent).filter((v: any) => !isNaN(v))\n              .length > 0\n          ) {\n            return this.transformLayerExtent(l.response.extent, this.data);\n          }\n        })\n        .filter((v) => v);\n      return this.hsAddDataUrlService.calcCombinedExtent(layersExtents);\n    } catch (error) {\n      if (error.message.includes('getCode')) {\n        this.hsToastService.createToastPopupMessage(\n          'ADDLAYERS.capabilitiesParsingProblem',\n          'ADDLAYERS.OlDoesNotRecognizeProjection',\n          {\n            serviceCalledFrom: 'HsUrlArcGisService',\n            details: [`${options.title}`, `EPSG: ${this.data.srs}`],\n          },\n        );\n      } else {\n        this.hsToastService.createToastPopupMessage(\n          'ADDLAYERS.capabilitiesParsingProblem',\n          'ADDLAYERS.layerExtentParsingProblem',\n          {\n            serviceCalledFrom: 'HsUrlArcGisService',\n            type: 'warning',\n          },\n        );\n        return this.transformLayerExtent(this.data.extent, this.data);\n      }\n    }\n  }\n\n  /**\n   * Loop through the list of layers and add them to the map\n   * @param layers - Layers selected\n   */\n  addLayers(layers: Layer<Source>[]): void {\n    for (const l of layers) {\n      this.hsMapService.addLayer(l, DuplicateHandling.RemoveOriginal);\n    }\n  }\n\n  /**\n   * Request services layers\n   * @param service - Service URL\n   */\n  async expandService(service: Service): Promise<void> {\n    const originalUrl = new URL(this.hsAddDataCommonService.url);\n    /**\n      There are cases when loaded services are loaded from folders,\n      problem is that folder name is also included inside the service.name\n      to avoid any uncertainties, let's remove everything starting from '/services/'\n      inside the url and rebuild it. We look for '/services/' to avoid matching\n      domain names that contain 'services' (e.g. services7.arcgis.com)\n     */\n    let pathname = originalUrl.pathname;\n    if (originalUrl.pathname.includes('services')) {\n      const firstPart = originalUrl.pathname.slice(\n        0,\n        originalUrl.pathname.indexOf('services'),\n      );\n      const secondPart = ['services', service.name, service.type].join('/');\n      pathname = firstPart + secondPart;\n    }\n    this.data.get_map_url = new URL(pathname, originalUrl.origin).toString();\n    const wrapper = await this.hsArcgisGetCapabilitiesService.request(\n      this.data.get_map_url,\n    );\n    this.data.serviceExpanded = true;\n    await this.listLayerFromCapabilities(wrapper);\n  }\n\n  /**\n   * Step back to the top layer of capabilities\n   */\n  async collapseServices() {\n    this.data.get_map_url = this.hsAddDataCommonService.url;\n    const wrapper = await this.hsArcgisGetCapabilitiesService.request(\n      this.data.get_map_url,\n    );\n    this.data.serviceExpanded = false;\n    await this.listLayerFromCapabilities(wrapper);\n  }\n\n  /**\n   * Add services layers\n   * @param services - Services selected\n   */\n  async addServices(services: Service[]): Promise<void> {\n    const originalRestUrl = this.hsAddDataCommonService.url;\n    for (const service of services.filter((s) => s.checked)) {\n      this.hsAddDataCommonService.url = originalRestUrl; //Because getLayers clears all params\n      await this.expandService(service);\n      const layers = await this.getLayers(!this.isFeatureService());\n      this.addLayers(layers);\n    }\n  }\n  /**\n   * Check if getCapabilities response is Image service layer\n   */\n  isImageService(): boolean {\n    return this.data.get_map_url?.toLowerCase().includes('imageserver');\n  }\n\n  /**\n   * Check if getCapabilities response is Feature service layer\n   */\n  isFeatureService(): boolean {\n    return this.data.get_map_url?.toLowerCase().includes('featureserver');\n  }\n  /**\n   * Check validity of service\n   */\n  isValidService(str: string): boolean {\n    return !['gpserver', 'sceneserver'].includes(str.toLowerCase());\n  }\n  /**\n   * Transforms provided extent to a map projection\n   */\n  private transformLayerExtent(\n    extent: ArcGISRestResponseLayerExtent,\n    data: UrlDataObject,\n  ): number[] {\n    return transformExtent(\n      [extent.xmin, extent.ymin, extent.xmax, extent.ymax],\n      'EPSG:' + data.srs,\n      data.map_projection,\n    );\n  }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {computed, Injectable, inject} from '@angular/core';\nimport {Subject, finalize, takeUntil} from 'rxjs';\n\nimport * as xml2Json from 'xml-js';\nimport {Layer, Vector as VectorLayer} from 'ol/layer';\nimport {Source} from 'ol/source';\nimport {get, transformExtent} from 'ol/proj';\n\nimport {\n  AddLayersRecursivelyOptions,\n  CapabilitiesResponseWrapper,\n  HsUrlTypeServiceModel,\n  LayerOptions,\n  UrlDataObject,\n} from 'hslayers-ng/types';\nimport {DuplicateHandling, HsMapService} from 'hslayers-ng/services/map';\nimport {HsAddDataCommonService} from '../common.service';\nimport {HsAddDataUrlService} from './add-data-url.service';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsWfsGetCapabilitiesService} from 'hslayers-ng/services/get-capabilities';\n\nimport {WfsSource} from 'hslayers-ng/common/layers';\nimport {setCluster} from 'hslayers-ng/common/extensions';\nimport {HsCommonLaymanService} from 'hslayers-ng/common/layman';\nimport {\n  HsProxyService,\n  paramsToURLWoEncode,\n  undefineEmptyString,\n} from 'hslayers-ng/services/utils';\n\ntype WfsCapabilitiesLayer = {\n  Abstract: string;\n  DefaultCRS: string;\n  Keywords: {\n    Keyword: string[];\n  };\n  Name: string;\n  Title: string;\n  WGS84BoundingBox: {LowerCorner: string; UpperCorner: string};\n  _attributes: any;\n};\n\nexport type HsWfsCapabilitiesLayer = WfsCapabilitiesLayer & {\n  featureCount: number;\n  limitFeatureCount: boolean;\n  loading: boolean;\n};\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsUrlWfsService implements HsUrlTypeServiceModel {\n  private http = inject(HttpClient);\n  hsWfsGetCapabilitiesService = inject(HsWfsGetCapabilitiesService);\n  private hsLog = inject(HsLogService);\n  hsMapService = inject(HsMapService);\n  hsEventBusService = inject(HsEventBusService);\n  hsLayoutService = inject(HsLayoutService);\n  hsAddDataCommonService = inject(HsAddDataCommonService);\n  private hsAddDataUrlService = inject(HsAddDataUrlService);\n  private hsCommonLaymanService = inject(HsCommonLaymanService);\n  private hsProxyService = inject(HsProxyService);\n\n  data: UrlDataObject;\n  definedProjections: string[];\n  loadingFeatures: boolean;\n\n  private requestCancelSubjects: Map<string, Subject<void>> = new Map();\n  cancelUrlRequest: Subject<void> = new Subject();\n\n  withCredentials = computed(() => {\n    const url = this.hsWfsGetCapabilitiesService.service_url();\n    return this.hsCommonLaymanService.isLaymanUrl(\n      url,\n      this.hsCommonLaymanService.layman(),\n    );\n  });\n\n  constructor() {\n    this.setDataToDefault();\n  }\n\n  /**\n   * Sets data object to default\n   */\n  setDataToDefault() {\n    this.data = {\n      add_all: null,\n      extent: null,\n      folder_name: 'WFS',\n      layers: [],\n      map_projection: undefined,\n      output_format: '',\n      output_formats: null,\n      services: [],\n      srs: null,\n      srss: [],\n      title: '',\n      version: '',\n      table: {\n        trackBy: 'Name',\n        nameProperty: 'Title',\n      },\n    };\n    this.definedProjections = [\n      'EPSG:3857',\n      'EPSG:5514',\n      'EPSG:4258',\n      'EPSG:4326',\n    ];\n  }\n\n  /**\n   * List and return layers from WFS getCapabilities response\n   * @param wrapper - Capabilities response wrapper\n   */\n  async listLayerFromCapabilities(\n    wrapper: CapabilitiesResponseWrapper,\n    layerOptions?: LayerOptions,\n  ): Promise<Layer<Source>[]> {\n    if (!wrapper.response && !wrapper.error) {\n      return;\n    }\n    if (wrapper.error) {\n      this.hsAddDataCommonService.throwParsingError(wrapper.response.message);\n      return;\n    }\n    try {\n      await this.parseCapabilities(wrapper.response);\n      if (this.hsAddDataCommonService.layerToSelect) {\n        this.hsAddDataCommonService.checkTheSelectedLayer(\n          this.data.layers,\n          'wfs',\n        );\n        const collection = this.getLayers(true, false, layerOptions);\n        if (!layerOptions?.fromComposition) {\n          this.hsAddDataUrlService.zoomToLayers(this.data);\n        }\n        return collection;\n      }\n    } catch (e) {\n      this.hsAddDataCommonService.throwParsingError(e);\n    }\n  }\n\n  /**\n   * Parse information received in WFS getCapabilities response\n   * @param response - A stringified XML response to getCapabilities request\n   */\n  async parseCapabilities(response: string): Promise<void> {\n    try {\n      this.loadingFeatures = false;\n\n      this.data.map_projection ??= this.hsMapService\n        .getMap()\n        .getView()\n        .getProjection()\n        .getCode()\n        .toUpperCase();\n\n      let caps: any = xml2Json.xml2js(response, {compact: true});\n      if (caps['wfs:WFS_Capabilities']) {\n        caps = caps['wfs:WFS_Capabilities'];\n      } else {\n        caps = caps['WFS_Capabilities'];\n      }\n      this.parseWFSJson(caps);\n      const serviceTitle = caps.ServiceIdentification?.Title;\n      this.data.title =\n        typeof serviceTitle === 'string'\n          ? serviceTitle\n          : this.hsWfsGetCapabilitiesService\n              .service_url()\n              .split('//')[1]\n              .split('/')[0];\n      // this.description = addAnchors(caps.ServiceIdentification.Abstract);\n      this.data.version = caps.ServiceIdentification.ServiceTypeVersion;\n      const layer = Array.isArray(caps.FeatureTypeList.FeatureType)\n        ? caps.FeatureTypeList.FeatureType.find(\n            (layer) => layer.Name == this.hsAddDataCommonService.layerToSelect,\n          )\n        : caps.FeatureTypeList.FeatureType;\n      this.data.layers = Array.isArray(caps.FeatureTypeList.FeatureType)\n        ? caps.FeatureTypeList.FeatureType\n        : [caps.FeatureTypeList.FeatureType];\n\n      if (layer) {\n        this.data.extent = this.getLayerExtent(layer, this.data.map_projection);\n\n        const srsType = layer && layer.DefaultSRS ? 'SRS' : 'CRS';\n        if (layer['Default' + srsType] !== undefined) {\n          this.data.srss = [layer['Default' + srsType]];\n        } else {\n          this.data.srss = [];\n          this.data.srss.push('urn:ogc:def:crs:EPSG::4326');\n        }\n\n        const otherSRS = layer['Other' + srsType];\n        if (otherSRS) {\n          if (typeof otherSRS == 'string') {\n            this.data.srss.push(otherSRS);\n          } else {\n            for (const srs of layer['Other' + srsType]) {\n              this.data.srss.push(srs);\n            }\n          }\n        }\n\n        if (this.data.srss[0] === undefined) {\n          this.data.srss = [\n            caps.FeatureTypeList.FeatureType[0]['Default' + srsType],\n          ];\n          for (const srs of caps.FeatureTypeList.FeatureType[0][\n            'Other' + srsType\n          ]) {\n            this.data.srss.push(srs);\n          }\n        }\n      }\n      this.data.output_format = this.getPreferredFormat(this.data.version);\n\n      const fallbackProj = this.data.map_projection || 'EPSG:3857';\n      this.data.srss = this.parseEPSG(this.data.srss);\n      if (this.data.srss.length == 0) {\n        this.data.srss = [fallbackProj];\n        this.hsLog.warn(\n          `While loading WFS from ${this.data.title} fallback projection ${fallbackProj} was used.`,\n        );\n      }\n\n      this.data.srs =\n        this.data.srss.find((srs) => srs.includes(fallbackProj)) ||\n        this.data.srss[0];\n      if (\n        this.data.layers.length <= 10 ||\n        this.hsAddDataCommonService.layerToSelect\n      ) {\n        try {\n          const layers = this.hsAddDataCommonService.layerToSelect\n            ? this.data.layers.filter(\n                (l) => l.Name === this.hsAddDataCommonService.layerToSelect,\n              )\n            : this.data.layers;\n          this.getFeatureCountForLayers(\n            layers,\n            this.hsAddDataCommonService.layerToSelect as string,\n          );\n        } catch (e) {\n          throw new Error(e);\n        }\n      }\n      this.hsAddDataCommonService.loadingInfo = false;\n    } catch (e) {\n      throw new Error(e);\n    }\n  }\n\n  getLayerExtent(lyr: any, crs: string): number[] {\n    let bbox = lyr.WGS84BoundingBox || lyr.OutputFormats.WGS84BoundingBox;\n    const lowerCorner = bbox.LowerCorner.split(' ').map(Number);\n    const upperCorner = bbox.UpperCorner.split(' ').map(Number);\n    bbox = [...lowerCorner, ...upperCorner];\n    return transformExtent(bbox, 'EPSG:4326', crs);\n  }\n\n  /**\n   * For given array of layers (service layer definitions) it calculates a cumulative bounding box which encloses all the layers\n   */\n  calcAllLayersExtent(layers: Layer<Source>[]): any {\n    if (layers.length == 0) {\n      return undefined;\n    }\n\n    const selectedLayerNames = layers.map((l) => l.get('name'));\n    layers = this.data.layers.filter((lyr) => {\n      return selectedLayerNames.includes(lyr.Name);\n    });\n    const layerExtents: number[][] = layers.map((lyr) => {\n      return this.getLayerExtent(lyr, this.data.map_projection);\n    });\n    return this.hsAddDataUrlService.calcCombinedExtent(layerExtents);\n  }\n\n  /**\n   * Get preferred GML version format\n   * @param version - GML version\n   */\n  getPreferredFormat(version: string): string {\n    switch (version) {\n      case '1.0.0':\n        return 'GML2';\n      case '1.1.0':\n        return 'GML3';\n      case '2.0.0':\n        return 'GML32';\n      default:\n        return 'GML3';\n    }\n  }\n\n  /**\n   * Construct and send WFS service getFeature-hits request for a set of layers\n   */\n  getFeatureCountForLayers(\n    layers: HsWfsCapabilitiesLayer[],\n    selectedLayer?: string,\n  ) {\n    for (const layer of layers) {\n      layer.loading = true;\n      const params = {\n        service: 'wfs',\n        version: this.data.version, //== '2.0.0' ? '1.1.0' : this.version,\n        request: 'GetFeature',\n        resultType: 'hits',\n      };\n      params[this.data.version.startsWith('1') ? 'typeName' : 'typeNames'] =\n        layer.Name;\n      const url = [\n        this.hsWfsGetCapabilitiesService.service_url().split('?')[0],\n        paramsToURLWoEncode(params),\n      ].join('?');\n\n      this.parseFeatureCount(url, layer, selectedLayer);\n    }\n  }\n\n  /**\n   * Parse layer feature count and set feature limits\n   */\n  private parseFeatureCount(\n    url: string,\n    layer: HsWfsCapabilitiesLayer,\n    selectedLayer?: string,\n  ): void {\n    // Create a unique subject for this request\n    const cancelSubject = new Subject<void>();\n\n    // Associate the cancel subject with the request URL\n    this.requestCancelSubjects.set(url, cancelSubject);\n    this.http\n      .get(this.hsProxyService.proxify(url), {\n        responseType: 'text',\n        withCredentials: this.withCredentials(),\n      })\n      .pipe(\n        takeUntil(this.cancelUrlRequest),\n        finalize(() => {\n          if (selectedLayer) {\n            setCluster(\n              layer['olLayer'],\n              layer.featureCount ? layer.featureCount > 5000 : true,\n            );\n          }\n        }),\n      )\n      .subscribe({\n        next: (response: any) => {\n          const oParser = new DOMParser();\n          const oDOM = oParser.parseFromString(response, 'application/xml');\n          const doc = oDOM.documentElement;\n          layer.featureCount = parseInt(doc.getAttribute('numberOfFeatures'));\n          //WFS 2.0.0\n          if (layer.featureCount == 0 || !layer.featureCount) {\n            layer.featureCount = parseInt(doc.getAttribute('numberMatched'));\n          }\n          layer.limitFeatureCount = layer.featureCount > 1000;\n          layer.loading = false;\n          this.requestCancelSubjects.delete(url);\n        },\n        error: (e) => {\n          this.cancelRequest(url);\n          layer.featureCount = -9999;\n          layer.loading = false;\n          //this.hsAddDataCommonService.throwParsingError(e);\n        },\n      });\n  }\n\n  /**\n   * Cancel a specific request based on URL as identifier\n   */\n  private cancelRequest(url: string) {\n    const cancelSubject = this.requestCancelSubjects.get(url);\n    if (cancelSubject) {\n      cancelSubject.next();\n      cancelSubject.complete();\n      this.requestCancelSubjects.delete(url);\n    }\n  }\n\n  /**\n   * Handle table row click event by getting layer feature count if necessary\n   */\n  tableLayerChecked($event, layer) {\n    if (\n      (layer as HsWfsCapabilitiesLayer).featureCount === undefined &&\n      layer.checked\n    ) {\n      this.getFeatureCountForLayers([layer]);\n    }\n  }\n\n  /**\n   * Parse WFS json file\n   * @param json - JSON file\n   */\n  parseWFSJson(json: JSON): void {\n    try {\n      for (const key of Object.keys(json)) {\n        if (key.includes(':')) {\n          json[key.substring(4)] = json[key];\n          if (typeof json[key.substring(4)] == 'object') {\n            this.parseWFSJson(json[key]);\n          }\n          if (json[key.substring(4)] && json[key.substring(4)]['_text']) {\n            json[key.substring(4)] = json[key.substring(4)]['_text'];\n          }\n          delete json[key];\n        }\n        if (typeof json[key] == 'object') {\n          this.parseWFSJson(json[key]);\n          if (json[key] && json[key]['_text']) {\n            json[key] = json[key]['_text'];\n          }\n        }\n      }\n    } catch (e) {\n      throw new Error(e);\n    }\n  }\n\n  /**\n   * Parse EPSG in usable formats\n   */\n  parseEPSG(srss): Array<any> {\n    srss.forEach((srs, index) => {\n      const epsgCode = srs.slice(-4);\n      srss[index] = 'EPSG:' + epsgCode;\n      if (!get(srss[index])) {\n        srss.splice(srss.indexOf(index), 1);\n      }\n    });\n    return [...Array.from(new Set(srss))].filter((srs: string) =>\n      this.definedProjections.includes(srs),\n    );\n  }\n\n  /**\n   * Finalize layer retrieval\n   * Calculates extent, zooms to layers, clears params, sets panel to catalogue and resets to default\n   * @param collection - Layers created and retrieved collection\n   * @param layerOptions - Layer options\n   */\n  finalizeLayerRetrieval(\n    collection: Layer<Source>[],\n    layerOptions?: LayerOptions,\n  ) {\n    this.data.extent = this.calcAllLayersExtent(collection);\n    if (!layerOptions?.fromComposition) {\n      this.hsAddDataUrlService.zoomToLayers(this.data);\n    }\n    this.hsAddDataCommonService.clearParams();\n    this.setDataToDefault();\n    this.hsAddDataCommonService.setPanelToCatalogue();\n  }\n\n  /**\n   * Loop through the list of layers and call getLayer\n   * @param checkedOnly - Add all available layers or only checked ones. Checked=false=all\n   * @param shallow - Whether to go through full depth of layer tree or to stop on first queryable\n   */\n  getLayers(\n    checkedOnly?: boolean,\n    shallow?: boolean,\n    layerOptions?: LayerOptions,\n  ): Layer<Source>[] {\n    this.data.add_all = checkedOnly;\n    const collection: Layer<Source>[] = [];\n    for (const layer of this.data.layers) {\n      this.getLayersRecursively(layer, {layerOptions}, collection);\n    }\n    this.finalizeLayerRetrieval(collection, layerOptions);\n    return collection;\n  }\n\n  /**\n   * Loop through the list of layers and call getLayer recursively\n   * @param layer - Layer selected\n   * @param options - Add layers recursively options\n   * (checkedOnly?: boolean; style?: string; layerOptions: @type LayerOptions)\n   * @param collection - Layers created and retrieved collection\n   */\n  getLayersRecursively(\n    layer,\n    options: AddLayersRecursivelyOptions,\n    collection: Layer<Source>[],\n  ): void {\n    const style = options.layerOptions?.style;\n    if (!this.data.add_all || layer.checked) {\n      const newLayer = this.getLayer(layer, {\n        layerName: layer.Name,\n        path:\n          undefineEmptyString(this.data.folder_name) ||\n          options.layerOptions?.path,\n        crs: this.data.srs,\n        sld: style?.includes('StyledLayerDescriptor') ? style : undefined,\n        qml: style?.includes('qgis') ? style : undefined,\n        ...options?.layerOptions,\n      });\n      collection.push(newLayer);\n    }\n    if (layer.Layer) {\n      for (const sublayer of layer.Layer) {\n        this.getLayersRecursively(sublayer, options, collection);\n      }\n    }\n  }\n\n  /**\n   * Get selected layer\n   * @param layer - capabilities layer object\n   * @param layerName - layer name in the map\n   * @param folder - name\n   * @param srs - of the layer\n   */\n  getLayer(layer, options: LayerOptions): Layer<Source> {\n    const url = this.hsWfsGetCapabilitiesService.service_url().split('?')[0];\n    /**\n     * Do not cluster features for layer from catalogue now as unlikely\n     * we have a hits already. Will be set in parseFeatureCount once the request is completed\n     */\n    const manyFeatures = this.hsAddDataCommonService.layerToSelect\n      ? false\n      : layer.featureCount\n        ? layer.featureCount > 5000\n        : true; //A lot of features or unknown number\n    const layerExtent = manyFeatures\n      ? this.getLayerExtent(layer, options.crs)\n      : undefined;\n    const featureNS = layer._attributes?.[Object.keys(layer._attributes)[0]];\n    const new_layer = new VectorLayer({\n      properties: {\n        name: options.layerName,\n        title: layer.Title.replace(/\\//g, '&#47;'),\n        removable: true,\n        wfsUrl: url,\n        ...options,\n        extent: layerExtent,\n        cluster: manyFeatures,\n      },\n      source: new WfsSource({\n        data_version: this.data.version,\n        output_format: this.data.output_format,\n        crs: options.crs,\n        provided_url: this.hsProxyService.proxify(url),\n        layer_name: options.layerName,\n        featureNS: featureNS,\n        map_projection: this.hsMapService.getMap().getView().getProjection(),\n        layerExtent: layerExtent,\n        withCredentials: this.withCredentials(),\n      }),\n      renderOrder: null,\n      opacity: options.opacity ?? 1,\n      //Used to determine whether its URL WFS service when saving to compositions\n    });\n    if (options.minResolution) {\n      new_layer.setMinResolution(options.minResolution);\n    }\n    if (options.maxResolution) {\n      new_layer.setMaxResolution(options.maxResolution);\n    }\n\n    if (this.hsAddDataCommonService.layerToSelect) {\n      layer.olLayer = new_layer;\n    }\n    return new_layer;\n  }\n\n  /**\n   * Loop through the list of layers and add them to the map\n   */\n  addLayers(layers: Layer<Source>[]): void {\n    for (const l of layers) {\n      this.hsMapService.resolveDuplicateLayer(\n        l,\n        DuplicateHandling.RemoveOriginal,\n      );\n      this.hsMapService.getMap().addLayer(l);\n    }\n    this.hsLayoutService.setMainPanel('layerManager');\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport ImageSource from 'ol/source/Image';\nimport TileSource from 'ol/source/Tile';\nimport {Image as ImageLayer, Layer, Tile} from 'ol/layer';\nimport {Options as ImageOptions} from 'ol/layer/BaseImage';\nimport {ImageWMS, Source, TileWMS} from 'ol/source';\nimport {Options as TileOptions} from 'ol/layer/BaseTile';\nimport {WMSCapabilities} from 'ol/format';\nimport {get, transformExtent} from 'ol/proj';\n\nimport {\n  AddLayersRecursivelyOptions,\n  CapabilitiesResponseWrapper,\n  HsUrlTypeServiceModel,\n  HsWmsLayer,\n  WMSGetCapabilitiesResponse,\n  LayerOptions,\n  UrlDataObject,\n} from 'hslayers-ng/types';\nimport {DuplicateHandling, HsMapService} from 'hslayers-ng/services/map';\nimport {HsAddDataCommonService} from '../common.service';\nimport {HsAddDataService} from '../add-data.service';\nimport {HsAddDataUrlService} from './add-data-url.service';\nimport {HsConfig} from 'hslayers-ng/config';\nimport {\n  HsDimensionService,\n  HsWmsGetCapabilitiesService,\n} from 'hslayers-ng/services/get-capabilities';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {\n  getPortFromUrl,\n  isOverflown,\n  undefineEmptyString,\n  bufferExtent,\n  calculateResolutionFromScale,\n  addAnchors,\n  getPreferredFormat,\n} from 'hslayers-ng/services/utils';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {getFromComposition} from 'hslayers-ng/common/extensions';\n\n@Injectable({providedIn: 'root'})\nexport class HsUrlWmsService implements HsUrlTypeServiceModel {\n  private hsMapService = inject(HsMapService);\n  private hsWmsGetCapabilitiesService = inject(HsWmsGetCapabilitiesService);\n  private hsDimensionService = inject(HsDimensionService);\n  private hsLayoutService = inject(HsLayoutService);\n  private hsConfig = inject(HsConfig);\n  private hsAddDataService = inject(HsAddDataService);\n  private hsEventBusService = inject(HsEventBusService);\n  private hsAddDataUrlService = inject(HsAddDataUrlService);\n  private hsAddDataCommonService = inject(HsAddDataCommonService);\n\n  data: UrlDataObject;\n\n  constructor() {\n    this.hsEventBusService.olMapLoads.subscribe((map) => {\n      this.data.map_projection = this.hsMapService.map\n        .getView()\n        .getProjection()\n        .getCode()\n        .toUpperCase();\n    });\n    this.setDataToDefault();\n  }\n\n  /**\n   * Sets data object to default\n   */\n  setDataToDefault(): void {\n    this.data = {\n      add_under: null,\n      map_projection: '',\n      queryable: true,\n      tile_size: 512,\n      use_resampling: false,\n      useTiles: true,\n      visible: true,\n      table: {\n        trackBy: 'Name',\n        nameProperty: 'Title',\n      },\n    };\n  }\n\n  /**\n   * List and return layers from WMS getCapabilities response\n   * @param wrapper - Capabilities response wrapper\n   */\n  async listLayerFromCapabilities(\n    wrapper: CapabilitiesResponseWrapper,\n    options?: LayerOptions,\n  ): Promise<Layer<Source>[]> {\n    if (!wrapper.response && !wrapper.error) {\n      return;\n    }\n    if (wrapper.error) {\n      this.hsAddDataCommonService.throwParsingError(wrapper.response.message);\n      return;\n    }\n    try {\n      await this.capabilitiesReceived(\n        wrapper.response,\n        this.hsAddDataCommonService.layerToSelect as string,\n      );\n      if (this.hsAddDataCommonService.layerToSelect) {\n        this.hsAddDataCommonService.checkTheSelectedLayer(\n          this.data.layers,\n          'wms',\n        );\n        return this.getLayers(true, false, options);\n      }\n    } catch (e) {\n      this.hsAddDataCommonService.throwParsingError(e);\n    }\n  }\n\n  /**\n   * Expands all sibling cells belonging to the same row after overflown cell is clicked\n   */\n  expandTableRow(e): void {\n    const action = e.target.className.includes('hs-wms-expandedRow')\n      ? 'remove'\n      : 'add';\n    if (isOverflown(e.target) || action == 'remove') {\n      const selectedRow = e.target.parentElement;\n      for (const el of selectedRow.children) {\n        el.classList[action]('hs-wms-expandedRow');\n      }\n    }\n  }\n\n  /**\n   * Fills list of available projections\n   */\n  fillProjections(caps, response): void {\n    if (caps.Capability.Layer.CRS !== undefined) {\n      this.data.srss = caps.Capability.Layer.CRS;\n    } else if (\n      caps.Capability.Layer.Layer &&\n      caps.Capability.Layer.Layer.length > 0 &&\n      caps.Capability.Layer.Layer[0].CRS\n    ) {\n      this.data.srss = caps.Capability.Layer.Layer[0].CRS;\n    } else {\n      const oParser = new DOMParser();\n      const oDOM = oParser.parseFromString(response, 'application/xml');\n      const doc = oDOM.documentElement;\n      doc.querySelectorAll('Capability>Layer CRS').forEach((srs) => {\n        this.data.srss.push(srs.innerHTML);\n      });\n      /**\n       * SRS is a malformed input and an error but let's be generous...\n       */\n      if (this.data.srss.length == 0) {\n        doc.querySelectorAll('Capability>Layer SRS').forEach((srs) => {\n          this.data.srss.push(srs.innerHTML);\n        });\n      }\n      //filter out duplicate records\n      this.data.srss = [...new Set(this.data.srss)];\n    }\n    if (this.data.srss.length == 0) {\n      this.data.srss = ['EPSG:4326'];\n      this.hsAddDataCommonService.throwParsingError(\n        \"No CRS found in the service's Capabilities. This is an error on the provider's site. Guessing WGS84 will be supported. This may or may not be correct.\",\n      );\n    }\n  }\n\n  /**\n   * Parse information received in WMS getCapabilities response\n   */\n  async capabilitiesReceived(response, layerToSelect: string): Promise<void> {\n    try {\n      const parser = new WMSCapabilities();\n      const caps: WMSGetCapabilitiesResponse = parser.read(response);\n      this.data.map_projection = this.hsMapService\n        .getMap()\n        .getView()\n        .getProjection()\n        .getCode()\n        .toUpperCase();\n      this.data.title = caps.Service.Title || 'Wms layer';\n      this.data.description = addAnchors(caps.Service.Abstract);\n      this.data.version = caps.Version || caps.version;\n      this.data.image_formats = caps.Capability.Request.GetMap.Format\n        ? (caps.Capability.Request.GetMap.Format as Array<string>)\n        : [];\n      this.data.query_formats = caps.Capability.Request.GetFeatureInfo\n        ? (caps.Capability.Request.GetFeatureInfo.Format as Array<string>)\n        : [];\n      this.data.exceptions = caps.Capability.Exception;\n      this.data.srss = [];\n      this.fillProjections(caps, response);\n      // //TODO: WHY?\n      // if (this.data.srss.includes('CRS:84')) {\n      //   this.data.srss.splice(this.data.srss.indexOf('CRS:84'), 1);\n      // }\n      if (\n        this.hsAddDataCommonService.currentProjectionSupported(this.data.srss)\n      ) {\n        this.data.srs = this.data.srss.includes(\n          this.hsMapService.getMap().getView().getProjection().getCode(),\n        )\n          ? this.hsMapService.getMap().getView().getProjection().getCode()\n          : this.hsMapService\n              .getMap()\n              .getView()\n              .getProjection()\n              .getCode()\n              .toLowerCase();\n      } else if (this.data.srss.includes('EPSG:4326')) {\n        this.data.srs = 'EPSG:4326';\n      } else {\n        this.data.srs = this.data.srss[0];\n      }\n      this.data.resample_warning = this.hsAddDataCommonService.srsChanged(\n        this.data.srs,\n      );\n      this.data.layers = this.filterCapabilitiesLayers(caps.Capability.Layer);\n      //Make sure every service has a title to be displayed in table\n      for (const layer of this.data.layers) {\n        if (layer.Title.length == 0) {\n          layer.Title = layer.Name;\n        }\n      }\n\n      this.hsAddDataUrlService.selectLayerByName(\n        layerToSelect,\n        this.data.layers,\n        'Name',\n      );\n      this.hsAddDataUrlService.searchForChecked(this.data.layers);\n      this.hsDimensionService.fillDimensionValues(caps.Capability.Layer);\n\n      this.data.get_map_url = this.removePortIfProxified(\n        caps.Capability.Request.GetMap.DCPType[0].HTTP.Get.OnlineResource,\n      );\n      this.data.image_format = getPreferredFormat(this.data.image_formats, [\n        'image/png; mode=8bit',\n        'image/png',\n        'image/gif',\n        'image/jpeg',\n      ]);\n      this.data.query_format = getPreferredFormat(this.data.query_formats, [\n        'application/vnd.esri.wms_featureinfo_xml',\n        'application/vnd.ogc.gml',\n        'application/vnd.ogc.wms_xml',\n        'text/plain',\n        'text/html',\n      ]);\n      this.hsAddDataCommonService.loadingInfo = false;\n    } catch (e) {\n      throw new Error(e);\n    }\n  }\n\n  /**\n   * Get extent for a single layer\n   */\n  private getSingleLayerExtent(serviceLayer: any, crs: string) {\n    /**\n     * serviceLayer might be undefined when trying to parse extent of WMS sublayer\n     * while creating layer.  Will be added along with metadata parsing\n     */\n    if (!serviceLayer) {\n      return;\n    }\n    let boundingbox = serviceLayer.BoundingBox;\n    if (\n      crs !== undefined &&\n      serviceLayer.EX_GeographicBoundingBox !== undefined\n    ) {\n      boundingbox = transformExtent(\n        serviceLayer.EX_GeographicBoundingBox,\n        'EPSG:4326',\n        this.hsMapService.getCurrentProj(),\n      );\n    } else if (Array.isArray(boundingbox)) {\n      const preferred = boundingbox.find((bboxInCrs) => {\n        return bboxInCrs.crs == this.data.map_projection;\n      });\n\n      if (preferred?.extent) {\n        boundingbox = preferred?.extent;\n      } else {\n        //NOTE: For some reason (maybe WMS 1.1.1/1.1.0) sometimes CRS:84 might hold correct order of coordinates\n        boundingbox = boundingbox.find((b) => b.crs != 'CRS:84' && get(b.crs));\n        boundingbox = transformExtent(\n          boundingbox.extent,\n          boundingbox.crs || crs,\n          this.hsMapService.getCurrentProj(),\n        );\n      }\n    } else {\n      if (this.data.map_projection != serviceLayer.crs) {\n        boundingbox = serviceLayer.LatLonBoundingBox;\n      }\n    }\n    return (\n      boundingbox ||\n      transformExtent(\n        [-180, -90, 180, 90],\n        'EPSG:4326',\n        this.hsMapService.getCurrentProj(),\n      )\n    );\n  }\n\n  /**\n   * Calculates extent for layer being created\n   */\n  private getBufferExtent(layers: any, options: LayerOptions): number[] {\n    const calculatedExtent = this.getLayerExtent(layers, options.crs);\n    return bufferExtent(calculatedExtent, this.hsMapService.getCurrentProj());\n  }\n\n  /**\n   * Get extent for a WMS layer.\n   * URL: Single or multiple layer in params.LAYERS\n   * CATALOGUE - layer obj\n   */\n  getLayerExtent(serviceLayer: any, crs: string): number[] {\n    //Get called without valid serviceLayer as part of micka dataset loading pipeline\n    if (!serviceLayer) {\n      return;\n    }\n    if (typeof serviceLayer === 'string') {\n      //Single\n      const layers = serviceLayer.split(',');\n      if (layers.length === 1) {\n        serviceLayer = this.data.layers.find((l) => l.Name === serviceLayer);\n      }\n      //Group\n      else {\n        return this.hsAddDataUrlService.calcCombinedExtent(\n          layers.map((l) => {\n            //Lookup layer in capabilities layers list\n            const layer = this.data.layers.find((layer) => layer.Name === l);\n            //If layer is not found, use the layer name as is\n            return this.getSingleLayerExtent(layer || l, crs);\n          }),\n        );\n      }\n    }\n    return this.getSingleLayerExtent(serviceLayer, crs);\n  }\n\n  /**\n   * Filters out layers without 'Name' parameter\n   */\n  filterCapabilitiesLayers(\n    layers: HsWmsLayer | Array<HsWmsLayer>,\n  ): Array<HsWmsLayer> {\n    if (Array.isArray(layers)) {\n      return layers;\n    }\n    let tmp = [];\n    if (typeof layers == 'object') {\n      if (layers.Layer && Array.isArray(layers.Layer)) {\n        const layersWithNameParam = layers.Layer.filter((layer) => layer.Name);\n        if (layersWithNameParam.length > 0) {\n          return layersWithNameParam;\n        }\n        for (const layer of layers.Layer) {\n          tmp.push(...this.filterCapabilitiesLayers(layer));\n        }\n      } else {\n        tmp = [layers];\n      }\n    }\n    return tmp;\n  }\n  /**\n   * Removes extra port which is added to the getMap request when\n   * GetCapabilities is queried through proxy. <GetMap><DCPType><HTTP><Get>\n   * \\<OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://gis.lesprojekt.cz/cgi-bin/mapserv?map=/home/maps\"/\\>\n   * then becomes <GetMap><DCPType><HTTP><Get>\n   * \\<OnlineResource xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"http://gis.lesprojekt.cz:8085/cgi-bin/mapserv?map=/home/maps\"/\\>\n   * which is wrong.\n   * @param url - URL for which to remove port but only when proxified\n   * with port in proxy path.\n   * @returns URL without proxy services port added to it.\n   */\n  removePortIfProxified(url: string): string {\n    if (this.hsConfig.proxyPrefix === undefined) {\n      return url;\n    }\n    const proxyPort = parseInt(getPortFromUrl(this.hsConfig.proxyPrefix));\n    if (proxyPort > 0) {\n      return url.replace(':' + proxyPort.toString(), '');\n    }\n    return url;\n  }\n\n  /**\n   * Finalize layer retrieval\n   * Calculates extent, zooms to layers, clears params, sets panel to catalogue and resets to default\n   * @param collection - Layers created and retrieved collection\n   * @param layerOptions - Layer options\n   */\n  finalizeLayerRetrieval(\n    collection: Layer<Source>[],\n    layerOptions?: LayerOptions,\n  ) {\n    this.data.extent = this.hsAddDataUrlService.calcAllLayersExtent(collection);\n    this.data.base = false;\n    this.hsAddDataUrlService.zoomToLayers(this.data);\n    this.hsAddDataCommonService.clearParams();\n    this.setDataToDefault();\n    this.hsAddDataCommonService.setPanelToCatalogue();\n\n    if (collection.length == 0) {\n      return;\n    }\n\n    const fromComposition = collection.some((layer) =>\n      getFromComposition(layer),\n    );\n    const shouldOpenLayerManager =\n      !fromComposition ||\n      (fromComposition && this.hsConfig.open_lm_after_comp_loaded);\n    if (shouldOpenLayerManager) {\n      this.hsLayoutService.setMainPanel('layerManager');\n    }\n  }\n\n  /**\n   * Get layer name for group.\n   * If there is only one checked layer, return its name, otherwise return the group name\n   */\n  getLayerNameForGroup(): string {\n    const layers = this.data.layers;\n    if (this.data.base || this.data.group) {\n      const checkedLayers = layers.filter((l) => l.checked);\n      return checkedLayers.length === 1\n        ? checkedLayers[0].Title\n        : this.data.title.replace(/\\//g, '&#47;');\n    }\n    return this.data.title.replace(/\\//g, '&#47;');\n  }\n\n  /**\n   * Loop through the list of layers and call getLayer.\n   * @param checkedOnly - Add all available layers or only checked ones. checkedOnly=false=all\n   * @param layerOptions - Optional layer parameters. Used to parse composition layers\n   */\n  getLayers(\n    checkedOnly: boolean,\n    shallow?,\n    layerOptions?: LayerOptions,\n  ): Layer<Source>[] {\n    if (this.data.layers === undefined) {\n      return;\n    }\n    const collection = [];\n    //Limit visible layers to 10 to not freeze accidentally\n    this.data.visible = checkedOnly\n      ? this.data.layers.filter((l) => l.checked === true).length <= 10\n      : false;\n    if (this.data.base || this.data.group) {\n      const newLayer = this.getLayer(\n        {},\n        {\n          ...layerOptions,\n          layerName: this.getLayerNameForGroup(),\n          path:\n            undefineEmptyString(this.data.folder_name) || layerOptions?.path,\n          imageFormat: this.data.image_format,\n          queryFormat: this.data.query_format,\n          queryable: this.data.queryable,\n          tileSize: this.data.tile_size,\n          crs: this.data.srs,\n          subLayers: '',\n        },\n      );\n      collection.push(newLayer);\n    } else {\n      for (const layer of this.data.layers) {\n        this.getLayersRecursively(\n          layer,\n          {checkedOnly, shallow, layerOptions},\n          collection,\n        );\n      }\n    }\n    this.finalizeLayerRetrieval(collection, layerOptions);\n    return collection;\n  }\n\n  /**\n   * Get selected layer\n   * @param layer - capabilities layer object\n   * @param layerName - layer name in the map\n   * @param path - Path (folder) name\n   * @param imageFormat - Format in which to serve image. Usually: image/png\n   * @param queryFormat - See info_format in https://docs.geoserver.org/stable/en/user/services/wms/reference.html\n   * @param tileSize - Tile size in pixels\n   * @param crs - of the layer\n   * @param subLayers - Static sub-layers of the layer\n   */\n  getLayer(layer, options: LayerOptions): Layer<Source> {\n    let attributions = [];\n    if (layer.Attribution) {\n      attributions = [\n        `<a href=\"${layer.Attribution.OnlineResource}\">${layer.Attribution.Title}</a>`,\n      ];\n    }\n\n    let dimensions;\n    if (layer.Dimension) {\n      dimensions = {};\n      for (const val of layer.Dimension) {\n        dimensions[val.name] = val;\n      }\n    }\n\n    const {styles, legends} = this.getLayerStyles(layer);\n\n    //Use queriable value or existance of queryFormat if both are undefined\n    const hasQueryable = layer.queryable ?? options.queryable;\n    const queryable =\n      hasQueryable !== undefined ? hasQueryable : !!options.queryFormat;\n\n    const sourceOptions = {\n      url: this.data.get_map_url,\n      attributions,\n      projection: this.data.srs,\n      params: options.params || {\n        LAYERS:\n          this.data.base || this.data.group\n            ? this.hsAddDataCommonService.getGroupedLayerNames(\n                this.data.layers,\n                'Name',\n              )\n            : layer.Name,\n        INFO_FORMAT: queryable ? options.queryFormat : undefined,\n        FORMAT: options.imageFormat,\n        VERSION: this.data.version,\n        STYLES: styles,\n        ...this.hsDimensionService.paramsFromDimensions(layer),\n      },\n      crossOrigin: 'anonymous',\n    };\n    const tiled = options.useTiles ?? this.data.useTiles;\n    const source: ImageWMS | TileWMS = tiled\n      ? new TileWMS(sourceOptions)\n      : new ImageWMS(sourceOptions);\n\n    const view = this.hsMapService.getMap().getView();\n    const calculatedMinResolution = calculateResolutionFromScale(\n      layer.MinScaleDenominator,\n      view,\n    );\n    const calculatedMaxResolution = calculateResolutionFromScale(\n      layer.MaxScaleDenominator,\n      view,\n    );\n\n    const calculatedMetadata =\n      this.hsWmsGetCapabilitiesService.getMetadataObjectWithUrls(layer);\n\n    const extent = this.getBufferExtent(\n      Object.keys(layer).length > 0 ? layer : sourceOptions.params.LAYERS,\n      options,\n    );\n\n    /**\n     * Remove non-functional options (those that are passed via options but should not be used in layer options)\n     * Reason for them being there is loading layers from Layman or from compositions\n     */\n    const {useTiles, imageFormat, queryFormat, tileSize, crs, ...lyrOptions} =\n      options;\n    const layerOptions = {\n      ...lyrOptions,\n      source,\n      title: options.title ?? options.layerName,\n      name: options.layerName,\n      minResolution: options.minResolution || calculatedMinResolution,\n      maxResolution: options.maxResolution || calculatedMaxResolution,\n      removable: true,\n      abstract: options.abstract || layer.Abstract,\n      metadata: options.metadata || calculatedMetadata,\n      extent: extent,\n      path: options.path,\n      dimensions: dimensions,\n      legends: options.legends || legends,\n      subLayers: options.subLayers,\n      base: options.base || this.data.base,\n      visible: this.data.visible,\n      /**\n       * Control preventing duplicated extent parsing\n       * during capability attributes parsing\n       */\n      capsExtentSet: !!extent,\n    };\n\n    const new_layer = tiled\n      ? new Tile(layerOptions as TileOptions<TileSource>)\n      : new ImageLayer(layerOptions as ImageOptions<ImageSource>);\n    this.hsMapService.proxifyLayerLoader(new_layer, tiled);\n    return new_layer;\n  }\n\n  /**\n   * Loop through the list of layers and add them to the map\n   */\n  addLayers(layers: Layer<Source>[]): void {\n    for (const l of layers) {\n      this.hsMapService.resolveDuplicateLayer(\n        l,\n        DuplicateHandling.RemoveOriginal,\n      );\n      this.hsAddDataService.addLayer(l, this.data.add_under);\n    }\n  }\n\n  /**\n   * Get selected layer styles and legends\n   * @param layer - Selected layer\n   */\n  private getLayerStyles(layer: any): {styles: string[]; legends: string[]} {\n    const legends = [];\n    let styles = undefined;\n    if (layer.styleSelected) {\n      styles = layer.styleSelected.Name;\n      if (layer.styleSelected.LegendURL?.length > 0) {\n        legends.push(layer.styleSelected.LegendURL[0].OnlineResource);\n      }\n    } else if (layer.Style && layer.Style.length > 0) {\n      const firstStyle = layer.Style[0];\n      styles = firstStyle.Name;\n      if (firstStyle.LegendURL) {\n        legends.push(firstStyle.LegendURL[0].OnlineResource);\n      }\n    } else {\n      styles = '';\n    }\n    return {styles, legends};\n  }\n\n  /**\n   * Loop through the list of layers and call getLayer recursively\n   * @param layer - Layer selected. A descriptor similar to WmsLayer, but has additional properties, also specific to WFS and ArcGIS layers\n   * @param options - Add layers recursively options\n   * (checkedOnly?: boolean; shallow?: boolean; style?: string;)\n   * @param collection - Layers created and retrieved collection\n   */\n  getLayersRecursively(\n    layer: any, //TODO: better typing. It is a wrapper similar to WmsLayer, but has additional properties, also specific to WFS and ArcGIS layers\n    options: AddLayersRecursivelyOptions = {checkedOnly: true},\n    collection: Layer<Source>[],\n  ): void {\n    if (!options.checkedOnly || layer.checked) {\n      collection.push(\n        this.getLayer(layer, {\n          ...options.layerOptions,\n          layerName: layer.Title.replace(/\\//g, '&#47;'),\n          path:\n            undefineEmptyString(this.data.folder_name) ||\n            options.layerOptions?.path,\n          imageFormat: this.data.image_format,\n          queryFormat: this.data.query_format,\n          queryable: this.data.queryable,\n          tileSize: this.data.tile_size,\n          crs: this.data.srs,\n        }),\n      );\n    }\n    // When not shallow go full depth otherwise layer.Name has got to be missing (first queryable layer)\n    const nextDepthAllowed = options.shallow ? !layer.Name : true;\n    if (layer.Layer && nextDepthAllowed) {\n      for (const sublayer of layer.Layer) {\n        this.getLayersRecursively(\n          sublayer,\n          {\n            checkedOnly: options.checkedOnly,\n            layerOptions: options.layerOptions,\n          },\n          collection,\n        );\n      }\n    }\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport WMTS, {optionsFromCapabilities} from 'ol/source/WMTS';\nimport {Extent} from 'ol/extent';\nimport {Layer, Tile} from 'ol/layer';\nimport {Source} from 'ol/source';\nimport {WMTSCapabilities} from 'ol/format';\nimport {transformExtent} from 'ol/proj';\n\nimport {\n  CapabilitiesResponseWrapper,\n  AddLayersRecursivelyOptions,\n  HsUrlTypeServiceModel,\n  LayerOptions,\n  UrlDataObject,\n} from 'hslayers-ng/types';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {HsMapService} from 'hslayers-ng/services/map';\n\nimport {HsAddDataCommonService} from '../common.service';\nimport {HsAddDataUrlService} from './add-data-url.service';\n\nimport {addAnchors} from 'hslayers-ng/services/utils';\n\n@Injectable({providedIn: 'root'})\nexport class HsUrlWmtsService implements HsUrlTypeServiceModel {\n  hsMapService = inject(HsMapService);\n  hsLayoutService = inject(HsLayoutService);\n  hsAddDataUrlService = inject(HsAddDataUrlService);\n  hsAddDataCommonService = inject(HsAddDataCommonService);\n\n  data: UrlDataObject;\n\n  constructor() {\n    this.setDataToDefault();\n  }\n\n  setDataToDefault(): void {\n    this.data = {\n      add_all: null,\n      caps: null,\n      description: '',\n      image_format: '',\n      services: [],\n      layers: [],\n      title: '',\n      version: '',\n      table: {\n        trackBy: 'Identifier',\n        nameProperty: 'Title',\n      },\n    };\n  }\n  /**\n   * List and return layers from WMTS getCapabilities response\n   * @param wrapper - Capabilities response wrapper\n   */\n  async listLayerFromCapabilities(\n    wrapper: CapabilitiesResponseWrapper,\n    options?: LayerOptions,\n  ): Promise<Layer<Source>[]> {\n    const response = wrapper.response;\n    const error = wrapper.error;\n    if (!response && !error) {\n      return;\n    }\n    if (error) {\n      this.hsAddDataCommonService.throwParsingError(response.message);\n      return;\n    }\n    try {\n      //TODO AWAIT and add-layer if layerToSelect\n      await this.capabilitiesReceived(response);\n      if (this.hsAddDataCommonService.layerToSelect) {\n        this.hsAddDataCommonService.checkTheSelectedLayer(\n          this.data.layers,\n          'wmts',\n        );\n        return this.getLayers(true, false, options);\n      }\n    } catch (e) {\n      this.hsAddDataCommonService.throwParsingError(e);\n    }\n  }\n\n  /**\n   * Parse information received in WMTS getCapabilities response\n   * @param response - Url of requested service\n   */\n  async capabilitiesReceived(response: string): Promise<any> {\n    try {\n      const parser = new WMTSCapabilities();\n      const caps = parser.read(response);\n      this.data.caps = caps;\n      this.data.title = caps.ServiceIdentification.Title || 'WMTS layer';\n\n      this.data.description = addAnchors(caps.ServiceIdentification.Abstract);\n      this.data.version = caps.Version || caps.version;\n      this.data.layers = caps.Contents.Layer;\n      this.hsAddDataCommonService.loadingInfo = false;\n      return this.data.title;\n    } catch (e) {\n      throw new Error(e);\n    }\n  }\n  /**\n   * Loop through the list of layers and call getLayer recursively\n   * @param layer - Layer selected\n   * @param collection - Layers created and retrieved collection\n   */\n  getLayersRecursively(\n    layer,\n    options: AddLayersRecursivelyOptions,\n    collection,\n  ): void {\n    if (!this.data.add_all || layer.checked) {\n      collection.push(this.getLayer(layer, options.layerOptions));\n    }\n    if (layer.Layer) {\n      for (const sublayer of layer.Layer) {\n        this.getLayersRecursively(sublayer, options, collection);\n      }\n    }\n  }\n\n  /**\n   * Loop through the list of layers and add them to the map\n   */\n  addLayers(layers: Layer<Source>[]): void {\n    for (const l of layers) {\n      this.hsMapService.addLayer(l);\n    }\n  }\n\n  /**\n   * Loop through the list of layers and call getLayer.\n   * @param checkedOnly - Add all available layers or only checked ones. checkedOnly=false=all\n   * @param layerOptions - Optional layer parameters. Used to parse composition layers\n   */\n  getLayers(\n    checkedOnly: boolean,\n    shallow?: boolean,\n    layerOptions?: LayerOptions,\n  ): Layer<Source>[] {\n    this.data.add_all = checkedOnly;\n    const collection = [];\n    for (const layer of this.data.layers) {\n      this.getLayersRecursively(layer, {layerOptions}, collection);\n    }\n    this.data.extent = this.hsAddDataUrlService.calcAllLayersExtent(collection);\n    if (!layerOptions?.fromComposition) {\n      this.hsAddDataUrlService.zoomToLayers(this.data);\n    }\n    this.hsAddDataCommonService.clearParams();\n    this.setDataToDefault();\n    this.hsAddDataCommonService.setPanelToCatalogue();\n    if (collection.length > 0 && !layerOptions?.fromComposition) {\n      this.hsLayoutService.setMainPanel('layerManager');\n    }\n    return collection;\n    //FIX ME: to implement\n    // this.zoomToLayers();\n  }\n\n  /**\n   * Return preferred tile format\n   * @param formats - Set of available formats for layer being added\n   */\n  getPreferredFormat(formats: any): string {\n    const preferred = formats.find((format) => format.includes('png'));\n    return preferred ? preferred : formats[0];\n  }\n\n  /**\n   * Return preferred tile tileMatrixSet\n   * Looks for the occurrence of supported CRS's, if possible picks CRS of current view\n   * otherwise returns 3857 as trial(some services support 3857 matrix set even though its not clear from capabilities )\n   * @param sets - Set of available matrixSets\n   */\n  getPreferredMatrixSet(sets): string {\n    const supportedFormats = ['3857', '4326', '5514'];\n    const preferred = sets.filter((set) =>\n      supportedFormats.some((v) => set.TileMatrixSet.includes(v)),\n    );\n    if (preferred.length != 0) {\n      const preferCurrent = preferred.find((set) =>\n        set.TileMatrixSet.includes(\n          this.hsMapService.getMap().getView().getProjection().getCode(),\n        ),\n      );\n      return preferCurrent\n        ? preferCurrent.TileMatrixSet\n        : preferred[0].TileMatrixSet;\n    }\n    return 'EPSG:3857';\n  }\n\n  /**\n   * Return preferred info format\n   * Looks for the occurrence of supported formats (query.wms)\n   * if possible picks HTML, otherwise first from the list of supported is selected\n   * @param response - Set of available info formats for layer being added\n   */\n  getPreferredInfoFormat(formats): string {\n    if (formats) {\n      const supportedFormats = ['html', 'xml', 'gml'];\n      const infos = formats.filter(\n        (format) =>\n          format.resourceType == 'FeatureInfo' &&\n          supportedFormats.some((v) => format.format.includes(v)),\n      );\n      if (infos.length != 0) {\n        const preferHTML = infos.find((format) =>\n          format.format.includes('html'),\n        );\n        return preferHTML ? preferHTML.format : infos[0].format;\n      }\n    }\n  }\n\n  /***\n   * Get WMTS layer bounding box\n   */\n  getWMTSExtent(identifier: string): Extent {\n    const caps = this.data.caps;\n    const layer = caps.Contents.Layer.find((l) => l.Identifier == identifier);\n    return layer?.WGS84BoundingBox\n      ? transformExtent(\n          layer.WGS84BoundingBox,\n          'EPSG:4326',\n          this.hsMapService.getCurrentProj(),\n        )\n      : undefined;\n  }\n\n  /**\n   * Get WMTS layer\n   * Uses previously received capabilities response as a reference for the source\n   * @param response - Set of available info formats for layer\n   */\n  getLayer(layer, options: LayerOptions): Layer<Source> {\n    try {\n      const wmts = new Tile({\n        opacity: options.opacity ?? 1,\n        extent: this.getWMTSExtent(layer.Identifier),\n        className: options?.greyscale ? 'ol-layer hs-greyscale' : 'ol-layer',\n        properties: {\n          title: layer.Title,\n          name: layer.Title,\n          info_format: this.getPreferredInfoFormat(layer.ResourceURL),\n          queryCapabilities: false,\n          removable: true,\n          base: layer.base,\n          ...options,\n        },\n        source: new WMTS({} as any),\n      });\n      // Get WMTS Capabilities and create WMTS source base on it\n      const capOptions = optionsFromCapabilities(this.data.caps, {\n        layer: layer.Identifier,\n        matrixSet:\n          options?.matrixSet ??\n          this.getPreferredMatrixSet(layer.TileMatrixSetLink),\n        format: options?.format ?? this.getPreferredFormat(layer.Format),\n      });\n      // WMTS source for raster tiles layer\n      const wmtsSource = new WMTS(capOptions);\n      // set the data source for raster and vector tile layers\n      wmts.setSource(wmtsSource);\n      layer.base = false;\n      return wmts;\n    } catch (e) {\n      throw new Error(e);\n    }\n  }\n}\n","import {Injectable, inject} from '@angular/core';\nimport {Layer, Tile} from 'ol/layer';\nimport {Source, XYZ} from 'ol/source';\nimport {Options as TileOptions} from 'ol/layer/BaseTile';\n\nimport {\n  CapabilitiesResponseWrapper,\n  HsUrlTypeServiceModel,\n  LayerOptions,\n  UrlDataObject,\n} from 'hslayers-ng/types';\nimport {DuplicateHandling, HsMapService} from 'hslayers-ng/services/map';\nimport {HsAddDataCommonService} from '../common.service';\nimport {HsAddDataService} from '../add-data.service';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsConfig} from 'hslayers-ng/config';\nimport {getFromComposition} from 'hslayers-ng/common/extensions';\n\n@Injectable({providedIn: 'root'})\nexport class HsUrlXyzService implements HsUrlTypeServiceModel {\n  private hsConfig = inject(HsConfig);\n  private hsMapService = inject(HsMapService);\n  private hsLayoutService = inject(HsLayoutService);\n  private hsAddDataService = inject(HsAddDataService);\n  private hsEventBusService = inject(HsEventBusService);\n  private hsAddDataCommonService = inject(HsAddDataCommonService);\n\n  data: UrlDataObject;\n\n  constructor() {\n    this.hsEventBusService.olMapLoads.subscribe((map) => {\n      this.data.map_projection = this.hsMapService.map\n        .getView()\n        .getProjection()\n        .getCode()\n        .toUpperCase();\n    });\n    this.setDataToDefault();\n  }\n\n  /**\n   * Mock capabilities response for XYZ service\n   */\n  async listLayerFromCapabilities(\n    wrapper: CapabilitiesResponseWrapper,\n    layerOptions?: LayerOptions,\n  ): Promise<Layer<Source>[]> {\n    if (!wrapper.response && !wrapper.error) {\n      return;\n    }\n\n    setTimeout(() => {\n      this.hsAddDataCommonService.loadingInfo = false;\n    }, 750);\n    if (wrapper.error) {\n      this.hsAddDataCommonService.throwParsingError(wrapper.response.message);\n      return;\n    }\n\n    if (this.hsAddDataCommonService.layerToSelect) {\n      const collection = this.getLayers(true, false, layerOptions);\n      return collection;\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Get layers based on checked state\n   */\n  getLayers(\n    checkedOnly: boolean,\n    shallow?: boolean,\n    layerOptions?: LayerOptions,\n  ): Layer<Source>[] {\n    const layer = this.getLayer(layerOptions);\n    this.finalizeLayerRetrieval([layer], layerOptions);\n    return [layer];\n  }\n\n  /**\n   * Loop through the list of layers and add them to the map\n   */\n  addLayers(layers: Layer<Source>[]): void {\n    for (const l of layers) {\n      this.hsMapService.resolveDuplicateLayer(\n        l,\n        DuplicateHandling.RemoveOriginal,\n      );\n      this.hsAddDataService.addLayer(l, this.data.add_under);\n    }\n  }\n  /**\n   * Sets data object to default\n   */\n  setDataToDefault(): void {\n    this.data = {\n      add_under: null,\n      map_projection: 'EPSG:3857',\n      visible: true,\n      useTiles: true,\n      apiKey: '',\n      useApiKey: false,\n      apiKeyParam: 'apikey',\n      get_map_url: '',\n      title: 'XYZ Layer',\n      description: '',\n      table: {\n        trackBy: 'Name',\n        nameProperty: 'Title',\n      },\n      minZoom: 0, // OpenLayers default\n      maxZoom: 18, // Reasonable default for most XYZ services\n    };\n  }\n\n  /**\n   * Get layer with XYZ source\n   */\n  getLayer(options: LayerOptions): Layer<Source> {\n    // URL should already be validated by HsXyzGetCapabilitiesService\n    // but add a basic check as fallback\n    if (!this.data.get_map_url) {\n      console.error('No XYZ URL provided');\n      throw new Error('No XYZ URL provided');\n    }\n\n    const title = options?.title || this.data.title;\n\n    // Prepare the URL with API key if needed\n    let tileUrl = this.data.get_map_url;\n    if (this.data.useApiKey && this.data.apiKey && this.data.apiKeyParam) {\n      const separator = tileUrl.includes('?') ? '&' : '?';\n      tileUrl = `${tileUrl}${separator}${this.data.apiKeyParam}=${encodeURIComponent(this.data.apiKey)}`;\n    }\n\n    // Create source options based on official OpenLayers documentation\n    const sourceOptions: any = {\n      url: tileUrl,\n      crossOrigin: 'anonymous',\n      projection: 'EPSG:3857',\n      minZoom: this.data.minZoom || 0,\n      maxZoom: this.data.maxZoom || 18,\n      tileSize: [256, 256], // Standard tile size\n      wrapX: true,\n    };\n\n    const source = new XYZ(sourceOptions);\n\n    const layerOptions: TileOptions<XYZ> = {\n      source,\n      opacity: options?.opacity ?? 1,\n      visible: this.data.visible,\n      //Composition doesn't have minZoom and maxZoom, so we use resolution instead\n      minZoom: options?.minResolution || this.data.minZoom || 0,\n      maxZoom: options?.maxResolution || this.data.maxZoom || 18,\n      className: options?.greyscale ? 'ol-layer hs-greyscale' : 'ol-layer',\n      properties: {\n        ...options,\n        title: title,\n        name: title,\n        removable: true,\n        abstract: this.data.description,\n        path: options?.path || this.data.folder_name,\n        base: options?.base || this.data.base,\n      },\n    };\n\n    const new_layer = new Tile(layerOptions);\n\n    return new_layer;\n  }\n\n  /**\n   * Finalize layer retrieval\n   */\n  finalizeLayerRetrieval(\n    collection: Layer<Source>[],\n    layerOptions?: LayerOptions,\n  ) {\n    this.hsAddDataCommonService.clearParams();\n    this.setDataToDefault();\n    this.hsAddDataCommonService.setPanelToCatalogue();\n\n    if (collection.length == 0) {\n      return;\n    }\n\n    const fromComposition = collection.some((layer) =>\n      getFromComposition(layer),\n    );\n    const shouldOpenLayerManager =\n      !fromComposition ||\n      (fromComposition && this.hsConfig.open_lm_after_comp_loaded);\n    if (shouldOpenLayerManager) {\n      this.hsLayoutService.setMainPanel('layerManager');\n    }\n  }\n}\n","import {inject, Injectable} from '@angular/core';\n\nimport {LayerOptions, WhatToAddDescriptor} from 'hslayers-ng/types';\nimport {HsMapService} from 'hslayers-ng/services/map';\n\nimport {HsAddDataService} from '../add-data.service';\nimport {HsUrlWmsService} from './wms.service';\nimport {HsCommonLaymanLayerService} from 'hslayers-ng/common/layman';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsAddDataWmsLaymanService {\n  hsAddService = inject(HsAddDataService);\n  wmsService = inject(HsUrlWmsService);\n  mapService = inject(HsMapService);\n  hsCommonLaymanLayerService = inject(HsCommonLaymanLayerService);\n\n  /**\n   * Creates a WMS layer from a layman layer descriptor\n   * NOTE: If catalogueService.addLayerToMap is further simplified whatToAdd could be simplified to simple workspace and layer name strings\n   * currently for the sake of simplicity we have duplicate source of necessary inputs in whatToAdd and desc.\n   */\n  async getLayer(whatToAdd: WhatToAddDescriptor, options: LayerOptions) {\n    const desc = await this.hsCommonLaymanLayerService.describeLayer(\n      whatToAdd.name,\n      whatToAdd.workspace,\n      {useCache: true},\n    );\n\n    this.wmsService.data.srs = this.mapService\n      .getMap()\n      .getView()\n      .getProjection()\n      .getCode();\n    this.wmsService.data.query_format = 'application/json';\n    this.wmsService.data.get_map_url = whatToAdd.link;\n    this.wmsService.data.tile_size = 256;\n    this.wmsService.data.useTiles = options.useTiles;\n    this.wmsService.data.version = '1.3.0';\n    this.wmsService.data.visible = true;\n    this.wmsService.data.base = false;\n    this.wmsService.data.group = false;\n\n    const layer = this.wmsService.getLayer(\n      {\n        //l_<uuid>\n        Name: desc.wms.name,\n        title: desc.title,\n        link: desc.wms.url,\n        //TODO:\n        MetadataURL: undefined,\n        BoundingBox: [\n          {\n            crs: 'EPSG:3857',\n            extent: desc.bounding_box,\n          },\n        ],\n      },\n      {\n        ...options,\n        layerName: desc.title.replace(/\\//g, '&#47;'),\n        // path: 'WMS',\n        imageFormat: 'image/png',\n        queryFormat: 'application/json',\n        tileSize: 256,\n        crs: this.mapService.getMap().getView().getProjection().getCode(),\n        subLayers: '',\n        queryable: true,\n        workspace: desc.workspace,\n      },\n    );\n    return [layer];\n  }\n}\n","import {inject, Injectable} from '@angular/core';\n\nimport {LayerOptions, WhatToAddDescriptor} from 'hslayers-ng/types';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsWfsGetCapabilitiesService} from 'hslayers-ng/services/get-capabilities';\nimport {setQueryCapabilities} from 'hslayers-ng/common/extensions';\n\nimport {HsUrlWfsService} from './wfs.service';\nimport {HsCommonLaymanLayerService} from 'hslayers-ng/common/layman';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsAddDataWfsLaymanService {\n  wfsService = inject(HsUrlWfsService);\n  mapService = inject(HsMapService);\n  hsWfsGetCapabilitiesService = inject(HsWfsGetCapabilitiesService);\n  hsCommonLaymanLayerService = inject(HsCommonLaymanLayerService);\n  /**\n   * Creates a WMS layer from a layman layer descriptor\n   */\n  async getLayer(whatToAdd: WhatToAddDescriptor, options: LayerOptions) {\n    const desc = await this.hsCommonLaymanLayerService.describeLayer(\n      whatToAdd.name,\n      whatToAdd.workspace,\n      {useCache: true},\n    );\n\n    const srs = this.mapService.getMap().getView().getProjection().getCode();\n    this.wfsService.data.srs = srs;\n\n    this.hsWfsGetCapabilitiesService.service_url.set(desc.wfs.url);\n    this.wfsService.data.version = '2.0.0';\n    this.wfsService.data.output_format = 'GML3';\n    this.wfsService.data.visible = true;\n    this.wfsService.data.base = false;\n    this.wfsService.data.group = false;\n\n    const layer = this.wfsService.getLayer(\n      {\n        //l_<uuid> stored in layer prop instead of layer name\n        Name: desc.wfs.name,\n        Title: desc.title,\n        _attributes: {\n          namespace: 'http://layman',\n        },\n      },\n      {\n        ...options,\n        layerName: desc.wfs.name.includes('layman')\n          ? desc.wfs.name\n          : `layman:${desc.wfs.name}`,\n        crs: srs,\n        queryable: true,\n      },\n    );\n    setQueryCapabilities(layer, false);\n    return [layer];\n  }\n}\n","import {inject, Injectable} from '@angular/core';\n\nimport {Layer} from 'ol/layer';\nimport {Source} from 'ol/source';\n\nimport {HsAddDataCommonService} from '../common.service';\nimport {HsAddDataService} from '../add-data.service';\nimport {HsAddDataUrlService} from './add-data-url.service';\nimport {HsUrlArcGisService} from './arcgis.service';\nimport {HsUrlWfsService} from './wfs.service';\nimport {HsUrlWmsService} from './wms.service';\nimport {HsUrlWmtsService} from './wmts.service';\nimport {HsUrlXyzService} from './xyz.service';\n\nimport {\n  HsArcgisGetCapabilitiesService,\n  HsWfsGetCapabilitiesService,\n  HsWmsGetCapabilitiesService,\n  HsWmtsGetCapabilitiesService,\n  IGetCapabilities,\n  HsXyzGetCapabilitiesService,\n} from 'hslayers-ng/services/get-capabilities';\nimport {HsLogService} from 'hslayers-ng/services/log';\n\nimport {\n  AddDataUrlType,\n  LayerOptions,\n  HsUrlTypeServiceModel,\n  LayerConnection,\n  OwsConnection,\n  UrlDataObject,\n} from 'hslayers-ng/types';\nimport {HsHistoryListService} from 'hslayers-ng/common/history-list';\nimport {HsAddDataWmsLaymanService} from './wms-layman.service';\nimport {HsAddDataWfsLaymanService} from './wfs-layman.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsAddDataOwsService {\n  hsAddDataService = inject(HsAddDataService);\n  hsAddDataCommonService = inject(HsAddDataCommonService);\n  hsAddDataUrlService = inject(HsAddDataUrlService);\n  hsHistoryListService = inject(HsHistoryListService);\n  hsLog = inject(HsLogService);\n  hsArcgisGetCapabilitiesService = inject(HsArcgisGetCapabilitiesService);\n  hsUrlArcGisService = inject(HsUrlArcGisService);\n  hsUrlWfsService = inject(HsUrlWfsService);\n  hsWfsGetCapabilitiesService = inject(HsWfsGetCapabilitiesService);\n  hsUrlWmsService = inject(HsUrlWmsService);\n  hsWmsGetCapabilitiesService = inject(HsWmsGetCapabilitiesService);\n  hsWmtsGetCapabilitiesService = inject(HsWmtsGetCapabilitiesService);\n  hsUrlWmtsService = inject(HsUrlWmtsService);\n  hsUrlXyzService = inject(HsUrlXyzService);\n  hsXyzGetCapabilitiesService = inject(HsXyzGetCapabilitiesService);\n  private hsAddDataWmsLaymanService = inject(HsAddDataWmsLaymanService);\n  private hsAddDataWfsLaymanService = inject(HsAddDataWfsLaymanService);\n\n  typeService: HsUrlTypeServiceModel;\n  typeCapabilitiesService: IGetCapabilities;\n\n  constructor() {\n    this.hsAddDataCommonService.serviceLayersCalled.subscribe((url) => {\n      this.setUrlAndConnect({uri: url});\n    });\n  }\n\n  async connect(options?: LayerConnection): Promise<Layer<Source>[]> {\n    const typeBeingSelected = this.hsAddDataUrlService.typeSelected;\n    await this.setTypeServices();\n\n    const url = this.hsAddDataCommonService.url;\n    if (!url || url === '') {\n      return;\n    }\n    this.hsAddDataUrlService.addingAllowed = false;\n    if (this.hsAddDataUrlService.typeSelected === 'arcgis') {\n      if (!this.hsUrlArcGisService.isValidService(url)) {\n        this.hsAddDataCommonService.throwParsingError(\n          'GPServerServicesAreNotSupported',\n        );\n        return;\n      }\n      this.typeService.data.get_map_url = url;\n      this.hsAddDataUrlService.addingAllowed = true;\n    }\n    if (this.hsAddDataUrlService.typeSelected === 'xyz') {\n      this.typeService.data.get_map_url = url;\n      this.hsAddDataUrlService.addingAllowed = true;\n    }\n    this.hsHistoryListService.addSourceHistory(\n      this.hsAddDataUrlService.typeSelected,\n      url,\n    );\n    Object.assign(this.hsAddDataCommonService, {\n      loadingInfo: true,\n      showDetails: true,\n    });\n\n    let response: Layer<Source>[] = [];\n\n    this.overwriteServiceDefaults(options?.connectOptions);\n    if (options?.connectOptions?.laymanLayer) {\n      /**\n       * Create Layman layer which circumvents getCapabilities request\n       */\n      const service =\n        this.hsAddDataUrlService.typeSelected === 'wms'\n          ? this.hsAddDataWmsLaymanService\n          : this.hsAddDataWfsLaymanService;\n      const {laymanLayer, ...rest} = options.connectOptions;\n      response = await service.getLayer(laymanLayer, {\n        ...rest,\n        ...options?.layerOptions,\n      });\n      this.typeService.finalizeLayerRetrieval(response, options?.layerOptions);\n    } else {\n      /**\n       * Create common OWS layer based on getCapabilities request\n       */\n      const wrapper = await this.typeCapabilitiesService.request(\n        url,\n        options?.owrCache,\n      );\n      if (\n        typeof wrapper.response === 'string' &&\n        wrapper.response?.includes('Unsuccessful OAuth2')\n      ) {\n        this.hsAddDataCommonService.throwParsingError(wrapper.response);\n        return [];\n      }\n      response = await this.typeService.listLayerFromCapabilities(\n        wrapper,\n        options?.layerOptions,\n      );\n    }\n\n    if (!options?.getOnly) {\n      if (response?.length > 0) {\n        /**\n         * Add created layers to map\n         */\n        this.typeService.addLayers(response);\n      }\n      //Note:\n      //!response condition would result in infinite connectToOWS calls\n      //response?.length by design also checks for hsAddDataCommonService.layerToSelect\n      if (response?.length == 0) {\n        this.hsLog.log('Empty response when layer selected');\n        this.hsAddDataService.selectType('url');\n        /**\n         * Open as a service eg. switch to URL tab\n         */\n        await this.connectToOWS({\n          type: typeBeingSelected,\n          uri: url,\n          layer: undefined,\n        });\n      }\n\n      if (this.hsUrlArcGisService.isImageService()) {\n        const layers = await this.hsUrlArcGisService.getLayers();\n        this.hsUrlArcGisService.addLayers(layers);\n      }\n    }\n\n    return response;\n  }\n\n  /**\n   * Overwrites service defaults with layerOptions\n   * @param layerOptions - Layer options to overwrite\n   */\n  overwriteServiceDefaults(layerOptions: LayerOptions): void {\n    for (const key in layerOptions) {\n      if (Object.hasOwn(this.typeService.data, key)) {\n        this.typeService.data[key] = layerOptions[key];\n      }\n    }\n  }\n\n  /**\n   * Connect to service of specified Url\n   * @param params - Connection params\n   */\n  async setUrlAndConnect(params: OwsConnection): Promise<Layer<Source>[]> {\n    this.hsAddDataCommonService.layerToSelect = params.layer;\n    this.hsAddDataCommonService.updateUrl(params.uri);\n    return await this.connect({\n      owrCache: params.owrCache,\n      getOnly: params.getOnly,\n      layerOptions: params.layerOptions,\n      connectOptions: params.connectOptions,\n    });\n  }\n\n  changed(data: UrlDataObject): void {\n    this.hsAddDataUrlService.searchForChecked(data.layers);\n  }\n\n  /**\n   * replaces `ows.${type}_connecting`\n   */\n  async connectToOWS(params: OwsConnection): Promise<Layer<Source>[]> {\n    this.hsAddDataUrlService.typeSelected = params.type as AddDataUrlType;\n    return await this.setUrlAndConnect(params);\n  }\n\n  async setTypeServices(): Promise<void> {\n    switch (this.hsAddDataUrlService.typeSelected) {\n      case 'wmts':\n        this.typeService = this.hsUrlWmtsService;\n        this.typeCapabilitiesService = this.hsWmtsGetCapabilitiesService;\n        return;\n      case 'wms':\n        this.typeService = this.hsUrlWmsService;\n        this.typeCapabilitiesService = this.hsWmsGetCapabilitiesService;\n        return;\n      case 'wfs':\n        this.typeService = this.hsUrlWfsService;\n        this.typeCapabilitiesService = this.hsWfsGetCapabilitiesService;\n        return;\n      case 'arcgis':\n        this.typeService = this.hsUrlArcGisService;\n        this.typeCapabilitiesService = this.hsArcgisGetCapabilitiesService;\n        return;\n      case 'xyz':\n        this.typeService = this.hsUrlXyzService;\n        this.typeCapabilitiesService = this.hsXyzGetCapabilitiesService;\n        return;\n      default:\n        return;\n    }\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport {Subject} from 'rxjs';\n\nimport {HsAddDataOwsService} from './url/add-data-ows.service';\nimport {HsAddDataService} from './add-data.service';\nimport {HsAddDataUrlService} from './url/add-data-url.service';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsLaymanService} from 'hslayers-ng/services/save-map';\nimport {HsLogService} from 'hslayers-ng/services/log';\n\nimport {\n  HsCommonLaymanLayerService,\n  HsCommonLaymanService,\n  PostPatchLayerResponse,\n  getLaymanFriendlyLayerName,\n  layerParamPendingOrStarting,\n} from 'hslayers-ng/common/layman';\nimport {\n  HsDialogContainerService,\n  HsLayerOverwriteDialogComponent,\n} from 'hslayers-ng/common/dialogs';\nimport {HsProxyService} from 'hslayers-ng/services/utils';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {\n  AsyncUpload,\n  FileDataObject,\n  FileFormData,\n  HsLaymanLayerDescriptor,\n  OverwriteResponse,\n  VectorDataObject,\n} from 'hslayers-ng/types';\n\nexport type errorMessageOptions = {\n  message?: string;\n  header?: string;\n  details?: any;\n};\n\nexport const FILE_UPLOAD_SIZE_LIMIT = 10485760 as const; //10 * 1024 * 1024 = 10MB\n\nexport class HsAddDataCommonFileServiceParams {\n  readingData = false;\n  loadingToLayman = false;\n  asyncLoading = false;\n  /**\n   * True when layer added successfully\n   */\n  layerAddedAsService: Subject<boolean> = new Subject();\n  dataObjectChanged: Subject<FileDataObject> = new Subject();\n  fileUploadErrorHeader = 'ADDLAYERS.couldNotUploadSelectedFile';\n}\n\n@Injectable({providedIn: 'root'})\nexport class HsAddDataCommonFileService extends HsAddDataCommonFileServiceParams {\n  private hsAddDataOwsService = inject(HsAddDataOwsService);\n  private hsAddDataUrlService = inject(HsAddDataUrlService);\n  private hsAddDataService = inject(HsAddDataService);\n  private hsDialogContainerService = inject(HsDialogContainerService);\n  private hsLanguageService = inject(HsLanguageService);\n  private hsLaymanService = inject(HsLaymanService);\n  private hsLog = inject(HsLogService);\n  private hsToastService = inject(HsToastService);\n  private hsCommonLaymanService = inject(HsCommonLaymanService);\n  private hsCommonLaymanLayerService = inject(HsCommonLaymanLayerService);\n  private hsProxyService = inject(HsProxyService);\n\n  /**\n   * Clear service param values to default values\n   */\n  clearParams(): void {\n    this.asyncLoading = false;\n    this.loadingToLayman = false;\n    this.hsLaymanService.totalProgress = 0;\n  }\n\n  /**\n   * Check if provided URL exists and is obtainable\n   * @param url - Provided URL\n   */\n  async isUrlObtainable(url: string): Promise<boolean> {\n    if (!url || url === '') {\n      return;\n    }\n    url = this.hsProxyService.proxify(url);\n    try {\n      const response = await fetch(url, {\n        method: 'GET',\n      });\n      const contentType = response.headers.get('Content-Type');\n      if (response.status === 200) {\n        if (contentType.includes('text/html')) {\n          this.hsToastService.createToastPopupMessage(\n            'ADDLAYERS.capabilitiesParsingProblem',\n            'ERROR.noValidData',\n            {serviceCalledFrom: 'HsAddDataCommonFileService'},\n          );\n          return;\n        }\n        return true;\n      }\n      this.hsToastService.createToastPopupMessage(\n        'ADDLAYERS.capabilitiesParsingProblem',\n        response.statusText,\n        {serviceCalledFrom: 'HsAddDataCommonFileService'},\n      );\n      return;\n    } catch (e) {\n      this.hsToastService.createToastPopupMessage(\n        'ADDLAYERS.capabilitiesParsingProblem',\n        e.message,\n        {serviceCalledFrom: 'HsAddDataCommonFileService'},\n      );\n      return;\n    }\n  }\n\n  /**\n   * Get tooltip translated text\n   * @param data - File data object provided\n   * @returns Translated string\n   */\n  getToolTipText(data: FileDataObject): string {\n    if (!data.srs) {\n      return this.hsLanguageService.getTranslationIgnoreNonExisting(\n        'ADDLAYERS',\n        'SRSRequired',\n        undefined,\n      );\n    }\n    return this.hsLanguageService.getTranslationIgnoreNonExisting(\n      'DRAW.drawToolbar',\n      'addLayer',\n      undefined,\n    );\n  }\n\n  /**\n   * Validate files before upload\n   * @param files - Files provided for upload\n   * @returns True, if files are valid for upload, false otherwise\n   */\n  filesValid(files: File[]): boolean {\n    let isValid = true;\n    if (\n      files.find(\n        (f) => f.name.endsWith('shp') && f.size > FILE_UPLOAD_SIZE_LIMIT,\n      )\n    ) {\n      this.hsToastService.createToastPopupMessage(\n        'ADDLAYERS.SHP.exceedingSize',\n        'ADDLAYERS.SHP.considerUsingZip',\n        {\n          serviceCalledFrom: 'HsAddDataCommonFileService',\n          type: 'warning',\n        },\n      );\n    }\n    const zipFilesCount = files.filter((file) => this.isZip(file.type)).length;\n    if (zipFilesCount === 1 && files.length > 1) {\n      this.displayErrorMessage({\n        message: 'ADDDATA.FILE.zipFileCannotBeUploaded',\n      });\n      isValid = false;\n    }\n    if (zipFilesCount > 1) {\n      isValid = false;\n      this.displayErrorMessage({message: 'ADDDATA.FILE.onlyOneZipFileCan'});\n    }\n    return isValid;\n  }\n\n  /**\n   * Check if file is a zip archive\n   * @param type - Uploaded file type\n   * @returns True, if upload file is a zip file, false otherwise\n   */\n  isZip(type: string): boolean {\n    return [\n      'application/zip',\n      'application/x-zip',\n      'application/x-zip-compressed',\n    ].includes(type);\n  }\n\n  /**\n   * Check if file is a geotiff image\n   * @param type - Uploaded file type\n   * @returns True, if upload file is a geotiff image, false otherwise\n   */\n  isGeotiff(type: string): boolean {\n    return ['image/tiff', 'image/tif', 'image/gtiff'].includes(type);\n  }\n\n  /**\n   * Check if file is a jp2 image\n   * @param type - Uploaded file type\n   * @returns True, if upload file is a jp2 image, false otherwise\n   */\n  isJp2(type: string): boolean {\n    return ['image/jp2'].includes(type);\n  }\n\n  /**\n   * Load non-wms OWS data and create layer\n   * @param endpoint - Layman endpoint description (url, name, user)\n   * @param files - Array of files\n   * @param name - Name of new layer\n   * @param title - Title of new layer\n   * @param abstract - Abstract of new layer\n   * @param srs - EPSG code of selected projection (eg. \"EPSG:4326\")\n   * @param sld - Array of sld files\n   * @param access_rights - User access rights for the new layer,\n   * @param overwrite - (Optional) Overwrite existing layman layer\n   */\n  async loadNonWmsLayer(\n    formDataParams: FileFormData,\n    overwrite?: boolean,\n  ): Promise<PostPatchLayerResponse> {\n    try {\n      const formData = await this.constructFormData(formDataParams);\n      const asyncUpload: AsyncUpload =\n        this.hsLaymanService.prepareAsyncUpload(formData);\n      this.asyncLoading = asyncUpload.async;\n\n      const res = await this.hsLaymanService.tryLoadLayer(\n        formData,\n        asyncUpload,\n        formDataParams.name,\n        overwrite,\n      );\n      return res;\n    } catch (err) {\n      this.readingData = false;\n      throw err;\n    }\n  }\n\n  /**\n   * Try to find layer in Layman's database using Layman friendly layer name\n   * @param name - Layman friendly layer name to search by\n   */\n  async lookupLaymanLayer(name: string): Promise<boolean> {\n    const friendlyName = getLaymanFriendlyLayerName(name);\n    let descriptor: HsLaymanLayerDescriptor;\n    if (this.isAuthenticated()) {\n      try {\n        descriptor = await this.hsCommonLaymanLayerService.describeLayer(\n          name,\n          this.hsCommonLaymanService.user(),\n          {\n            ignoreStatus: true,\n          },\n        );\n      } catch (error) {\n        this.hsLog.error(error);\n        throw error;\n      }\n    }\n    if (!descriptor || descriptor?.name != friendlyName) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Convert value from one range to another\n   * @param value - value to convert\n   * @param oldRange - min, max of values range\n   * @param newRange - min, max of values range. Default to 0 - 1\n   */\n  convertRange(\n    value: number,\n    oldRange: {min: number; max: number},\n    newRange = {min: 0, max: 1},\n  ): number {\n    return (\n      ((value - oldRange.min) * (newRange.max - newRange.min)) /\n        (oldRange.max - oldRange.min) +\n      newRange.min\n    );\n  }\n\n  /**\n   * Calculates progress of individual file being zipped by transforming value into 0 - 1 scale\n   */\n  calculateFileProgress(value, nrOfFiles): number {\n    const unit = 100 / nrOfFiles;\n    const breakpoints = new Array(nrOfFiles).fill(unit);\n    //Get breakpoints eg. [33,66,99] for nrOfFiles = 3\n    for (const [index, item] of breakpoints.entries()) {\n      if (breakpoints[index - 1]) {\n        breakpoints[index] = item + breakpoints[index - 1];\n      }\n    }\n    const rangeMaxIdx = breakpoints.findIndex((b) => value < b);\n    const newRangeMax = breakpoints[rangeMaxIdx];\n    const newRangeMin = breakpoints[rangeMaxIdx - 1]\n      ? breakpoints[rangeMaxIdx - 1]\n      : 0;\n\n    return this.convertRange(value, {min: newRangeMin, max: newRangeMax});\n  }\n\n  /**\n   * Construct a set of key/value pairs from, that can be easily sent using HTTP\n   * @param files - Array of files\n   * @param name - Name of new layer\n   * @param title - Title of new layer\n   * @param abstract - Abstract of new layer\n   * @param srs - EPSG code of selected projection (eg. \"EPSG:4326\")\n   * @param sld - Array of sld files\n   * @param access_rights - User access rights for the new layer,\n   * @returns FormData object for HTTP request\n   */\n  async constructFormData(formDataParams: FileFormData): Promise<FormData> {\n    this.readingData = true;\n    const {files, name, abstract, srs, access_rights, timeRegex} =\n      formDataParams;\n    const sld = formDataParams.serializedStyle;\n    const formData = new FormData();\n    let zipFile;\n    const JSZip = (await import('jszip')).default;\n    const zip = new JSZip();\n    if (this.isZip(files[0].type)) {\n      zipFile = new Blob([files[0].content], {type: files[0].type});\n    } else {\n      files.forEach((file) => {\n        zip.file(file.name, file.content);\n      });\n      zipFile = await zip.generateAsync(\n        {type: 'blob', streamFiles: true},\n        (metadata) => {\n          setTimeout(() => {\n            this.hsLaymanService.totalProgress = this.calculateFileProgress(\n              metadata.percent,\n              files.length,\n            );\n          }, 0);\n        },\n      );\n    }\n    formData.append('file', zipFile, files[0].name.split('.')[0] + '.zip');\n    if (sld) {\n      formData.append(\n        'style',\n        new Blob([sld.content], {\n          type: sld.type?.length > 0 ? sld.type : 'application/octet-stream',\n        }),\n        sld.name,\n      );\n    }\n    if (timeRegex) {\n      formData.append('time_regex', timeRegex);\n    }\n    formData.append('name', name);\n    const title = formDataParams.title == '' ? name : formDataParams.title;\n    formData.append('title', title);\n    formData.append('abstract', abstract);\n    formData.append('crs', srs);\n\n    const rights =\n      this.hsLaymanService.parseAccessRightsForLayman(access_rights);\n\n    formData.append('access_rights.write', rights.write);\n    formData.append('access_rights.read', rights.read);\n    this.readingData = false;\n    return formData;\n  }\n\n  /**\n   * Handler for button click to send file to layman and wait for\n   * answer with wms service url to add to map\n   * @param data - Current data object for upload\n   * @param options - (Optional) overwrite: Overwrite existing layman layer, repetive: Called for more than one time\n   */\n  async addAsService(\n    data: FileDataObject,\n    options?: {\n      overwrite?: boolean;\n      repetive?: boolean;\n    },\n  ): Promise<void> {\n    const endpoint = this.hsCommonLaymanService.layman();\n    let exists: boolean;\n    try {\n      this.loadingToLayman = true;\n      if (!endpoint) {\n        throw new Error('No endpoint available');\n      }\n      if (!this.isSRSSupported(data)) {\n        throw new Error(\n          this.hsLanguageService.getTranslationIgnoreNonExisting(\n            'ADDLAYERS.ERROR',\n            'srsNotSupported',\n            undefined,\n          ),\n        );\n      }\n      if (!options?.overwrite) {\n        exists = await this.lookupLaymanLayer(data.name);\n      }\n      if (exists) {\n        this.callOverwriteDialog(data, options?.repetive);\n      } else {\n        const response = await this.loadNonWmsLayer(\n          {\n            files: data.files,\n            name: data.name,\n            title: data.title,\n            abstract: data.abstract,\n            srs: data.srs,\n            serializedStyle: data.serializedStyle,\n            access_rights: data.access_rights,\n            timeRegex: data.timeRegex,\n          },\n          options?.overwrite,\n        );\n        if (response?.code) {\n          await this.loadNonWmsError(response, data, options?.repetive);\n        } else {\n          await this.loadNonWmsSuccess(response, data);\n        }\n      }\n    } catch (err) {\n      this.displayErrorMessage({message: err.message, details: null});\n    }\n  }\n\n  /**\n   * Load overwrite layer dialog\n   * @param data - Current data object for upload\n   */\n  async loadOverwriteLayerDialog(\n    data: FileDataObject | VectorDataObject,\n    repetive?: boolean,\n  ): Promise<OverwriteResponse> {\n    const dialogRef = this.hsDialogContainerService.create(\n      HsLayerOverwriteDialogComponent,\n      {\n        dataObj: data,\n        repetive,\n      },\n    );\n    return await dialogRef.waitResult();\n  }\n\n  /**\n   * Call for overwrite dialog\n   * @param data - Current data object to load\n   * @param repetive - Called for more the one time\n   */\n  async callOverwriteDialog(\n    data: FileDataObject,\n    repetive?: boolean,\n  ): Promise<OverwriteResponse> {\n    const result = await this.loadOverwriteLayerDialog(data, repetive);\n    switch (result) {\n      case OverwriteResponse.add:\n        this.addAsService(data, {repetive: true});\n        break;\n      case OverwriteResponse.overwrite:\n        this.addAsService(data, {overwrite: true});\n        break;\n      case OverwriteResponse.cancel:\n      default:\n        this.loadingToLayman = false;\n        return;\n    }\n  }\n\n  /**\n   * Process error server response after trying to load non-wms layer\n   * @param response - Http post/past response after loading layer to Layman\n   * @param data - Current data object to load\n   */\n  async loadNonWmsError(\n    response: PostPatchLayerResponse,\n    data: FileDataObject,\n    repetive?: boolean,\n  ): Promise<void> {\n    if (response.code == 17) {\n      this.callOverwriteDialog(data, repetive);\n    } else {\n      this.handleLaymanError(response);\n    }\n  }\n\n  /**\n   * Process success server response after trying to load non-wms layer\n   * @param response - Http post/past response after loading layer to Layman\n   */\n  handleLaymanError(response: PostPatchLayerResponse): void {\n    const errorMessage =\n      (response?.error?.message ?? response?.message == 'Wrong parameter value')\n        ? `${response?.message} : ${response?.detail.parameter}`\n        : response?.message;\n    const errorDetails = response?.detail?.missing_extensions\n      ? Object.values(response.detail?.missing_extensions)\n      : [];\n    this.displayErrorMessage({message: errorMessage, details: errorDetails});\n  }\n  /**\n   * Process success server response after trying to load non-wms layer\n   * @param response - HTTP POST/PATCH response after loading layer to Layman\n   * @param data - Current data object to load\n   */\n  async loadNonWmsSuccess(\n    response: PostPatchLayerResponse,\n    data: FileDataObject,\n  ): Promise<void> {\n    data.name = response.name; //Name translated to Layman-safe name\n    const descriptor = await this.describeNewLayer(response.name, [\n      'wms',\n      'style',\n    ]);\n    if (descriptor?.file.error) {\n      const error = descriptor.file.error;\n      const msg = error?.detail?.message ?? error.message;\n      this.hsToastService.createToastPopupMessage(\n        this.hsLanguageService.getTranslation(\n          'ADDLAYERS.ERROR.someErrorHappened',\n          undefined,\n        ),\n        this.hsLanguageService.getTranslationIgnoreNonExisting(\n          'LAYMAN.ERROR',\n          msg ?? descriptor.file.error.code.toString(),\n          undefined,\n        ),\n        {\n          serviceCalledFrom: 'HsAddDataCommonFileService',\n          disableLocalization: true,\n        },\n      );\n      this.layerAddedAsService.next(false);\n      return;\n    }\n    this.hsLaymanService.totalProgress = 0;\n    this.hsAddDataService.selectType('url');\n    this.layerAddedAsService.next(true);\n    const serviceType = data.loadAsType ?? 'wms';\n    await this.hsAddDataOwsService.connectToOWS({\n      type: serviceType,\n      uri: descriptor[serviceType].url,\n      layer:\n        serviceType === 'wms'\n          ? data.name\n          : `${descriptor.workspace}:${data.name}`,\n      owrCache: true,\n      layerOptions: {\n        style: data.serializedStyle\n          ? await this.hsCommonLaymanService.getStyleFromUrl(\n              descriptor.style.url,\n            )\n          : undefined,\n      },\n      //Provide layman layer descriptor to opt out of getCapabilities usage in connectToOWS\n      connectOptions: {\n        laymanLayer: {\n          layer: `l_${descriptor.uuid}`,\n          name: data.name,\n          title: data.title,\n          link: descriptor[serviceType].url,\n          type: serviceType,\n          projection: data.srs,\n          extent: descriptor.bounding_box,\n          workspace: descriptor.workspace,\n        },\n        group: false,\n      },\n    });\n  }\n\n  /**\n   * @param endpoint - Selected endpoint (should be Layman)\n   * @param layerName - Name of the layer to describe\n   * @param pendingParam - (Optional) Param of descriptor that needs to pass PENDING and STARTING status\n   * before returning. By default set to 'wms'\n   * @returns Description of Layman layer\n   */\n  async describeNewLayer(\n    layerName: string,\n    pendingParams: string[] = ['wms'],\n  ): Promise<HsLaymanLayerDescriptor> {\n    try {\n      const descriptor = await this.hsCommonLaymanLayerService.describeLayer(\n        layerName,\n        this.hsCommonLaymanService.user(),\n      );\n      if (\n        pendingParams.some((param) =>\n          layerParamPendingOrStarting(descriptor, param),\n        )\n      ) {\n        return new Promise((resolve) => {\n          setTimeout(() => {\n            resolve(this.describeNewLayer(layerName, pendingParams));\n          }, 2000);\n        });\n      }\n      return descriptor;\n    } catch (ex) {\n      this.hsLog.error(ex);\n      throw ex;\n    }\n  }\n\n  /**\n   * Display error message toast, when called and broadcast event about a failed attempt to load wms layer\n   * @param _options - Error message options: message, header or details\n   */\n  displayErrorMessage(_options: errorMessageOptions = {}): void {\n    this.hsToastService.createToastPopupMessage(\n      _options?.header ?? this.fileUploadErrorHeader,\n      _options.message,\n      {\n        serviceCalledFrom: 'HsAddDataCommonFileService',\n        details: _options?.details,\n      },\n    );\n    this.layerAddedAsService.next(false);\n  }\n\n  /**\n   * Check if srs from data is supported by Layman\n   * @param data - Current data object to load\n   * @returns True, if srs is supported, false otherwise\n   */\n  isSRSSupported(data: FileDataObject): boolean {\n    return this.hsLaymanService\n      .supportedCRRList()\n      .some((epsg) => data.srs.endsWith(epsg));\n  }\n\n  /**\n   * Check if user is authorized as Layman user\n   * @returns True, if user is authorized, false otherwise\n   */\n  isAuthenticated(): boolean {\n    return this.hsCommonLaymanService.isAuthenticated();\n  }\n\n  /**\n   * Set data object name based on uploaded files\n   * @param data - Current data object to load\n   */\n  setDataName(data: FileDataObject): void {\n    data.name = data.files[0].name.slice(0, -4);\n    data.title = data.name;\n    this.dataObjectChanged.next(data);\n  }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable, inject} from '@angular/core';\n\nimport {Feature} from 'ol';\nimport {Geometry} from 'ol/geom';\nimport {Observable, catchError, map, of, timeout} from 'rxjs';\nimport {transformExtent} from 'ol/proj';\n\nimport {\n  EndpointErrorHandler,\n  EndpointErrorHandling,\n  HsEndpoint,\n  isErrorHandlerFunction,\n  HsAddDataLaymanLayerDescriptor,\n  HsLaymanGetLayer,\n} from 'hslayers-ng/types';\nimport {\n  HsCommonLaymanLayerService,\n  HsCommonLaymanService,\n} from 'hslayers-ng/common/layman';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {addExtentFeature} from 'hslayers-ng/services/utils';\n\n/**\n * Layman GET /layers response wrapper with custom HSLayers properties\n */\nexport interface HsLaymanGetLayersWrapper {\n  endpoint?: HsEndpoint;\n  extentFeatureCreated?: (feature: Feature<Geometry>) => void;\n  matched?: number;\n  datasets?: HsLaymanGetLayer[];\n}\n\n@Injectable({providedIn: 'root'})\nexport class HsLaymanBrowserService {\n  private http = inject(HttpClient);\n  private log = inject(HsLogService);\n  hsCommonLaymanService = inject(HsCommonLaymanService);\n  private hsCommonLaymanLayerService = inject(HsCommonLaymanLayerService);\n  hsToastService = inject(HsToastService);\n  hsLanguageService = inject(HsLanguageService);\n  hsMapService = inject(HsMapService);\n\n  httpCall;\n\n  /**\n   * Loads datasets metadata from Layman\n   * @param endpoint - Configuration of selected datasource (from app config)\n   * extent feature is created. Has one parameter: feature\n   * @param data - Query parameters\n   */\n  queryCatalog(\n    endpoint: HsEndpoint,\n    data?: {\n      onlyMine: boolean;\n      limit?: string | number;\n      query: any;\n      filterByExtent?: boolean;\n    },\n    extentFeatureCreated?: (feature: Feature<Geometry>) => void,\n  ): Observable<any> {\n    const loggedIn = this.hsCommonLaymanService.isAuthenticated();\n    const workspace = this.hsCommonLaymanService.user();\n    const withPermissionOrMine = data?.onlyMine\n      ? loggedIn\n        ? `workspaces/${workspace}/`\n        : ''\n      : '';\n    const url = `${endpoint.url}/rest/${withPermissionOrMine}layers`;\n    endpoint.datasourcePaging.loaded = false;\n\n    let query, bbox, sortBy, params;\n\n    if (data) {\n      query = data.query;\n      sortBy = query.sortby == 'date' ? 'last_change' : query.sortby;\n\n      const b = transformExtent(\n        this.hsMapService\n          .getMap()\n          .getView()\n          .calculateExtent(this.hsMapService.getMap().getSize()),\n        this.hsMapService.getMap().getView().getProjection(),\n        'EPSG:3857',\n      );\n      bbox = data.filterByExtent ? b.join(',') : '';\n\n      params = {\n        //Draw layer limit independent on datasourcePaging\n        limit: `${data.limit ?? endpoint.datasourcePaging.limit}`,\n        offset: `${endpoint.datasourcePaging.start}`,\n        full_text_filter: `${query?.textFilter ?? ''}`,\n        order_by: `${sortBy ?? 'last_change'}`,\n      };\n      //Use bbox_filter only if its defined to prevent\n      //Wrong parameter value error\n      if (bbox) {\n        params['bbox_filter'] = bbox;\n      }\n    }\n\n    endpoint.httpCall = this.http\n      .get<HsLaymanGetLayer[]>(url, {\n        observe: 'response',\n        withCredentials: loggedIn,\n        responseType: 'json',\n        params,\n      })\n      .pipe(\n        timeout(5000),\n        map((x) => {\n          const data: HsLaymanGetLayersWrapper = {};\n          if (Array.isArray(x.body)) {\n            data.datasets = x.body;\n            data.endpoint = endpoint;\n            data.extentFeatureCreated = extentFeatureCreated;\n            data.matched = x.headers.get('x-total-count')\n              ? parseInt(x.headers.get('x-total-count'))\n              : x.body.length;\n            this.datasetsReceived(data);\n          } else {\n            this.hsCommonLaymanService.displayLaymanError(\n              endpoint,\n              'ADDLAYERS.ERROR.errorWhileRequestingLayers',\n              x.body as any,\n            );\n          }\n          return x.body;\n        }),\n        catchError(async (e) => {\n          if (isErrorHandlerFunction(endpoint.onError?.compositionLoad)) {\n            (<EndpointErrorHandler>endpoint.onError?.compositionLoad).handle(\n              endpoint,\n              e,\n            );\n            return of(e);\n          }\n          switch (endpoint.onError?.compositionLoad) {\n            case EndpointErrorHandling.ignore:\n              break;\n            case EndpointErrorHandling.toast:\n            default:\n              this.hsToastService.createToastPopupMessage(\n                await this.hsLanguageService.awaitTranslation(\n                  'ADDLAYERS.ERROR.errorWhileRequestingLayers',\n                  undefined,\n                ),\n                endpoint.title +\n                  ': ' +\n                  this.hsLanguageService.getTranslationIgnoreNonExisting(\n                    'ERRORMESSAGES',\n                    e.status ? e.status.toString() : e.message,\n                    {url},\n                  ),\n                {\n                  disableLocalization: true,\n                  serviceCalledFrom: 'HsLaymanBrowserService',\n                },\n              );\n          }\n          endpoint.datasourcePaging.loaded = true;\n          return of(e);\n        }),\n      );\n    return endpoint.httpCall;\n  }\n\n  /**\n   * (PRIVATE) Callback for catalogue http query\n   * @param data - HTTP response containing all the layers\n   */\n  private datasetsReceived(data: HsLaymanGetLayersWrapper): void {\n    const endpoint = data.endpoint;\n    if (!endpoint) {\n      this.hsToastService.createToastPopupMessage(\n        this.hsLanguageService.getTranslation('COMMON.warning', undefined),\n        endpoint.title +\n          ': ' +\n          this.hsLanguageService.getTranslation(\n            'COMMON.noDataReceived',\n            undefined,\n          ),\n        {\n          disableLocalization: true,\n          type: 'warning',\n          serviceCalledFrom: 'HsLaymanBrowserService',\n        },\n      );\n      return;\n    }\n    endpoint.loading = false;\n    endpoint.layers = [];\n    endpoint.datasourcePaging.loaded = true;\n    if (!data.datasets.length) {\n      endpoint.datasourcePaging.matched = 0;\n    } else {\n      endpoint.datasourcePaging.matched = data.matched;\n      endpoint.layers = data.datasets.map((layer) => {\n        const tmp: HsAddDataLaymanLayerDescriptor = {\n          title: layer.title,\n          name: layer.name,\n          id: layer.uuid,\n          highlighted: false,\n          workspace: layer.workspace,\n          access_rights: layer.access_rights,\n          editable: layer.access_rights.write.some((user) => {\n            return [this.hsCommonLaymanService.user(), 'EVERYONE'].includes(\n              user,\n            );\n          }),\n          wfsWmsStatus: layer.wfs_wms_status,\n        };\n        if (data.extentFeatureCreated) {\n          const extentFeature = addExtentFeature(\n            layer,\n            this.hsMapService.getCurrentProj(),\n          );\n          if (extentFeature) {\n            tmp.featureId = extentFeature.getId() as string;\n            data.extentFeatureCreated(extentFeature);\n          }\n        }\n        return tmp;\n      });\n    }\n  }\n\n  /**\n   * Fills metadata about layer, because Layman layer list API provides just name and UUID\n   * @param endpoint - Configuration of selected datasource (from app config)\n   * @param layer - Layman layer for which to get metadata\n   * @returns Promise which is resolved when layer metadata is filled\n   */\n  async fillLayerMetadata(\n    endpoint: HsEndpoint,\n    layer: HsAddDataLaymanLayerDescriptor,\n  ): Promise<HsAddDataLaymanLayerDescriptor> {\n    try {\n      const data = await this.hsCommonLaymanLayerService.describeLayer(\n        layer.name,\n        layer.workspace,\n        {\n          useCache: true,\n        },\n      );\n      layer.type = data?.geodata_type === 'vector' ? ['WMS', 'WFS'] : ['WMS'];\n      layer = {...layer, ...data};\n      return layer;\n    } catch (e) {\n      this.log.error(e);\n      return e;\n    }\n  }\n\n  /**\n   * Gets layer metadata and returns promise which describes layer\n   * @param ds - Configuration of selected datasource (from app config)\n   * @param layer - Layman layer for which to get metadata\n   * @returns Promise which describes layer in a common format for use in add-layers component\n   */\n  async describeWhatToAdd(\n    ds: HsEndpoint,\n    layer: HsAddDataLaymanLayerDescriptor,\n  ) {\n    const lyr = await this.fillLayerMetadata(ds, layer);\n    if (!lyr) {\n      return undefined;\n    }\n    let style: string = undefined;\n    if (lyr.style?.url) {\n      style = await this.hsCommonLaymanService.getStyleFromUrl(lyr.style?.url);\n    }\n    if (lyr.style?.type == 'sld') {\n      if (!style?.includes('StyledLayerDescriptor')) {\n        style = undefined;\n      }\n    }\n    if (lyr.style?.type == 'qml') {\n      if (!style?.includes('<qgis')) {\n        style = undefined;\n      }\n    }\n    if (lyr.wms.url) {\n      const {type, wms, name, title, editable, workspace, bounding_box} = lyr;\n      return {\n        ...lyr,\n        link: wms.url,\n        layer: wms.name,\n        dsType: ds.type,\n        extent: bounding_box,\n        style,\n        styleType: lyr.style?.type,\n        name,\n        title,\n        editable,\n        workspace,\n        type,\n      };\n    }\n    this.hsToastService.createToastPopupMessage(\n      'ADDLAYERS.ERROR.errorWhileRequestingLayers',\n      'ADDLAYERS.ERROR.urlInvalid',\n      {\n        serviceCalledFrom: 'HsLaymanBrowserService',\n      },\n    );\n    return undefined;\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport {EventsKey} from 'ol/events';\nimport {Feature} from 'ol';\nimport {Geometry} from 'ol/geom';\nimport {Vector as VectorLayer} from 'ol/layer';\nimport {Vector as VectorSource} from 'ol/source';\nimport {unByKey} from 'ol/Observable';\n\nimport {HsCommonEndpointsService} from 'hslayers-ng/services/endpoints';\nimport {\n  debounce,\n  highlightFeatures,\n  createNewExtentLayer,\n} from 'hslayers-ng/services/utils';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapCompositionDescriptor} from 'hslayers-ng/types';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsSaveMapService} from 'hslayers-ng/services/save-map';\nimport {setHighlighted} from 'hslayers-ng/common/extensions';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsAddDataCatalogueMapService {\n  hsMapService = inject(HsMapService);\n  hsLogService = inject(HsLogService);\n  private hsSaveMapService = inject(HsSaveMapService);\n  private hsCommonEndpointsService = inject(HsCommonEndpointsService);\n  private hsLayoutService = inject(HsLayoutService);\n\n  extentLayer: VectorLayer<VectorSource<Feature>>;\n  pointerMoveListener: EventsKey;\n\n  constructor() {\n    this.hsLayoutService.mainpanel$.subscribe((which) => {\n      if (which === 'addData') {\n        this.addPointerMoveListener();\n      } else if (this.pointerMoveListener) {\n        unByKey(this.pointerMoveListener);\n      }\n    });\n\n    this.hsMapService.loaded().then((map) => {\n      map.addLayer(this.extentLayer);\n      this.hsSaveMapService.internalLayers.push(this.extentLayer);\n    });\n    this.extentLayer = createNewExtentLayer('Datasources extents');\n  }\n\n  /**\n   * Add debounced pointer move listener\n   */\n  private addPointerMoveListener() {\n    this.pointerMoveListener = this.hsMapService.getMap().on(\n      'pointermove',\n      debounce((e) => this.mapPointerMoved(e), 50, false, this),\n    );\n  }\n\n  /**\n   * @param evt - Event object\n   */\n  mapPointerMoved(evt): void {\n    const featuresUnderMouse = this.extentLayer\n      .getSource()\n      .getFeaturesAtCoordinate(evt.coordinate);\n    for (const endpoint of this.hsCommonEndpointsService\n      .endpoints()\n      .filter((ep) => ep.layers)) {\n      highlightFeatures(featuresUnderMouse, endpoint.layers);\n    }\n  }\n\n  clearExtentLayer(): void {\n    this.extentLayer.getSource().clear();\n  }\n\n  /**\n   * Removes layer extent features from map\n   * @param dataset - Configuration of selected datasource (from app config)\n   */\n  clearDatasetFeatures(dataset): void {\n    if (dataset.layers) {\n      dataset.layers.forEach((val) => {\n        try {\n          if (val) {\n            this.extentLayer.getSource().clear();\n          }\n        } catch (ex) {\n          this.hsLogService.warn(ex);\n        }\n      });\n    }\n  }\n\n  /**\n   * Callback function which gets executed when extent feature\n   * is created. It should add the feature to vector layer source\n   * @param extentFeature - OpenLayers Feature\n   */\n  addExtentFeature(extentFeature: Feature<Geometry>): void {\n    this.extentLayer.getSource().addFeatures([extentFeature]);\n  }\n\n  highlightLayer(\n    composition: HsMapCompositionDescriptor,\n    state: boolean,\n  ): void {\n    if (composition.featureId !== undefined) {\n      const found = this.extentLayer\n        .getSource()\n        .getFeatureById(composition.featureId);\n      if (found) {\n        setHighlighted(found, state);\n      }\n    }\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport {Projection, get as getProjection} from 'ol/proj';\nimport {PROJECTIONS as epsg4326Aliases} from 'ol/proj/epsg4326';\n\nimport {HsLaymanService} from 'hslayers-ng/services/save-map';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsAddDataVectorUtilsService {\n  private hsLaymanService = inject(HsLaymanService);\n\n  /**\n   * Tries to guess file type based on the file extension\n   * @param extension - Parsed file extension from uploaded file\n   */\n  tryGuessTypeFromNameOrUrl(extension: string): string {\n    if (extension !== undefined) {\n      if (extension.toLowerCase().endsWith('kml')) {\n        return 'kml';\n      }\n      if (extension.toLowerCase().endsWith('gpx')) {\n        return 'gpx';\n      }\n      if (\n        extension.toLowerCase().endsWith('geojson') ||\n        extension.toLowerCase().endsWith('json')\n      ) {\n        return 'geojson';\n      }\n    }\n  }\n\n  /**\n   * Returns layman supported projection\n   */\n  getFeaturesProjection(projection: Projection): Projection {\n    return epsg4326Aliases\n      .map((proj) => proj.getCode())\n      .some((code) => code === projection.getCode())\n      ? getProjection('EPSG:4326')\n      : this.hsLaymanService.supportedCRRList().indexOf(projection.getCode()) >\n          -1\n        ? projection\n        : getProjection('EPSG:4326');\n    //Features in map CRS\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport {Feature} from 'ol';\nimport {Layer, Vector as VectorLayer} from 'ol/layer';\nimport {Source, Vector as VectorSource} from 'ol/source';\nimport {get as getProjection} from 'ol/proj';\nimport {createDefaultStyle} from 'ol/style/Style';\n\nimport {HsAddDataCommonFileService} from '../common-file.service';\nimport {HsAddDataService} from '../add-data.service';\nimport {\n  HsCommonLaymanLayerService,\n  HsCommonLaymanService,\n  PostPatchLayerResponse,\n  awaitLayerSync,\n  getLaymanFriendlyLayerName,\n} from 'hslayers-ng/common/layman';\nimport {HsLaymanService} from 'hslayers-ng/services/save-map';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {defaultStyle, HsStylerService} from 'hslayers-ng/services/styler';\nimport {\n  OverwriteResponse,\n  UpsertLayerObject,\n  VectorDataObject,\n  HsVectorLayerOptions,\n  VectorLayerDescriptor,\n  VectorSourceDescriptor,\n} from 'hslayers-ng/types';\nimport {SparqlJson} from 'hslayers-ng/common/layers';\n\nimport {setDefinition} from 'hslayers-ng/common/extensions';\n\nimport {HsAddDataVectorUtilsService} from './vector-utils.service';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {undefineEmptyString, HsProxyService} from 'hslayers-ng/services/utils';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsAddDataVectorService {\n  private hsAddDataCommonFileService = inject(HsAddDataCommonFileService);\n  private hsAddDataService = inject(HsAddDataService);\n  private hsLaymanService = inject(HsLaymanService);\n  private hsCommonLaymanService = inject(HsCommonLaymanService);\n  private hsCommonLaymanLayerService = inject(HsCommonLaymanLayerService);\n  private hsMapService = inject(HsMapService);\n  private hsStylerService = inject(HsStylerService);\n  private hsAddDataVectorUtilsService = inject(HsAddDataVectorUtilsService);\n  private hsToastService = inject(HsToastService);\n  private hsProxyService = inject(HsProxyService);\n\n  /**\n   * Load non-wms OWS data and create layer\n   * @param type - Type of data to load (supports Kml, Geojson, Wfs and Sparql)\n   * @param url - Url of data/service localization\n   * @param title - Title of new layer\n   * @param abstract - Abstract of new layer\n   * @param srs - EPSG code of selected projection (eg. \"EPSG:4326\")\n   * @param options - Other options\n   * @param addUnder - Layer to add new layer under\n   * @returns Promise which return OpenLayers vector layer\n   */\n  addVectorLayer(\n    type: string,\n    url: string,\n    name: string,\n    title: string,\n    abstract: string,\n    srs: string,\n    options: HsVectorLayerOptions,\n    addUnder?: Layer<Source>,\n  ): Promise<VectorLayer<VectorSource<Feature>>> {\n    return new Promise(async (resolve, reject) => {\n      try {\n        const lyr = await this.createVectorLayer(\n          type,\n          url,\n          name,\n          title,\n          abstract,\n          srs,\n          options,\n        );\n        /*\n        Set definition property with protocol inside \n        so layer synchronizer knows whether to sync\n        */\n        if (options.saveToLayman) {\n          if (undefineEmptyString(url) !== undefined) {\n            setDefinition(lyr, {\n              format: 'WFS',\n              url: url,\n            });\n          } else {\n            setDefinition(lyr, {\n              format: 'WFS',\n            });\n          }\n        }\n        if (this.hsMapService.getMap()) {\n          this.hsAddDataService.addLayer(lyr, addUnder);\n        }\n        resolve(lyr);\n      } catch (ex) {\n        reject(ex);\n      }\n    });\n  }\n\n  /**\n   * Load non-wms OWS data and create layer\n   * @param type - Type of data to load (supports KML, GeoJSON, WFS and SPARQL)\n   * @param url - Url of data/service localization\n   * @param name - Name of new layer\n   * @param title - Title of new layer\n   * @param abstract - Abstract of new layer\n   * @param srs - EPSG code of selected projection (eg. \"EPSG:4326\")\n   * @param options - Other options\n   * @returns Promise which returns OpenLayer's vector layer\n   */\n  async createVectorLayer(\n    type: string,\n    url: string,\n    name: string,\n    title: string,\n    abstract: string,\n    srs: string,\n    options: HsVectorLayerOptions = {},\n  ) {\n    if (\n      type?.toLowerCase() != 'sparql' &&\n      type?.toLowerCase() != 'wfs' &&\n      url !== undefined\n    ) {\n      url = this.hsProxyService.proxify(url);\n    }\n\n    if (undefineEmptyString(type) === undefined) {\n      type = this.hsAddDataVectorUtilsService.tryGuessTypeFromNameOrUrl(url);\n    }\n\n    let mapProjection;\n    if (this.hsMapService.getMap()) {\n      mapProjection = this.hsMapService\n        .getMap()\n        .getView()\n        .getProjection()\n        .getCode();\n    }\n\n    const descriptor = new VectorLayerDescriptor(\n      type,\n      name,\n      title,\n      abstract,\n      url,\n      options,\n      mapProjection,\n    );\n\n    const sourceDescriptor = new VectorSourceDescriptor();\n    await sourceDescriptor.init(type, url, srs, options, mapProjection);\n\n    const src =\n      sourceDescriptor.sourceClass == VectorSource ||\n      sourceDescriptor.sourceClass == SparqlJson\n        ? new sourceDescriptor.sourceClass(sourceDescriptor.sourceParams)\n        : new sourceDescriptor.sourceClass(sourceDescriptor);\n    descriptor.layerParams.source = src;\n\n    /**\n     * Same as with parseStyle but we want to prevent\n     * passing SLD/QML with already parsed style to not interfere with initLayerStyle\n     * and to not parse it twice\n     */\n    const style = (options.sld || options.qml) ?? options.style;\n    const styleType = this.hsStylerService.guessStyleFormat(style);\n\n    if (style) {\n      if (typeof styleType == 'string') {\n        descriptor.layerParams[styleType] = style as string;\n        descriptor.layerParams.style = undefined;\n      } else {\n        descriptor.layerParams.style = {style};\n      }\n    } else {\n      descriptor.layerParams.style = createDefaultStyle;\n      descriptor.layerParams.sld = defaultStyle;\n    }\n    return new VectorLayer(descriptor.layerParams);\n  }\n\n  /**\n   * Fit map view to layer's extent\n   * @param lyr - Provided layer\n   */\n  fitExtent(lyr: VectorLayer<VectorSource<Feature>>) {\n    const src = lyr.getSource();\n    if (src.getFeatures().length > 0) {\n      this.tryFit(src.getExtent(), src);\n    } else {\n      src.on('change', this.changeListener(src));\n    }\n  }\n\n  /**\n   * Set catalogue as active HSLayers panel\n   */\n  setPanelToCatalogue() {\n    this.hsAddDataService.selectType('catalogue');\n  }\n\n  /**\n   * Listen to any source changes made\n   * @param src - Layer source provided\n   */\n  changeListener(src): any {\n    if (src.getState() == 'ready') {\n      setTimeout(() => {\n        if (src.getFeatures().length == 0) {\n          return;\n        }\n        const extent = src.getExtent();\n        this.tryFit(extent, src);\n      }, 1000);\n    }\n  }\n\n  /**\n   * Construct options parameter for new vector layer being added\n   */\n  private buildNewLayerOptions(data: VectorDataObject): HsVectorLayerOptions {\n    const serializedStyle =\n      typeof data.serializedStyle === 'string'\n        ? data.serializedStyle\n        : data.serializedStyle?.content;\n    const styleFormat = this.hsStylerService.guessStyleFormat(serializedStyle);\n    return {\n      extractStyles: data.extract_styles,\n      features: data.saveToLayman ? null : data.features, //Features are being posted to Layman in original CRS and will be fetched later\n      geomAttribute: `?${data.geomProperty}`,\n      idAttribute: `?${data.idProperty}`,\n      path: undefineEmptyString(data.folder_name),\n      access_rights: data.access_rights,\n      workspace: this.hsCommonLaymanService.user(),\n      query: data.query,\n      queryCapabilities:\n        data.type != 'kml' &&\n        data.type != 'gpx' &&\n        data.type != 'sparql' &&\n        !data.url?.endsWith('json'),\n      saveToLayman: data.saveToLayman,\n      sld: styleFormat == 'sld' ? serializedStyle : undefined,\n      qml: styleFormat == 'qml' ? serializedStyle : undefined,\n    };\n  }\n\n  /**\n   * Add new layer to map and Layman (if possible)\n   * @param data - Layer data object provided\n   * @returns Created layer and layer adding state (true, if complete, false otherwise)\n   */\n  async addNewLayer(data: VectorDataObject) {\n    if (data.saveToLayman && !this.hsCommonLaymanService.isAuthenticated()) {\n      data.saveToLayman = false;\n      this.hsToastService.createToastPopupMessage(\n        'COMMON.warning',\n        'LAYMAN.requestWasProcessed',\n        {\n          type: 'warning',\n          serviceCalledFrom: 'hsAddDataVectorService',\n        },\n      );\n    }\n    const addLayerRes: {\n      layer: VectorLayer<VectorSource<Feature>>;\n      complete: boolean;\n    } = {layer: null, complete: true};\n    if (data.saveToLayman && data.saveAvailable) {\n      const checkResult = await this.checkForLayerInLayman(data);\n      if (!checkResult || checkResult == OverwriteResponse.cancel) {\n        addLayerRes.complete = false;\n        return addLayerRes;\n      }\n      const upsertResponse =\n        checkResult == OverwriteResponse.overwrite\n          ? {name: data.name}\n          : //Create layer on layman: OverwriteResponse.add\n            await this.upsertLayer(data);\n      if (data.serializedStyle) {\n        await this.setLaymanLayerStyle(upsertResponse.name, data);\n      }\n    }\n    const layer = await this.addVectorLayer(\n      data.features?.length > 0 ? '' : data.type,\n      data.url || data.base64url,\n      data.name,\n      data.title,\n      data.abstract,\n      data.srs,\n      this.buildNewLayerOptions(data),\n      data.addUnder,\n    );\n    this.fitExtent(layer);\n    addLayerRes.layer = layer;\n    if (data.saveToLayman) {\n      awaitLayerSync(layer).then(() => {\n        layer.getSource().dispatchEvent('addfeature');\n        this.fitExtent(layer);\n      });\n    }\n    return addLayerRes;\n  }\n\n  /**\n   * Get layer style from Layman endpoint before creating layer to ensure all params and values used\n   * are in sync with what's on Layman e.g. to prevent inconsistencies caused by attribute names laundering\n   */\n  async setLaymanLayerStyle(layerName: string, data: VectorDataObject) {\n    const descriptor = await this.hsAddDataCommonFileService.describeNewLayer(\n      layerName,\n      ['style'],\n    );\n    data.serializedStyle = await this.hsCommonLaymanService.getStyleFromUrl(\n      descriptor.style.url,\n    );\n  }\n\n  /**\n   * Prepare layer for upsertion to Layman\n   * @param data - Vector data object\n   */\n  async upsertLayer(data: VectorDataObject): Promise<PostPatchLayerResponse> {\n    const crsSupported = this.hsLaymanService\n      .supportedCRRList()\n      .includes(data.nativeSRS);\n    const style =\n      typeof data.serializedStyle == 'string'\n        ? data.serializedStyle\n        : data.serializedStyle?.content;\n    const layerDesc: UpsertLayerObject = {\n      title: data.title,\n      name: getLaymanFriendlyLayerName(data.name),\n      crs: this.hsAddDataVectorUtilsService\n        .getFeaturesProjection(getProjection(data.nativeSRS))\n        .getCode(),\n      workspace: this.hsCommonLaymanService.user(),\n      access_rights: data.access_rights,\n      style,\n    };\n    return this.hsLaymanService.makeUpsertLayerRequest(\n      this.hsLaymanService.getFeatureGeoJSON(\n        data.nativeFeatures,\n        crsSupported,\n        true,\n      ),\n      layerDesc,\n    );\n  }\n\n  /**\n   * Check if layer with the same name exists in Layman database and provide the user to choose\n   * what action he wishes to take\n   * @param data - Layer data object provided\n   * @returns Action the user took, inside prompted dialog\n   */\n  async checkForLayerInLayman(\n    data: VectorDataObject,\n    repetitive?: boolean,\n  ): Promise<OverwriteResponse> {\n    let upsertReq: PostPatchLayerResponse;\n    this.hsAddDataCommonFileService.loadingToLayman = true;\n    const exists = await this.hsAddDataCommonFileService.lookupLaymanLayer(\n      data.name,\n    );\n    if (!exists) {\n      return OverwriteResponse.add;\n    }\n    const result =\n      await this.hsAddDataCommonFileService.loadOverwriteLayerDialog(\n        data,\n        repetitive,\n      );\n    switch (result) {\n      case OverwriteResponse.overwrite:\n        upsertReq = await this.upsertLayer(data);\n        if (!upsertReq) {\n          return OverwriteResponse.cancel;\n        }\n        if (upsertReq?.code) {\n          switch (upsertReq.code) {\n            case 17:\n              return await this.checkForLayerInLayman(data);\n            default:\n              this.hsAddDataCommonFileService.handleLaymanError(upsertReq);\n              return OverwriteResponse.cancel;\n          }\n        } else {\n          await this.hsCommonLaymanLayerService.describeLayer(\n            upsertReq.name,\n            this.hsCommonLaymanService.user(),\n          );\n          return OverwriteResponse.overwrite;\n        }\n      case OverwriteResponse.add:\n        return await this.checkForLayerInLayman(data, true);\n      case OverwriteResponse.cancel:\n        this.hsAddDataCommonFileService.loadingToLayman = false;\n        return OverwriteResponse.cancel;\n      default:\n    }\n  }\n\n  /**\n   * Check if uploaded data are KML\n   * @param fileType - Uploaded data type\n   * @param url - Upload source url\n   * @returns True, if data are in KML format, false otherwise\n   */\n  isKml(fileType: string, url: string) {\n    if (fileType == 'kml' || url?.endsWith('kml')) {\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Try to fit layer extent as map view\n   * @param extent - Extent provided\n   * @param src - Layer source provided\n   */\n  tryFit(extent, src: Source) {\n    if (\n      !isNaN(extent[0]) &&\n      !isNaN(extent[1]) &&\n      !isNaN(extent[2]) &&\n      !isNaN(extent[3]) &&\n      this.hsMapService.getMap()\n    ) {\n      this.hsMapService.fitExtent(extent);\n      src.un('change', this.changeListener);\n    }\n  }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable, inject} from '@angular/core';\n\nimport {catchError, map, timeout} from 'rxjs/operators';\nimport {of} from 'rxjs';\nimport {transformExtent} from 'ol/proj';\n\nimport {\n  EndpointErrorHandler,\n  EndpointErrorHandling,\n  HsEndpoint,\n  isErrorHandlerFunction,\n  HsAddDataMickaLayerDescriptor,\n} from 'hslayers-ng/types';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {\n  HsProxyService,\n  paramsToURL,\n  addExtentFeature,\n} from 'hslayers-ng/services/utils';\n\n@Injectable({providedIn: 'root'})\nexport class HsMickaBrowserService {\n  private http = inject(HttpClient);\n  private log = inject(HsLogService);\n  hsMapService = inject(HsMapService);\n  hsToastService = inject(HsToastService);\n  hsLanguageService = inject(HsLanguageService);\n  private hsProxyService = inject(HsProxyService);\n\n  httpCall;\n\n  /**\n   * @param dataset - Configuration of selected datasource (from app config)\n   * @param data - Query properties\n   * @param extentFeatureCreated - Function which gets called\n   * @param textField - Name of the field to search in\n   * extent feature is created. Has one parameter: feature\n   * Loads datasets metadata from selected source (CSW server).\n   * Currently supports only \"Micka\" type of source.\n   * Use all query params (search text, bbox, params.., sorting, start)\n   */\n  queryCatalog(\n    endpoint: HsEndpoint,\n    data,\n    extentFeatureCreated,\n    textField: string,\n  ): any {\n    const url = this.createRequestUrl(endpoint, data, textField);\n    endpoint.datasourcePaging.loaded = false;\n    endpoint.httpCall = this.http\n      .get(url, {\n        responseType: 'json',\n      })\n      .pipe(\n        timeout(5000),\n        map((x: any) => {\n          x.endpoint = endpoint;\n          x.extentFeatureCreated = extentFeatureCreated;\n          this.datasetsReceived(x);\n          return x;\n        }),\n        catchError((e) => {\n          if (isErrorHandlerFunction(endpoint.onError?.compositionLoad)) {\n            (<EndpointErrorHandler>endpoint.onError?.compositionLoad).handle(\n              endpoint,\n              e,\n            );\n            return of(e);\n          }\n          switch (endpoint.onError?.compositionLoad) {\n            case EndpointErrorHandling.ignore:\n              break;\n            case EndpointErrorHandling.toast:\n            default:\n              this.hsToastService.createToastPopupMessage(\n                this.hsLanguageService.getTranslation(\n                  'ADDLAYERS.ERROR.errorWhileRequestingLayers',\n                  undefined,\n                ),\n                endpoint.title +\n                  ': ' +\n                  this.hsLanguageService.getTranslationIgnoreNonExisting(\n                    'ERRORMESSAGES',\n                    e.status ? e.status.toString() : e.message,\n                    {url},\n                  ),\n                {\n                  disableLocalization: true,\n                  serviceCalledFrom: 'HsMickaBrowserService',\n                },\n              );\n          }\n          endpoint.datasourcePaging.loaded = true;\n          return of(e);\n        }),\n      );\n    // .subscribe(()=>{console.log('sub')});\n    return endpoint.httpCall;\n  }\n\n  private createRequestUrl(endpoint: HsEndpoint, data, textField) {\n    const query = data.query;\n    const b = transformExtent(\n      this.hsMapService\n        .getMap()\n        .getView()\n        .calculateExtent(this.hsMapService.getMap().getSize()),\n      this.hsMapService.getMap().getView().getProjection(),\n      'EPSG:4326',\n    );\n    const bbox = data.filterByExtent ? \"BBOX='\" + b.join(' ') + \"'\" : '';\n    const sortBy =\n      query.sortby !== undefined && query.sortby != ''\n        ? query.sortby == 'date'\n          ? 'date:D'\n          : query.sortby\n        : 'date:D';\n    const text =\n      query.textFilter !== undefined && query.textFilter.length > 0\n        ? query.textFilter\n        : query.title;\n    const sql = [\n      // 'validservice>0',\n      text != '' ? `${textField} like '*${text}*'` : '',\n      bbox,\n      //param2Query('type'),\n      this.param2Query('ServiceType', query),\n      // this.param2Query('topicCategory', query),\n      // this.param2Query('Subject', query),\n      // this.param2Query('Denominator', query),\n      // this.param2Query('OrganisationName', query),\n      // this.param2Query('keywords', query),\n    ]\n      .filter((n) => {\n        return n != '';\n      })\n      .join(' AND ');\n    const url =\n      endpoint.url +\n      '?' +\n      paramsToURL({\n        request: 'GetRecords',\n        format: 'application/json',\n        language: endpoint.language,\n        query: sql,\n        sortby: sortBy,\n        limit: endpoint.datasourcePaging.limit,\n        start: endpoint.datasourcePaging.start,\n        validservice: '>0',\n      });\n    return this.hsProxyService.proxify(url);\n  }\n\n  /**\n   * @param data - HTTP response containing all the layers\n   * Callback for catalogue http query\n   */\n  private datasetsReceived(data): boolean {\n    if (!data.endpoint || !data.extentFeatureCreated) {\n      return;\n    }\n    const endpoint = data.endpoint;\n    endpoint.loading = false;\n    endpoint.layers = [];\n    endpoint.datasourcePaging.loaded = true;\n    if (data.records.length == 0) {\n      endpoint.datasourcePaging.matched = 0;\n      return false;\n    }\n    endpoint.datasourcePaging.matched = data.matched;\n    endpoint.datasourcePaging.next = data.next;\n\n    for (const lyr of data.records) {\n      lyr.name = lyr.title;\n      endpoint.layers.push(lyr);\n      if (data.extentFeatureCreated) {\n        const extentFeature = addExtentFeature(\n          lyr,\n          this.hsMapService.getCurrentProj(),\n        );\n        if (extentFeature) {\n          lyr.featureId = extentFeature.getId();\n          data.extentFeatureCreated(extentFeature);\n        }\n      }\n    }\n    return true;\n  }\n\n  /**\n   * @param which - Parameter name to parse\n   \n   * Parse query parameter into encoded key value pair.\n   */\n  private param2Query(which: string, query): string {\n    const dataset = 'type=dataset OR type=series OR type=tile';\n    if (query[which] !== undefined) {\n      if (which == 'type' && query[which] == 'data') {\n        //Special case for type 'data' because it can contain many things\n        return `(${dataset})`;\n      }\n      return query[which] != '' ? which + \"='\" + query[which] + \"'\" : '';\n    }\n    if (which == 'ServiceType') {\n      const service = 'type=service';\n      switch (query.type) {\n        case 'service':\n          return `(${service})`;\n        case 'dataset':\n          return `(${dataset})`;\n        case 'all':\n        default:\n          return `(${service} OR ${dataset})`;\n      }\n    } else {\n      return '';\n    }\n  }\n\n  /**\n   \n   * @param layer - Micka layer for which to get metadata\n   * @param type - Optional service type specification\n   * @returns Url of service or resource\n   * Get first link from records links array or link\n   * property of record in older Micka versions\n   * in a common format for use in add-layers component\n   */\n  getLayerLink(layer: HsAddDataMickaLayerDescriptor, type?: string): string {\n    if (layer.links?.length > 0) {\n      if (type) {\n        layer.links = layer.links.filter(\n          (link) =>\n            link.url.toLowerCase().includes(type) ||\n            (!Array.isArray(link) && link.includes(type)),\n        );\n      }\n\n      if (layer.links[0].url !== undefined) {\n        return layer.links[0].url;\n      }\n      return layer.links[0];\n    }\n    this.log.warn('Layer does not contain any links or link properties');\n  }\n\n  /**\n   *   Parse layer name from dataset url (Micka includes LAYER parameters for both WMS/WFS in record url)\n   */\n  private parseLayerName(whatToAdd): string {\n    const link = Array.isArray(whatToAdd.link)\n      ? whatToAdd.link[0]\n      : whatToAdd.link;\n    return link\n      .split('&')\n      ?.find((part) => part.includes('LAYERS'))\n      ?.split('=')[1];\n  }\n\n  /**\n   * Parse workspace from micka dataset record. Null if not layman layer\n   */\n  private parseWorkspaceFromURL(whatToAdd): void {\n    const link = Array.isArray(whatToAdd.link)\n      ? whatToAdd.link.find((link) => link.includes('wfs'))\n      : whatToAdd.link;\n    //Assuming its layman layer\n    if (link?.includes('geoserver')) {\n      whatToAdd.workspace = link.match('(?<=geoserver/).*?(?=/)')[0];\n    }\n  }\n\n  private isLinkValid(link: any, type: string) {\n    return (\n      link.protocol?.toLowerCase().includes(type) ||\n      link.url.toLowerCase().includes(`service=${type}`)\n    );\n  }\n\n  /**\n   * @param ds - Configuration of selected datasource (from app config)\n   * @param layer - Micka layer for which to get metadata\n   * @returns Promise which describes layer\n   * in a common format for use in add-layers component\n   * Gets layer metadata and returns promise which describes layer\n   * in a common format for use in add-layers component\n   */\n  async describeWhatToAdd(\n    ds: HsEndpoint,\n    layer: HsAddDataMickaLayerDescriptor,\n  ): Promise<any> {\n    let whatToAdd: any = {type: 'none'};\n    const type = layer.type || layer.trida;\n    const layerLink = this.getLayerLink(layer);\n    if (!layerLink) {\n      return false;\n    }\n    if (type == 'service') {\n      if (['WMS', 'OGC:WMS', 'view'].includes(layer.serviceType)) {\n        whatToAdd.type = 'WMS';\n        whatToAdd.link = layerLink;\n      } else if (layerLink.toLowerCase().includes('sparql')) {\n        whatToAdd = {\n          type: 'sparql',\n          link: layerLink,\n          projection: 'EPSG:4326',\n        };\n      } else if (['WFS', 'OGC:WFS', 'download'].includes(layer.serviceType)) {\n        whatToAdd.type = 'WFS';\n        whatToAdd.link = layerLink;\n        whatToAdd.dsType = ds.type;\n      } else if (\n        layer.formats &&\n        ['kml', 'geojson', 'json'].includes(layer.formats[0].toLowerCase())\n      ) {\n        whatToAdd = {\n          type: layer.formats[0].toUpperCase() == 'KML' ? 'kml' : 'geojson',\n          link: layerLink,\n          projection: 'EPSG:4326',\n          extractStyles: layer.formats[0].toLowerCase() == 'kml',\n        };\n      } else {\n        this.hsToastService.createToastPopupMessage(\n          'ADDLAYERS.ERROR.errorWhileRequestingLayers',\n          this.hsLanguageService.getTranslation(\n            'ADDLAYERS.ERROR.unsupportedDatasourceType',\n            {serviceType: layer.serviceType},\n          ),\n          {\n            type: 'warning',\n            serviceCalledFrom: 'HsMickaBrowserService',\n          },\n        );\n        return false;\n      }\n    } else if (type == 'dataset') {\n      if (layer.links) {\n        //Filter invalid links\n        //TODO: possible kml, geojson, shp\n        layer.links = layer.links.filter((link) =>\n          ['wms', 'wfs', 'wmts'].some((type) => this.isLinkValid(link, type)),\n        );\n        //Check WMS endpoints\n        if (layer.links.some((link) => this.isLinkValid(link, 'wms'))) {\n          whatToAdd = {\n            type: 'WMS',\n          };\n        }\n        //Check WMTS endpoints\n        if (layer.links.some((link) => this.isLinkValid(link, 'wmts'))) {\n          whatToAdd = {\n            type: 'WMTS',\n          };\n        }\n        //Check WFS endpoints\n        if (layer.links.some((link) => this.isLinkValid(link, 'wfs'))) {\n          whatToAdd.type = whatToAdd.type == 'WMS' ? ['WMS', 'WFS'] : 'WFS';\n        }\n        //Parse links\n        whatToAdd.link = Array.isArray(whatToAdd.type)\n          ? layer.links.map((link) => link.url)\n          : this.getLayerLink(layer, whatToAdd.type.toLowerCase());\n        this.parseWorkspaceFromURL(whatToAdd);\n      } else {\n        return false;\n      }\n\n      // else if (\n      //   ['kml', 'geojson', 'json'].includes(layer.formats[0].toLowerCase())\n      // ) {\n      //   whatToAdd = {\n      //     type: layer.formats[0].toUpperCase() == 'KML' ? 'kml' : 'geojson',\n      //     link: layerLink,\n      //     projection: 'EPSG:4326',\n      //     extractStyles: layer.formats[0].toLowerCase() == 'kml',\n      //   };\n      // }\n    } else {\n      this.log.warn(`Datasource type \"${type}\" not supported.`);\n      this.datasourceParsingError(layer.title, 'unsupportedDatasourceType');\n      return false;\n    }\n\n    if (whatToAdd.type == 'none') {\n      this.datasourceParsingError(layer.title, 'urlInvalid');\n      return false;\n    }\n\n    whatToAdd.recordType = type;\n    whatToAdd.title = layer.title || 'Layer';\n    whatToAdd.name =\n      type === 'dataset'\n        ? (this.parseLayerName(whatToAdd) ?? layer.title)\n        : layer.title;\n    whatToAdd.abstract = layer.abstract || 'Layer';\n    return whatToAdd;\n  }\n\n  datasourceParsingError(title: string, error: string) {\n    this.hsToastService.createToastPopupMessage(\n      this.hsLanguageService.getTranslation(\n        'ADDLAYERS.ERROR.errorWhileRequestingLayers',\n        undefined,\n      ),\n      title +\n        ': ' +\n        this.hsLanguageService.getTranslation(\n          `ADDLAYERS.ERROR.${error}`,\n          undefined,\n        ),\n      {\n        disableLocalization: true,\n        serviceCalledFrom: 'HsMickaBrowserService',\n      },\n    );\n  }\n}\n","import {Injectable, NgZone, inject} from '@angular/core';\n\nimport {Feature} from 'ol';\nimport {Geometry} from 'ol/geom';\nimport {\n  Observable,\n  Subject,\n  debounceTime,\n  filter,\n  forkJoin,\n  from,\n  of,\n  switchMap,\n} from 'rxjs';\n\nimport {\n  DatasetType,\n  HsAddDataLaymanLayerDescriptor,\n  HsAddDataLayerDescriptor,\n  HsAddDataMickaLayerDescriptor,\n  HsEndpoint,\n  WhatToAddDescriptor,\n  OwsConnection,\n} from 'hslayers-ng/types';\nimport {HsAddDataCatalogueMapService} from './catalogue-map.service';\nimport {HsAddDataOwsService} from '../url/add-data-ows.service';\nimport {HsAddDataService} from '../add-data.service';\nimport {HsAddDataVectorService} from '../vector/vector.service';\nimport {HsCommonEndpointsService} from 'hslayers-ng/services/endpoints';\nimport {HsCommonLaymanService} from 'hslayers-ng/common/layman';\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsLaymanBrowserService} from './layman.service';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsMickaBrowserService} from './micka.service';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n/**\n * Options for adding catalogue layer to map\n */\nexport type AddCatalogueLayerOptions = {\n  useTiles?: boolean;\n};\n\nclass HsAddDataCatalogueParams {\n  data: any = {\n    query: {\n      textFilter: '',\n      title: '',\n      type: 'all',\n      Subject: '',\n      sortby: 'date',\n    },\n    textField: 'AnyText',\n    selectedLayer: null,\n    id_selected: 'OWS',\n    filterByExtent: true,\n    onlyMine: false,\n  };\n  selectedEndpoint: HsEndpoint;\n  selectedLayer: HsAddDataLayerDescriptor;\n  catalogEntries: HsAddDataLayerDescriptor[] = [];\n  dataLoading: boolean;\n  recordsPerPage = 20;\n  listStart = 0;\n  listNext = this.recordsPerPage;\n  catalogQuery;\n  endpoints: HsEndpoint[];\n  matchedRecords: number;\n  extentChangeSuppressed = false;\n\n  addDataCatalogueLoaded: Subject<void> = new Subject();\n  constructor() {}\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsAddDataCatalogueService extends HsAddDataCatalogueParams {\n  hsConfig = inject(HsConfig);\n  hsAddDataVectorService = inject(HsAddDataVectorService);\n  hsEventBusService = inject(HsEventBusService);\n  hsMickaBrowserService = inject(HsMickaBrowserService);\n  hsLaymanBrowserService = inject(HsLaymanBrowserService);\n  hsLayoutService = inject(HsLayoutService);\n  hsCommonEndpointsService = inject(HsCommonEndpointsService);\n  hsMapService = inject(HsMapService);\n  hsAddDataCatalogueMapService = inject(HsAddDataCatalogueMapService);\n  hsAddDataService = inject(HsAddDataService);\n  private zone = inject(NgZone);\n  hsCommonLaymanService = inject(HsCommonLaymanService);\n  hsAddDataOwsService = inject(HsAddDataOwsService);\n\n  constructor() {\n    super();\n    this.hsLayoutService.mainpanel$.subscribe((which) => {\n      if (this.panelVisible()) {\n        this.extentChangeSuppressed = true;\n        if (\n          this.dataSourceExistsAndEmpty() &&\n          this.hsAddDataService.datasetSelected.getValue() == 'catalogue'\n        ) {\n          this.reloadData();\n        }\n      }\n\n      this.calcExtentLayerVisibility();\n    });\n\n    this.hsCommonLaymanService.layman$\n      .pipe(takeUntilDestroyed())\n      .subscribe(() => {\n        if (this.panelVisible()) {\n          this.reloadData();\n        }\n      });\n\n    this.hsAddDataService.datasetTypeSelected.subscribe((type) => {\n      if (type == 'catalogue' && this.panelVisible()) {\n        this.reloadData();\n      }\n    });\n\n    this.endpoints = this.hsCommonEndpointsService.endpoints();\n\n    if (this.dataSourceExistsAndEmpty() && this.panelVisible()) {\n      this.queryCatalogs();\n      // this.hsMickaFilterService.fillCodesets();\n    }\n    this.hsEventBusService.mapExtentChanges\n      .pipe(\n        debounceTime(500),\n        switchMap(() => from(this.hsAddDataService.datasetTypeSelected)),\n        filter((type) => type == 'catalogue'),\n      )\n      .subscribe({\n        next: () => {\n          if (!this.panelVisible() || this.extentChangeSuppressed) {\n            this.extentChangeSuppressed = false;\n            return;\n          }\n          if (this.data.filterByExtent) {\n            this.zone.run(() => {\n              this.reloadData();\n            });\n          }\n        },\n      });\n  }\n\n  resetList(): void {\n    this.listStart = 0;\n    this.listNext = this.recordsPerPage;\n    this.selectedLayer = <HsAddDataLayerDescriptor>{};\n    this.endpoints.forEach((ep: HsEndpoint) => {\n      ep.datasourcePaging.start = 0;\n      ep.datasourcePaging.next = ep.datasourcePaging.limit;\n      ep.datasourcePaging.matched = 0;\n    });\n  }\n\n  reloadData(): void {\n    this.endpoints = this.hsCommonEndpointsService.endpoints();\n    this.resetList();\n    this.queryCatalogs();\n    // this.hsMickaFilterService.fillCodesets();\n    this.calcExtentLayerVisibility();\n  }\n\n  /**\n   * Queries all configured catalogs for datasources (layers)\n   */\n  queryCatalogs(suspendLimitCalculation?: boolean): void {\n    if (this.endpoints.length > 0) {\n      if (this.catalogQuery) {\n        this.catalogQuery.unsubscribe();\n        delete this.catalogQuery;\n      }\n      this.clearLoadedData();\n\n      this.hsMapService.loaded().then(() => {\n        this.dataLoading = true;\n        this.hsAddDataCatalogueMapService.clearExtentLayer();\n        const observables: Observable<any>[] = [];\n        //TODO Mark non functional endpoint\n        for (const endpoint of this.endpoints) {\n          if (!this.data.onlyMine || endpoint.type.includes('layman')) {\n            const promise = this.queryCatalog(endpoint);\n            observables.push(promise);\n          }\n        }\n        this.catalogQuery = forkJoin(observables).subscribe(() => {\n          if (suspendLimitCalculation) {\n            this.createLayerList();\n          } else {\n            this.calculateEndpointLimits();\n          }\n        });\n      });\n    }\n  }\n  /**\n   * Calculates each endpoint layer request limit, based on the matched layers ratio\n   * from all endpoint matched layers\n   */\n  calculateEndpointLimits(): void {\n    this.matchedRecords = 0;\n    this.endpoints = this.endpoints.filter(\n      (ep) => ep.datasourcePaging.matched != 0,\n    );\n    if (this.endpoints.length === 0) {\n      this.dataLoading = false;\n      return;\n    }\n    this.matchedRecords = this.endpoints.reduce(\n      (sum, ep) => sum + ep.datasourcePaging.matched,\n      this.matchedRecords,\n    );\n    let sumLimits = 0;\n    this.endpoints.forEach((ep) => {\n      /* Calculated limit or 1 if it's smaller */\n      ep.datasourcePaging.limit = Math.max(\n        Math.round(\n          (ep.datasourcePaging.matched / this.matchedRecords) *\n            this.recordsPerPage,\n        ),\n        1,\n      );\n      sumLimits += ep.datasourcePaging.limit;\n    });\n    /*\n     * Proportion of page limit for one of the datasources was 0 after rounding\n     * For the first few pages we need to adjust limit of the other datasource\n     */\n    if (sumLimits > this.recordsPerPage) {\n      const epWithFew = this.endpoints.reduce((maxItem, currentItem) => {\n        if (\n          maxItem === null ||\n          currentItem.datasourcePaging.limit < maxItem.datasourcePaging.limit\n        ) {\n          return currentItem;\n        }\n        return maxItem;\n      }, null);\n\n      /* Adjust the limit fo epWithMany */\n      this.endpoints.find((ep) => ep != epWithFew).datasourcePaging.limit -= 1;\n      sumLimits -= 1;\n    }\n    this.recordsPerPage = sumLimits;\n    this.listNext = this.recordsPerPage;\n    this.queryCatalogs(true);\n  }\n\n  createLayerList(): void {\n    for (const endpoint of this.endpoints) {\n      if (!this.data.onlyMine || endpoint.type.includes('layman')) {\n        if (endpoint.layers) {\n          endpoint.layers.forEach((layer) => {\n            layer.endpoint = endpoint;\n            // this.catalogEntries.push(layer);\n          });\n\n          if (this.catalogEntries.length > 0) {\n            this.filterDuplicates(endpoint);\n          } else {\n            this.catalogEntries = this.catalogEntries.concat(endpoint.layers);\n          }\n        }\n      }\n    }\n\n    if (this.matchedRecords < this.recordsPerPage) {\n      this.listNext = this.matchedRecords;\n    }\n\n    this.catalogEntries.sort((a, b) => a.title.localeCompare(b.title));\n    this.dataLoading = false;\n    this.addDataCatalogueLoaded.next();\n  }\n\n  filterDuplicates(endpoint: HsEndpoint): Array<any> {\n    if (endpoint.layers === undefined || endpoint.layers?.length == 0) {\n      return [];\n    }\n\n    const filteredLayers = endpoint.layers.filter(\n      (layer) =>\n        this.catalogEntries.filter(\n          (u) =>\n            u.id == layer.id ||\n            u.id == 'm-' + layer.id ||\n            'm-' + u.id == layer.id,\n        ).length == 0,\n    );\n\n    if (endpoint.type.includes('layman')) {\n      this.matchedRecords -= endpoint.layers.length - filteredLayers.length;\n    }\n    this.catalogEntries = this.catalogEntries.concat(filteredLayers);\n    return filteredLayers;\n  }\n\n  getNextRecords(): void {\n    this.listStart += this.recordsPerPage;\n    this.listNext += this.recordsPerPage;\n    if (this.listNext > this.matchedRecords) {\n      this.listNext = this.matchedRecords;\n    }\n    this.endpoints.forEach(\n      (ep) => (ep.datasourcePaging.start += ep.datasourcePaging.limit),\n    );\n    this.queryCatalogs(true);\n  }\n\n  getPreviousRecords(): void {\n    if (this.listStart - this.recordsPerPage <= 0) {\n      this.listStart = 0;\n      this.listNext = this.recordsPerPage;\n      this.endpoints.forEach(\n        (ep: HsEndpoint) => (ep.datasourcePaging.start = 0),\n      );\n    } else {\n      this.listStart -= this.recordsPerPage;\n      this.listNext = this.listStart + this.recordsPerPage;\n      this.endpoints.forEach(\n        (ep: HsEndpoint) =>\n          (ep.datasourcePaging.start -= ep.datasourcePaging.limit),\n      );\n    }\n    this.queryCatalogs(true);\n  }\n\n  changeRecordsPerPage(perPage: number): void {\n    this.resetList();\n    this.queryCatalogs();\n  }\n\n  clearLoadedData(): void {\n    this.catalogEntries = [];\n    this.endpoints.forEach((ep) => (ep.layers = []));\n  }\n\n  /**\n   * Loads datasets metadata from selected source (CSW server).\n   * Uses pagination set by 'start' attribute of 'dataset' param.\n   * Currently supports only \"Micka\" type of source.\n   * Use all query params (search text, bbox, params.., sorting, start)\n   * @param catalog - Configuration of selected datasource (from app config)\n   */\n  queryCatalog(catalog: HsEndpoint): Observable<any> {\n    this.hsAddDataCatalogueMapService.clearDatasetFeatures(catalog);\n    let query: Observable<any>;\n    switch (catalog.type) {\n      case 'micka':\n        query = this.hsMickaBrowserService.queryCatalog(\n          catalog,\n          this.data,\n          (feature: Feature<Geometry>) =>\n            this.hsAddDataCatalogueMapService.addExtentFeature(feature),\n          this.data.textField,\n        );\n        return query;\n      case 'layman':\n      case 'layman-wagtail':\n        query = this.hsLaymanBrowserService.queryCatalog(\n          catalog,\n          this.data,\n          (feature: Feature<Geometry>) =>\n            this.hsAddDataCatalogueMapService.addExtentFeature(feature),\n        );\n        return query;\n      default:\n        return of(null); // Return a completed observable for unsupported catalog types\n    }\n  }\n\n  /**\n   * Test if layer of selected record is downloadable (KML and JSON files, with direct URL) and gives URL.\n   * @param ds - Datasource of selected layer\n   * @param layer - Metadata record of selected layer\n   * @returns Download URL of layer if possible\n   */\n  layerDownload(ds: HsEndpoint, layer): string {\n    if (ds.download == true) {\n      if (\n        ['kml', 'geojson', 'json'].includes(layer.formats[0].toLowerCase()) &&\n        layer.url.length > 0\n      ) {\n        return layer.url;\n      }\n    }\n    return '#';\n  }\n\n  /**\n   * Get URL for RDF-DCAT record of selected layer\n   * @param ds - Datasource of selected layer\n   * @param layer - Metadata record of selected layer\n   * @returns URL to record file\n   */\n  layerRDF(ds: HsEndpoint, layer): string {\n    return `${ds.url}?request=GetRecordById&id=${layer.id}&outputschema=http://www.w3.org/ns/dcat%23`;\n  }\n\n  /**\n   * Get catalogue layer descriptor\n   * @param ds - Datasource of selected layer\n   * @param layer - Metadata record of selected layer\n   * @returns Type or array of types in which this layer can be added to map\n   */\n  async describeCatalogueLayer(\n    ds: HsEndpoint,\n    layer: HsAddDataLayerDescriptor,\n  ): Promise<WhatToAddDescriptor> {\n    let whatToAdd: WhatToAddDescriptor;\n    if (ds.type == 'micka') {\n      whatToAdd = await this.hsMickaBrowserService.describeWhatToAdd(\n        ds,\n        layer as HsAddDataMickaLayerDescriptor,\n      );\n    } else if (ds.type.includes('layman')) {\n      whatToAdd = await this.hsLaymanBrowserService.describeWhatToAdd(\n        ds,\n        layer as HsAddDataLaymanLayerDescriptor,\n      );\n    } else {\n      whatToAdd = {type: 'none'};\n    }\n    return whatToAdd;\n  }\n\n  /**\n   * Add selected layer to map\n   * @param ds - Datasource of selected layer\n   * @param whatToAdd - Catalogue layer descriptor. Among others holds the type of the layer (supported values: WMS, WFS, Sparql, kml, geojson, json)\n   * @param options - Options for adding the layer\n   */\n  async addLayerToMap(\n    ds: HsEndpoint,\n    whatToAdd: WhatToAddDescriptor<string>,\n    options: AddCatalogueLayerOptions = {useTiles: true},\n  ): Promise<void> {\n    const isLayman = ds.type.includes('layman');\n\n    // Process layer based on type\n    if (whatToAdd.type === 'WMS') {\n      await this.handleWmsLayer(ds, whatToAdd, options, isLayman);\n    } else if (whatToAdd.type === 'WFS') {\n      await this.handleWfsLayer(ds, whatToAdd);\n    } else if (['KML', 'GEOJSON'].includes(whatToAdd.type)) {\n      await this.handleVectorLayer(whatToAdd);\n    } else if (whatToAdd.type === 'WMTS' && ds.type === 'micka') {\n      await this.handleWmtsLayer(whatToAdd);\n    } else {\n      this.hsLayoutService.setMainPanel('layerManager');\n    }\n  }\n\n  /**\n   * Handle adding a WMS layer to the map\n   */\n  private async handleWmsLayer(\n    ds: HsEndpoint,\n    whatToAdd: WhatToAddDescriptor<string>,\n    options: AddCatalogueLayerOptions,\n    isLayman: boolean,\n  ): Promise<void> {\n    whatToAdd.link = Array.isArray(whatToAdd.link)\n      ? whatToAdd.link.filter((link) => link.toLowerCase().includes('wms'))[0]\n      : whatToAdd.link;\n\n    if (ds.type === 'micka' && whatToAdd.recordType !== 'dataset') {\n      this.datasetSelect('url');\n    }\n\n    await this.hsAddDataOwsService.connectToOWS({\n      type: 'wms',\n      uri: decodeURIComponent(whatToAdd.link),\n      layer: isLayman\n        ? whatToAdd.layer\n        : whatToAdd.recordType === 'dataset'\n          ? whatToAdd.name\n          : undefined,\n      connectOptions: {\n        laymanLayer: isLayman ? whatToAdd : undefined,\n        useTiles: options.useTiles,\n      },\n    });\n  }\n\n  /**\n   * Handle adding a WFS layer to the map\n   */\n  private async handleWfsLayer(\n    ds: HsEndpoint,\n    whatToAdd: WhatToAddDescriptor<string>,\n  ): Promise<void> {\n    if (ds.type === 'micka') {\n      await this.handleMickaWfsLayer(whatToAdd);\n    } else {\n      await this.handleLaymanWfsLayer(whatToAdd);\n      this.hsLayoutService.setMainPanel('layerManager');\n    }\n  }\n\n  /**\n   * Handle adding a Micka WFS layer to the map\n   */\n  private async handleMickaWfsLayer(\n    whatToAdd: WhatToAddDescriptor<string>,\n  ): Promise<void> {\n    if (!whatToAdd.workspace) {\n      this.datasetSelect('url');\n    }\n\n    whatToAdd.link = Array.isArray(whatToAdd.link)\n      ? whatToAdd.link.filter((link) => link.toLowerCase().includes('wfs'))[0]\n      : whatToAdd.link;\n\n    await this.hsAddDataOwsService.connectToOWS({\n      type: 'wfs',\n      uri: decodeURIComponent(whatToAdd.link),\n      layer: whatToAdd.workspace\n        ? `${whatToAdd.workspace}:${whatToAdd.name}`\n        : undefined,\n      layerOptions: {\n        style: whatToAdd.style,\n      },\n    });\n  }\n\n  /**\n   * Handle adding a Layman WFS layer to the map\n   */\n  private async handleLaymanWfsLayer(\n    whatToAdd: WhatToAddDescriptor<string>,\n  ): Promise<void> {\n    whatToAdd.link = whatToAdd.link.replace('_wms/ows', '/wfs');\n\n    if (whatToAdd.editable) {\n      // Layman layers with write access\n      const layer = await this.hsAddDataVectorService.addVectorLayer(\n        'wfs',\n        whatToAdd.link,\n        whatToAdd.name,\n        whatToAdd.title,\n        whatToAdd.abstract,\n        whatToAdd.projection,\n        {\n          workspace: whatToAdd.workspace,\n          style: whatToAdd.style,\n          saveToLayman: true,\n        },\n      );\n      this.hsAddDataVectorService.fitExtent(layer);\n      this.datasetSelect('catalogue');\n    } else {\n      // Layman layers without write access\n      const params: OwsConnection = {\n        type: 'wfs',\n        uri: whatToAdd.link,\n        layer: whatToAdd.layer, // basically not used in this case\n        layerOptions: {},\n        connectOptions: {\n          laymanLayer: whatToAdd,\n        },\n      };\n      //Set property sld/qml based on the type - conent is fetched style string\n      if (whatToAdd.styleType) {\n        params.layerOptions[whatToAdd.styleType] = whatToAdd.style;\n      }\n      //Unexpected as layman whatToAdd is expected to have styleType\n      //keeping for backwards compatibility and as fallback\n      else {\n        params.layerOptions.style = whatToAdd.style;\n      }\n      await this.hsAddDataOwsService.connectToOWS(params);\n    }\n  }\n\n  /**\n   * Handle adding a vector layer (KML, GEOJSON) to the map\n   */\n  private async handleVectorLayer(\n    whatToAdd: WhatToAddDescriptor<string>,\n  ): Promise<void> {\n    const layer = await this.hsAddDataVectorService.addVectorLayer(\n      whatToAdd.type.toLowerCase(),\n      whatToAdd.link,\n      whatToAdd.name,\n      whatToAdd.title,\n      whatToAdd.abstract,\n      whatToAdd.projection,\n      {extractStyles: whatToAdd.extractStyles},\n    );\n    this.hsAddDataVectorService.fitExtent(layer);\n  }\n\n  /**\n   * Handle adding a WMTS layer to the map\n   */\n  private async handleWmtsLayer(\n    whatToAdd: WhatToAddDescriptor<string>,\n  ): Promise<void> {\n    if (whatToAdd.recordType === 'service') {\n      this.datasetSelect('url');\n    }\n\n    await this.hsAddDataOwsService.connectToOWS({\n      type: 'wmts',\n      uri: decodeURIComponent(whatToAdd.link),\n      layer: whatToAdd.recordType === 'dataset' ? whatToAdd.name : undefined,\n    });\n  }\n\n  datasetSelect(id_selected: DatasetType): void {\n    this.data.id_selected = id_selected;\n    this.hsAddDataService.selectType(id_selected);\n    this.calcExtentLayerVisibility();\n  }\n\n  /**\n   * Clear the \"query\" property\n   */\n  clear(): void {\n    this.data.query.textFilter = '';\n    this.data.query.title = '';\n    this.data.query.Subject = '';\n    this.data.query.keywords = '';\n    this.data.query.OrganisationName = '';\n    this.data.query.sortby = '';\n  }\n\n  calcExtentLayerVisibility(): void {\n    this.hsAddDataCatalogueMapService.extentLayer.setVisible(\n      this.panelVisible() &&\n        this.hsAddDataService.datasetSelected.getValue() == 'catalogue',\n    );\n  }\n\n  private dataSourceExistsAndEmpty(): boolean {\n    return !!this.endpoints;\n  }\n\n  private panelVisible(): boolean {\n    return this.hsLayoutService.mainpanel === 'addData';\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport {Feature} from 'ol';\nimport {Projection, get as getProjection} from 'ol/proj';\nimport {PROJECTIONS as epsg4326Aliases} from 'ol/proj/epsg4326';\n\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\n\nimport {HsAddDataVectorUtilsService} from './vector-utils.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsAddDataVectorUploadService {\n  private hsLog = inject(HsLogService);\n  private hsMapService = inject(HsMapService);\n  private hsAddDataVectorUtilsService = inject(HsAddDataVectorUtilsService);\n\n  readUploadedFileAsText = (inputFile: any) => {\n    const temporaryFileReader = new FileReader();\n    return new Promise((resolve, reject) => {\n      temporaryFileReader.onerror = () => {\n        temporaryFileReader.abort();\n        reject(new DOMException('Problem parsing input file.'));\n      };\n      temporaryFileReader.onload = () => {\n        resolve(temporaryFileReader.result);\n      };\n      temporaryFileReader.readAsText(inputFile);\n    });\n  };\n  readUploadedFileAsURL = (inputFile: any) => {\n    const temporaryFileReader = new FileReader();\n    return new Promise((resolve, reject) => {\n      temporaryFileReader.onerror = () => {\n        temporaryFileReader.abort();\n        reject(new DOMException('Problem parsing input file.'));\n      };\n      temporaryFileReader.onload = () => {\n        resolve(temporaryFileReader.result);\n      };\n      temporaryFileReader.readAsDataURL(inputFile);\n    });\n  };\n\n  /**\n   * Create a object containing data from XML dataset\n   * @param file - File uploaded by the user\n   * @param type - Data type\n   */\n  async createVectorObjectFromXml(file: File, type: string): Promise<any> {\n    try {\n      const uploadedContent = await this.readUploadedFileAsURL(file);\n      const dataUrl = uploadedContent.toString();\n      const object = {\n        url: dataUrl,\n        name: file.name,\n        title: file.name,\n        type: type,\n      };\n      return object;\n    } catch (e) {\n      this.hsLog.warn('Uploaded file is not supported!');\n      return {error: 'couldNotUploadSelectedFile'};\n    }\n  }\n\n  /**\n   * Read uploaded file and extract the data as JSON object\n   * @param file - File uploaded by the user\n   * @returns JSON object with parsed data\n   */\n  async readUploadedFile(file: File): Promise<any> {\n    let uploadedData;\n    const fileType = this.hsAddDataVectorUtilsService.tryGuessTypeFromNameOrUrl(\n      file.name.toLowerCase(),\n    );\n    switch (fileType) {\n      case 'kml':\n        uploadedData = await this.createVectorObjectFromXml(file, fileType);\n        break;\n      case 'gpx':\n        uploadedData = await this.convertUploadedData(file);\n        break;\n      default:\n        try {\n          const fileContents = await this.readUploadedFileAsText(file);\n          const fileToJSON = JSON.parse(<string>fileContents);\n          if (fileToJSON !== undefined) {\n            fileToJSON.name = file.name.split('.')[0];\n            uploadedData = await this.createVectorObjectFromJson(fileToJSON);\n            return uploadedData;\n          }\n        } catch (e) {\n          this.hsLog.warn('Uploaded file is not supported!', e);\n          return {error: 'couldNotUploadSelectedFile'};\n        }\n    }\n    return uploadedData;\n  }\n\n  /**\n   * Convert uploaded KML or GPX files into GeoJSON format / parse loaded GeoJSON\n   * @param file - Uploaded KML, GPX or GeoJSON files\n   */\n  async convertUploadedData(file: File): Promise<any> {\n    let parser;\n    const uploadedData: any = {};\n    try {\n      const uploadedContent: any = await this.readUploadedFileAsText(file);\n      let fileType = this.hsAddDataVectorUtilsService.tryGuessTypeFromNameOrUrl(\n        file.name.toLowerCase(),\n      );\n      switch (fileType) {\n        case 'kml':\n          const KML = (await import('ol/format/KML')).default;\n          parser = new KML();\n          uploadedData.features = parser.readFeatures(uploadedContent);\n          break;\n        case 'gpx':\n          const GPX = (await import('ol/format/GPX')).default;\n          parser = new GPX();\n          uploadedData.features = parser.readFeatures(uploadedContent);\n          fileType = 'json';\n          break;\n        default:\n      }\n      if (uploadedData?.features?.length > 0) {\n        this.transformFeaturesIfNeeded(\n          uploadedData.features,\n          parser.readProjection(uploadedContent),\n        );\n      }\n      uploadedData.nativeFeatures = parser.readFeatures(uploadedContent);\n      uploadedData.nativeSRS = parser.readProjection(uploadedContent);\n      uploadedData.title = file.name.split('.')[0].trim();\n      uploadedData.name = uploadedData.title;\n      uploadedData.type = fileType;\n      return uploadedData;\n    } catch (e) {\n      this.hsLog.warn('Uploaded file is not supported' + e);\n      return {error: 'couldNotUploadSelectedFile'};\n    }\n  }\n\n  /**\n   * Read features from uploaded file as objects\n   * @param json - Uploaded file parsed as json object\n   * @returns JSON object with file name and read features\n   */\n  async createVectorObjectFromJson(json: any): Promise<any> {\n    let features: Feature[] = [];\n    const GeoJSON = (await import('ol/format/GeoJSON')).default;\n    const format = new GeoJSON();\n    const projection = format.readProjection(json);\n    if (!projection) {\n      return {\n        error: 'ERROR.srsNotSupported',\n      };\n    }\n    if (json.features?.length > 0) {\n      features = format.readFeatures(json);\n      this.transformFeaturesIfNeeded(features, projection);\n    }\n    const object = {\n      name: json.name,\n      title: json.name,\n      srs: this.hsAddDataVectorUtilsService.getFeaturesProjection(projection),\n      features: features, //Features in map crs\n      nativeFeatures: format.readFeatures(json), //Features in native CRS\n      nativeSRS: projection,\n    };\n    return object;\n  }\n\n  /**\n   * Transform features to other projection if needed\n   * @param features - Extracted features from uploaded file\n   * @param projection - Projection to which transform the features\n   */\n  transformFeaturesIfNeeded(features: Feature[], projection: Projection): void {\n    const mapProjection = this.hsMapService.getMap().getView().getProjection();\n    if (projection != mapProjection) {\n      projection = epsg4326Aliases\n        .map((proj) => proj.getCode())\n        .some((code) => code === projection.getCode())\n        ? getProjection('EPSG:4326')\n        : projection;\n      features.forEach((f) =>\n        //TODO: Make it parallel using workers or some library\n        f.getGeometry().transform(projection, mapProjection),\n      );\n    }\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["VectorSource","tileStrategy","VectorLayer","ImageLayer","epsg4326Aliases","getProjection","timeout","map","catchError"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAgBa,gBAAgB,CAAA;AAH7B,IAAA,WAAA,GAAA;AAIE,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,wBAAwB,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAC3D,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAErD,QAAA,IAAA,CAAA,WAAW,GAAkB,IAAI,OAAO,EAAE;AAC1C,QAAA,IAAA,CAAA,eAAe,GAAiC,IAAI,eAAe,CACjE,SAAS,CACV;AACD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AAsB1D,IAAA;IApBC,QAAQ,CAAC,KAAoB,EAAE,UAA0B,EAAA;QACvD,IAAI,UAAU,EAAE;YACd,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;AACjD,YAAA,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE;AACrC,YAAA,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;AACvB,YAAA,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;AACtD,gBAAA,IAAI,MAAM,CAAC,SAAS,EAAE,IAAI,MAAM,EAAE;oBAChC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC1C;YACF;YACA,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;AACrC,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;QAC5D;aAAO;YACL,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC5C;IACF;AAEA,IAAA,UAAU,CAAC,IAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC;+GA/BW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCCY,mBAAmB,CAAA;AAHhC,IAAA,WAAA,GAAA;AAIE,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5B,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACjC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAI/C,IAAA,CAAA,iBAAiB,GAAG,IAAI;AA0JzB,IAAA;AAxJC;;;;;AAKG;AACH,IAAA,iBAAiB,CACf,aAAqB,EACrB,QAAQ,EACR,QAA0B,EAAA;QAE1B,IAAI,CAAC,aAAa,EAAE;YAClB;QACF;AACA,QAAA,IAAI,aAAa;AACjB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC3B,YAAA,KAAK,MAAM,YAAY,IAAI,QAAQ,EAAE;gBACnC,aAAa,GAAG,IAAI,CAAC,oBAAoB,CACvC,aAAa,EACb,YAAY,EACZ,QAAQ,CACT;gBACD,IAAI,aAAa,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE;AAC5D,oBAAA,OAAO,aAAa;gBACtB;YACF;QACF;aAAO;YACL,OAAO,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACrE;IACF;AAEA;;AAEG;AACK,IAAA,oBAAoB,CAC1B,aAAqB,EACrB,YAAY,EACZ,QAA0B,EAAA;AAE1B,QAAA,IAAI,aAAa;QACjB,IAAI,YAAY,CAAC,KAAK,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE;AACjE,YAAA,aAAa,GAAG,IAAI,CAAC,iBAAiB,CACpC,aAAa,EACb,YAAY,CAAC,KAAK,EAClB,QAAQ,CACT;QACH;AACA,QAAA,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE;YAC3C,aAAa,GAAG,IAAI,CAAC,mBAAmB,CACtC,aAAa,EACb,YAAY,EACZ,QAAQ,CACT;QACH;AACA,QAAA,OAAO,aAAa;IACtB;AAEA;;;AAGG;AACK,IAAA,mBAAmB,CACzB,aAAqB,EACrB,YAAY,EACZ,QAA0B,EAAA;AAE1B,QAAA,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE;AAC3C,YAAA,YAAY,CAAC,OAAO,GAAG,IAAI;QAC7B;AACA,QAAA,OAAO,YAAY;IACrB;AAEA,IAAA,gBAAgB,CAAC,OAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,aAAa;AAChB,YAAA,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,IAAI,QAAQ;IACpE;AAEA;;AAEG;IACK,uBAAuB,GAAA;QAC7B,IAAI,CAAC,cAAc,CAAC,uBAAuB,CACzC,sCAAsC,EACtC,qCAAqC,EACrC;AACE,YAAA,iBAAiB,EAAE,qBAAqB;AACxC,YAAA,IAAI,EAAE,SAAS;AAChB,SAAA,CACF;IACH;AAEA;;;AAGG;AACH,IAAA,mBAAmB,CAAC,MAAuB,EAAA;AACzC,QAAA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;AACtB,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,IAAI;YACF,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACxE,YAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;QAC9C;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,uBAAuB,EAAE;AAC9B,YAAA,OAAO,SAAS;QAClB;IACF;AAEA;;AAEG;AACH,IAAA,kBAAkB,CAAC,OAAmB,EAAA;AACpC,QAAA,IAAI;YACF,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;AACzD,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC;YAEhE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAI;;gBAE1C,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,IAAI;;AAEvC,gBAAA,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE;AAC3C,oBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;gBACf;;AAEA,gBAAA,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE;AAC7C,oBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK;gBAChB;;AAEA,gBAAA,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE;AACtC,oBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;gBACf;;AAEA,gBAAA,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE;AACxC,oBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK;gBAChB;AACA,gBAAA,OAAO,GAAG;AACZ,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,SAAS;QAC/C;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,uBAAuB,EAAE;AAC9B,YAAA,OAAO,SAAS;QAClB;IACF;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,IAAmB,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;QAC1C;IACF;+GAlKW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCFY,sBAAsB,CAAA;AAiBjC,IAAA,WAAA,GAAA;AAhBA,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAG7C,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,WAAW,GAAG,KAAK;;AAInB,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB;AAC/D,QAAA,IAAA,CAAA,mBAAmB,GAAoB,IAAI,OAAO,EAAE;QAGlD,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,SAAS,CAAC,MAAK;YAC5D,IAAI,CAAC,WAAW,EAAE;AACpB,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE;AACb,QAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,GAAG,IAAI;IAC9C;IAEA,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC;IAC/C;AAEA;;;AAGG;AACH,IAAA,SAAS,CAAC,GAAW,EAAA;AACnB,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;IAChB;IAEA,qBAAqB,CAAC,QAAa,EAAE,WAA4B,EAAA;QAC/D,IAAI,CAAC,QAAQ,EAAE;YACb;QACF;AACA,QAAA,MAAM,WAAW,GAAG,WAAW,KAAK,MAAM;AAC1C,QAAA,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;YAC5B,MAAM,SAAS,GAAG;AAChB,mBAAG,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE;AAC1B,oBAAA,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE;AACzB,oBAAA,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE;AAC1B,oBAAA,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE;AAC5B,kBAAE,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE;AAEnC,YAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;gBAC5B,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa;AAC9C,sBAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,CAAC,EAAE,KACD,SAAS,KAAK,EAAE,CAAC,WAAW,EAAE;AAC9B,wBAAA,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE;sBAE3D,SAAS,KAAK,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;AAC9C,wBAAA,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE;AAChC,4BAAA,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YACxC;iBAAO;gBACL,MAAM,mBAAmB,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC;AAE7D;;;AAGG;gBACH,KAAK,CAAC,OAAO,GAAG;sBACZ,SAAS,KAAM,IAAI,CAAC,aAAwB,CAAC,WAAW;sBACvD,IAAI,CAAC;yBACH,KAAK,CAAC,GAAG;AACT,yBAAA,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC;YACrD;QACF;IACF;AAEA,IAAA,mBAAmB,CAAC,CAAM,EAAA;QACxB,IAAI,YAAY,GAAG,sCAAsC;AACzD,QAAA,MAAM,YAAY,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,eAAe;AAEnE,QAAA,IAAI,CAAC,EAAE,MAAM,KAAK,GAAG,EAAE;YACrB,YAAY,GAAG,8BAA8B;QAC/C;aAAO,IAAI,YAAY,IAAI,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE;YACvE,YAAY,GAAG,uDAAuD;QACxE;AAAO,aAAA,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YAC5C,YAAY,GAAG,kCAAkC;QACnD;AAAO,aAAA,IAAI,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;YAChD,YAAY,GAAG,YAAY;QAC7B;aAAO;AACL,YAAA,YAAY,GAAG,CAAA,UAAA,EAAa,YAAY,CAAA,CAAE;QAC5C;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,uBAAuB,CACzC,sCAAsC,EACtC,YAAY,EACZ,EAAC,iBAAiB,EAAE,wBAAwB,EAAE,WAAW,EAAE,KAAK,EAAC,CAClE;IACH;AAEA,IAAA,iBAAiB,CAAC,CAAC,EAAA;QACjB,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC7B;;AAGA,IAAA,UAAU,CAAC,GAAG,EAAA;QACZ,UAAU,CAAC,MAAK;YACd,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC,EAAE,CAAC,CAAC;IACP;AAEA;;;;;AAKG;AACH,IAAA,0BAA0B,CAAC,IAAc,EAAA;QACvC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,YAAA,OAAO,KAAK;QACd;QACA,IAAI,KAAK,GAAG,KAAK;AACjB,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,IAAI,CAAC,GAAG,EAAE;gBACR,KAAK,GAAG,KAAK;YACf;iBAAO;gBACL,IACE,IAAI,CAAC;AACF,qBAAA,MAAM;AACN,qBAAA,OAAO;AACP,qBAAA,aAAa;AACb,qBAAA,OAAO;AACP,qBAAA,WAAW,EAAE,IAAI,GAAG,CAAC,WAAW,EAAE,EACrC;oBACA,KAAK,GAAG,IAAI;gBACd;YACF;QACF;AACA,QAAA,OAAO,KAAK;IACd;AAEA;;;;;;AAMG;IACH,oBAAoB,CAClB,aAA+B,EAC/B,QAAgB,EAAA;QAEhB,MAAM,aAAa,GAAG,EAAE;AACxB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AAChC,YAAA,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE;AACjC,gBAAA,IAAI,KAAK,CAAC,OAAO,EAAE;oBACjB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACrC;AAAO,qBAAA,IAAI,KAAK,CAAC,KAAK,EAAE;AACtB,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;AAC/D,oBAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACrB,wBAAA,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;oBAC5B;gBACF;YACF;QACF;aAAO;YACL,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC;QAC5C;AACA,QAAA,OAAO,aAAa,CAAC,IAAI,EAAE;IAC7B;AAEA,IAAA,gBAAgB,CAAC,OAAO,EAAA;AACtB,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;gBAC7B,IAAI,GAAG,GAAa,EAAE;AACtB,gBAAA,IAAI,CAAC,CAAC,IAAI,EAAE;AACV,oBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBAClB;AACA,gBAAA,IAAI,CAAC,CAAC,KAAK,EAAE;oBACX,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACzC,oBAAA,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAC5B;AACA,gBAAA,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AACtB,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,EAAE;IACX;+GA/LW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cADV,MAAM,EAAA,CAAA,CAAA;;4FAClB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;MC6BnB,kBAAkB,CAAA;AAa7B,IAAA,WAAA,GAAA;AAZA,QAAA,IAAA,CAAA,8BAA8B,GAAG,MAAM,CAAC,8BAA8B,CAAC;AACvE,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACvD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/B,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAGrD,IAAA,CAAA,cAAc,GAAG,KAAK;QAIpB,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA;;AAEG;IACH,gBAAgB,GAAA;QACd,IAAI,CAAC,IAAI,GAAG;AACV,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,cAAc,EAAE,EAAE;AAClB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,SAAS,EAAE,GAAG;AACd,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE,cAAc;AACrB,YAAA,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,YAAY,EAAE,MAAM;AACrB,aAAA;AACD,YAAA,IAAI,EAAE,KAAK;SACZ;IACH;AAEA;;;AAGG;AACH,IAAA,MAAM,yBAAyB,CAC7B,OAAoC,EACpC,OAAsB,EAAA;QAEtB,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACvC;QACF;AACA,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YACvE;QACF;AACA,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC;AACxC,YAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE;AAC7C,gBAAA,IAAI,CAAC,sBAAsB,CAAC,qBAAqB,CAC/C,IAAI,CAAC,IAAI,CAAC,MAAM,EAChB,QAAQ,CACT;gBACD,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;YACtD;QACF;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAClD;IACF;AAEA;;;AAGG;IACH,MAAM,WAAW,CAAC,QAAQ,EAAA;AACxB,QAAA,IAAI;YACF,MAAM,IAAI,GAAG,QAAQ;AACrB,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,cAAc,CAAC,uBAAuB,CACzC,sCAAsC,EACtC,IAAI,CAAC,iBAAiB,CAAC,+BAA+B,CACpD,eAAe,EACf,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,EACxB,EAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAC,CAC7B,EACD;AACE,oBAAA,iBAAiB,EAAE,oBAAoB;AACxC,iBAAA,CACF;AACD,gBAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,GAAG,KAAK;gBAC/C;YACF;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC7B,iBAAA,MAAM;AACN,iBAAA,OAAO;AACP,iBAAA,aAAa;AACb,iBAAA,OAAO;AACP,iBAAA,WAAW,EAAE;;YAGhB,IAAI,CAAC,IAAI,CAAC,KAAK;AACb,gBAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,cAAc;AACzE,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,cAAc,IAAI,IAAI,CAAC,qBAAqB,EAAE;AACpE,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI;YAC1C;YACA,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;YACpD,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc;AACvC,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;kBAC3B,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,GAAG;kBACxC,EAAE;AACN,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;kBAC3B,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG;kBACpC,EAAE;YACN,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE;kBACpC,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,QAAQ,EAAE;kBAC5C,EAAE;AACN,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAU,KAAI;gBAC7D,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;oBAC/B,GAAG,CAAC,IAAI,CAAC;AACP,wBAAA,GAAG,CAAC;AACJ,wBAAA,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,eAAe,GAAG,iBAAiB,GAAG,UAAU;AAClE,qBAAA,CAAC;gBACJ;AACA,gBAAA,OAAO,GAAG;YACZ,CAAC,EAAE,EAAE,CAAC;AAEN;;AAEG;YACH,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ;AACrC,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACtB,kBAAE;AACE,oBAAA;AACE,wBAAA,IAAI,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI;AAC/B,wBAAA,EAAE,EAAE,CAAC;AACL,wBAAA,iBAAiB,EAAE,IAAI;AACvB,wBAAA,IAAI,EAAE,UAAU;AACjB,qBAAA;AACF;AACH,kBAAE,IAAI,CAAC,MAAM;YACf,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE;AAChC,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AAC9C,oBAAA,GAAG,CAAC;AACJ,oBAAA,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,eAAe,GAAG,iBAAiB,GAAG,UAAU;AAClE,iBAAA,CAAC,CAAC;YACL;AACA,YAAA,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CACvC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CACvC;YACD,IAAI,CAAC,IAAI,CAAC,GAAG;AACX,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KACtB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,CAAC,CAC3D,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAExB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU;AAClC,YAAA,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE;AACnE;;AAEK;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC;oBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC3C,oBAAA,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,UAAU,CAAC;AAC5D,oBAAA,MAAM,EAAE;wBACN,IAAI,CAAC,UAAU,CAAC,IAAI;wBACpB,IAAI,CAAC,UAAU,CAAC,IAAI;wBACpB,IAAI,CAAC,UAAU,CAAC,IAAI;wBACpB,IAAI,CAAC,UAAU,CAAC,IAAI;AACrB,qBAAA;AACF,iBAAA,CAAC;YACJ;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CACjE,IAAI,CAAC,IAAI,CAAC,GAAG,CACd;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACnE,OAAO;gBACP,KAAK;gBACL,KAAK;gBACL,KAAK;AACN,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACnE,SAAS;gBACT,MAAM;AACP,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,GAAG,KAAK;QACjD;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC;QACpB;IACF;AAEA;;;AAGG;AACH,IAAA,MAAM,SAAS,CACb,WAAqB,EACrB,OAAiB,EACjB,YAA2B,EAAA;AAE3B,QAAA,IACE,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS;AAC9B,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS;YAChC,CAAC,IAAI,CAAC,cAAc,EAAE;AACtB,YAAA,CAAC,IAAI,CAAC,gBAAgB,EAAE,EACxB;YACA;QACF;AACA;;;;;AAKG;AACH,QAAA,MAAM,aAAa,GACjB,WAAW,KAAK;AACd,cAAE,IAAI,CAAC,IAAI,CAAC;AACZ,cAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AAChD,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;AACjC,gBAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;AAC9C,gBAAA,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,YAAY,EAAE,IAAI;AACtE,gBAAA,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;AACnC,gBAAA,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;AACnC,gBAAA,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;AAC7B,gBAAA,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;AAClB,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;AACpB,gBAAA,GAAG,YAAY;aAChB,CAAC;SACH;AACD,QAAA,IAAI,CAAC,YAAY,EAAE,eAAe,EAAE;YAClC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAClD;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE;QACzC,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,EAAE;QACjD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,EAAE;AAC3D,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,cAAc,CAAC;QACnD;AACA,QAAA,OAAO,UAAU;IACnB;AAEA;;;;;;;;;;AAUG;AACH,IAAA,MAAM,QAAQ,CACZ,MAAiC,EACjC,OAAqB,EAAA;QAErB,MAAM,YAAY,GAAG,EAAE;QACvB,MAAM,UAAU,GAAG,EAAE;;;;AAKrB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC3B,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC;QAC9C;;AAGA,QAAA,MAAM,YAAY,GAAQ;AACxB;;;;AAIG;YACH,GAAG,EAAE,IAAI,CAAC;AACR,kBAAE,IAAI,CAAC,cAAc;AACnB,sBAAE,IAAI,CAAC,IAAI,CAAC;AACZ,sBAAE,IAAI,CAAC,YAAY;AACrB,kBAAE,IAAI,CAAC,IAAI,CAAC,WAAW;YACzB,YAAY;AACZ,YAAA,UAAU,EAAE,CAAA,KAAA,EAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA,CAAE;AACnC,YAAA,MAAM,EAAE,MAAM,CAAC,MAAM,CACnB;gBACE,MAAM,EAAE,OAAO,CAAC,WAAW;AAC5B,aAAA,EACD,EAAE,CACH;AACD,YAAA,WAAW,EAAE,WAAW;SACzB;AACD,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;QACvC;aAAO,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;AACzD,YAAA,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,GAAG;kBACZ,QAAQ,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;kBACzC,SAAS;YACf,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,EAAC,MAAM,EAAC,CAAC;QAC9C;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC;AAClB,cAAE,IAAI,CAAC,cAAc;AACnB,kBAAE,IAAI,cAAc,CAAC,YAAY;AACjC,kBAAE,IAAI,GAAG,CAAC,YAAY;AACxB,cAAE,IAAI,cAAc,CAAC,YAAY,CAAC;AACpC;;;AAGG;QACH,IAAI,CAAC,IAAI,CAAC,MAAM;YACd,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK;AACrC,kBAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI;kBACrD,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC;AAErD,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC;AAC7B,YAAA,UAAU,EAAE;gBACV,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAE,OAAO,CAAC,KAAK;AACnB,gBAAA,SAAS,EAAE,IAAI;gBACf,IAAI,EAAE,OAAO,CAAC,IAAI;AAClB,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;AACpB,gBAAA,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;gBACxB,UAAU;AACV,gBAAA,GAAG,OAAO;AACX,aAAA;YACD,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,MAAM;SACP;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;AAC1B,YAAA,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE;AACpC,gBAAA,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9C,aAAA,CAAC;QACJ;AACA,QAAA,OAAO,IAAI,IAAI,CAAC,WAAsC,CAAC;IACzD;AAEA;;;;;AAKG;IACH,eAAe,CACb,MAAiC,EACjC,OAAqB,EAAA;AAErB,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,QAAA,MAAM,QAAQ,GACZ,QAAQ,CAAC,MAAM,KAAK;AAClB,cAAE,CAAA,EAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAA,CAAA,EAAI,QAAQ,CAAC,CAAC,CAAC,CAAA,MAAA;cACvC,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,QAAQ;AAEtC,QAAA,MAAM,YAAY,GAAG,IAAIA,MAAY,CAAC;YACpC,MAAM,EAAE,IAAI,QAAQ,EAAE;YACtB,GAAG,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,KAAI;gBACtC,IAAI,CAAC,UAAU,EAAE;oBACf,OAAO,CAAA,EAAG,QAAQ,CAAA,OAAA,CAAS;gBAC7B;;gBAEA,MAAM,IAAI,GAAG;AACV,qBAAA,OAAO;qBACP,KAAK,CAAC,WAAW;AACjB,qBAAA,GAAG,EAAE;AAER,gBAAA,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;AACjC,oBAAA,CAAC,EAAE,MAAM;AACT,oBAAA,cAAc,EAAE,MAAM;AACtB,oBAAA,UAAU,EAAE,0BAA0B;oBACtC,QAAQ,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE;AAC/B,oBAAA,YAAY,EAAE,sBAAsB;AACpC,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,SAAS,EAAE,GAAG;AACd,oBAAA,KAAK,EAAE,IAAI;AACZ,iBAAA,CAAC;gBACF,OAAO,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,EAAE,EAAE;YAC3C,CAAC;AACD,YAAA,QAAQ,EAAEC,IAAY,CACpB,SAAS,CAAC;AACR,gBAAA,QAAQ,EAAE,GAAG;AACd,aAAA,CAAC,CACH;AACF,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,CAC7B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EACtD,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE,CACrD;AAED,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC;AAC7B,YAAA,UAAU,EAAE;gBACV,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAE,OAAO,CAAC,KAAK;AACnB,gBAAA,SAAS,EAAE,IAAI;gBACf,IAAI,EAAE,OAAO,CAAC,IAAI;AAClB,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;AACpB,gBAAA,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;AACxB,gBAAA,kBAAkB,EAAE,IAAI;AACxB,gBAAA,GAAG,OAAO;AACX,aAAA;AACD,YAAA,MAAM,EAAE,YAAY;SACrB;AAED,QAAA,OAAO,IAAI,WAAW,CAAC,WAAW,CAAC;IACrC;AAEA;;AAEG;IACK,YAAY,GAAA;AAClB,QAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,mBAAmB;IACpD;AAEA;;AAEG;AACH,IAAA,MAAM,mBAAmB,CACvB,MAAiC,EACjC,OAAqB,EAAA;AAErB,QAAA,IAAI;AACF,YAAA,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAI;AACrB,gBAAA,OAAO,MAAM,IAAI,CAAC,8BAA8B,CAAC,OAAO,CACtD,CAAA,EAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAA,CAAA,EAAI,CAAC,CAAC,EAAE,CAAA,CAAE,CACnC;YACH,CAAC,CAAC,CACH;YACD,MAAM,aAAa,GAAG;AACnB,iBAAA,GAAG,CAAC,CAAC,CAAC,KAAI;gBACT,IACE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;qBAC1D,MAAM,GAAG,CAAC,EACb;AACA,oBAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;gBAChE;AACF,YAAA,CAAC;iBACA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,aAAa,CAAC;QACnE;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;gBACrC,IAAI,CAAC,cAAc,CAAC,uBAAuB,CACzC,sCAAsC,EACtC,wCAAwC,EACxC;AACE,oBAAA,iBAAiB,EAAE,oBAAoB;AACvC,oBAAA,OAAO,EAAE,CAAC,CAAA,EAAG,OAAO,CAAC,KAAK,CAAA,CAAE,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACxD,iBAAA,CACF;YACH;iBAAO;gBACL,IAAI,CAAC,cAAc,CAAC,uBAAuB,CACzC,sCAAsC,EACtC,qCAAqC,EACrC;AACE,oBAAA,iBAAiB,EAAE,oBAAoB;AACvC,oBAAA,IAAI,EAAE,SAAS;AAChB,iBAAA,CACF;AACD,gBAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;YAC/D;QACF;IACF;AAEA;;;AAGG;AACH,IAAA,SAAS,CAAC,MAAuB,EAAA;AAC/B,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;YACtB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC;QACjE;IACF;AAEA;;;AAGG;IACH,MAAM,aAAa,CAAC,OAAgB,EAAA;QAClC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC;AAC5D;;;;;;AAMG;AACH,QAAA,IAAI,QAAQ,GAAG,WAAW,CAAC,QAAQ;QACnC,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAC7C,YAAA,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAC1C,CAAC,EACD,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CACzC;AACD,YAAA,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACrE,YAAA,QAAQ,GAAG,SAAS,GAAG,UAAU;QACnC;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;AACxE,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAC/D,IAAI,CAAC,IAAI,CAAC,WAAW,CACtB;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI;AAChC,QAAA,MAAM,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC;IAC/C;AAEA;;AAEG;AACH,IAAA,MAAM,gBAAgB,GAAA;QACpB,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG;AACvD,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAC/D,IAAI,CAAC,IAAI,CAAC,WAAW,CACtB;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,KAAK;AACjC,QAAA,MAAM,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC;IAC/C;AAEA;;;AAGG;IACH,MAAM,WAAW,CAAC,QAAmB,EAAA;AACnC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG;AACvD,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE;YACvD,IAAI,CAAC,sBAAsB,CAAC,GAAG,GAAG,eAAe,CAAC;AAClD,YAAA,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AACjC,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC7D,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QACxB;IACF;AACA;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;IACrE;AAEA;;AAEG;IACH,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;IACvE;AACA;;AAEG;AACH,IAAA,cAAc,CAAC,GAAW,EAAA;AACxB,QAAA,OAAO,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IACjE;AACA;;AAEG;IACK,oBAAoB,CAC1B,MAAqC,EACrC,IAAmB,EAAA;AAEnB,QAAA,OAAO,eAAe,CACpB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EACpD,OAAO,GAAG,IAAI,CAAC,GAAG,EAClB,IAAI,CAAC,cAAc,CACpB;IACH;+GA1iBW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,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,kBAAkB,cADN,MAAM,EAAA,CAAA,CAAA;;4FAClB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;MCcnB,eAAe,CAAA;AA2B1B,IAAA,WAAA,GAAA;AA1BQ,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACjC,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CAAC,2BAA2B,CAAC;AACzD,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AACpC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC/C,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACrD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAMvC,QAAA,IAAA,CAAA,qBAAqB,GAA+B,IAAI,GAAG,EAAE;AACrE,QAAA,IAAA,CAAA,gBAAgB,GAAkB,IAAI,OAAO,EAAE;AAE/C,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE;AAC1D,YAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAC3C,GAAG,EACH,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,CACpC;AACH,QAAA,CAAC,2DAAC;QAGA,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA;;AAEG;IACH,gBAAgB,GAAA;QACd,IAAI,CAAC,IAAI,GAAG;AACV,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,cAAc,EAAE,SAAS;AACzB,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,YAAY,EAAE,OAAO;AACtB,aAAA;SACF;QACD,IAAI,CAAC,kBAAkB,GAAG;YACxB,WAAW;YACX,WAAW;YACX,WAAW;YACX,WAAW;SACZ;IACH;AAEA;;;AAGG;AACH,IAAA,MAAM,yBAAyB,CAC7B,OAAoC,EACpC,YAA2B,EAAA;QAE3B,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACvC;QACF;AACA,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YACvE;QACF;AACA,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC9C,YAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE;AAC7C,gBAAA,IAAI,CAAC,sBAAsB,CAAC,qBAAqB,CAC/C,IAAI,CAAC,IAAI,CAAC,MAAM,EAChB,KAAK,CACN;AACD,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC;AAC5D,gBAAA,IAAI,CAAC,YAAY,EAAE,eAAe,EAAE;oBAClC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBAClD;AACA,gBAAA,OAAO,UAAU;YACnB;QACF;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAClD;IACF;AAEA;;;AAGG;IACH,MAAM,iBAAiB,CAAC,QAAgB,EAAA;AACtC,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAE5B,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC;AAC/B,iBAAA,MAAM;AACN,iBAAA,OAAO;AACP,iBAAA,aAAa;AACb,iBAAA,OAAO;AACP,iBAAA,WAAW,EAAE;AAEhB,YAAA,IAAI,IAAI,GAAQ,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC;AAC1D,YAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,EAAE;AAChC,gBAAA,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAC;YACrC;iBAAO;AACL,gBAAA,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC;YACjC;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACvB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,EAAE,KAAK;YACtD,IAAI,CAAC,IAAI,CAAC,KAAK;gBACb,OAAO,YAAY,KAAK;AACtB,sBAAE;sBACA,IAAI,CAAC;AACF,yBAAA,WAAW;AACX,yBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACb,yBAAA,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;YAEtB,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,kBAAkB;YACjE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW;kBACxD,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CACnC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,sBAAsB,CAAC,aAAa;AAEtE,kBAAE,IAAI,CAAC,eAAe,CAAC,WAAW;AACpC,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW;AAC/D,kBAAE,IAAI,CAAC,eAAe,CAAC;kBACrB,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;YAEtC,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;AAEvE,gBAAA,MAAM,OAAO,GAAG,KAAK,IAAI,KAAK,CAAC,UAAU,GAAG,KAAK,GAAG,KAAK;gBACzD,IAAI,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,SAAS,EAAE;AAC5C,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC;gBAC/C;qBAAO;AACL,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE;oBACnB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC;gBACnD;gBAEA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;gBACzC,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,OAAO,QAAQ,IAAI,QAAQ,EAAE;wBAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAC/B;yBAAO;wBACL,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,EAAE;4BAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;wBAC1B;oBACF;gBACF;gBAEA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;AACnC,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG;wBACf,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,OAAO,CAAC;qBACzD;AACD,oBAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CACnD,OAAO,GAAG,OAAO,CAClB,EAAE;wBACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;oBAC1B;gBACF;YACF;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YAEpE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,WAAW;AAC5D,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAC/C,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;gBAC9B,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC;AAC/B,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CACb,CAAA,uBAAA,EAA0B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA,qBAAA,EAAwB,YAAY,CAAA,UAAA,CAAY,CAC1F;YACH;YAEA,IAAI,CAAC,IAAI,CAAC,GAAG;AACX,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AACxD,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACnB,IACE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE;AAC7B,gBAAA,IAAI,CAAC,sBAAsB,CAAC,aAAa,EACzC;AACA,gBAAA,IAAI;AACF,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC;0BACvC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CACrB,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,sBAAsB,CAAC,aAAa;AAE/D,0BAAE,IAAI,CAAC,IAAI,CAAC,MAAM;oBACpB,IAAI,CAAC,wBAAwB,CAC3B,MAAM,EACN,IAAI,CAAC,sBAAsB,CAAC,aAAuB,CACpD;gBACH;gBAAE,OAAO,CAAC,EAAE;AACV,oBAAA,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC;gBACpB;YACF;AACA,YAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,GAAG,KAAK;QACjD;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC;QACpB;IACF;IAEA,cAAc,CAAC,GAAQ,EAAE,GAAW,EAAA;QAClC,IAAI,IAAI,GAAG,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,aAAa,CAAC,gBAAgB;AACrE,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AAC3D,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;QAC3D,IAAI,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,WAAW,CAAC;QACvC,OAAO,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC;IAChD;AAEA;;AAEG;AACH,IAAA,mBAAmB,CAAC,MAAuB,EAAA;AACzC,QAAA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;AACtB,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3D,QAAA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;YACvC,OAAO,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9C,QAAA,CAAC,CAAC;QACF,MAAM,YAAY,GAAe,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAClD,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;AAC3D,QAAA,CAAC,CAAC;QACF,OAAO,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,YAAY,CAAC;IAClE;AAEA;;;AAGG;AACH,IAAA,kBAAkB,CAAC,OAAe,EAAA;QAChC,QAAQ,OAAO;AACb,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,MAAM;AACf,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,MAAM;AACf,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,OAAO;AAChB,YAAA;AACE,gBAAA,OAAO,MAAM;;IAEnB;AAEA;;AAEG;IACH,wBAAwB,CACtB,MAAgC,EAChC,aAAsB,EAAA;AAEtB,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,YAAA,KAAK,CAAC,OAAO,GAAG,IAAI;AACpB,YAAA,MAAM,MAAM,GAAG;AACb,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;AAC1B,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,UAAU,EAAE,MAAM;aACnB;AACD,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,GAAG,WAAW,CAAC;gBAClE,KAAK,CAAC,IAAI;AACZ,YAAA,MAAM,GAAG,GAAG;AACV,gBAAA,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC5D,mBAAmB,CAAC,MAAM,CAAC;AAC5B,aAAA,CAAC,IAAI,CAAC,GAAG,CAAC;YAEX,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,aAAa,CAAC;QACnD;IACF;AAEA;;AAEG;AACK,IAAA,iBAAiB,CACvB,GAAW,EACX,KAA6B,EAC7B,aAAsB,EAAA;;AAGtB,QAAA,MAAM,aAAa,GAAG,IAAI,OAAO,EAAQ;;QAGzC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC;AAClD,QAAA,IAAI,CAAC;aACF,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACrC,YAAA,YAAY,EAAE,MAAM;AACpB,YAAA,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;SACxC;aACA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAChC,QAAQ,CAAC,MAAK;YACZ,IAAI,aAAa,EAAE;gBACjB,UAAU,CACR,KAAK,CAAC,SAAS,CAAC,EAChB,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,GAAG,IAAI,CACtD;YACH;AACF,QAAA,CAAC,CAAC;AAEH,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;AACtB,gBAAA,MAAM,OAAO,GAAG,IAAI,SAAS,EAAE;gBAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,iBAAiB,CAAC;AACjE,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe;AAChC,gBAAA,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;;gBAEnE,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;AAClD,oBAAA,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;gBAClE;gBACA,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI;AACnD,gBAAA,KAAK,CAAC,OAAO,GAAG,KAAK;AACrB,gBAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC;YACxC,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;AACvB,gBAAA,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI;AAC1B,gBAAA,KAAK,CAAC,OAAO,GAAG,KAAK;;YAEvB,CAAC;AACF,SAAA,CAAC;IACN;AAEA;;AAEG;AACK,IAAA,aAAa,CAAC,GAAW,EAAA;QAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC;QACzD,IAAI,aAAa,EAAE;YACjB,aAAa,CAAC,IAAI,EAAE;YACpB,aAAa,CAAC,QAAQ,EAAE;AACxB,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC;QACxC;IACF;AAEA;;AAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAA;AAC7B,QAAA,IACG,KAAgC,CAAC,YAAY,KAAK,SAAS;YAC5D,KAAK,CAAC,OAAO,EACb;AACA,YAAA,IAAI,CAAC,wBAAwB,CAAC,CAAC,KAAK,CAAC,CAAC;QACxC;IACF;AAEA;;;AAGG;AACH,IAAA,YAAY,CAAC,IAAU,EAAA;AACrB,QAAA,IAAI;YACF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACnC,gBAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACrB,oBAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;AAClC,oBAAA,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE;wBAC7C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC9B;oBACA,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;wBAC7D,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;oBAC1D;AACA,oBAAA,OAAO,IAAI,CAAC,GAAG,CAAC;gBAClB;gBACA,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,EAAE;oBAChC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5B,oBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE;wBACnC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;oBAChC;gBACF;YACF;QACF;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC;QACpB;IACF;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,IAAI,EAAA;QACZ,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;YAC1B,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,QAAQ;YAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACrB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACrC;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAW,KACvD,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,CACtC;IACH;AAEA;;;;;AAKG;IACH,sBAAsB,CACpB,UAA2B,EAC3B,YAA2B,EAAA;QAE3B,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;AACvD,QAAA,IAAI,CAAC,YAAY,EAAE,eAAe,EAAE;YAClC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAClD;AACA,QAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE;QACzC,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,EAAE;IACnD;AAEA;;;;AAIG;AACH,IAAA,SAAS,CACP,WAAqB,EACrB,OAAiB,EACjB,YAA2B,EAAA;AAE3B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,WAAW;QAC/B,MAAM,UAAU,GAAoB,EAAE;QACtC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACpC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAC,YAAY,EAAC,EAAE,UAAU,CAAC;QAC9D;AACA,QAAA,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,YAAY,CAAC;AACrD,QAAA,OAAO,UAAU;IACnB;AAEA;;;;;;AAMG;AACH,IAAA,oBAAoB,CAClB,KAAK,EACL,OAAoC,EACpC,UAA2B,EAAA;AAE3B,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,EAAE,KAAK;QACzC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;AACvC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;gBACpC,SAAS,EAAE,KAAK,CAAC,IAAI;gBACrB,IAAI,EACF,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;oBAC1C,OAAO,CAAC,YAAY,EAAE,IAAI;AAC5B,gBAAA,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;AAClB,gBAAA,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,uBAAuB,CAAC,GAAG,KAAK,GAAG,SAAS;AACjE,gBAAA,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,SAAS;gBAChD,GAAG,OAAO,EAAE,YAAY;AACzB,aAAA,CAAC;AACF,YAAA,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC3B;AACA,QAAA,IAAI,KAAK,CAAC,KAAK,EAAE;AACf,YAAA,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE;gBAClC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC;YAC1D;QACF;IACF;AAEA;;;;;;AAMG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAqB,EAAA;AACnC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxE;;;AAGG;AACH,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC;AAC/C,cAAE;cACA,KAAK,CAAC;AACN,kBAAE,KAAK,CAAC,YAAY,GAAG;AACvB,kBAAE,IAAI,CAAC;QACX,MAAM,WAAW,GAAG;cAChB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG;cACtC,SAAS;AACb,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,QAAA,MAAM,SAAS,GAAG,IAAIC,QAAW,CAAC;AAChC,YAAA,UAAU,EAAE;gBACV,IAAI,EAAE,OAAO,CAAC,SAAS;gBACvB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;AAC1C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,GAAG,OAAO;AACV,gBAAA,MAAM,EAAE,WAAW;AACnB,gBAAA,OAAO,EAAE,YAAY;AACtB,aAAA;YACD,MAAM,EAAE,IAAI,SAAS,CAAC;AACpB,gBAAA,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;AAC/B,gBAAA,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa;gBACtC,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC;gBAC9C,UAAU,EAAE,OAAO,CAAC,SAAS;AAC7B,gBAAA,SAAS,EAAE,SAAS;AACpB,gBAAA,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE;AACpE,gBAAA,WAAW,EAAE,WAAW;AACxB,gBAAA,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;aACxC,CAAC;AACF,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC;;AAE9B,SAAA,CAAC;AACF,QAAA,IAAI,OAAO,CAAC,aAAa,EAAE;AACzB,YAAA,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC;QACnD;AACA,QAAA,IAAI,OAAO,CAAC,aAAa,EAAE;AACzB,YAAA,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC;QACnD;AAEA,QAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE;AAC7C,YAAA,KAAK,CAAC,OAAO,GAAG,SAAS;QAC3B;AACA,QAAA,OAAO,SAAS;IAClB;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,MAAuB,EAAA;AAC/B,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;YACtB,IAAI,CAAC,YAAY,CAAC,qBAAqB,CACrC,CAAC,EACD,iBAAiB,CAAC,cAAc,CACjC;YACD,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxC;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,cAAc,CAAC;IACnD;+GA3hBW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA;;4FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCVY,eAAe,CAAA;AAa1B,IAAA,WAAA,GAAA;AAZQ,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CAAC,2BAA2B,CAAC;AACjE,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;QAK7D,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;YAClD,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC;AAC1C,iBAAA,OAAO;AACP,iBAAA,aAAa;AACb,iBAAA,OAAO;AACP,iBAAA,WAAW,EAAE;AAClB,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA;;AAEG;IACH,gBAAgB,GAAA;QACd,IAAI,CAAC,IAAI,GAAG;AACV,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,cAAc,EAAE,EAAE;AAClB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,SAAS,EAAE,GAAG;AACd,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,YAAY,EAAE,OAAO;AACtB,aAAA;SACF;IACH;AAEA;;;AAGG;AACH,IAAA,MAAM,yBAAyB,CAC7B,OAAoC,EACpC,OAAsB,EAAA;QAEtB,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACvC;QACF;AACA,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YACvE;QACF;AACA,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,oBAAoB,CAC7B,OAAO,CAAC,QAAQ,EAChB,IAAI,CAAC,sBAAsB,CAAC,aAAuB,CACpD;AACD,YAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE;AAC7C,gBAAA,IAAI,CAAC,sBAAsB,CAAC,qBAAqB,CAC/C,IAAI,CAAC,IAAI,CAAC,MAAM,EAChB,KAAK,CACN;gBACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC;YAC7C;QACF;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAClD;IACF;AAEA;;AAEG;AACH,IAAA,cAAc,CAAC,CAAC,EAAA;QACd,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,oBAAoB;AAC7D,cAAE;cACA,KAAK;QACT,IAAI,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,QAAQ,EAAE;AAC/C,YAAA,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa;AAC1C,YAAA,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,QAAQ,EAAE;gBACrC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC;YAC5C;QACF;IACF;AAEA;;AAEG;IACH,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAA;QAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;AAC3C,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG;QAC5C;AAAO,aAAA,IACL,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK;YAC3B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AACtC,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAClC;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG;QACrD;aAAO;AACL,YAAA,MAAM,OAAO,GAAG,IAAI,SAAS,EAAE;YAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,iBAAiB,CAAC;AACjE,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe;YAChC,GAAG,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;gBAC3D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;AACpC,YAAA,CAAC,CAAC;AACF;;AAEG;YACH,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;gBAC9B,GAAG,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;oBAC3D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;AACpC,gBAAA,CAAC,CAAC;YACJ;;AAEA,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C;QACA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC;AAC9B,YAAA,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAC3C,wJAAwJ,CACzJ;QACH;IACF;AAEA;;AAEG;AACH,IAAA,MAAM,oBAAoB,CAAC,QAAQ,EAAE,aAAqB,EAAA;AACxD,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE;YACpC,MAAM,IAAI,GAA+B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9D,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC7B,iBAAA,MAAM;AACN,iBAAA,OAAO;AACP,iBAAA,aAAa;AACb,iBAAA,OAAO;AACP,iBAAA,WAAW,EAAE;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,WAAW;AACnD,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AACzD,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;AAChD,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;kBACpD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;kBAChC,EAAE;YACN,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;kBAC7C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC;kBACxC,EAAE;YACN,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS;AAChD,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE;AACnB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC;;;;;AAKpC,YAAA,IACE,IAAI,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EACtE;AACA,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CACrC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE;AAE9D,sBAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE,CAAC,OAAO;sBAC5D,IAAI,CAAC;AACF,yBAAA,MAAM;AACN,yBAAA,OAAO;AACP,yBAAA,aAAa;AACb,yBAAA,OAAO;AACP,yBAAA,WAAW,EAAE;YACtB;iBAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AAC/C,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,WAAW;YAC7B;iBAAO;AACL,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACnC;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CACjE,IAAI,CAAC,IAAI,CAAC,GAAG,CACd;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;;YAEvE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBACpC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;AAC3B,oBAAA,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI;gBAC1B;YACF;AAEA,YAAA,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CACxC,aAAa,EACb,IAAI,CAAC,IAAI,CAAC,MAAM,EAChB,MAAM,CACP;YACD,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC3D,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAElE,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAChD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAClE;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACnE,sBAAsB;gBACtB,WAAW;gBACX,WAAW;gBACX,YAAY;AACb,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACnE,0CAA0C;gBAC1C,yBAAyB;gBACzB,6BAA6B;gBAC7B,YAAY;gBACZ,WAAW;AACZ,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,GAAG,KAAK;QACjD;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC;QACpB;IACF;AAEA;;AAEG;IACK,oBAAoB,CAAC,YAAiB,EAAE,GAAW,EAAA;AACzD;;;AAGG;QACH,IAAI,CAAC,YAAY,EAAE;YACjB;QACF;AACA,QAAA,IAAI,WAAW,GAAG,YAAY,CAAC,WAAW;QAC1C,IACE,GAAG,KAAK,SAAS;AACjB,YAAA,YAAY,CAAC,wBAAwB,KAAK,SAAS,EACnD;AACA,YAAA,WAAW,GAAG,eAAe,CAC3B,YAAY,CAAC,wBAAwB,EACrC,WAAW,EACX,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CACnC;QACH;AAAO,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YACrC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,KAAI;gBAC/C,OAAO,SAAS,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc;AAClD,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,SAAS,EAAE,MAAM,EAAE;AACrB,gBAAA,WAAW,GAAG,SAAS,EAAE,MAAM;YACjC;iBAAO;;gBAEL,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACtE,WAAW,GAAG,eAAe,CAC3B,WAAW,CAAC,MAAM,EAClB,WAAW,CAAC,GAAG,IAAI,GAAG,EACtB,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CACnC;YACH;QACF;aAAO;YACL,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,YAAY,CAAC,GAAG,EAAE;AAChD,gBAAA,WAAW,GAAG,YAAY,CAAC,iBAAiB;YAC9C;QACF;AACA,QAAA,QACE,WAAW;YACX,eAAe,CACb,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EACpB,WAAW,EACX,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CACnC;IAEL;AAEA;;AAEG;IACK,eAAe,CAAC,MAAW,EAAE,OAAqB,EAAA;AACxD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC;QACjE,OAAO,YAAY,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;IAC3E;AAEA;;;;AAIG;IACH,cAAc,CAAC,YAAiB,EAAE,GAAW,EAAA;;QAE3C,IAAI,CAAC,YAAY,EAAE;YACjB;QACF;AACA,QAAA,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;;YAEpC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;AACtC,YAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACvB,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC;YACtE;;iBAEK;AACH,gBAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAChD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;;oBAEf,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;;oBAEhE,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC;gBACnD,CAAC,CAAC,CACH;YACH;QACF;QACA,OAAO,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,GAAG,CAAC;IACrD;AAEA;;AAEG;AACH,IAAA,wBAAwB,CACtB,MAAsC,EAAA;AAEtC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzB,YAAA,OAAO,MAAM;QACf;QACA,IAAI,GAAG,GAAG,EAAE;AACZ,QAAA,IAAI,OAAO,MAAM,IAAI,QAAQ,EAAE;AAC7B,YAAA,IAAI,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAC/C,gBAAA,MAAM,mBAAmB,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC;AACtE,gBAAA,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC,oBAAA,OAAO,mBAAmB;gBAC5B;AACA,gBAAA,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE;oBAChC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;gBACnD;YACF;iBAAO;AACL,gBAAA,GAAG,GAAG,CAAC,MAAM,CAAC;YAChB;QACF;AACA,QAAA,OAAO,GAAG;IACZ;AACA;;;;;;;;;;AAUG;AACH,IAAA,qBAAqB,CAAC,GAAW,EAAA;QAC/B,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,EAAE;AAC3C,YAAA,OAAO,GAAG;QACZ;AACA,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACrE,QAAA,IAAI,SAAS,GAAG,CAAC,EAAE;AACjB,YAAA,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC;QACpD;AACA,QAAA,OAAO,GAAG;IACZ;AAEA;;;;;AAKG;IACH,sBAAsB,CACpB,UAA2B,EAC3B,YAA2B,EAAA;AAE3B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,UAAU,CAAC;AAC3E,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK;QACtB,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAChD,QAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE;QACzC,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,EAAE;AAEjD,QAAA,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;YAC1B;QACF;AAEA,QAAA,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,KAC5C,kBAAkB,CAAC,KAAK,CAAC,CAC1B;QACD,MAAM,sBAAsB,GAC1B,CAAC,eAAe;aACf,eAAe,IAAI,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC9D,IAAI,sBAAsB,EAAE;AAC1B,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,cAAc,CAAC;QACnD;IACF;AAEA;;;AAGG;IACH,oBAAoB,GAAA;AAClB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;AAC/B,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACrC,YAAA,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AACrD,YAAA,OAAO,aAAa,CAAC,MAAM,KAAK;AAC9B,kBAAE,aAAa,CAAC,CAAC,CAAC,CAAC;AACnB,kBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;QAC7C;AACA,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;IAChD;AAEA;;;;AAIG;AACH,IAAA,SAAS,CACP,WAAoB,EACpB,OAAQ,EACR,YAA2B,EAAA;QAE3B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;YAClC;QACF;QACA,MAAM,UAAU,GAAG,EAAE;;AAErB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG;cAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,MAAM,IAAI;cAC7D,KAAK;AACT,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACrC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAC5B,EAAE,EACF;AACE,gBAAA,GAAG,YAAY;AACf,gBAAA,SAAS,EAAE,IAAI,CAAC,oBAAoB,EAAE;AACtC,gBAAA,IAAI,EACF,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,YAAY,EAAE,IAAI;AAClE,gBAAA,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;AACnC,gBAAA,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;AACnC,gBAAA,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;AAC9B,gBAAA,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;AAC7B,gBAAA,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;AAClB,gBAAA,SAAS,EAAE,EAAE;AACd,aAAA,CACF;AACD,YAAA,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC3B;aAAO;YACL,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACpC,gBAAA,IAAI,CAAC,oBAAoB,CACvB,KAAK,EACL,EAAC,WAAW,EAAE,OAAO,EAAE,YAAY,EAAC,EACpC,UAAU,CACX;YACH;QACF;AACA,QAAA,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,YAAY,CAAC;AACrD,QAAA,OAAO,UAAU;IACnB;AAEA;;;;;;;;;;AAUG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAqB,EAAA;QACnC,IAAI,YAAY,GAAG,EAAE;AACrB,QAAA,IAAI,KAAK,CAAC,WAAW,EAAE;AACrB,YAAA,YAAY,GAAG;gBACb,CAAA,SAAA,EAAY,KAAK,CAAC,WAAW,CAAC,cAAc,CAAA,EAAA,EAAK,KAAK,CAAC,WAAW,CAAC,KAAK,CAAA,IAAA,CAAM;aAC/E;QACH;AAEA,QAAA,IAAI,UAAU;AACd,QAAA,IAAI,KAAK,CAAC,SAAS,EAAE;YACnB,UAAU,GAAG,EAAE;AACf,YAAA,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE;AACjC,gBAAA,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG;YAC5B;QACF;AAEA,QAAA,MAAM,EAAC,MAAM,EAAE,OAAO,EAAC,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;;QAGpD,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS;AACzD,QAAA,MAAM,SAAS,GACb,YAAY,KAAK,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW;AAEnE,QAAA,MAAM,aAAa,GAAG;AACpB,YAAA,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;YAC1B,YAAY;AACZ,YAAA,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;AACzB,YAAA,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI;gBACxB,MAAM,EACJ,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;AAC1B,sBAAE,IAAI,CAAC,sBAAsB,CAAC,oBAAoB,CAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,EAChB,MAAM;sBAER,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS;gBACxD,MAAM,EAAE,OAAO,CAAC,WAAW;AAC3B,gBAAA,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;AAC1B,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,GAAG,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,KAAK,CAAC;AACvD,aAAA;AACD,YAAA,WAAW,EAAE,WAAW;SACzB;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;QACpD,MAAM,MAAM,GAAuB;AACjC,cAAE,IAAI,OAAO,CAAC,aAAa;AAC3B,cAAE,IAAI,QAAQ,CAAC,aAAa,CAAC;QAE/B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;QACjD,MAAM,uBAAuB,GAAG,4BAA4B,CAC1D,KAAK,CAAC,mBAAmB,EACzB,IAAI,CACL;QACD,MAAM,uBAAuB,GAAG,4BAA4B,CAC1D,KAAK,CAAC,mBAAmB,EACzB,IAAI,CACL;QAED,MAAM,kBAAkB,GACtB,IAAI,CAAC,2BAA2B,CAAC,yBAAyB,CAAC,KAAK,CAAC;AAEnE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EACnE,OAAO,CACR;AAED;;;AAGG;AACH,QAAA,MAAM,EAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,UAAU,EAAC,GACtE,OAAO;AACT,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,GAAG,UAAU;YACb,MAAM;AACN,YAAA,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,SAAS;YACzC,IAAI,EAAE,OAAO,CAAC,SAAS;AACvB,YAAA,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,uBAAuB;AAC/D,YAAA,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,uBAAuB;AAC/D,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ;AAC5C,YAAA,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,kBAAkB;AAChD,YAAA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,OAAO,CAAC,IAAI;AAClB,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO;YACnC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;AAC1B;;;AAGG;YACH,aAAa,EAAE,CAAC,CAAC,MAAM;SACxB;QAED,MAAM,SAAS,GAAG;AAChB,cAAE,IAAI,IAAI,CAAC,YAAuC;AAClD,cAAE,IAAIC,KAAU,CAAC,YAAyC,CAAC;QAC7D,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC;AACtD,QAAA,OAAO,SAAS;IAClB;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,MAAuB,EAAA;AAC/B,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;YACtB,IAAI,CAAC,YAAY,CAAC,qBAAqB,CACrC,CAAC,EACD,iBAAiB,CAAC,cAAc,CACjC;AACD,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QACxD;IACF;AAEA;;;AAGG;AACK,IAAA,cAAc,CAAC,KAAU,EAAA;QAC/B,MAAM,OAAO,GAAG,EAAE;QAClB,IAAI,MAAM,GAAG,SAAS;AACtB,QAAA,IAAI,KAAK,CAAC,aAAa,EAAE;AACvB,YAAA,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI;YACjC,IAAI,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,EAAE;AAC7C,gBAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;YAC/D;QACF;AAAO,aAAA,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAChD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACjC,YAAA,MAAM,GAAG,UAAU,CAAC,IAAI;AACxB,YAAA,IAAI,UAAU,CAAC,SAAS,EAAE;AACxB,gBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;YACtD;QACF;aAAO;YACL,MAAM,GAAG,EAAE;QACb;AACA,QAAA,OAAO,EAAC,MAAM,EAAE,OAAO,EAAC;IAC1B;AAEA;;;;;;AAMG;IACH,oBAAoB,CAClB,KAAU;AACV,IAAA,OAAA,GAAuC,EAAC,WAAW,EAAE,IAAI,EAAC,EAC1D,UAA2B,EAAA;QAE3B,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,EAAE;YACzC,UAAU,CAAC,IAAI,CACb,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;gBACnB,GAAG,OAAO,CAAC,YAAY;gBACvB,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;gBAC9C,IAAI,EACF,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;oBAC1C,OAAO,CAAC,YAAY,EAAE,IAAI;AAC5B,gBAAA,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;AACnC,gBAAA,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;AACnC,gBAAA,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;AAC9B,gBAAA,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;AAC7B,gBAAA,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;AACnB,aAAA,CAAC,CACH;QACH;;AAEA,QAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI;AAC7D,QAAA,IAAI,KAAK,CAAC,KAAK,IAAI,gBAAgB,EAAE;AACnC,YAAA,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE;AAClC,gBAAA,IAAI,CAAC,oBAAoB,CACvB,QAAQ,EACR;oBACE,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,YAAY,EAAE,OAAO,CAAC,YAAY;iBACnC,EACD,UAAU,CACX;YACH;QACF;IACF;+GAloBW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADH,MAAM,EAAA,CAAA,CAAA;;4FAClB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;MCjBnB,gBAAgB,CAAA;AAQ3B,IAAA,WAAA,GAAA;AAPA,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;QAKrD,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,IAAI,GAAG;AACV,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,YAAY,EAAE,OAAO;AACtB,aAAA;SACF;IACH;AACA;;;AAGG;AACH,IAAA,MAAM,yBAAyB,CAC7B,OAAoC,EACpC,OAAsB,EAAA;AAEtB,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;AACjC,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK;AAC3B,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE;YACvB;QACF;QACA,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC/D;QACF;AACA,QAAA,IAAI;;AAEF,YAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AACzC,YAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE;AAC7C,gBAAA,IAAI,CAAC,sBAAsB,CAAC,qBAAqB,CAC/C,IAAI,CAAC,IAAI,CAAC,MAAM,EAChB,MAAM,CACP;gBACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC;YAC7C;QACF;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAClD;IACF;AAEA;;;AAGG;IACH,MAAM,oBAAoB,CAAC,QAAgB,EAAA;AACzC,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE;YACrC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;AAClC,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,IAAI,YAAY;AAElE,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;AACvE,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;YAChD,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK;AACtC,YAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,GAAG,KAAK;AAC/C,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;QACxB;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC;QACpB;IACF;AACA;;;;AAIG;AACH,IAAA,oBAAoB,CAClB,KAAK,EACL,OAAoC,EACpC,UAAU,EAAA;QAEV,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;AACvC,YAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QAC7D;AACA,QAAA,IAAI,KAAK,CAAC,KAAK,EAAE;AACf,YAAA,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE;gBAClC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC;YAC1D;QACF;IACF;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,MAAuB,EAAA;AAC/B,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/B;IACF;AAEA;;;;AAIG;AACH,IAAA,SAAS,CACP,WAAoB,EACpB,OAAiB,EACjB,YAA2B,EAAA;AAE3B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,WAAW;QAC/B,MAAM,UAAU,GAAG,EAAE;QACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACpC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAC,YAAY,EAAC,EAAE,UAAU,CAAC;QAC9D;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,UAAU,CAAC;AAC3E,QAAA,IAAI,CAAC,YAAY,EAAE,eAAe,EAAE;YAClC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAClD;AACA,QAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE;QACzC,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,EAAE;QACjD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,EAAE;AAC3D,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,cAAc,CAAC;QACnD;AACA,QAAA,OAAO,UAAU;;;IAGnB;AAEA;;;AAGG;AACH,IAAA,kBAAkB,CAAC,OAAY,EAAA;AAC7B,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClE,QAAA,OAAO,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC;IAC3C;AAEA;;;;;AAKG;AACH,IAAA,qBAAqB,CAAC,IAAI,EAAA;QACxB,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AACjD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAChC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAC5D;AACD,QAAA,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;AACzB,YAAA,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,KACvC,GAAG,CAAC,aAAa,CAAC,QAAQ,CACxB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,CAC/D,CACF;AACD,YAAA,OAAO;kBACH,aAAa,CAAC;AAChB,kBAAE,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa;QAChC;AACA,QAAA,OAAO,WAAW;IACpB;AAEA;;;;;AAKG;AACH,IAAA,sBAAsB,CAAC,OAAO,EAAA;QAC5B,IAAI,OAAO,EAAE;YACX,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC;AAC/C,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAC1B,CAAC,MAAM,KACL,MAAM,CAAC,YAAY,IAAI,aAAa;AACpC,gBAAA,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAC1D;AACD,YAAA,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;gBACrB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KACnC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC/B;AACD,gBAAA,OAAO,UAAU,GAAG,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;YACzD;QACF;IACF;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,UAAkB,EAAA;AAC9B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC;QACzE,OAAO,KAAK,EAAE;AACZ,cAAE,eAAe,CACb,KAAK,CAAC,gBAAgB,EACtB,WAAW,EACX,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;cAEpC,SAAS;IACf;AAEA;;;;AAIG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAqB,EAAA;AACnC,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;AACpB,gBAAA,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC;gBAC7B,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC5C,SAAS,EAAE,OAAO,EAAE,SAAS,GAAG,uBAAuB,GAAG,UAAU;AACpE,gBAAA,UAAU,EAAE;oBACV,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,IAAI,EAAE,KAAK,CAAC,KAAK;oBACjB,WAAW,EAAE,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC;AAC3D,oBAAA,iBAAiB,EAAE,KAAK;AACxB,oBAAA,SAAS,EAAE,IAAI;oBACf,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,oBAAA,GAAG,OAAO;AACX,iBAAA;AACD,gBAAA,MAAM,EAAE,IAAI,IAAI,CAAC,EAAS,CAAC;AAC5B,aAAA,CAAC;;YAEF,MAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACzD,KAAK,EAAE,KAAK,CAAC,UAAU;gBACvB,SAAS,EACP,OAAO,EAAE,SAAS;AAClB,oBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,iBAAiB,CAAC;AACrD,gBAAA,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC;AACjE,aAAA,CAAC;;AAEF,YAAA,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC;;AAEvC,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAC1B,YAAA,KAAK,CAAC,IAAI,GAAG,KAAK;AAClB,YAAA,OAAO,IAAI;QACb;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC;QACpB;IACF;+GAzPW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADJ,MAAM,EAAA,CAAA,CAAA;;4FAClB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;MCJnB,eAAe,CAAA;AAU1B,IAAA,WAAA,GAAA;AATQ,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;QAK7D,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;YAClD,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC;AAC1C,iBAAA,OAAO;AACP,iBAAA,aAAa;AACb,iBAAA,OAAO;AACP,iBAAA,WAAW,EAAE;AAClB,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA;;AAEG;AACH,IAAA,MAAM,yBAAyB,CAC7B,OAAoC,EACpC,YAA2B,EAAA;QAE3B,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACvC;QACF;QAEA,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,GAAG,KAAK;QACjD,CAAC,EAAE,GAAG,CAAC;AACP,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YACvE;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE;AAC7C,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC;AAC5D,YAAA,OAAO,UAAU;QACnB;AAEA,QAAA,OAAO,SAAS;IAClB;AAEA;;AAEG;AACH,IAAA,SAAS,CACP,WAAoB,EACpB,OAAiB,EACjB,YAA2B,EAAA;QAE3B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,sBAAsB,CAAC,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC;IAChB;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,MAAuB,EAAA;AAC/B,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;YACtB,IAAI,CAAC,YAAY,CAAC,qBAAqB,CACrC,CAAC,EACD,iBAAiB,CAAC,cAAc,CACjC;AACD,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QACxD;IACF;AACA;;AAEG;IACH,gBAAgB,GAAA;QACd,IAAI,CAAC,IAAI,GAAG;AACV,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,cAAc,EAAE,WAAW;AAC3B,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,WAAW,EAAE,QAAQ;AACrB,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,YAAY,EAAE,OAAO;AACtB,aAAA;YACD,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,EAAE;SACZ;IACH;AAEA;;AAEG;AACH,IAAA,QAAQ,CAAC,OAAqB,EAAA;;;AAG5B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC1B,YAAA,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC;AACpC,YAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;QACxC;QAEA,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;;AAG/C,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW;AACnC,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACpE,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG;YACnD,OAAO,GAAG,GAAG,OAAO,CAAA,EAAG,SAAS,CAAA,EAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAA,CAAA,EAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA,CAAE;QACpG;;AAGA,QAAA,MAAM,aAAa,GAAQ;AACzB,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE;AAChC,YAAA,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;AACpB,YAAA,KAAK,EAAE,IAAI;SACZ;AAED,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC;AAErC,QAAA,MAAM,YAAY,GAAqB;YACrC,MAAM;AACN,YAAA,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,CAAC;AAC9B,YAAA,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;;YAE1B,OAAO,EAAE,OAAO,EAAE,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC;YACzD,OAAO,EAAE,OAAO,EAAE,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE;YAC1D,SAAS,EAAE,OAAO,EAAE,SAAS,GAAG,uBAAuB,GAAG,UAAU;AACpE,YAAA,UAAU,EAAE;AACV,gBAAA,GAAG,OAAO;AACV,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;gBAC/B,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW;gBAC5C,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI;AACtC,aAAA;SACF;AAED,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC;AAExC,QAAA,OAAO,SAAS;IAClB;AAEA;;AAEG;IACH,sBAAsB,CACpB,UAA2B,EAC3B,YAA2B,EAAA;AAE3B,QAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE;QACzC,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,EAAE;AAEjD,QAAA,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;YAC1B;QACF;AAEA,QAAA,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,KAC5C,kBAAkB,CAAC,KAAK,CAAC,CAC1B;QACD,MAAM,sBAAsB,GAC1B,CAAC,eAAe;aACf,eAAe,IAAI,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC9D,IAAI,sBAAsB,EAAE;AAC1B,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,cAAc,CAAC;QACnD;IACF;+GAlLW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADH,MAAM,EAAA,CAAA,CAAA;;4FAClB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;MCPnB,yBAAyB,CAAA;AAHtC,IAAA,WAAA,GAAA;AAIE,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACvC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC;AACpC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC;AACjC,QAAA,IAAA,CAAA,0BAA0B,GAAG,MAAM,CAAC,0BAA0B,CAAC;AA0DhE,IAAA;AAxDC;;;;AAIG;AACH,IAAA,MAAM,QAAQ,CAAC,SAA8B,EAAE,OAAqB,EAAA;QAClE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAC9D,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,SAAS,EACnB,EAAC,QAAQ,EAAE,IAAI,EAAC,CACjB;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;AAC7B,aAAA,MAAM;AACN,aAAA,OAAO;AACP,aAAA,aAAa;AACb,aAAA,OAAO,EAAE;QACZ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,GAAG,kBAAkB;QACtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,IAAI;QACjD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG;QACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ;QAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO;QACtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI;QACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK;QACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK;AAElC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CACpC;;AAEE,YAAA,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG;;AAElB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,WAAW,EAAE;AACX,gBAAA;AACE,oBAAA,GAAG,EAAE,WAAW;oBAChB,MAAM,EAAE,IAAI,CAAC,YAAY;AAC1B,iBAAA;AACF,aAAA;SACF,EACD;AACE,YAAA,GAAG,OAAO;YACV,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;;AAE7C,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,WAAW,EAAE,kBAAkB;AAC/B,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE;AACjE,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,SAAA,CACF;QACD,OAAO,CAAC,KAAK,CAAC;IAChB;+GA7DW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,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,yBAAyB,cAFxB,MAAM,EAAA,CAAA,CAAA;;4FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCEY,yBAAyB,CAAA;AAHtC,IAAA,WAAA,GAAA;AAIE,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC;AACpC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC;AACjC,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CAAC,2BAA2B,CAAC;AACjE,QAAA,IAAA,CAAA,0BAA0B,GAAG,MAAM,CAAC,0BAA0B,CAAC;AA0ChE,IAAA;AAzCC;;AAEG;AACH,IAAA,MAAM,QAAQ,CAAC,SAA8B,EAAE,OAAqB,EAAA;QAClE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAC9D,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,SAAS,EACnB,EAAC,QAAQ,EAAE,IAAI,EAAC,CACjB;AAED,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE;QACxE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG;AAE9B,QAAA,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAC9D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO;QACtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,GAAG,MAAM;QAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI;QACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK;QACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK;AAElC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CACpC;;AAEE,YAAA,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,WAAW,EAAE;AACX,gBAAA,SAAS,EAAE,eAAe;AAC3B,aAAA;SACF,EACD;AACE,YAAA,GAAG,OAAO;YACV,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ;AACxC,kBAAE,IAAI,CAAC,GAAG,CAAC;AACX,kBAAE,CAAA,OAAA,EAAU,IAAI,CAAC,GAAG,CAAC,IAAI,CAAA,CAAE;AAC7B,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,SAAS,EAAE,IAAI;AAChB,SAAA,CACF;AACD,QAAA,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC;IAChB;+GA7CW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,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,yBAAyB,cAFxB,MAAM,EAAA,CAAA,CAAA;;4FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MC2BY,mBAAmB,CAAA;AAsB9B,IAAA,WAAA,GAAA;AArBA,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACvD,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5B,QAAA,IAAA,CAAA,8BAA8B,GAAG,MAAM,CAAC,8BAA8B,CAAC;AACvE,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CAAC,2BAA2B,CAAC;AACjE,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CAAC,2BAA2B,CAAC;AACjE,QAAA,IAAA,CAAA,4BAA4B,GAAG,MAAM,CAAC,4BAA4B,CAAC;AACnE,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CAAC,2BAA2B,CAAC;AACzD,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAC7D,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,yBAAyB,CAAC;QAMnE,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;YAChE,IAAI,CAAC,gBAAgB,CAAC,EAAC,GAAG,EAAE,GAAG,EAAC,CAAC;AACnC,QAAA,CAAC,CAAC;IACJ;IAEA,MAAM,OAAO,CAAC,OAAyB,EAAA;AACrC,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY;AAC/D,QAAA,MAAM,IAAI,CAAC,eAAe,EAAE;AAE5B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG;AAC3C,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,EAAE,EAAE;YACtB;QACF;AACA,QAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,GAAG,KAAK;QAC9C,IAAI,IAAI,CAAC,mBAAmB,CAAC,YAAY,KAAK,QAAQ,EAAE;YACtD,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;AAChD,gBAAA,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAC3C,iCAAiC,CAClC;gBACD;YACF;YACA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG;AACvC,YAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,GAAG,IAAI;QAC/C;QACA,IAAI,IAAI,CAAC,mBAAmB,CAAC,YAAY,KAAK,KAAK,EAAE;YACnD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG;AACvC,YAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,GAAG,IAAI;QAC/C;AACA,QAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CACxC,IAAI,CAAC,mBAAmB,CAAC,YAAY,EACrC,GAAG,CACJ;AACD,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;AACzC,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE,IAAI;AAClB,SAAA,CAAC;QAEF,IAAI,QAAQ,GAAoB,EAAE;AAElC,QAAA,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,cAAc,CAAC;AACtD,QAAA,IAAI,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE;AACxC;;AAEG;YACH,MAAM,OAAO,GACX,IAAI,CAAC,mBAAmB,CAAC,YAAY,KAAK;kBACtC,IAAI,CAAC;AACP,kBAAE,IAAI,CAAC,yBAAyB;YACpC,MAAM,EAAC,WAAW,EAAE,GAAG,IAAI,EAAC,GAAG,OAAO,CAAC,cAAc;AACrD,YAAA,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE;AAC7C,gBAAA,GAAG,IAAI;gBACP,GAAG,OAAO,EAAE,YAAY;AACzB,aAAA,CAAC;YACF,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC;QAC1E;aAAO;AACL;;AAEG;AACH,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,CACxD,GAAG,EACH,OAAO,EAAE,QAAQ,CAClB;AACD,YAAA,IACE,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ;gBACpC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EACjD;gBACA,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC/D,gBAAA,OAAO,EAAE;YACX;AACA,YAAA,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,yBAAyB,CACzD,OAAO,EACP,OAAO,EAAE,YAAY,CACtB;QACH;AAEA,QAAA,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE;AACrB,YAAA,IAAI,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE;AACxB;;AAEG;AACH,gBAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC;YACtC;;;;AAIA,YAAA,IAAI,QAAQ,EAAE,MAAM,IAAI,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC;AACpD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC;AACvC;;AAEG;gBACH,MAAM,IAAI,CAAC,YAAY,CAAC;AACtB,oBAAA,IAAI,EAAE,iBAAiB;AACvB,oBAAA,GAAG,EAAE,GAAG;AACR,oBAAA,KAAK,EAAE,SAAS;AACjB,iBAAA,CAAC;YACJ;AAEA,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,EAAE;gBAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE;AACxD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC;YAC3C;QACF;AAEA,QAAA,OAAO,QAAQ;IACjB;AAEA;;;AAGG;AACH,IAAA,wBAAwB,CAAC,YAA0B,EAAA;AACjD,QAAA,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE;AAC9B,YAAA,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;AAC7C,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC;YAChD;QACF;IACF;AAEA;;;AAGG;IACH,MAAM,gBAAgB,CAAC,MAAqB,EAAA;QAC1C,IAAI,CAAC,sBAAsB,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK;QACxD,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;AACjD,QAAA,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC;YACxB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,cAAc,EAAE,MAAM,CAAC,cAAc;AACtC,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,CAAC,IAAmB,EAAA;QACzB,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC;IACxD;AAEA;;AAEG;IACH,MAAM,YAAY,CAAC,MAAqB,EAAA;QACtC,IAAI,CAAC,mBAAmB,CAAC,YAAY,GAAG,MAAM,CAAC,IAAsB;AACrE,QAAA,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;IAC5C;AAEA,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,QAAQ,IAAI,CAAC,mBAAmB,CAAC,YAAY;AAC3C,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB;AACxC,gBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,4BAA4B;gBAChE;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe;AACvC,gBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,2BAA2B;gBAC/D;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe;AACvC,gBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,2BAA2B;gBAC/D;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB;AAC1C,gBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,8BAA8B;gBAClE;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe;AACvC,gBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,2BAA2B;gBAC/D;AACF,YAAA;gBACE;;IAEN;+GAlMW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACCM,MAAM,sBAAsB,GAAG,SAAkB;MAE3C,gCAAgC,CAAA;AAA7C,IAAA,WAAA,GAAA;QACE,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,YAAY,GAAG,KAAK;AACpB;;AAEG;AACH,QAAA,IAAA,CAAA,mBAAmB,GAAqB,IAAI,OAAO,EAAE;AACrD,QAAA,IAAA,CAAA,iBAAiB,GAA4B,IAAI,OAAO,EAAE;QAC1D,IAAA,CAAA,qBAAqB,GAAG,sCAAsC;IAChE;AAAC;AAGK,MAAO,0BAA2B,SAAQ,gCAAgC,CAAA;AADhF,IAAA,WAAA,GAAA;;AAEU,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,wBAAwB,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAC3D,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5B,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACrD,QAAA,IAAA,CAAA,0BAA0B,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC/D,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AA0kBhD,IAAA;AAxkBC;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,CAAC;IACxC;AAEA;;;AAGG;IACH,MAAM,eAAe,CAAC,GAAW,EAAA;AAC/B,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,EAAE,EAAE;YACtB;QACF;QACA,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC;AACtC,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AAChC,gBAAA,MAAM,EAAE,KAAK;AACd,aAAA,CAAC;YACF,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AACxD,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AAC3B,gBAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AACrC,oBAAA,IAAI,CAAC,cAAc,CAAC,uBAAuB,CACzC,sCAAsC,EACtC,mBAAmB,EACnB,EAAC,iBAAiB,EAAE,4BAA4B,EAAC,CAClD;oBACD;gBACF;AACA,gBAAA,OAAO,IAAI;YACb;AACA,YAAA,IAAI,CAAC,cAAc,CAAC,uBAAuB,CACzC,sCAAsC,EACtC,QAAQ,CAAC,UAAU,EACnB,EAAC,iBAAiB,EAAE,4BAA4B,EAAC,CAClD;YACD;QACF;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,IAAI,CAAC,cAAc,CAAC,uBAAuB,CACzC,sCAAsC,EACtC,CAAC,CAAC,OAAO,EACT,EAAC,iBAAiB,EAAE,4BAA4B,EAAC,CAClD;YACD;QACF;IACF;AAEA;;;;AAIG;AACH,IAAA,cAAc,CAAC,IAAoB,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,+BAA+B,CAC3D,WAAW,EACX,aAAa,EACb,SAAS,CACV;QACH;AACA,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,+BAA+B,CAC3D,kBAAkB,EAClB,UAAU,EACV,SAAS,CACV;IACH;AAEA;;;;AAIG;AACH,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,IAAI,OAAO,GAAG,IAAI;QAClB,IACE,KAAK,CAAC,IAAI,CACR,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,sBAAsB,CACjE,EACD;YACA,IAAI,CAAC,cAAc,CAAC,uBAAuB,CACzC,6BAA6B,EAC7B,gCAAgC,EAChC;AACE,gBAAA,iBAAiB,EAAE,4BAA4B;AAC/C,gBAAA,IAAI,EAAE,SAAS;AAChB,aAAA,CACF;QACH;QACA,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;QAC1E,IAAI,aAAa,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3C,IAAI,CAAC,mBAAmB,CAAC;AACvB,gBAAA,OAAO,EAAE,sCAAsC;AAChD,aAAA,CAAC;YACF,OAAO,GAAG,KAAK;QACjB;AACA,QAAA,IAAI,aAAa,GAAG,CAAC,EAAE;YACrB,OAAO,GAAG,KAAK;YACf,IAAI,CAAC,mBAAmB,CAAC,EAAC,OAAO,EAAE,gCAAgC,EAAC,CAAC;QACvE;AACA,QAAA,OAAO,OAAO;IAChB;AAEA;;;;AAIG;AACH,IAAA,KAAK,CAAC,IAAY,EAAA;QAChB,OAAO;YACL,iBAAiB;YACjB,mBAAmB;YACnB,8BAA8B;AAC/B,SAAA,CAAC,QAAQ,CAAC,IAAI,CAAC;IAClB;AAEA;;;;AAIG;AACH,IAAA,SAAS,CAAC,IAAY,EAAA;AACpB,QAAA,OAAO,CAAC,YAAY,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IAClE;AAEA;;;;AAIG;AACH,IAAA,KAAK,CAAC,IAAY,EAAA;QAChB,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IACrC;AAEA;;;;;;;;;;;AAWG;AACH,IAAA,MAAM,eAAe,CACnB,cAA4B,EAC5B,SAAmB,EAAA;AAEnB,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC;YAC7D,MAAM,WAAW,GACf,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,QAAQ,CAAC;AACnD,YAAA,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,KAAK;AAErC,YAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CACjD,QAAQ,EACR,WAAW,EACX,cAAc,CAAC,IAAI,EACnB,SAAS,CACV;AACD,YAAA,OAAO,GAAG;QACZ;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,MAAM,GAAG;QACX;IACF;AAEA;;;AAGG;IACH,MAAM,iBAAiB,CAAC,IAAY,EAAA;AAClC,QAAA,MAAM,YAAY,GAAG,0BAA0B,CAAC,IAAI,CAAC;AACrD,QAAA,IAAI,UAAmC;AACvC,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAC1B,YAAA,IAAI;AACF,gBAAA,UAAU,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAC9D,IAAI,EACJ,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,EACjC;AACE,oBAAA,YAAY,EAAE,IAAI;AACnB,iBAAA,CACF;YACH;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AACvB,gBAAA,MAAM,KAAK;YACb;QACF;QACA,IAAI,CAAC,UAAU,IAAI,UAAU,EAAE,IAAI,IAAI,YAAY,EAAE;AACnD,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,IAAI;IACb;AAEA;;;;;AAKG;AACH,IAAA,YAAY,CACV,KAAa,EACb,QAAoC,EACpC,QAAQ,GAAG,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAC,EAAA;AAE3B,QAAA,QACE,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;AACrD,aAAC,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;YAC/B,QAAQ,CAAC,GAAG;IAEhB;AAEA;;AAEG;IACH,qBAAqB,CAAC,KAAK,EAAE,SAAS,EAAA;AACpC,QAAA,MAAM,IAAI,GAAG,GAAG,GAAG,SAAS;AAC5B,QAAA,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEnD,QAAA,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE;AACjD,YAAA,IAAI,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE;AAC1B,gBAAA,WAAW,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC;YACpD;QACF;AACA,QAAA,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;AAC3D,QAAA,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;AAC5C,QAAA,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,GAAG,CAAC;AAC7C,cAAE,WAAW,CAAC,WAAW,GAAG,CAAC;cAC3B,CAAC;AAEL,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAC,CAAC;IACvE;AAEA;;;;;;;;;;AAUG;IACH,MAAM,iBAAiB,CAAC,cAA4B,EAAA;AAClD,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,MAAM,EAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAC,GAC1D,cAAc;AAChB,QAAA,MAAM,GAAG,GAAG,cAAc,CAAC,eAAe;AAC1C,QAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC/B,QAAA,IAAI,OAAO;QACX,MAAM,KAAK,GAAG,CAAC,MAAM,OAAO,OAAO,CAAC,EAAE,OAAO;AAC7C,QAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE;AACvB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YAC7B,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAC,CAAC;QAC/D;aAAO;AACL,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;gBACrB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC;AACnC,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,GAAG,MAAM,GAAG,CAAC,aAAa,CAC/B,EAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAC,EACjC,CAAC,QAAQ,KAAI;gBACX,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAC7D,QAAQ,CAAC,OAAO,EAChB,KAAK,CAAC,MAAM,CACb;gBACH,CAAC,EAAE,CAAC,CAAC;AACP,YAAA,CAAC,CACF;QACH;QACA,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QACtE,IAAI,GAAG,EAAE;AACP,YAAA,QAAQ,CAAC,MAAM,CACb,OAAO,EACP,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACtB,gBAAA,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,0BAA0B;AACnE,aAAA,CAAC,EACF,GAAG,CAAC,IAAI,CACT;QACH;QACA,IAAI,SAAS,EAAE;AACb,YAAA,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC;QAC1C;AACA,QAAA,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;AAC7B,QAAA,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,IAAI,EAAE,GAAG,IAAI,GAAG,cAAc,CAAC,KAAK;AACtE,QAAA,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;AAC/B,QAAA,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC;AACrC,QAAA,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;QAE3B,MAAM,MAAM,GACV,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,aAAa,CAAC;QAEhE,QAAQ,CAAC,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,KAAK,CAAC;QACpD,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC;AAClD,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,OAAO,QAAQ;IACjB;AAEA;;;;;AAKG;AACH,IAAA,MAAM,YAAY,CAChB,IAAoB,EACpB,OAGC,EAAA;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE;AACpD,QAAA,IAAI,MAAe;AACnB,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC3B,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;YAC1C;YACA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;AAC9B,gBAAA,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,iBAAiB,CAAC,+BAA+B,CACpD,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,CACV,CACF;YACH;AACA,YAAA,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE;gBACvB,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;YAClD;YACA,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC;YACnD;iBAAO;AACL,gBAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CACzC;oBACE,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,eAAe,EAAE,IAAI,CAAC,eAAe;oBACrC,aAAa,EAAE,IAAI,CAAC,aAAa;oBACjC,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,iBAAA,EACD,OAAO,EAAE,SAAS,CACnB;AACD,gBAAA,IAAI,QAAQ,EAAE,IAAI,EAAE;AAClB,oBAAA,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC;gBAC/D;qBAAO;oBACL,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC;gBAC9C;YACF;QACF;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,mBAAmB,CAAC,EAAC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;QACjE;IACF;AAEA;;;AAGG;AACH,IAAA,MAAM,wBAAwB,CAC5B,IAAuC,EACvC,QAAkB,EAAA;QAElB,MAAM,SAAS,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CACpD,+BAA+B,EAC/B;AACE,YAAA,OAAO,EAAE,IAAI;YACb,QAAQ;AACT,SAAA,CACF;AACD,QAAA,OAAO,MAAM,SAAS,CAAC,UAAU,EAAE;IACrC;AAEA;;;;AAIG;AACH,IAAA,MAAM,mBAAmB,CACvB,IAAoB,EACpB,QAAkB,EAAA;QAElB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC;QAClE,QAAQ,MAAM;YACZ,KAAK,iBAAiB,CAAC,GAAG;gBACxB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;gBACzC;YACF,KAAK,iBAAiB,CAAC,SAAS;gBAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC;gBAC1C;YACF,KAAK,iBAAiB,CAAC,MAAM;AAC7B,YAAA;AACE,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;gBAC5B;;IAEN;AAEA;;;;AAIG;AACH,IAAA,MAAM,eAAe,CACnB,QAAgC,EAChC,IAAoB,EACpB,QAAkB,EAAA;AAElB,QAAA,IAAI,QAAQ,CAAC,IAAI,IAAI,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC1C;aAAO;AACL,YAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAClC;IACF;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,QAAgC,EAAA;AAChD,QAAA,MAAM,YAAY,GAChB,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,IAAI,QAAQ,EAAE,OAAO,IAAI,uBAAuB;cACrE,CAAA,EAAG,QAAQ,EAAE,OAAO,CAAA,GAAA,EAAM,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAA;AACtD,cAAE,QAAQ,EAAE,OAAO;AACvB,QAAA,MAAM,YAAY,GAAG,QAAQ,EAAE,MAAM,EAAE;cACnC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB;cACjD,EAAE;AACN,QAAA,IAAI,CAAC,mBAAmB,CAAC,EAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAC,CAAC;IAC1E;AACA;;;;AAIG;AACH,IAAA,MAAM,iBAAiB,CACrB,QAAgC,EAChC,IAAoB,EAAA;QAEpB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC1B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC5D,KAAK;YACL,OAAO;AACR,SAAA,CAAC;AACF,QAAA,IAAI,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE;AAC1B,YAAA,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK;YACnC,MAAM,GAAG,GAAG,KAAK,EAAE,MAAM,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO;AACnD,YAAA,IAAI,CAAC,cAAc,CAAC,uBAAuB,CACzC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CACnC,mCAAmC,EACnC,SAAS,CACV,EACD,IAAI,CAAC,iBAAiB,CAAC,+BAA+B,CACpD,cAAc,EACd,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAC5C,SAAS,CACV,EACD;AACE,gBAAA,iBAAiB,EAAE,4BAA4B;AAC/C,gBAAA,mBAAmB,EAAE,IAAI;AAC1B,aAAA,CACF;AACD,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;YACpC;QACF;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,CAAC;AACtC,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC;AACvC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK;AAC5C,QAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;AAC1C,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,GAAG;YAChC,KAAK,EACH,WAAW,KAAK;kBACZ,IAAI,CAAC;kBACL,GAAG,UAAU,CAAC,SAAS,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAA,CAAE;AAC5C,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE;gBACZ,KAAK,EAAE,IAAI,CAAC;AACV,sBAAE,MAAM,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAC9C,UAAU,CAAC,KAAK,CAAC,GAAG;AAExB,sBAAE,SAAS;AACd,aAAA;;AAED,YAAA,cAAc,EAAE;AACd,gBAAA,WAAW,EAAE;AACX,oBAAA,KAAK,EAAE,CAAA,EAAA,EAAK,UAAU,CAAC,IAAI,CAAA,CAAE;oBAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,oBAAA,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,GAAG;AACjC,oBAAA,IAAI,EAAE,WAAW;oBACjB,UAAU,EAAE,IAAI,CAAC,GAAG;oBACpB,MAAM,EAAE,UAAU,CAAC,YAAY;oBAC/B,SAAS,EAAE,UAAU,CAAC,SAAS;AAChC,iBAAA;AACD,gBAAA,KAAK,EAAE,KAAK;AACb,aAAA;AACF,SAAA,CAAC;IACJ;AAEA;;;;;;AAMG;IACH,MAAM,gBAAgB,CACpB,SAAiB,EACjB,aAAA,GAA0B,CAAC,KAAK,CAAC,EAAA;AAEjC,QAAA,IAAI;AACF,YAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,aAAa,CACpE,SAAS,EACT,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAClC;AACD,YAAA,IACE,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,KACvB,2BAA2B,CAAC,UAAU,EAAE,KAAK,CAAC,CAC/C,EACD;AACA,gBAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;oBAC7B,UAAU,CAAC,MAAK;wBACd,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;oBAC1D,CAAC,EAAE,IAAI,CAAC;AACV,gBAAA,CAAC,CAAC;YACJ;AACA,YAAA,OAAO,UAAU;QACnB;QAAE,OAAO,EAAE,EAAE;AACX,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AACpB,YAAA,MAAM,EAAE;QACV;IACF;AAEA;;;AAGG;IACH,mBAAmB,CAAC,WAAgC,EAAE,EAAA;AACpD,QAAA,IAAI,CAAC,cAAc,CAAC,uBAAuB,CACzC,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAC,qBAAqB,EAC9C,QAAQ,CAAC,OAAO,EAChB;AACE,YAAA,iBAAiB,EAAE,4BAA4B;YAC/C,OAAO,EAAE,QAAQ,EAAE,OAAO;AAC3B,SAAA,CACF;AACD,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;IACtC;AAEA;;;;AAIG;AACH,IAAA,cAAc,CAAC,IAAoB,EAAA;QACjC,OAAO,IAAI,CAAC;AACT,aAAA,gBAAgB;AAChB,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5C;AAEA;;;AAGG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE;IACrD;AAEA;;;AAGG;AACH,IAAA,WAAW,CAAC,IAAoB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI;AACtB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IACnC;+GAplBW,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,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,0BAA0B,cADd,MAAM,EAAA,CAAA,CAAA;;4FAClB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;MChBnB,sBAAsB,CAAA;AADnC,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC;AAClC,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC7C,QAAA,IAAA,CAAA,0BAA0B,GAAG,MAAM,CAAC,0BAA0B,CAAC;AACvE,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AA2QpC,IAAA;AAvQC;;;;;AAKG;AACH,IAAA,YAAY,CACV,QAAoB,EACpB,IAKC,EACD,oBAA2D,EAAA;QAE3D,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE;AACnD,QAAA,MAAM,oBAAoB,GAAG,IAAI,EAAE;AACjC,cAAE;kBACE,CAAA,WAAA,EAAc,SAAS,CAAA,CAAA;AACzB,kBAAE;cACF,EAAE;QACN,MAAM,GAAG,GAAG,CAAA,EAAG,QAAQ,CAAC,GAAG,CAAA,MAAA,EAAS,oBAAoB,CAAA,MAAA,CAAQ;AAChE,QAAA,QAAQ,CAAC,gBAAgB,CAAC,MAAM,GAAG,KAAK;AAExC,QAAA,IAAI,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM;QAE/B,IAAI,IAAI,EAAE;AACR,YAAA,KAAK,GAAG,IAAI,CAAC,KAAK;AAClB,YAAA,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,GAAG,aAAa,GAAG,KAAK,CAAC,MAAM;AAE9D,YAAA,MAAM,CAAC,GAAG,eAAe,CACvB,IAAI,CAAC;AACF,iBAAA,MAAM;AACN,iBAAA,OAAO;iBACP,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,EACxD,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE,EACpD,WAAW,CACZ;AACD,YAAA,IAAI,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;AAE7C,YAAA,MAAM,GAAG;;gBAEP,KAAK,EAAE,CAAA,EAAG,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAA,CAAE;AACzD,gBAAA,MAAM,EAAE,CAAA,EAAG,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAA,CAAE;AAC5C,gBAAA,gBAAgB,EAAE,CAAA,EAAG,KAAK,EAAE,UAAU,IAAI,EAAE,CAAA,CAAE;AAC9C,gBAAA,QAAQ,EAAE,CAAA,EAAG,MAAM,IAAI,aAAa,CAAA,CAAE;aACvC;;;YAGD,IAAI,IAAI,EAAE;AACR,gBAAA,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI;YAC9B;QACF;AAEA,QAAA,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;aACtB,GAAG,CAAqB,GAAG,EAAE;AAC5B,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,eAAe,EAAE,QAAQ;AACzB,YAAA,YAAY,EAAE,MAAM;YACpB,MAAM;SACP;aACA,IAAI,CACH,OAAO,CAAC,IAAI,CAAC,EACb,GAAG,CAAC,CAAC,CAAC,KAAI;YACR,MAAM,IAAI,GAA6B,EAAE;YACzC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,gBAAA,IAAI,CAAC,oBAAoB,GAAG,oBAAoB;gBAChD,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe;sBACxC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;AACzC,sBAAE,CAAC,CAAC,IAAI,CAAC,MAAM;AACjB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAC7B;iBAAO;AACL,gBAAA,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAC3C,QAAQ,EACR,4CAA4C,EAC5C,CAAC,CAAC,IAAW,CACd;YACH;YACA,OAAO,CAAC,CAAC,IAAI;QACf,CAAC,CAAC,EACF,UAAU,CAAC,OAAO,CAAC,KAAI;YACrB,IAAI,sBAAsB,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE;AAC7D,gBAAA,CAAuB,QAAQ,CAAC,OAAO,EAAE,eAAgB,EAAC,MAAM,CAC9D,QAAQ,EACR,CAAC,CACF;AACD,gBAAA,OAAO,EAAE,CAAC,CAAC,CAAC;YACd;AACA,YAAA,QAAQ,QAAQ,CAAC,OAAO,EAAE,eAAe;gBACvC,KAAK,qBAAqB,CAAC,MAAM;oBAC/B;gBACF,KAAK,qBAAqB,CAAC,KAAK;AAChC,gBAAA;AACE,oBAAA,IAAI,CAAC,cAAc,CAAC,uBAAuB,CACzC,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAC3C,4CAA4C,EAC5C,SAAS,CACV,EACD,QAAQ,CAAC,KAAK;wBACZ,IAAI;AACJ,wBAAA,IAAI,CAAC,iBAAiB,CAAC,+BAA+B,CACpD,eAAe,EACf,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,EAC1C,EAAC,GAAG,EAAC,CACN,EACH;AACE,wBAAA,mBAAmB,EAAE,IAAI;AACzB,wBAAA,iBAAiB,EAAE,wBAAwB;AAC5C,qBAAA,CACF;;AAEL,YAAA,QAAQ,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI;AACvC,YAAA,OAAO,EAAE,CAAC,CAAC,CAAC;QACd,CAAC,CAAC,CACH;QACH,OAAO,QAAQ,CAAC,QAAQ;IAC1B;AAEA;;;AAGG;AACK,IAAA,gBAAgB,CAAC,IAA8B,EAAA;AACrD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC9B,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,IAAI,CAAC,cAAc,CAAC,uBAAuB,CACzC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,gBAAgB,EAAE,SAAS,CAAC,EAClE,QAAQ,CAAC,KAAK;gBACZ,IAAI;gBACJ,IAAI,CAAC,iBAAiB,CAAC,cAAc,CACnC,uBAAuB,EACvB,SAAS,CACV,EACH;AACE,gBAAA,mBAAmB,EAAE,IAAI;AACzB,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,iBAAiB,EAAE,wBAAwB;AAC5C,aAAA,CACF;YACD;QACF;AACA,QAAA,QAAQ,CAAC,OAAO,GAAG,KAAK;AACxB,QAAA,QAAQ,CAAC,MAAM,GAAG,EAAE;AACpB,QAAA,QAAQ,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACzB,YAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,GAAG,CAAC;QACvC;aAAO;YACL,QAAQ,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAChD,YAAA,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;AAC5C,gBAAA,MAAM,GAAG,GAAmC;oBAC1C,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,EAAE,EAAE,KAAK,CAAC,IAAI;AACd,oBAAA,WAAW,EAAE,KAAK;oBAClB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;AAClC,oBAAA,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;AAChD,wBAAA,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC,QAAQ,CAC7D,IAAI,CACL;AACH,oBAAA,CAAC,CAAC;oBACF,YAAY,EAAE,KAAK,CAAC,cAAc;iBACnC;AACD,gBAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,oBAAA,MAAM,aAAa,GAAG,gBAAgB,CACpC,KAAK,EACL,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CACnC;oBACD,IAAI,aAAa,EAAE;AACjB,wBAAA,GAAG,CAAC,SAAS,GAAG,aAAa,CAAC,KAAK,EAAY;AAC/C,wBAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;oBAC1C;gBACF;AACA,gBAAA,OAAO,GAAG;AACZ,YAAA,CAAC,CAAC;QACJ;IACF;AAEA;;;;;AAKG;AACH,IAAA,MAAM,iBAAiB,CACrB,QAAoB,EACpB,KAAqC,EAAA;AAErC,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAC9D,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,EACf;AACE,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA,CACF;YACD,KAAK,CAAC,IAAI,GAAG,IAAI,EAAE,YAAY,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;YACvE,KAAK,GAAG,EAAC,GAAG,KAAK,EAAE,GAAG,IAAI,EAAC;AAC3B,YAAA,OAAO,KAAK;QACd;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACjB,YAAA,OAAO,CAAC;QACV;IACF;AAEA;;;;;AAKG;AACH,IAAA,MAAM,iBAAiB,CACrB,EAAc,EACd,KAAqC,EAAA;QAErC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC;QACnD,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,SAAS;QAClB;QACA,IAAI,KAAK,GAAW,SAAS;AAC7B,QAAA,IAAI,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE;AAClB,YAAA,KAAK,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;QAC1E;QACA,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE;YAC5B,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,uBAAuB,CAAC,EAAE;gBAC7C,KAAK,GAAG,SAAS;YACnB;QACF;QACA,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE;YAC5B,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE;gBAC7B,KAAK,GAAG,SAAS;YACnB;QACF;AACA,QAAA,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE;AACf,YAAA,MAAM,EAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAC,GAAG,GAAG;YACvE,OAAO;AACL,gBAAA,GAAG,GAAG;gBACN,IAAI,EAAE,GAAG,CAAC,GAAG;gBACb,KAAK,EAAE,GAAG,CAAC,IAAI;gBACf,MAAM,EAAE,EAAE,CAAC,IAAI;AACf,gBAAA,MAAM,EAAE,YAAY;gBACpB,KAAK;AACL,gBAAA,SAAS,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI;gBAC1B,IAAI;gBACJ,KAAK;gBACL,QAAQ;gBACR,SAAS;gBACT,IAAI;aACL;QACH;QACA,IAAI,CAAC,cAAc,CAAC,uBAAuB,CACzC,4CAA4C,EAC5C,4BAA4B,EAC5B;AACE,YAAA,iBAAiB,EAAE,wBAAwB;AAC5C,SAAA,CACF;AACD,QAAA,OAAO,SAAS;IAClB;+GAjRW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cADV,MAAM,EAAA,CAAA,CAAA;;4FAClB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;MCXnB,4BAA4B,CAAA;AAUvC,IAAA,WAAA,GAAA;AATA,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAC3B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,wBAAwB,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAC3D,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAM/C,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAClD,YAAA,IAAI,KAAK,KAAK,SAAS,EAAE;gBACvB,IAAI,CAAC,sBAAsB,EAAE;YAC/B;AAAO,iBAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACnC,gBAAA,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC;YACnC;AACF,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AACtC,YAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;YAC9B,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAC7D,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,WAAW,GAAG,oBAAoB,CAAC,qBAAqB,CAAC;IAChE;AAEA;;AAEG;IACK,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,CACtD,aAAa,EACb,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAC1D;IACH;AAEA;;AAEG;AACH,IAAA,eAAe,CAAC,GAAG,EAAA;AACjB,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAC7B,aAAA,SAAS;AACT,aAAA,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC;AAC1C,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC;AACzB,aAAA,SAAS;aACT,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE;AAC5B,YAAA,iBAAiB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC;QACxD;IACF;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE;IACtC;AAEA;;;AAGG;AACH,IAAA,oBAAoB,CAAC,OAAO,EAAA;AAC1B,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC7B,gBAAA,IAAI;oBACF,IAAI,GAAG,EAAE;wBACP,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE;oBACtC;gBACF;gBAAE,OAAO,EAAE,EAAE;AACX,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B;AACF,YAAA,CAAC,CAAC;QACJ;IACF;AAEA;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,aAAgC,EAAA;AAC/C,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,CAAC,aAAa,CAAC,CAAC;IAC3D;IAEA,cAAc,CACZ,WAAuC,EACvC,KAAc,EAAA;AAEd,QAAA,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS,EAAE;AACvC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC;AAChB,iBAAA,SAAS;AACT,iBAAA,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC;YACxC,IAAI,KAAK,EAAE;AACT,gBAAA,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC;YAC9B;QACF;IACF;+GA7FW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA5B,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,4BAA4B,cAF3B,MAAM,EAAA,CAAA,CAAA;;4FAEP,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAHxC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCdY,2BAA2B,CAAA;AAHxC,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAqClD,IAAA;AAnCC;;;AAGG;AACH,IAAA,yBAAyB,CAAC,SAAiB,EAAA;AACzC,QAAA,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC3C,gBAAA,OAAO,KAAK;YACd;YACA,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC3C,gBAAA,OAAO,KAAK;YACd;YACA,IACE,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC3C,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EACxC;AACA,gBAAA,OAAO,SAAS;YAClB;QACF;IACF;AAEA;;AAEG;AACH,IAAA,qBAAqB,CAAC,UAAsB,EAAA;AAC1C,QAAA,OAAOC;aACJ,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE;AAC5B,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,UAAU,CAAC,OAAO,EAAE;AAC7C,cAAEC,GAAa,CAAC,WAAW;AAC3B,cAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AACnE,gBAAA,CAAC;AACH,kBAAE;AACF,kBAAEA,GAAa,CAAC,WAAW,CAAC;;IAElC;+GArCW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA3B,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,2BAA2B,cAF1B,MAAM,EAAA,CAAA,CAAA;;4FAEP,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAHvC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MC8BY,sBAAsB,CAAA;AAHnC,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,0BAA0B,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC/D,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACrD,QAAA,IAAA,CAAA,0BAA0B,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC/D,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CAAC,2BAA2B,CAAC;AACjE,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AA0YhD,IAAA;AAxYC;;;;;;;;;;AAUG;AACH,IAAA,cAAc,CACZ,IAAY,EACZ,GAAW,EACX,IAAY,EACZ,KAAa,EACb,QAAgB,EAChB,GAAW,EACX,OAA6B,EAC7B,QAAwB,EAAA;QAExB,OAAO,IAAI,OAAO,CAAC,OAAO,OAAO,EAAE,MAAM,KAAI;AAC3C,YAAA,IAAI;gBACF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,iBAAiB,CACtC,IAAI,EACJ,GAAG,EACH,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,GAAG,EACH,OAAO,CACR;AACD;;;AAGE;AACF,gBAAA,IAAI,OAAO,CAAC,YAAY,EAAE;AACxB,oBAAA,IAAI,mBAAmB,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;wBAC1C,aAAa,CAAC,GAAG,EAAE;AACjB,4BAAA,MAAM,EAAE,KAAK;AACb,4BAAA,GAAG,EAAE,GAAG;AACT,yBAAA,CAAC;oBACJ;yBAAO;wBACL,aAAa,CAAC,GAAG,EAAE;AACjB,4BAAA,MAAM,EAAE,KAAK;AACd,yBAAA,CAAC;oBACJ;gBACF;AACA,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE;oBAC9B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;gBAC/C;gBACA,OAAO,CAAC,GAAG,CAAC;YACd;YAAE,OAAO,EAAE,EAAE;gBACX,MAAM,CAAC,EAAE,CAAC;YACZ;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;;;;;;AAUG;AACH,IAAA,MAAM,iBAAiB,CACrB,IAAY,EACZ,GAAW,EACX,IAAY,EACZ,KAAa,EACb,QAAgB,EAChB,GAAW,EACX,UAAgC,EAAE,EAAA;AAElC,QAAA,IACE,IAAI,EAAE,WAAW,EAAE,IAAI,QAAQ;AAC/B,YAAA,IAAI,EAAE,WAAW,EAAE,IAAI,KAAK;YAC5B,GAAG,KAAK,SAAS,EACjB;YACA,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC;QACxC;AAEA,QAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;YAC3C,IAAI,GAAG,IAAI,CAAC,2BAA2B,CAAC,yBAAyB,CAAC,GAAG,CAAC;QACxE;AAEA,QAAA,IAAI,aAAa;AACjB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE;YAC9B,aAAa,GAAG,IAAI,CAAC;AAClB,iBAAA,MAAM;AACN,iBAAA,OAAO;AACP,iBAAA,aAAa;AACb,iBAAA,OAAO,EAAE;QACd;AAEA,QAAA,MAAM,UAAU,GAAG,IAAI,qBAAqB,CAC1C,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,GAAG,EACH,OAAO,EACP,aAAa,CACd;AAED,QAAA,MAAM,gBAAgB,GAAG,IAAI,sBAAsB,EAAE;AACrD,QAAA,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,CAAC;AAEnE,QAAA,MAAM,GAAG,GACP,gBAAgB,CAAC,WAAW,IAAIL,MAAY;YAC5C,gBAAgB,CAAC,WAAW,IAAI;cAC5B,IAAI,gBAAgB,CAAC,WAAW,CAAC,gBAAgB,CAAC,YAAY;cAC9D,IAAI,gBAAgB,CAAC,WAAW,CAAC,gBAAgB,CAAC;AACxD,QAAA,UAAU,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG;AAEnC;;;;AAIG;AACH,QAAA,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC,KAAK;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAE9D,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,OAAO,SAAS,IAAI,QAAQ,EAAE;AAChC,gBAAA,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,KAAe;AACnD,gBAAA,UAAU,CAAC,WAAW,CAAC,KAAK,GAAG,SAAS;YAC1C;iBAAO;gBACL,UAAU,CAAC,WAAW,CAAC,KAAK,GAAG,EAAC,KAAK,EAAC;YACxC;QACF;aAAO;AACL,YAAA,UAAU,CAAC,WAAW,CAAC,KAAK,GAAG,kBAAkB;AACjD,YAAA,UAAU,CAAC,WAAW,CAAC,GAAG,GAAG,YAAY;QAC3C;AACA,QAAA,OAAO,IAAIE,QAAW,CAAC,UAAU,CAAC,WAAW,CAAC;IAChD;AAEA;;;AAGG;AACH,IAAA,SAAS,CAAC,GAAuC,EAAA;AAC/C,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE;QAC3B,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;YAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC;QACnC;aAAO;AACL,YAAA,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC5C;IACF;AAEA;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC;IAC/C;AAEA;;;AAGG;AACH,IAAA,cAAc,CAAC,GAAG,EAAA;AAChB,QAAA,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,OAAO,EAAE;YAC7B,UAAU,CAAC,MAAK;gBACd,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE;oBACjC;gBACF;AACA,gBAAA,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE;AAC9B,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;YAC1B,CAAC,EAAE,IAAI,CAAC;QACV;IACF;AAEA;;AAEG;AACK,IAAA,oBAAoB,CAAC,IAAsB,EAAA;AACjD,QAAA,MAAM,eAAe,GACnB,OAAO,IAAI,CAAC,eAAe,KAAK;cAC5B,IAAI,CAAC;AACP,cAAE,IAAI,CAAC,eAAe,EAAE,OAAO;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,eAAe,CAAC;QAC1E,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,cAAc;AAClC,YAAA,QAAQ,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ;AAClD,YAAA,aAAa,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,YAAY,CAAA,CAAE;AACtC,YAAA,WAAW,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,UAAU,CAAA,CAAE;AAClC,YAAA,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC;YAC3C,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,YAAA,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE;YAC5C,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,iBAAiB,EACf,IAAI,CAAC,IAAI,IAAI,KAAK;gBAClB,IAAI,CAAC,IAAI,IAAI,KAAK;gBAClB,IAAI,CAAC,IAAI,IAAI,QAAQ;AACrB,gBAAA,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,GAAG,EAAE,WAAW,IAAI,KAAK,GAAG,eAAe,GAAG,SAAS;YACvD,GAAG,EAAE,WAAW,IAAI,KAAK,GAAG,eAAe,GAAG,SAAS;SACxD;IACH;AAEA;;;;AAIG;IACH,MAAM,WAAW,CAAC,IAAsB,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE,EAAE;AACtE,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;YACzB,IAAI,CAAC,cAAc,CAAC,uBAAuB,CACzC,gBAAgB,EAChB,4BAA4B,EAC5B;AACE,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,iBAAiB,EAAE,wBAAwB;AAC5C,aAAA,CACF;QACH;QACA,MAAM,WAAW,GAGb,EAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC;QACjC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE;YAC3C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;YAC1D,IAAI,CAAC,WAAW,IAAI,WAAW,IAAI,iBAAiB,CAAC,MAAM,EAAE;AAC3D,gBAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;AAC5B,gBAAA,OAAO,WAAW;YACpB;AACA,YAAA,MAAM,cAAc,GAClB,WAAW,IAAI,iBAAiB,CAAC;AAC/B,kBAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI;AAClB;AACE,oBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAClC,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,MAAM,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;YAC3D;QACF;AACA,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CACrC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,EAC1C,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,EAC1B,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAC/B,IAAI,CAAC,QAAQ,CACd;AACD,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACrB,QAAA,WAAW,CAAC,KAAK,GAAG,KAAK;AACzB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAK;gBAC9B,KAAK,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC;AAC7C,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACvB,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,WAAW;IACpB;AAEA;;;AAGG;AACH,IAAA,MAAM,mBAAmB,CAAC,SAAiB,EAAE,IAAsB,EAAA;AACjE,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,CACvE,SAAS,EACT,CAAC,OAAO,CAAC,CACV;AACD,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,eAAe,CACrE,UAAU,CAAC,KAAK,CAAC,GAAG,CACrB;IACH;AAEA;;;AAGG;IACH,MAAM,WAAW,CAAC,IAAsB,EAAA;AACtC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC;AACvB,aAAA,gBAAgB;AAChB,aAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AAC3B,QAAA,MAAM,KAAK,GACT,OAAO,IAAI,CAAC,eAAe,IAAI;cAC3B,IAAI,CAAC;AACP,cAAE,IAAI,CAAC,eAAe,EAAE,OAAO;AACnC,QAAA,MAAM,SAAS,GAAsB;YACnC,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,IAAI,EAAE,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3C,GAAG,EAAE,IAAI,CAAC;AACP,iBAAA,qBAAqB,CAACG,GAAa,CAAC,IAAI,CAAC,SAAS,CAAC;AACnD,iBAAA,OAAO,EAAE;AACZ,YAAA,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE;YAC5C,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,KAAK;SACN;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAChD,IAAI,CAAC,eAAe,CAAC,iBAAiB,CACpC,IAAI,CAAC,cAAc,EACnB,YAAY,EACZ,IAAI,CACL,EACD,SAAS,CACV;IACH;AAEA;;;;;AAKG;AACH,IAAA,MAAM,qBAAqB,CACzB,IAAsB,EACtB,UAAoB,EAAA;AAEpB,QAAA,IAAI,SAAiC;AACrC,QAAA,IAAI,CAAC,0BAA0B,CAAC,eAAe,GAAG,IAAI;AACtD,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CACpE,IAAI,CAAC,IAAI,CACV;QACD,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,iBAAiB,CAAC,GAAG;QAC9B;AACA,QAAA,MAAM,MAAM,GACV,MAAM,IAAI,CAAC,0BAA0B,CAAC,wBAAwB,CAC5D,IAAI,EACJ,UAAU,CACX;QACH,QAAQ,MAAM;YACZ,KAAK,iBAAiB,CAAC,SAAS;gBAC9B,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBACxC,IAAI,CAAC,SAAS,EAAE;oBACd,OAAO,iBAAiB,CAAC,MAAM;gBACjC;AACA,gBAAA,IAAI,SAAS,EAAE,IAAI,EAAE;AACnB,oBAAA,QAAQ,SAAS,CAAC,IAAI;AACpB,wBAAA,KAAK,EAAE;AACL,4BAAA,OAAO,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAC/C,wBAAA;AACE,4BAAA,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,SAAS,CAAC;4BAC5D,OAAO,iBAAiB,CAAC,MAAM;;gBAErC;qBAAO;AACL,oBAAA,MAAM,IAAI,CAAC,0BAA0B,CAAC,aAAa,CACjD,SAAS,CAAC,IAAI,EACd,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAClC;oBACD,OAAO,iBAAiB,CAAC,SAAS;gBACpC;YACF,KAAK,iBAAiB,CAAC,GAAG;gBACxB,OAAO,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC;YACrD,KAAK,iBAAiB,CAAC,MAAM;AAC3B,gBAAA,IAAI,CAAC,0BAA0B,CAAC,eAAe,GAAG,KAAK;gBACvD,OAAO,iBAAiB,CAAC,MAAM;YACjC;;IAEJ;AAEA;;;;;AAKG;IACH,KAAK,CAAC,QAAgB,EAAE,GAAW,EAAA;QACjC,IAAI,QAAQ,IAAI,KAAK,IAAI,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC7C,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,KAAK;IACd;AAEA;;;;AAIG;IACH,MAAM,CAAC,MAAM,EAAE,GAAW,EAAA;AACxB,QAAA,IACE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjB,YAAA,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjB,YAAA,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjB,YAAA,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAC1B;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC;YACnC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC;QACvC;IACF;+GAnZW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA,CAAA;;4FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCbY,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC;AAClC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACrC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAqYhD,IAAA;AAjYC;;;;;;;;;AASG;AACH,IAAA,YAAY,CACV,QAAoB,EACpB,IAAI,EACJ,oBAAoB,EACpB,SAAiB,EAAA;AAEjB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC;AAC5D,QAAA,QAAQ,CAAC,gBAAgB,CAAC,MAAM,GAAG,KAAK;AACxC,QAAA,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;aACtB,GAAG,CAAC,GAAG,EAAE;AACR,YAAA,YAAY,EAAE,MAAM;SACrB;aACA,IAAI,CACHC,SAAO,CAAC,IAAI,CAAC,EACbC,KAAG,CAAC,CAAC,CAAM,KAAI;AACb,YAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ;AACrB,YAAA,CAAC,CAAC,oBAAoB,GAAG,oBAAoB;AAC7C,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACxB,YAAA,OAAO,CAAC;AACV,QAAA,CAAC,CAAC,EACFC,YAAU,CAAC,CAAC,CAAC,KAAI;YACf,IAAI,sBAAsB,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE;AAC7D,gBAAA,CAAuB,QAAQ,CAAC,OAAO,EAAE,eAAgB,EAAC,MAAM,CAC9D,QAAQ,EACR,CAAC,CACF;AACD,gBAAA,OAAO,EAAE,CAAC,CAAC,CAAC;YACd;AACA,YAAA,QAAQ,QAAQ,CAAC,OAAO,EAAE,eAAe;gBACvC,KAAK,qBAAqB,CAAC,MAAM;oBAC/B;gBACF,KAAK,qBAAqB,CAAC,KAAK;AAChC,gBAAA;AACE,oBAAA,IAAI,CAAC,cAAc,CAAC,uBAAuB,CACzC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CACnC,4CAA4C,EAC5C,SAAS,CACV,EACD,QAAQ,CAAC,KAAK;wBACZ,IAAI;AACJ,wBAAA,IAAI,CAAC,iBAAiB,CAAC,+BAA+B,CACpD,eAAe,EACf,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,EAC1C,EAAC,GAAG,EAAC,CACN,EACH;AACE,wBAAA,mBAAmB,EAAE,IAAI;AACzB,wBAAA,iBAAiB,EAAE,uBAAuB;AAC3C,qBAAA,CACF;;AAEL,YAAA,QAAQ,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI;AACvC,YAAA,OAAO,EAAE,CAAC,CAAC,CAAC;QACd,CAAC,CAAC,CACH;;QAEH,OAAO,QAAQ,CAAC,QAAQ;IAC1B;AAEQ,IAAA,gBAAgB,CAAC,QAAoB,EAAE,IAAI,EAAE,SAAS,EAAA;AAC5D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,MAAM,CAAC,GAAG,eAAe,CACvB,IAAI,CAAC;AACF,aAAA,MAAM;AACN,aAAA,OAAO;aACP,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,EACxD,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE,EACpD,WAAW,CACZ;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,GAAG,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE;AACpE,QAAA,MAAM,MAAM,GACV,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI;AAC5C,cAAE,KAAK,CAAC,MAAM,IAAI;AAChB,kBAAE;kBACA,KAAK,CAAC;cACR,QAAQ;AACd,QAAA,MAAM,IAAI,GACR,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG;cACxD,KAAK,CAAC;AACR,cAAE,KAAK,CAAC,KAAK;AACjB,QAAA,MAAM,GAAG,GAAG;;AAEV,YAAA,IAAI,IAAI,EAAE,GAAG,CAAA,EAAG,SAAS,CAAA,QAAA,EAAW,IAAI,CAAA,EAAA,CAAI,GAAG,EAAE;YACjD,IAAI;;AAEJ,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC;;;;;;AAMvC;AACE,aAAA,MAAM,CAAC,CAAC,CAAC,KAAI;YACZ,OAAO,CAAC,IAAI,EAAE;AAChB,QAAA,CAAC;aACA,IAAI,CAAC,OAAO,CAAC;AAChB,QAAA,MAAM,GAAG,GACP,QAAQ,CAAC,GAAG;YACZ,GAAG;AACH,YAAA,WAAW,CAAC;AACV,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,MAAM,EAAE,kBAAkB;gBAC1B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;AAC3B,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAAC,KAAK;AACtC,gBAAA,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAAC,KAAK;AACtC,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA,CAAC;QACJ,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC;IACzC;AAEA;;;AAGG;AACK,IAAA,gBAAgB,CAAC,IAAI,EAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAChD;QACF;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC9B,QAAA,QAAQ,CAAC,OAAO,GAAG,KAAK;AACxB,QAAA,QAAQ,CAAC,MAAM,GAAG,EAAE;AACpB,QAAA,QAAQ,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI;QACvC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;AAC5B,YAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,GAAG,CAAC;AACrC,YAAA,OAAO,KAAK;QACd;QACA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;QAChD,QAAQ,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AAE1C,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK;AACpB,YAAA,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AACzB,YAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,gBAAA,MAAM,aAAa,GAAG,gBAAgB,CACpC,GAAG,EACH,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CACnC;gBACD,IAAI,aAAa,EAAE;AACjB,oBAAA,GAAG,CAAC,SAAS,GAAG,aAAa,CAAC,KAAK,EAAE;AACrC,oBAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;gBAC1C;YACF;QACF;AACA,QAAA,OAAO,IAAI;IACb;AAEA;;;;AAIG;IACK,WAAW,CAAC,KAAa,EAAE,KAAK,EAAA;QACtC,MAAM,OAAO,GAAG,0CAA0C;AAC1D,QAAA,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;YAC9B,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,EAAE;;gBAE7C,OAAO,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,CAAG;YACvB;YACA,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE;QACpE;AACA,QAAA,IAAI,KAAK,IAAI,aAAa,EAAE;YAC1B,MAAM,OAAO,GAAG,cAAc;AAC9B,YAAA,QAAQ,KAAK,CAAC,IAAI;AAChB,gBAAA,KAAK,SAAS;oBACZ,OAAO,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,CAAG;AACvB,gBAAA,KAAK,SAAS;oBACZ,OAAO,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,CAAG;AACvB,gBAAA,KAAK,KAAK;AACV,gBAAA;AACE,oBAAA,OAAO,CAAA,CAAA,EAAI,OAAO,CAAA,IAAA,EAAO,OAAO,GAAG;;QAEzC;aAAO;AACL,YAAA,OAAO,EAAE;QACX;IACF;AAEA;;;;;;;;AAQG;IACH,YAAY,CAAC,KAAoC,EAAE,IAAa,EAAA;QAC9D,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;YAC3B,IAAI,IAAI,EAAE;gBACR,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAC9B,CAAC,IAAI,KACH,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;AACrC,qBAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAChD;YACH;YAEA,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE;gBACpC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG;YAC3B;AACA,YAAA,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACvB;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qDAAqD,CAAC;IACtE;AAEA;;AAEG;AACK,IAAA,cAAc,CAAC,SAAS,EAAA;QAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI;AACvC,cAAE,SAAS,CAAC,IAAI,CAAC,CAAC;AAClB,cAAE,SAAS,CAAC,IAAI;AAClB,QAAA,OAAO;aACJ,KAAK,CAAC,GAAG;AACV,cAAE,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACxC,cAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB;AAEA;;AAEG;AACK,IAAA,qBAAqB,CAAC,SAAS,EAAA;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI;AACvC,cAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpD,cAAE,SAAS,CAAC,IAAI;;AAElB,QAAA,IAAI,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE;AAC/B,YAAA,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;QAChE;IACF;IAEQ,WAAW,CAAC,IAAS,EAAE,IAAY,EAAA;QACzC,QACE,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC3C,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAA,QAAA,EAAW,IAAI,CAAA,CAAE,CAAC;IAEtD;AAEA;;;;;;;AAOG;AACH,IAAA,MAAM,iBAAiB,CACrB,EAAc,EACd,KAAoC,EAAA;AAEpC,QAAA,IAAI,SAAS,GAAQ,EAAC,IAAI,EAAE,MAAM,EAAC;QACnC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAC1C,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI,IAAI,IAAI,SAAS,EAAE;AACrB,YAAA,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;AAC1D,gBAAA,SAAS,CAAC,IAAI,GAAG,KAAK;AACtB,gBAAA,SAAS,CAAC,IAAI,GAAG,SAAS;YAC5B;iBAAO,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACrD,gBAAA,SAAS,GAAG;AACV,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,UAAU,EAAE,WAAW;iBACxB;YACH;AAAO,iBAAA,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;AACrE,gBAAA,SAAS,CAAC,IAAI,GAAG,KAAK;AACtB,gBAAA,SAAS,CAAC,IAAI,GAAG,SAAS;AAC1B,gBAAA,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,IAAI;YAC5B;iBAAO,IACL,KAAK,CAAC,OAAO;gBACb,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,EACnE;AACA,gBAAA,SAAS,GAAG;AACV,oBAAA,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,KAAK,GAAG,KAAK,GAAG,SAAS;AACjE,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,UAAU,EAAE,WAAW;oBACvB,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,KAAK;iBACvD;YACH;iBAAO;gBACL,IAAI,CAAC,cAAc,CAAC,uBAAuB,CACzC,4CAA4C,EAC5C,IAAI,CAAC,iBAAiB,CAAC,cAAc,CACnC,2CAA2C,EAC3C,EAAC,WAAW,EAAE,KAAK,CAAC,WAAW,EAAC,CACjC,EACD;AACE,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,iBAAiB,EAAE,uBAAuB;AAC3C,iBAAA,CACF;AACD,gBAAA,OAAO,KAAK;YACd;QACF;AAAO,aAAA,IAAI,IAAI,IAAI,SAAS,EAAE;AAC5B,YAAA,IAAI,KAAK,CAAC,KAAK,EAAE;;;AAGf,gBAAA,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KACpC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CACpE;;gBAED,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE;AAC7D,oBAAA,SAAS,GAAG;AACV,wBAAA,IAAI,EAAE,KAAK;qBACZ;gBACH;;gBAEA,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE;AAC9D,oBAAA,SAAS,GAAG;AACV,wBAAA,IAAI,EAAE,MAAM;qBACb;gBACH;;gBAEA,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE;oBAC7D,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK;gBACnE;;gBAEA,SAAS,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI;AAC3C,sBAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG;AACpC,sBAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC1D,gBAAA,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC;YACvC;iBAAO;AACL,gBAAA,OAAO,KAAK;YACd;;;;;;;;;;;QAYF;aAAO;YACL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA,iBAAA,EAAoB,IAAI,CAAA,gBAAA,CAAkB,CAAC;YACzD,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,KAAK,EAAE,2BAA2B,CAAC;AACrE,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,SAAS,CAAC,IAAI,IAAI,MAAM,EAAE;YAC5B,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC;AACtD,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,SAAS,CAAC,UAAU,GAAG,IAAI;QAC3B,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,OAAO;AACxC,QAAA,SAAS,CAAC,IAAI;AACZ,YAAA,IAAI,KAAK;AACP,mBAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,KAAK;AAChD,kBAAE,KAAK,CAAC,KAAK;QACjB,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,OAAO;AAC9C,QAAA,OAAO,SAAS;IAClB;IAEA,sBAAsB,CAAC,KAAa,EAAE,KAAa,EAAA;AACjD,QAAA,IAAI,CAAC,cAAc,CAAC,uBAAuB,CACzC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CACnC,4CAA4C,EAC5C,SAAS,CACV,EACD,KAAK;YACH,IAAI;YACJ,IAAI,CAAC,iBAAiB,CAAC,cAAc,CACnC,CAAA,gBAAA,EAAmB,KAAK,CAAA,CAAE,EAC1B,SAAS,CACV,EACH;AACE,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,iBAAiB,EAAE,uBAAuB;AAC3C,SAAA,CACF;IACH;+GA1YW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,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,qBAAqB,cADT,MAAM,EAAA,CAAA,CAAA;;4FAClB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;ACqBhC,MAAM,wBAAwB,CAAA;AA4B5B,IAAA,WAAA,GAAA;AA3BA,QAAA,IAAA,CAAA,IAAI,GAAQ;AACV,YAAA,KAAK,EAAE;AACL,gBAAA,UAAU,EAAE,EAAE;AACd,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,MAAM,EAAE,MAAM;AACf,aAAA;AACD,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,QAAQ,EAAE,KAAK;SAChB;QAGD,IAAA,CAAA,cAAc,GAA+B,EAAE;QAE/C,IAAA,CAAA,cAAc,GAAG,EAAE;QACnB,IAAA,CAAA,SAAS,GAAG,CAAC;AACb,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,cAAc;QAI9B,IAAA,CAAA,sBAAsB,GAAG,KAAK;AAE9B,QAAA,IAAA,CAAA,sBAAsB,GAAkB,IAAI,OAAO,EAAE;IACtC;AAChB;AAKK,MAAO,yBAA0B,SAAQ,wBAAwB,CAAA;AAerE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AAfT,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACvD,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACrD,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACvD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,wBAAwB,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAC3D,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,4BAA4B,GAAG,MAAM,CAAC,4BAA4B,CAAC;AACnE,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACnC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7B,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACrD,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAI/C,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAClD,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,gBAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;gBAClC,IACE,IAAI,CAAC,wBAAwB,EAAE;oBAC/B,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,WAAW,EAC/D;oBACA,IAAI,CAAC,UAAU,EAAE;gBACnB;YACF;YAEA,IAAI,CAAC,yBAAyB,EAAE;AAClC,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,qBAAqB,CAAC;aACxB,IAAI,CAAC,kBAAkB,EAAE;aACzB,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;gBACvB,IAAI,CAAC,UAAU,EAAE;YACnB;AACF,QAAA,CAAC,CAAC;QAEJ,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;YAC3D,IAAI,IAAI,IAAI,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;gBAC9C,IAAI,CAAC,UAAU,EAAE;YACnB;AACF,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE;QAE1D,IAAI,IAAI,CAAC,wBAAwB,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YAC1D,IAAI,CAAC,aAAa,EAAE;;QAEtB;QACA,IAAI,CAAC,iBAAiB,CAAC;AACpB,aAAA,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,EAChE,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,WAAW,CAAC;AAEtC,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,MAAK;gBACT,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACvD,oBAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;oBACnC;gBACF;AACA,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC5B,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;wBACjB,IAAI,CAAC,UAAU,EAAE;AACnB,oBAAA,CAAC,CAAC;gBACJ;YACF,CAAC;AACF,SAAA,CAAC;IACN;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;AAClB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc;AACnC,QAAA,IAAI,CAAC,aAAa,GAA6B,EAAE;QACjD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAc,KAAI;AACxC,YAAA,EAAE,CAAC,gBAAgB,CAAC,KAAK,GAAG,CAAC;YAC7B,EAAE,CAAC,gBAAgB,CAAC,IAAI,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK;AACpD,YAAA,EAAE,CAAC,gBAAgB,CAAC,OAAO,GAAG,CAAC;AACjC,QAAA,CAAC,CAAC;IACJ;IAEA,UAAU,GAAA;QACR,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE;QAC1D,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,aAAa,EAAE;;QAEpB,IAAI,CAAC,yBAAyB,EAAE;IAClC;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,uBAAiC,EAAA;QAC7C,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,gBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;gBAC/B,OAAO,IAAI,CAAC,YAAY;YAC1B;YACA,IAAI,CAAC,eAAe,EAAE;YAEtB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAK;AACnC,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,gBAAA,IAAI,CAAC,4BAA4B,CAAC,gBAAgB,EAAE;gBACpD,MAAM,WAAW,GAAsB,EAAE;;AAEzC,gBAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AACrC,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;wBAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;AAC3C,wBAAA,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;oBAC3B;gBACF;gBACA,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,MAAK;oBACvD,IAAI,uBAAuB,EAAE;wBAC3B,IAAI,CAAC,eAAe,EAAE;oBACxB;yBAAO;wBACL,IAAI,CAAC,uBAAuB,EAAE;oBAChC;AACF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;QACJ;IACF;AACA;;;AAGG;IACH,uBAAuB,GAAA;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CACpC,CAAC,EAAE,KAAK,EAAE,CAAC,gBAAgB,CAAC,OAAO,IAAI,CAAC,CACzC;QACD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;YACxB;QACF;AACA,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CACzC,CAAC,GAAG,EAAE,EAAE,KAAK,GAAG,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAC9C,IAAI,CAAC,cAAc,CACpB;QACD,IAAI,SAAS,GAAG,CAAC;QACjB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;;YAE5B,EAAE,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAClC,IAAI,CAAC,KAAK,CACR,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc;AAChD,gBAAA,IAAI,CAAC,cAAc,CACtB,EACD,CAAC,CACF;AACD,YAAA,SAAS,IAAI,EAAE,CAAC,gBAAgB,CAAC,KAAK;AACxC,QAAA,CAAC,CAAC;AACF;;;AAGG;AACH,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE;AACnC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,WAAW,KAAI;gBAC/D,IACE,OAAO,KAAK,IAAI;oBAChB,WAAW,CAAC,gBAAgB,CAAC,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,EACnE;AACA,oBAAA,OAAO,WAAW;gBACpB;AACA,gBAAA,OAAO,OAAO;YAChB,CAAC,EAAE,IAAI,CAAC;;YAGR,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,SAAS,CAAC,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;YACxE,SAAS,IAAI,CAAC;QAChB;AACA,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;AAC/B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc;AACnC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IAC1B;IAEA,eAAe,GAAA;AACb,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AACrC,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC3D,gBAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;oBACnB,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAChC,wBAAA,KAAK,CAAC,QAAQ,GAAG,QAAQ;;AAE3B,oBAAA,CAAC,CAAC;oBAEF,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC,wBAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;oBACjC;yBAAO;AACL,wBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACnE;gBACF;YACF;QACF;QAEA,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAC7C,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc;QACrC;QAEA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAClE,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE;IACpC;AAEA,IAAA,gBAAgB,CAAC,QAAoB,EAAA;AACnC,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE;AACjE,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAC3C,CAAC,KAAK,KACJ,IAAI,CAAC,cAAc,CAAC,MAAM,CACxB,CAAC,CAAC,KACA,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE;AAChB,YAAA,CAAC,CAAC,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE;AACvB,YAAA,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,CAC1B,CAAC,MAAM,IAAI,CAAC,CAChB;QAED,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,cAAc,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM;QACvE;QACA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC;AAChE,QAAA,OAAO,cAAc;IACvB;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc;AACrC,QAAA,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc;QACpC,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE;AACvC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc;QACrC;QACA,IAAI,CAAC,SAAS,CAAC,OAAO,CACpB,CAAC,EAAE,MAAM,EAAE,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CACjE;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IAC1B;IAEA,kBAAkB,GAAA;QAChB,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,IAAI,CAAC,EAAE;AAC7C,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC;AAClB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc;YACnC,IAAI,CAAC,SAAS,CAAC,OAAO,CACpB,CAAC,EAAc,MAAM,EAAE,CAAC,gBAAgB,CAAC,KAAK,GAAG,CAAC,CAAC,CACpD;QACH;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc;YACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc;YACpD,IAAI,CAAC,SAAS,CAAC,OAAO,CACpB,CAAC,EAAc,MACZ,EAAE,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAC3D;QACH;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IAC1B;AAEA,IAAA,oBAAoB,CAAC,OAAe,EAAA;QAClC,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,aAAa,EAAE;IACtB;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAClD;AAEA;;;;;;AAMG;AACH,IAAA,YAAY,CAAC,OAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,4BAA4B,CAAC,oBAAoB,CAAC,OAAO,CAAC;AAC/D,QAAA,IAAI,KAAsB;AAC1B,QAAA,QAAQ,OAAO,CAAC,IAAI;AAClB,YAAA,KAAK,OAAO;AACV,gBAAA,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAC7C,OAAO,EACP,IAAI,CAAC,IAAI,EACT,CAAC,OAA0B,KACzB,IAAI,CAAC,4BAA4B,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAC7D,IAAI,CAAC,IAAI,CAAC,SAAS,CACpB;AACD,gBAAA,OAAO,KAAK;AACd,YAAA,KAAK,QAAQ;AACb,YAAA,KAAK,gBAAgB;gBACnB,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAC9C,OAAO,EACP,IAAI,CAAC,IAAI,EACT,CAAC,OAA0B,KACzB,IAAI,CAAC,4BAA4B,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAC9D;AACD,gBAAA,OAAO,KAAK;AACd,YAAA;AACE,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;;IAEtB;AAEA;;;;;AAKG;IACH,aAAa,CAAC,EAAc,EAAE,KAAK,EAAA;AACjC,QAAA,IAAI,EAAE,CAAC,QAAQ,IAAI,IAAI,EAAE;AACvB,YAAA,IACE,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AACnE,gBAAA,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EACpB;gBACA,OAAO,KAAK,CAAC,GAAG;YAClB;QACF;AACA,QAAA,OAAO,GAAG;IACZ;AAEA;;;;;AAKG;IACH,QAAQ,CAAC,EAAc,EAAE,KAAK,EAAA;QAC5B,OAAO,CAAA,EAAG,EAAE,CAAC,GAAG,6BAA6B,KAAK,CAAC,EAAE,CAAA,0CAAA,CAA4C;IACnG;AAEA;;;;;AAKG;AACH,IAAA,MAAM,sBAAsB,CAC1B,EAAc,EACd,KAA+B,EAAA;AAE/B,QAAA,IAAI,SAA8B;AAClC,QAAA,IAAI,EAAE,CAAC,IAAI,IAAI,OAAO,EAAE;AACtB,YAAA,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAC5D,EAAE,EACF,KAAsC,CACvC;QACH;aAAO,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACrC,YAAA,SAAS,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAC7D,EAAE,EACF,KAAuC,CACxC;QACH;aAAO;AACL,YAAA,SAAS,GAAG,EAAC,IAAI,EAAE,MAAM,EAAC;QAC5B;AACA,QAAA,OAAO,SAAS;IAClB;AAEA;;;;;AAKG;AACH,IAAA,MAAM,aAAa,CACjB,EAAc,EACd,SAAsC,EACtC,OAAA,GAAoC,EAAC,QAAQ,EAAE,IAAI,EAAC,EAAA;QAEpD,MAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;;AAG3C,QAAA,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE;AAC5B,YAAA,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC;QAC7D;AAAO,aAAA,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE;YACnC,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC;QAC1C;AAAO,aAAA,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AACtD,YAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;QACzC;AAAO,aAAA,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE;AAC3D,YAAA,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;QACvC;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,cAAc,CAAC;QACnD;IACF;AAEA;;AAEG;IACK,MAAM,cAAc,CAC1B,EAAc,EACd,SAAsC,EACtC,OAAiC,EACjC,QAAiB,EAAA;QAEjB,SAAS,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI;cACzC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvE,cAAE,SAAS,CAAC,IAAI;AAElB,QAAA,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE;AAC7D,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAC3B;AAEA,QAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;AAC1C,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,GAAG,EAAE,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC;AACvC,YAAA,KAAK,EAAE;kBACH,SAAS,CAAC;AACZ,kBAAE,SAAS,CAAC,UAAU,KAAK;sBACvB,SAAS,CAAC;AACZ,sBAAE,SAAS;AACf,YAAA,cAAc,EAAE;gBACd,WAAW,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS;gBAC7C,QAAQ,EAAE,OAAO,CAAC,QAAQ;AAC3B,aAAA;AACF,SAAA,CAAC;IACJ;AAEA;;AAEG;AACK,IAAA,MAAM,cAAc,CAC1B,EAAc,EACd,SAAsC,EAAA;AAEtC,QAAA,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE;AACvB,YAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC;QAC3C;aAAO;AACL,YAAA,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC;AAC1C,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,cAAc,CAAC;QACnD;IACF;AAEA;;AAEG;IACK,MAAM,mBAAmB,CAC/B,SAAsC,EAAA;AAEtC,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AACxB,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAC3B;QAEA,SAAS,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI;cACzC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvE,cAAE,SAAS,CAAC,IAAI;AAElB,QAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;AAC1C,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,GAAG,EAAE,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC;YACvC,KAAK,EAAE,SAAS,CAAC;kBACb,GAAG,SAAS,CAAC,SAAS,CAAA,CAAA,EAAI,SAAS,CAAC,IAAI,CAAA;AAC1C,kBAAE,SAAS;AACb,YAAA,YAAY,EAAE;gBACZ,KAAK,EAAE,SAAS,CAAC,KAAK;AACvB,aAAA;AACF,SAAA,CAAC;IACJ;AAEA;;AAEG;IACK,MAAM,oBAAoB,CAChC,SAAsC,EAAA;AAEtC,QAAA,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;AAE3D,QAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;;AAEtB,YAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAC5D,KAAK,EACL,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,UAAU,EACpB;gBACE,SAAS,EAAE,SAAS,CAAC,SAAS;gBAC9B,KAAK,EAAE,SAAS,CAAC,KAAK;AACtB,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA,CACF;AACD,YAAA,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,KAAK,CAAC;AAC5C,YAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;QACjC;aAAO;;AAEL,YAAA,MAAM,MAAM,GAAkB;AAC5B,gBAAA,IAAI,EAAE,KAAK;gBACX,GAAG,EAAE,SAAS,CAAC,IAAI;AACnB,gBAAA,KAAK,EAAE,SAAS,CAAC,KAAK;AACtB,gBAAA,YAAY,EAAE,EAAE;AAChB,gBAAA,cAAc,EAAE;AACd,oBAAA,WAAW,EAAE,SAAS;AACvB,iBAAA;aACF;;AAED,YAAA,IAAI,SAAS,CAAC,SAAS,EAAE;gBACvB,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,KAAK;YAC5D;;;iBAGK;gBACH,MAAM,CAAC,YAAY,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK;YAC7C;YACA,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,MAAM,CAAC;QACrD;IACF;AAEA;;AAEG;IACK,MAAM,iBAAiB,CAC7B,SAAsC,EAAA;QAEtC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAC5D,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,EAC5B,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,UAAU,EACpB,EAAC,aAAa,EAAE,SAAS,CAAC,aAAa,EAAC,CACzC;AACD,QAAA,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,KAAK,CAAC;IAC9C;AAEA;;AAEG;IACK,MAAM,eAAe,CAC3B,SAAsC,EAAA;AAEtC,QAAA,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE;AACtC,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAC3B;AAEA,QAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;AAC1C,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,GAAG,EAAE,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC;AACvC,YAAA,KAAK,EAAE,SAAS,CAAC,UAAU,KAAK,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS;AACvE,SAAA,CAAC;IACJ;AAEA,IAAA,aAAa,CAAC,WAAwB,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,WAAW;AACnC,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC;QAC7C,IAAI,CAAC,yBAAyB,EAAE;IAClC;AAEA;;AAEG;IACH,KAAK,GAAA;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE;QAC/B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE;QAC1B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE;QAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE;QAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,EAAE;QACrC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;IAC7B;IAEA,yBAAyB,GAAA;QACvB,IAAI,CAAC,4BAA4B,CAAC,WAAW,CAAC,UAAU,CACtD,IAAI,CAAC,YAAY,EAAE;YACjB,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,WAAW,CAClE;IACH;IAEQ,wBAAwB,GAAA;AAC9B,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS;IACzB;IAEQ,YAAY,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,KAAK,SAAS;IACrD;+GAzjBW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,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,yBAAyB,cAFxB,MAAM,EAAA,CAAA,CAAA;;4FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MChEY,4BAA4B,CAAA;AAHzC,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CAAC,2BAA2B,CAAC;AAEzE,QAAA,IAAA,CAAA,sBAAsB,GAAG,CAAC,SAAc,KAAI;AAC1C,YAAA,MAAM,mBAAmB,GAAG,IAAI,UAAU,EAAE;YAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,gBAAA,mBAAmB,CAAC,OAAO,GAAG,MAAK;oBACjC,mBAAmB,CAAC,KAAK,EAAE;AAC3B,oBAAA,MAAM,CAAC,IAAI,YAAY,CAAC,6BAA6B,CAAC,CAAC;AACzD,gBAAA,CAAC;AACD,gBAAA,mBAAmB,CAAC,MAAM,GAAG,MAAK;AAChC,oBAAA,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC;AACrC,gBAAA,CAAC;AACD,gBAAA,mBAAmB,CAAC,UAAU,CAAC,SAAS,CAAC;AAC3C,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AACD,QAAA,IAAA,CAAA,qBAAqB,GAAG,CAAC,SAAc,KAAI;AACzC,YAAA,MAAM,mBAAmB,GAAG,IAAI,UAAU,EAAE;YAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,gBAAA,mBAAmB,CAAC,OAAO,GAAG,MAAK;oBACjC,mBAAmB,CAAC,KAAK,EAAE;AAC3B,oBAAA,MAAM,CAAC,IAAI,YAAY,CAAC,6BAA6B,CAAC,CAAC;AACzD,gBAAA,CAAC;AACD,gBAAA,mBAAmB,CAAC,MAAM,GAAG,MAAK;AAChC,oBAAA,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC;AACrC,gBAAA,CAAC;AACD,gBAAA,mBAAmB,CAAC,aAAa,CAAC,SAAS,CAAC;AAC9C,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AAuJF,IAAA;AArJC;;;;AAIG;AACH,IAAA,MAAM,yBAAyB,CAAC,IAAU,EAAE,IAAY,EAAA;AACtD,QAAA,IAAI;YACF,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAC9D,YAAA,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,EAAE;AAC1C,YAAA,MAAM,MAAM,GAAG;AACb,gBAAA,GAAG,EAAE,OAAO;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,IAAI;AAChB,gBAAA,IAAI,EAAE,IAAI;aACX;AACD,YAAA,OAAO,MAAM;QACf;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC;AAClD,YAAA,OAAO,EAAC,KAAK,EAAE,4BAA4B,EAAC;QAC9C;IACF;AAEA;;;;AAIG;IACH,MAAM,gBAAgB,CAAC,IAAU,EAAA;AAC/B,QAAA,IAAI,YAAY;AAChB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,2BAA2B,CAAC,yBAAyB,CACzE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CACxB;QACD,QAAQ,QAAQ;AACd,YAAA,KAAK,KAAK;gBACR,YAAY,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,QAAQ,CAAC;gBACnE;AACF,YAAA,KAAK,KAAK;gBACR,YAAY,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;gBACnD;AACF,YAAA;AACE,gBAAA,IAAI;oBACF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;oBAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAS,YAAY,CAAC;AACnD,oBAAA,IAAI,UAAU,KAAK,SAAS,EAAE;AAC5B,wBAAA,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wBACzC,YAAY,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC;AAChE,wBAAA,OAAO,YAAY;oBACrB;gBACF;gBAAE,OAAO,CAAC,EAAE;oBACV,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,EAAE,CAAC,CAAC;AACrD,oBAAA,OAAO,EAAC,KAAK,EAAE,4BAA4B,EAAC;gBAC9C;;AAEJ,QAAA,OAAO,YAAY;IACrB;AAEA;;;AAGG;IACH,MAAM,mBAAmB,CAAC,IAAU,EAAA;AAClC,QAAA,IAAI,MAAM;QACV,MAAM,YAAY,GAAQ,EAAE;AAC5B,QAAA,IAAI;YACF,MAAM,eAAe,GAAQ,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;AACpE,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,2BAA2B,CAAC,yBAAyB,CACvE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CACxB;YACD,QAAQ,QAAQ;AACd,gBAAA,KAAK,KAAK;oBACR,MAAM,GAAG,GAAG,CAAC,MAAM,OAAO,eAAe,CAAC,EAAE,OAAO;AACnD,oBAAA,MAAM,GAAG,IAAI,GAAG,EAAE;oBAClB,YAAY,CAAC,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC;oBAC5D;AACF,gBAAA,KAAK,KAAK;oBACR,MAAM,GAAG,GAAG,CAAC,MAAM,OAAO,eAAe,CAAC,EAAE,OAAO;AACnD,oBAAA,MAAM,GAAG,IAAI,GAAG,EAAE;oBAClB,YAAY,CAAC,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC;oBAC5D,QAAQ,GAAG,MAAM;oBACjB;gBACF;;YAEF,IAAI,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE;AACtC,gBAAA,IAAI,CAAC,yBAAyB,CAC5B,YAAY,CAAC,QAAQ,EACrB,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,CACvC;YACH;YACA,YAAY,CAAC,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC;YAClE,YAAY,CAAC,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC;AAC/D,YAAA,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACnD,YAAA,YAAY,CAAC,IAAI,GAAG,YAAY,CAAC,KAAK;AACtC,YAAA,YAAY,CAAC,IAAI,GAAG,QAAQ;AAC5B,YAAA,OAAO,YAAY;QACrB;QAAE,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,GAAG,CAAC,CAAC;AACrD,YAAA,OAAO,EAAC,KAAK,EAAE,4BAA4B,EAAC;QAC9C;IACF;AAEA;;;;AAIG;IACH,MAAM,0BAA0B,CAAC,IAAS,EAAA;QACxC,IAAI,QAAQ,GAAc,EAAE;QAC5B,MAAM,OAAO,GAAG,CAAC,MAAM,OAAO,mBAAmB,CAAC,EAAE,OAAO;AAC3D,QAAA,MAAM,MAAM,GAAG,IAAI,OAAO,EAAE;QAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC;QAC9C,IAAI,CAAC,UAAU,EAAE;YACf,OAAO;AACL,gBAAA,KAAK,EAAE,uBAAuB;aAC/B;QACH;QACA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;AACpC,YAAA,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,UAAU,CAAC;QACtD;AACA,QAAA,MAAM,MAAM,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,GAAG,EAAE,IAAI,CAAC,2BAA2B,CAAC,qBAAqB,CAAC,UAAU,CAAC;YACvE,QAAQ,EAAE,QAAQ;YAClB,cAAc,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;AACzC,YAAA,SAAS,EAAE,UAAU;SACtB;AACD,QAAA,OAAO,MAAM;IACf;AAEA;;;;AAIG;IACH,yBAAyB,CAAC,QAAmB,EAAE,UAAsB,EAAA;AACnE,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE;AAC1E,QAAA,IAAI,UAAU,IAAI,aAAa,EAAE;AAC/B,YAAA,UAAU,GAAGJ;iBACV,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE;AAC5B,iBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,UAAU,CAAC,OAAO,EAAE;AAC7C,kBAAEC,GAAa,CAAC,WAAW;kBACzB,UAAU;AACd,YAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;;YAEjB,CAAC,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,aAAa,CAAC,CACrD;QACH;IACF;+GApLW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA5B,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,4BAA4B,cAF3B,MAAM,EAAA,CAAA,CAAA;;4FAEP,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAHxC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACbD;;AAEG;;;;"}