{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/overlays/heatmap/index.ts"],"sourcesContent":["import type { PropType, VNode, WatchStopHandle } from 'vue'\nimport { defineComponent, getCurrentInstance, ref, h, createCommentVNode, watch, onUnmounted, computed } from 'vue'\nimport type {\n  AppearanceOption,\n  VcColorSegments,\n  HeatmapConfiguration,\n  MaterialOption,\n  VcComponentInternalInstance,\n  VcComponentPublicInstance,\n  VcHeatMapData,\n  VcRectangle,\n  VcReadyObject\n} from 'casc-cesium-utils/types'\nimport { useCommon } from 'casc-cesium-composables'\nimport { show, rectangle } from 'casc-cesium-utils/cesium-props'\nimport { makeColor, makeRectangle } from 'casc-cesium-utils/cesium-helpers'\nimport h337 from '@zouyaoji/heatmap.js'\nimport VcEntity from 'casc-cesium-components/entity'\nimport VcLayerImagery from 'casc-cesium-components/imagery-layer'\nimport { VcPrimitiveGround } from 'casc-cesium-components/primitives'\nimport { getVcParentInstance } from 'casc-cesium-utils/private/vm'\nimport { commonEmits } from 'casc-cesium-utils/emits'\n\nexport const heatmapOverlayProps = {\n  ...show,\n  ...rectangle,\n  min: {\n    type: Number,\n    default: 0\n  },\n  max: {\n    type: Number,\n    default: 100\n  },\n  data: Array as PropType<Array<VcHeatMapData>>,\n  options: Object as PropType<HeatmapConfiguration>,\n  type: {\n    type: String as PropType<'primitive' | 'entity' | 'imagery-layer'>,\n    default: 'primitive'\n  },\n  segments: {\n    type: Array as PropType<Array<VcColorSegments>>,\n    default: () => []\n  },\n  projection: {\n    type: String as PropType<'3857' | '4326'>,\n    default: '3857' // 4326\n  }\n}\nexport default defineComponent({\n  name: 'VcOverlayHeatmap',\n  props: heatmapOverlayProps,\n  emits: commonEmits,\n  setup(props: VcOverlayHeatmapProps, ctx) {\n    // state\n    const instance = getCurrentInstance() as VcComponentInternalInstance\n    instance.cesiumClass = 'VcOverlayHeatmap'\n    instance.cesiumEvents = []\n    const commonState = useCommon(props, ctx, instance)\n    if (commonState === void 0) {\n      return\n    }\n    const rootRef = ref<HTMLElement>(null)\n    const project = ref<Cesium.WebMercatorProjection | Cesium.GeographicProjection>(null)\n    const defaultOptions: HeatmapConfiguration = {\n      minCanvasSize: 700, // minimum size (in pixels) for the heatmap canvas\n      maxCanvasSize: 2000, // maximum size (in pixels) for the heatmap canvas\n      radiusFactor: 60, // data point size factor used if no radius is given (the greater of height and width divided by this number yields the used radius)\n      spacingFactor: 1.5, // extra space around the borders (point radius multiplied by this number yields the spacing)\n      maxOpacity: 0.8, // the maximum opacity used if not given in the heatmap options object\n      minOpacity: 0.1, // the minimum opacity used if not given in the heatmap options object\n      blur: 0.85, // the blur used if not given in the heatmap options object\n      gradient: {\n        // the gradient used if not given in the heatmap options object\n        '.3': 'blue',\n        '.65': 'yellow',\n        '.8': 'orange',\n        '.95': 'red'\n      },\n      xField: 'x',\n      yField: 'y',\n      valueField: 'value',\n      container: undefined!\n    }\n    const coordinates = ref<any>(null)\n    const material = ref<MaterialOption>(null!)\n    const image = ref<any>(null)\n    const childRef = ref<typeof VcLayerImagery | typeof VcEntity | typeof VcPrimitiveGround>(null)\n    const appearance = ref<AppearanceOption>(null!)\n    const canRender = ref(false)\n    const config = ref<any>(null)\n\n    const vcParent = getVcParentInstance(instance)\n    ;(vcParent.proxy as VcComponentPublicInstance).creatingPromise?.then(() => {\n      canRender.value = true\n    })\n\n    // computed\n    const options = computed<HeatmapConfiguration>(() => {\n      return Object.assign({}, defaultOptions, props.options)\n    })\n\n    // watcch\n    let unwatchFns: Array<WatchStopHandle> = []\n    unwatchFns.push(\n      watch(\n        () => image,\n        val => {\n          material.value.fabric.uniforms.image = val.value\n          ;(appearance.value.options.material as MaterialOption).fabric.uniforms.image = val.value\n        },\n        {\n          deep: true\n        }\n      )\n    )\n    unwatchFns.push(\n      watch(\n        () => props.data,\n        (newVal, oldVal) => {\n          if (!instance.mounted) {\n            return\n          }\n\n          const heatmapInstance = instance.cesiumObject as h337.Heatmap<string, string, string>\n\n          if (Array.isArray(newVal) && Array.isArray(oldVal)) {\n            setData(newVal, heatmapInstance)\n            image.value = heatmapInstance.getDataURL()\n          } else {\n            commonState.reload()\n          }\n        },\n        {\n          deep: true\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => [props.max, props.min],\n        vals => {\n          const heatmapInstance = instance.cesiumObject as h337.Heatmap<string, string, string>\n          heatmapInstance.setDataMax(vals[0] || 0)\n          heatmapInstance.setDataMin(vals[1] || 0)\n          image.value = heatmapInstance.getDataURL()\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => [props.type, props.projection, props.rectangle],\n        vals => {\n          commonState.reload()\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => props.options,\n        val => {\n          const heatmapInstance = instance.cesiumObject as h337.Heatmap<string, string, string>\n          heatmapInstance.configure(val as any)\n          image.value = heatmapInstance.getDataURL()\n        },\n        {\n          deep: true\n        }\n      )\n    )\n\n    // methods\n    instance.createCesiumObject = async () => {\n      const { WebMercatorProjection, GeographicProjection } = Cesium\n      project.value = props.projection === '3857' ? new WebMercatorProjection() : new GeographicProjection()\n      const id = getID()\n      config.value = getConfig(props.rectangle)\n      const container = document.createElement('div')\n      if (Cesium.defined(id)) {\n        container.setAttribute('id', id)\n      }\n      container.setAttribute('style', 'width: ' + config.value.width + 'px; height: ' + config.value.height + 'px; margin: 0px; display: none;')\n      document.body.appendChild(container)\n      options.value.container = container\n\n      if (props.segments.length) {\n        options.value.gradient = {}\n        const Δ = props.max - props.min\n\n        for (let i = 0; i < props.segments.length; i++) {\n          options.value.gradient[`${(props.segments[i][0] - props.min) / Δ}`] = (makeColor(props.segments[i][1]) as Cesium.Color).toCssColorString()\n        }\n      }\n\n      const heatmapInstance = h337.create(options.value)\n      container.children[0].setAttribute('id', id + '-hm')\n      if (Array.isArray(props.data)) {\n        setData(props.data, heatmapInstance)\n        material.value = {\n          fabric: {\n            type: 'Image',\n            uniforms: {\n              image: image.value,\n              transparent: true\n            }\n          }\n        }\n        appearance.value = {\n          type: 'MaterialAppearance',\n          options: {\n            material: {\n              fabric: {\n                type: 'Image',\n                uniforms: {\n                  image: image.value\n                }\n              }\n            }\n          }\n        }\n      }\n\n      return heatmapInstance\n    }\n    instance.unmount = async () => {\n      document.body.removeChild((instance.cesiumObject as any)._config.container)\n      return true\n    }\n\n    const getID = (len?: number) => {\n      let id = ''\n      const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n\n      for (let i = 0; i < (len || 8); i++) {\n        id += possible.charAt(Math.floor(Math.random() * possible.length))\n      }\n\n      return id\n    }\n\n    const getConfig = bounds => {\n      const rectangle = makeRectangle(bounds) as Cesium.Rectangle\n      const swmb = project.value.project(new Cesium.Cartographic(rectangle.west, rectangle.south))\n      const nemb = project.value.project(new Cesium.Cartographic(rectangle.east, rectangle.north))\n      const mbb = {\n        north: nemb.y,\n        east: nemb.x,\n        south: swmb.y,\n        west: swmb.x\n      }\n\n      let width = mbb.east > 0 && mbb.west < 0 ? mbb.east + Math.abs(mbb.west) : Math.abs(mbb.east - mbb.west)\n      let height = mbb.north > 0 && mbb.south < 0 ? mbb.north + Math.abs(mbb.south) : Math.abs(mbb.north - mbb.south)\n      let factor = 1\n      if (width > height && width > options.value.maxCanvasSize) {\n        factor = width / options.value.maxCanvasSize\n        if (height / factor < options.value.minCanvasSize) {\n          factor = height / options.value.minCanvasSize\n        }\n      } else if (height > width && height > options.value.maxCanvasSize) {\n        factor = height / options.value.maxCanvasSize\n        if (height / factor < options.value.minCanvasSize) {\n          factor = width / options.value.minCanvasSize\n        }\n      } else if (width < height && width < options.value.minCanvasSize) {\n        factor = width / options.value.minCanvasSize\n        if (height / factor > options.value.maxCanvasSize) {\n          factor = height / options.value.maxCanvasSize\n        }\n      } else if (height < width && height < options.value.minCanvasSize) {\n        factor = height / options.value.minCanvasSize\n        if (width / factor > options.value.maxCanvasSize) {\n          factor = width / options.value.maxCanvasSize\n        }\n      }\n\n      width = width / factor\n      height = height / factor\n\n      if (!Cesium.defined(options.value.radius)) {\n        options.value.radius = width > height ? width / options.value.radiusFactor : height / options.value.radiusFactor\n      }\n\n      const spacing = (options.value.radius || 1) * options.value.spacingFactor\n      const xoffset = mbb.west\n      const yoffset = mbb.south\n      width = Math.round(width + spacing * 2)\n      height = Math.round(height + spacing * 2)\n      mbb.west -= spacing * factor\n      mbb.east += spacing * factor\n      mbb.south -= spacing * factor\n      mbb.north += spacing * factor\n      const swmw = project.value.unproject(new Cesium.Cartesian3(mbb.west, mbb.south))\n      const nemw = project.value.unproject(new Cesium.Cartesian3(mbb.east, mbb.north))\n\n      const mwb = {\n        north: Cesium.Math.toDegrees(nemw.latitude),\n        east: Cesium.Math.toDegrees(nemw.longitude),\n        south: Cesium.Math.toDegrees(swmw.latitude),\n        west: Cesium.Math.toDegrees(swmw.longitude)\n      }\n      coordinates.value = mwb\n      return {\n        height,\n        width,\n        factor,\n        xoffset,\n        yoffset,\n        spacing\n      }\n    }\n\n    const setData = (data, heatmapInstance: h337.Heatmap<string, string, string>) => {\n      console.log('setData')\n      if (data) {\n        const { height, xoffset, yoffset, factor, spacing } = config.value\n        const xField = options.value.xField || 'x'\n        const yField = options.value.yField || 'y'\n        const valueField = options.value.valueField || 'value'\n        const datas: Array<VcHeatMapData> = []\n        for (let i = 0; i < data.length; i++) {\n          const gp = data[i]\n          if (!Cesium.defined(gp.id)) {\n            gp.id = i\n          }\n          const mp = project.value.project(Cesium.Cartographic.fromDegrees(gp[xField], gp[yField]))\n          const hp: VcHeatMapData = {\n            [xField]: Math.round((mp.x - xoffset) / factor + spacing),\n            [yField]: Math.round((mp.y - yoffset) / factor + spacing),\n            [valueField]: undefined\n          }\n          hp[yField] = height - hp[yField]\n          if (gp[valueField] || gp[valueField] === 0) {\n            hp[valueField] = gp[valueField]\n          }\n          if (hp[valueField] > props.max || hp[valueField] < props.min) {\n            continue\n          }\n          datas.push(hp)\n        }\n\n        heatmapInstance.setData({\n          min: props.min,\n          max: props.max,\n          data: datas\n        })\n\n        image.value = heatmapInstance.getDataURL()\n      }\n    }\n\n    // life cycle\n    onUnmounted(() => {\n      unwatchFns.forEach(item => item())\n      unwatchFns = []\n    })\n\n    // expose public methods\n    Object.assign(instance.proxy, {\n      rootRef: rootRef,\n      childRef: childRef\n    })\n\n    return () => {\n      if (canRender.value) {\n        const child: Array<VNode> = []\n        if (props.type === 'entity' && image.value) {\n          child.push(\n            h(VcEntity, {\n              ref: childRef,\n              show: props.show,\n              rectangle: {\n                coordinates: coordinates.value,\n                material: material.value\n              }\n            })\n          )\n        } else if (props.type === 'primitive') {\n          child.push(\n            h(VcPrimitiveGround, {\n              ref: childRef,\n              show: props.show,\n              appearance: appearance.value,\n              releaseGeometryInstances: false,\n              geometryInstances: new Cesium.GeometryInstance({\n                geometry: new Cesium.RectangleGeometry({\n                  rectangle: makeRectangle(coordinates.value) as Cesium.Rectangle\n                })\n              })\n            })\n          )\n        } else if (props.type === 'imagery-layer' && image.value) {\n          child.push(\n            h(VcLayerImagery, {\n              ref: childRef,\n              show: props.show,\n              imageryProvider: new Cesium.SingleTileImageryProvider({\n                url: image.value,\n                rectangle: makeRectangle(coordinates.value) as Cesium.Rectangle\n              })\n            })\n          )\n        }\n\n        return h(\n          'i',\n          {\n            ref: rootRef,\n            class: 'vc-overlay-heatmap',\n            style: 'display: none !important'\n          },\n          child\n        )\n      } else {\n        return createCommentVNode('v-if')\n      }\n    }\n  }\n})\n\nexport interface VcOverlayHeatmapProps {\n  /**\n   * Specify whether to display the heatmap overlay.\n   * Default value: true\n   */\n  show?: boolean\n  /**\n   * Specify a rectangle with north, south, east and west properties.\n   */\n  rectangle?: VcRectangle\n  /**\n   * Specify the minimum value of the heat map data.\n   * Default value: 0\n   */\n  min?: number\n  /**\n   * Specify the maximum value of the heat map data.\n   * Default value: 100\n   */\n  max?: number\n  data?: Array<VcHeatMapData>\n  /**\n   * Specify the heatmap configs.\n   */\n  options?: HeatmapConfiguration\n  /**\n   * Specify the render type of heat map object.\n   * Default value: primitive\n   */\n  type?: 'primitive' | 'entity' | 'imagery-layer'\n  /**\n   * Specify the color segment of the heatmap.\n   */\n  segments?: Array<VcColorSegments>\n  /**\n   * Specify the projection.\n   * Default value: 3857\n   */\n  projection?: '3857' | '4326'\n  /**\n   * Triggers before the VcOverlayHeatmap is loaded.\n   */\n  onBeforeLoad?: (instance: VcComponentInternalInstance) => void\n  /**\n   * Triggers when the VcOverlayHeatmap is successfully loaded.\n   */\n  onReady?: (readyObject: VcReadyObject) => void\n  /**\n   * Triggers when the component load failed.\n   */\n  onUnready?: (e: any) => void\n  /**\n   * Triggers when the VcOverlayHeatmap is destroyed.\n   */\n  onDestroyed?: (instance: VcComponentInternalInstance) => void\n}\n\nexport type VcOverlayHeatmapRef = VcComponentPublicInstance<VcOverlayHeatmapProps>\n"],"names":["VcEntity","VcLayerImagery"],"mappings":";;;;;;;;;;;;AAUY,MAAC,mBAAmB,GAAG;AACnC,EAAE,GAAG,IAAI;AACT,EAAE,GAAG,SAAS;AACd,EAAE,GAAG,EAAE;AACP,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,OAAO,EAAE,CAAC;AACd,GAAG;AACH,EAAE,GAAG,EAAE;AACP,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,OAAO,EAAE,GAAG;AAChB,GAAG;AACH,EAAE,IAAI,EAAE,KAAK;AACb,EAAE,OAAO,EAAE,MAAM;AACjB,EAAE,IAAI,EAAE;AACR,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,OAAO,EAAE,WAAW;AACxB,GAAG;AACH,EAAE,QAAQ,EAAE;AACZ,IAAI,IAAI,EAAE,KAAK;AACf,IAAI,OAAO,EAAE,MAAM,EAAE;AACrB,GAAG;AACH,EAAE,UAAU,EAAE;AACd,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,OAAO,EAAE,MAAM;AACnB,GAAG;AACH,EAAE;AACF,qBAAe,eAAe,CAAC;AAC/B,EAAE,IAAI,EAAE,kBAAkB;AAC1B,EAAE,KAAK,EAAE,mBAAmB;AAC5B,EAAE,KAAK,EAAE,WAAW;AACpB,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE;AACpB,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;AAC1C,IAAI,QAAQ,CAAC,WAAW,GAAG,kBAAkB,CAAC;AAC9C,IAAI,QAAQ,CAAC,YAAY,GAAG,EAAE,CAAC;AAC/B,IAAI,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;AACxD,IAAI,IAAI,WAAW,KAAK,KAAK,CAAC,EAAE;AAChC,MAAM,OAAO;AACb,KAAK;AACL,IAAI,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9B,IAAI,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9B,IAAI,MAAM,cAAc,GAAG;AAC3B,MAAM,aAAa,EAAE,GAAG;AACxB,MAAM,aAAa,EAAE,GAAG;AACxB,MAAM,YAAY,EAAE,EAAE;AACtB,MAAM,aAAa,EAAE,GAAG;AACxB,MAAM,UAAU,EAAE,GAAG;AACrB,MAAM,UAAU,EAAE,GAAG;AACrB,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,QAAQ,EAAE;AAChB,QAAQ,IAAI,EAAE,MAAM;AACpB,QAAQ,KAAK,EAAE,QAAQ;AACvB,QAAQ,IAAI,EAAE,QAAQ;AACtB,QAAQ,KAAK,EAAE,KAAK;AACpB,OAAO;AACP,MAAM,MAAM,EAAE,GAAG;AACjB,MAAM,MAAM,EAAE,GAAG;AACjB,MAAM,UAAU,EAAE,OAAO;AACzB,MAAM,SAAS,EAAE,KAAK,CAAC;AACvB,KAAK,CAAC;AACN,IAAI,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAClC,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/B,IAAI,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5B,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/B,IAAI,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AACjC,IAAI,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AACjC,IAAI,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAC7B,IAAI,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AACnD,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,eAAe,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM;AAC3E,MAAM,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;AAC7B,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM;AACnC,MAAM,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AAC9D,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,UAAU,GAAG,EAAE,CAAC;AACxB,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,EAAE,CAAC,GAAG,KAAK;AAChD,MAAM,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;AACvD,MAAM,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;AAC1E,KAAK,EAAE;AACP,MAAM,IAAI,EAAE,IAAI;AAChB,KAAK,CAAC,CAAC,CAAC;AACR,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK;AAChE,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AAC7B,QAAQ,OAAO;AACf,OAAO;AACP,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC,YAAY,CAAC;AACpD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC1D,QAAQ,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AACzC,QAAQ,KAAK,CAAC,KAAK,GAAG,eAAe,CAAC,UAAU,EAAE,CAAC;AACnD,OAAO,MAAM;AACb,QAAQ,WAAW,CAAC,MAAM,EAAE,CAAC;AAC7B,OAAO;AACP,KAAK,EAAE;AACP,MAAM,IAAI,EAAE,IAAI;AAChB,KAAK,CAAC,CAAC,CAAC;AACR,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK;AAClE,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC,YAAY,CAAC;AACpD,MAAM,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/C,MAAM,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/C,MAAM,KAAK,CAAC,KAAK,GAAG,eAAe,CAAC,UAAU,EAAE,CAAC;AACjD,KAAK,CAAC,CAAC,CAAC;AACR,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,KAAK;AAC3F,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;AAC3B,KAAK,CAAC,CAAC,CAAC;AACR,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK;AACxD,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC,YAAY,CAAC;AACpD,MAAM,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACrC,MAAM,KAAK,CAAC,KAAK,GAAG,eAAe,CAAC,UAAU,EAAE,CAAC;AACjD,KAAK,EAAE;AACP,MAAM,IAAI,EAAE,IAAI;AAChB,KAAK,CAAC,CAAC,CAAC;AACR,IAAI,QAAQ,CAAC,kBAAkB,GAAG,YAAY;AAC9C,MAAM,MAAM,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAAC;AACrE,MAAM,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,KAAK,MAAM,GAAG,IAAI,qBAAqB,EAAE,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7G,MAAM,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;AACzB,MAAM,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAChD,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACtD,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;AAC9B,QAAQ,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACzC,OAAO;AACP,MAAM,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,iCAAiC,CAAC,CAAC;AACjJ,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAC3C,MAAM,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;AAC1C,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE;AACjC,QAAQ,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;AACpC,QAAQ,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;AAC7C,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxD,UAAU,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;AACxI,SAAS;AACT,OAAO;AACP,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACzD,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC;AAC3D,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACrC,QAAQ,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AAC7C,QAAQ,QAAQ,CAAC,KAAK,GAAG;AACzB,UAAU,MAAM,EAAE;AAClB,YAAY,IAAI,EAAE,OAAO;AACzB,YAAY,QAAQ,EAAE;AACtB,cAAc,KAAK,EAAE,KAAK,CAAC,KAAK;AAChC,cAAc,WAAW,EAAE,IAAI;AAC/B,aAAa;AACb,WAAW;AACX,SAAS,CAAC;AACV,QAAQ,UAAU,CAAC,KAAK,GAAG;AAC3B,UAAU,IAAI,EAAE,oBAAoB;AACpC,UAAU,OAAO,EAAE;AACnB,YAAY,QAAQ,EAAE;AACtB,cAAc,MAAM,EAAE;AACtB,gBAAgB,IAAI,EAAE,OAAO;AAC7B,gBAAgB,QAAQ,EAAE;AAC1B,kBAAkB,KAAK,EAAE,KAAK,CAAC,KAAK;AACpC,iBAAiB;AACjB,eAAe;AACf,aAAa;AACb,WAAW;AACX,SAAS,CAAC;AACV,OAAO;AACP,MAAM,OAAO,eAAe,CAAC;AAC7B,KAAK,CAAC;AACN,IAAI,QAAQ,CAAC,OAAO,GAAG,YAAY;AACnC,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACzE,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK,CAAC;AACN,IAAI,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK;AAC3B,MAAM,IAAI,EAAE,GAAG,EAAE,CAAC;AAClB,MAAM,MAAM,QAAQ,GAAG,gEAAgE,CAAC;AACxF,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,QAAQ,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3E,OAAO;AACP,MAAM,OAAO,EAAE,CAAC;AAChB,KAAK,CAAC;AACN,IAAI,MAAM,SAAS,GAAG,CAAC,MAAM,KAAK;AAClC,MAAM,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/C,MAAM,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACrG,MAAM,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACrG,MAAM,MAAM,GAAG,GAAG;AAClB,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC;AACrB,QAAQ,IAAI,EAAE,IAAI,CAAC,CAAC;AACpB,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC;AACrB,QAAQ,IAAI,EAAE,IAAI,CAAC,CAAC;AACpB,OAAO,CAAC;AACR,MAAM,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/G,MAAM,IAAI,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AACtH,MAAM,IAAI,MAAM,GAAG,CAAC,CAAC;AACrB,MAAM,IAAI,KAAK,GAAG,MAAM,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE;AACjE,QAAQ,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;AACrD,QAAQ,IAAI,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE;AAC3D,UAAU,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;AACxD,SAAS;AACT,OAAO,MAAM,IAAI,MAAM,GAAG,KAAK,IAAI,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE;AACzE,QAAQ,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;AACtD,QAAQ,IAAI,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE;AAC3D,UAAU,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;AACvD,SAAS;AACT,OAAO,MAAM,IAAI,KAAK,GAAG,MAAM,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE;AACxE,QAAQ,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;AACrD,QAAQ,IAAI,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE;AAC3D,UAAU,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;AACxD,SAAS;AACT,OAAO,MAAM,IAAI,MAAM,GAAG,KAAK,IAAI,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE;AACzE,QAAQ,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;AACtD,QAAQ,IAAI,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE;AAC1D,UAAU,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;AACvD,SAAS;AACT,OAAO;AACP,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAC7B,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAC/B,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AACjD,QAAQ,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;AACzH,OAAO;AACP,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;AAChF,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;AAC/B,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC;AAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;AAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;AAChD,MAAM,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,MAAM,CAAC;AACnC,MAAM,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,MAAM,CAAC;AACnC,MAAM,GAAG,CAAC,KAAK,IAAI,OAAO,GAAG,MAAM,CAAC;AACpC,MAAM,GAAG,CAAC,KAAK,IAAI,OAAO,GAAG,MAAM,CAAC;AACpC,MAAM,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACvF,MAAM,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACvF,MAAM,MAAM,GAAG,GAAG;AAClB,QAAQ,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnD,QAAQ,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AACnD,QAAQ,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnD,QAAQ,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AACnD,OAAO,CAAC;AACR,MAAM,WAAW,CAAC,KAAK,GAAG,GAAG,CAAC;AAC9B,MAAM,OAAO;AACb,QAAQ,MAAM;AACd,QAAQ,KAAK;AACb,QAAQ,MAAM;AACd,QAAQ,OAAO;AACf,QAAQ,OAAO;AACf,QAAQ,OAAO;AACf,OAAO,CAAC;AACR,KAAK,CAAC;AACN,IAAI,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,eAAe,KAAK;AAC/C,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7B,MAAM,IAAI,IAAI,EAAE;AAChB,QAAQ,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;AAC3E,QAAQ,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;AACnD,QAAQ,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;AACnD,QAAQ,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,OAAO,CAAC;AAC/D,QAAQ,MAAM,KAAK,GAAG,EAAE,CAAC;AACzB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9C,UAAU,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B,UAAU,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACtC,YAAY,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AACtB,WAAW;AACX,UAAU,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpG,UAAU,MAAM,EAAE,GAAG;AACrB,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,GAAG,OAAO,CAAC;AACrE,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,GAAG,OAAO,CAAC;AACrE,YAAY,CAAC,UAAU,GAAG,KAAK,CAAC;AAChC,WAAW,CAAC;AACZ,UAAU,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;AAC3C,UAAU,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AACtD,YAAY,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;AAC5C,WAAW;AACX,UAAU,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE;AACxE,YAAY,SAAS;AACrB,WAAW;AACX,UAAU,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzB,SAAS;AACT,QAAQ,eAAe,CAAC,OAAO,CAAC;AAChC,UAAU,GAAG,EAAE,KAAK,CAAC,GAAG;AACxB,UAAU,GAAG,EAAE,KAAK,CAAC,GAAG;AACxB,UAAU,IAAI,EAAE,KAAK;AACrB,SAAS,CAAC,CAAC;AACX,QAAQ,KAAK,CAAC,KAAK,GAAG,eAAe,CAAC,UAAU,EAAE,CAAC;AACnD,OAAO;AACP,KAAK,CAAC;AACN,IAAI,WAAW,CAAC,MAAM;AACtB,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;AAC3C,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE;AAClC,MAAM,OAAO;AACb,MAAM,QAAQ;AACd,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,MAAM;AACjB,MAAM,IAAI,SAAS,CAAC,KAAK,EAAE;AAC3B,QAAQ,MAAM,KAAK,GAAG,EAAE,CAAC;AACzB,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE;AACpD,UAAU,KAAK,CAAC,IAAI,CAAC,CAAC,CAACA,OAAQ,EAAE;AACjC,YAAY,GAAG,EAAE,QAAQ;AACzB,YAAY,IAAI,EAAE,KAAK,CAAC,IAAI;AAC5B,YAAY,SAAS,EAAE;AACvB,cAAc,WAAW,EAAE,WAAW,CAAC,KAAK;AAC5C,cAAc,QAAQ,EAAE,QAAQ,CAAC,KAAK;AACtC,aAAa;AACb,WAAW,CAAC,CAAC,CAAC;AACd,SAAS,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE;AAC/C,UAAU,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,EAAE;AAC1C,YAAY,GAAG,EAAE,QAAQ;AACzB,YAAY,IAAI,EAAE,KAAK,CAAC,IAAI;AAC5B,YAAY,UAAU,EAAE,UAAU,CAAC,KAAK;AACxC,YAAY,wBAAwB,EAAE,KAAK;AAC3C,YAAY,iBAAiB,EAAE,IAAI,MAAM,CAAC,gBAAgB,CAAC;AAC3D,cAAc,QAAQ,EAAE,IAAI,MAAM,CAAC,iBAAiB,CAAC;AACrD,gBAAgB,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3D,eAAe,CAAC;AAChB,aAAa,CAAC;AACd,WAAW,CAAC,CAAC,CAAC;AACd,SAAS,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,KAAK,EAAE;AAClE,UAAU,KAAK,CAAC,IAAI,CAAC,CAAC,CAACC,aAAc,EAAE;AACvC,YAAY,GAAG,EAAE,QAAQ;AACzB,YAAY,IAAI,EAAE,KAAK,CAAC,IAAI;AAC5B,YAAY,eAAe,EAAE,IAAI,MAAM,CAAC,yBAAyB,CAAC;AAClE,cAAc,GAAG,EAAE,KAAK,CAAC,KAAK;AAC9B,cAAc,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC;AACzD,aAAa,CAAC;AACd,WAAW,CAAC,CAAC,CAAC;AACd,SAAS;AACT,QAAQ,OAAO,CAAC,CAAC,GAAG,EAAE;AACtB,UAAU,GAAG,EAAE,OAAO;AACtB,UAAU,KAAK,EAAE,oBAAoB;AACrC,UAAU,KAAK,EAAE,0BAA0B;AAC3C,SAAS,EAAE,KAAK,CAAC,CAAC;AAClB,OAAO,MAAM;AACb,QAAQ,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC1C,OAAO;AACP,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC;;;;"}