@aibee/crc-bmap 0.0.123 → 0.0.125
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/bmap.cjs.min.js +32 -6
- package/lib/bmap.cjs.min.js.map +4 -4
- package/lib/bmap.esm.js +269 -63
- package/lib/bmap.esm.js.map +4 -4
- package/lib/bmap.esm.min.js +32 -6
- package/lib/bmap.esm.min.js.map +4 -4
- package/lib/bmap.min.js +3718 -6
- package/lib/bmap.min.js.map +4 -4
- package/lib/src/elements/floor.d.ts +1 -0
- package/lib/src/elements/index.d.ts +1 -0
- package/lib/src/loader/AibeeLoader/type.d.ts +4 -1
- package/package.json +1 -1
- /package/lib/src/elements/{mergeGraphic.d.ts → merge-graphic.d.ts} +0 -0
package/lib/bmap.min.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../node_modules/.pnpm/vec2-copy@1.0.0/node_modules/vec2-copy/index.js", "../node_modules/.pnpm/chaikin-smooth@1.0.4/node_modules/chaikin-smooth/index.js", "../node_modules/.pnpm/node-dijkstra@2.5.0/node_modules/node-dijkstra/libs/PriorityQueue.js", "../node_modules/.pnpm/node-dijkstra@2.5.0/node_modules/node-dijkstra/libs/removeDeepFromMap.js", "../node_modules/.pnpm/node-dijkstra@2.5.0/node_modules/node-dijkstra/libs/toDeepMap.js", "../node_modules/.pnpm/node-dijkstra@2.5.0/node_modules/node-dijkstra/libs/validateDeep.js", "../node_modules/.pnpm/node-dijkstra@2.5.0/node_modules/node-dijkstra/libs/Graph.js", "../src/bmap.ts", "../src/utils/timer.ts", "../src/utils/init-helper.ts", "../src/utils/dispose.ts", "../src/utils/rules.ts", "../src/utils/texture.ts", "../src/utils/coordinate.ts", "../src/utils/proxy.ts", "../src/utils/promise.ts", "../src/utils/svg.ts", "../src/utils/sleep.ts", "../src/utils/color.ts", "../src/utils/model.ts", "../src/utils/os.ts", "../src/utils/keyboard.ts", "../src/utils/events.ts", "../src/utils/event-name.ts", "../src/utils/obj-utils.ts", "../src/utils/ajax.ts", "../src/utils/unique-key.ts", "../src/utils/path.ts", "../src/utils/road.ts", "../src/utils/string.ts", "../src/utils/webworker.ts", "../src/context.ts", "../src/operations/selection/selection.ts", "../src/elements/graphic.ts", "../src/elements/shadow.ts", "../src/elements/poi.ts", "../src/elements/overlay.ts", "../src/elements/floor.ts", "../src/elements/heatmap.ts", "../src/elements/model.ts", "../src/layer/graphic-layer.ts", "../src/layer/layer.ts", "../src/layer/poi-layer.ts", "../src/elements/base-svg.ts", "../src/elements/svg-line.ts", "../src/elements/svg-polygon.ts", "../src/elements/select-box.ts", "../src/elements/wall.ts", "../src/elements/ground-texture.ts", "../src/elements/glb-model.ts", "../src/elements/lane.ts", "../src/operations/selection/box-selection.ts", "../src/operations/hover/hover-helper.ts", "../src/factory/material.ts", "../src/utils/camera-bound.ts", "../src/factory/texture.ts", "../src/config.ts", "../src/api/floor.ts", "../src/plugins/base.ts", "../src/plugins/equipment/equipment.ts", "inline-worker:__inline-worker", "../src/plugins/navigation/path.worker.ts", "../src/plugins/navigation/path.ts", "../src/external/meshLine.js", "../src/plugins/navigation/navigation.ts", "../src/plugins/split-load/split-load.ts", "../src/plugins/mul-floors/mul-floors.ts", "../src/utils/index-db.ts", "../src/loader/AibeeLoader/utils.ts", "../src/loader/AibeeLoader/index.ts"],
|
|
4
|
-
"sourcesContent": ["module.exports = function vec2Copy(out, a) {\n out[0] = a[0]\n out[1] = a[1]\n return out\n}", "var copy = require('vec2-copy')\n\nmodule.exports = function(input, output) {\n if (!Array.isArray(output))\n output = []\n\n if (input.length>0)\n output.push(copy([0, 0], input[0]))\n for (var i=0; i<input.length-1; i++) {\n var p0 = input[i]\n var p1 = input[i+1]\n var p0x = p0[0],\n p0y = p0[1],\n p1x = p1[0],\n p1y = p1[1]\n\n var Q = [ 0.75 * p0x + 0.25 * p1x, 0.75 * p0y + 0.25 * p1y ]\n var R = [ 0.25 * p0x + 0.75 * p1x, 0.25 * p0y + 0.75 * p1y ]\n output.push(Q)\n output.push(R)\n }\n if (input.length > 1)\n output.push(copy([0, 0], input[ input.length-1 ]))\n return output\n}", "/**\n * This very basic implementation of a priority queue is used to select the\n * next node of the graph to walk to.\n *\n * The queue is always sorted to have the least expensive node on top.\n * Some helper methods are also implemented.\n *\n * You should **never** modify the queue directly, but only using the methods\n * provided by the class.\n */\nclass PriorityQueue {\n\n /**\n * Creates a new empty priority queue\n */\n constructor() {\n // The `keys` set is used to greatly improve the speed at which we can\n // check the presence of a value in the queue\n this.keys = new Set();\n this.queue = [];\n }\n\n /**\n * Sort the queue to have the least expensive node to visit on top\n *\n * @private\n */\n sort() {\n this.queue.sort((a, b) => a.priority - b.priority);\n }\n\n /**\n * Sets a priority for a key in the queue.\n * Inserts it in the queue if it does not already exists.\n *\n * @param {any} key Key to update or insert\n * @param {number} value Priority of the key\n * @return {number} Size of the queue\n */\n set(key, value) {\n const priority = Number(value);\n if (isNaN(priority)) throw new TypeError('\"priority\" must be a number');\n\n if (!this.keys.has(key)) {\n // Insert a new entry if the key is not already in the queue\n this.keys.add(key);\n this.queue.push({ key, priority });\n } else {\n // Update the priority of an existing key\n this.queue.map((element) => {\n if (element.key === key) {\n Object.assign(element, { priority });\n }\n\n return element;\n });\n }\n\n this.sort();\n return this.queue.length;\n }\n\n /**\n * The next method is used to dequeue a key:\n * It removes the first element from the queue and returns it\n *\n * @return {object} First priority queue entry\n */\n next() {\n const element = this.queue.shift();\n\n // Remove the key from the `_keys` set\n this.keys.delete(element.key);\n\n return element;\n }\n\n /**\n * @return {boolean} `true` when the queue is empty\n */\n isEmpty() {\n return Boolean(this.queue.length === 0);\n }\n\n /**\n * Check if the queue has a key in it\n *\n * @param {any} key Key to lookup\n * @return {boolean}\n */\n has(key) {\n return this.keys.has(key);\n }\n\n /**\n * Get the element in the queue with the specified key\n *\n * @param {any} key Key to lookup\n * @return {object}\n */\n get(key) {\n return this.queue.find(element => element.key === key);\n }\n\n}\n\nmodule.exports = PriorityQueue;\n", "/**\n * Removes a key and all of its references from a map.\n * This function has no side-effects as it returns\n * a brand new map.\n *\n * @param {Map} map - Map to remove the key from\n * @param {string} key - Key to remove from the map\n * @return {Map} New map without the passed key\n */\nfunction removeDeepFromMap(map, key) {\n const newMap = new Map();\n\n for (const [aKey, val] of map) {\n if (aKey !== key && val instanceof Map) {\n newMap.set(aKey, removeDeepFromMap(val, key));\n } else if (aKey !== key) {\n newMap.set(aKey, val);\n }\n }\n\n return newMap;\n}\n\nmodule.exports = removeDeepFromMap;\n", "/**\n * Validates a cost for a node\n *\n * @private\n * @param {number} val - Cost to validate\n * @return {bool}\n */\nfunction isValidNode(val) {\n const cost = Number(val);\n\n if (isNaN(cost) || cost <= 0) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Creates a deep `Map` from the passed object.\n *\n * @param {Object} source - Object to populate the map with\n * @return {Map} New map with the passed object data\n */\nfunction toDeepMap(source) {\n const map = new Map();\n const keys = Object.keys(source);\n\n keys.forEach((key) => {\n const val = source[key];\n\n if (val !== null && typeof val === 'object' && !Array.isArray(val)) {\n return map.set(key, toDeepMap(val));\n }\n\n if (!isValidNode(val)) {\n throw new Error(`Could not add node at key \"${key}\", make sure it's a valid node`, val);\n }\n\n return map.set(key, Number(val));\n });\n\n return map;\n}\n\nmodule.exports = toDeepMap;\n", "/**\n * Validate a map to ensure all it's values are either a number or a map\n *\n * @param {Map} map - Map to valiadte\n */\nfunction validateDeep(map) {\n if (!(map instanceof Map)) {\n throw new Error(`Invalid graph: Expected Map instead found ${typeof map}`);\n }\n\n map.forEach((value, key) => {\n if (typeof value === 'object' && value instanceof Map) {\n validateDeep(value);\n return;\n }\n\n if (typeof value !== 'number' || value <= 0) {\n throw new Error(`Values must be numbers greater than 0. Found value ${value} at ${key}`);\n }\n });\n}\n\nmodule.exports = validateDeep;\n", "const Queue = require('./PriorityQueue');\nconst removeDeepFromMap = require('./removeDeepFromMap');\nconst toDeepMap = require('./toDeepMap');\nconst validateDeep = require('./validateDeep');\n\n/** Creates and manages a graph */\nclass Graph {\n\n /**\n * Creates a new Graph, optionally initializing it a nodes graph representation.\n *\n * A graph representation is an object that has as keys the name of the point and as values\n * the points reacheable from that node, with the cost to get there:\n *\n * {\n * node (Number|String): {\n * neighbor (Number|String): cost (Number),\n * ...,\n * },\n * }\n *\n * In alternative to an object, you can pass a `Map` of `Map`. This will\n * allow you to specify numbers as keys.\n *\n * @param {Objec|Map} [graph] - Initial graph definition\n * @example\n *\n * const route = new Graph();\n *\n * // Pre-populated graph\n * const route = new Graph({\n * A: { B: 1 },\n * B: { A: 1, C: 2, D: 4 },\n * });\n *\n * // Passing a Map\n * const g = new Map()\n *\n * const a = new Map()\n * a.set('B', 1)\n *\n * const b = new Map()\n * b.set('A', 1)\n * b.set('C', 2)\n * b.set('D', 4)\n *\n * g.set('A', a)\n * g.set('B', b)\n *\n * const route = new Graph(g)\n */\n constructor(graph) {\n if (graph instanceof Map) {\n validateDeep(graph);\n this.graph = graph;\n } else if (graph) {\n this.graph = toDeepMap(graph);\n } else {\n this.graph = new Map();\n }\n }\n\n /**\n * Adds a node to the graph\n *\n * @param {string} name - Name of the node\n * @param {Object|Map} neighbors - Neighbouring nodes and cost to reach them\n * @return {this}\n * @example\n *\n * const route = new Graph();\n *\n * route.addNode('A', { B: 1 });\n *\n * // It's possible to chain the calls\n * route\n * .addNode('B', { A: 1 })\n * .addNode('C', { A: 3 });\n *\n * // The neighbors can be expressed in a Map\n * const d = new Map()\n * d.set('A', 2)\n * d.set('B', 8)\n *\n * route.addNode('D', d)\n */\n addNode(name, neighbors) {\n let nodes;\n if (neighbors instanceof Map) {\n validateDeep(neighbors);\n nodes = neighbors;\n } else {\n nodes = toDeepMap(neighbors);\n }\n\n this.graph.set(name, nodes);\n\n return this;\n }\n\n /**\n * @deprecated since version 2.0, use `Graph#addNode` instead\n */\n addVertex(name, neighbors) {\n return this.addNode(name, neighbors);\n }\n\n /**\n * Removes a node and all of its references from the graph\n *\n * @param {string|number} key - Key of the node to remove from the graph\n * @return {this}\n * @example\n *\n * const route = new Graph({\n * A: { B: 1, C: 5 },\n * B: { A: 3 },\n * C: { B: 2, A: 2 },\n * });\n *\n * route.removeNode('C');\n * // The graph now is:\n * // { A: { B: 1 }, B: { A: 3 } }\n */\n removeNode(key) {\n this.graph = removeDeepFromMap(this.graph, key);\n\n return this;\n }\n\n /**\n * Compute the shortest path between the specified nodes\n *\n * @param {string} start - Starting node\n * @param {string} goal - Node we want to reach\n * @param {object} [options] - Options\n *\n * @param {boolean} [options.trim] - Exclude the origin and destination nodes from the result\n * @param {boolean} [options.reverse] - Return the path in reversed order\n * @param {boolean} [options.cost] - Also return the cost of the path when set to true\n *\n * @return {array|object} Computed path between the nodes.\n *\n * When `option.cost` is set to true, the returned value will be an object with shape:\n * - `path` *(Array)*: Computed path between the nodes\n * - `cost` *(Number)*: Cost of the path\n *\n * @example\n *\n * const route = new Graph()\n *\n * route.addNode('A', { B: 1 })\n * route.addNode('B', { A: 1, C: 2, D: 4 })\n * route.addNode('C', { B: 2, D: 1 })\n * route.addNode('D', { C: 1, B: 4 })\n *\n * route.path('A', 'D') // => ['A', 'B', 'C', 'D']\n *\n * // trimmed\n * route.path('A', 'D', { trim: true }) // => [B', 'C']\n *\n * // reversed\n * route.path('A', 'D', { reverse: true }) // => ['D', 'C', 'B', 'A']\n *\n * // include the cost\n * route.path('A', 'D', { cost: true })\n * // => {\n * // path: [ 'A', 'B', 'C', 'D' ],\n * // cost: 4\n * // }\n */\n path(start, goal, options = {}) {\n // Don't run when we don't have nodes set\n if (!this.graph.size) {\n if (options.cost) return { path: null, cost: 0 };\n\n return null;\n }\n\n const explored = new Set();\n const frontier = new Queue();\n const previous = new Map();\n\n let path = [];\n let totalCost = 0;\n\n let avoid = [];\n if (options.avoid) avoid = [].concat(options.avoid);\n\n if (avoid.includes(start)) {\n throw new Error(`Starting node (${start}) cannot be avoided`);\n } else if (avoid.includes(goal)) {\n throw new Error(`Ending node (${goal}) cannot be avoided`);\n }\n\n // Add the starting point to the frontier, it will be the first node visited\n frontier.set(start, 0);\n\n // Run until we have visited every node in the frontier\n while (!frontier.isEmpty()) {\n // Get the node in the frontier with the lowest cost (`priority`)\n const node = frontier.next();\n\n // When the node with the lowest cost in the frontier in our goal node,\n // we can compute the path and exit the loop\n if (node.key === goal) {\n // Set the total cost to the current value\n totalCost = node.priority;\n\n let nodeKey = node.key;\n while (previous.has(nodeKey)) {\n path.push(nodeKey);\n nodeKey = previous.get(nodeKey);\n }\n\n break;\n }\n\n // Add the current node to the explored set\n explored.add(node.key);\n\n // Loop all the neighboring nodes\n const neighbors = this.graph.get(node.key) || new Map();\n neighbors.forEach((nCost, nNode) => {\n // If we already explored the node, or the node is to be avoided, skip it\n if (explored.has(nNode) || avoid.includes(nNode)) return null;\n\n // If the neighboring node is not yet in the frontier, we add it with\n // the correct cost\n if (!frontier.has(nNode)) {\n previous.set(nNode, node.key);\n return frontier.set(nNode, node.priority + nCost);\n }\n\n const frontierPriority = frontier.get(nNode).priority;\n const nodeCost = node.priority + nCost;\n\n // Otherwise we only update the cost of this node in the frontier when\n // it's below what's currently set\n if (nodeCost < frontierPriority) {\n previous.set(nNode, node.key);\n return frontier.set(nNode, nodeCost);\n }\n\n return null;\n });\n }\n\n // Return null when no path can be found\n if (!path.length) {\n if (options.cost) return { path: null, cost: 0 };\n\n return null;\n }\n\n // From now on, keep in mind that `path` is populated in reverse order,\n // from destination to origin\n\n // Remove the first value (the goal node) if we want a trimmed result\n if (options.trim) {\n path.shift();\n } else {\n // Add the origin waypoint at the end of the array\n path = path.concat([start]);\n }\n\n // Reverse the path if we don't want it reversed, so the result will be\n // from `start` to `goal`\n if (!options.reverse) {\n path = path.reverse();\n }\n\n // Return an object if we also want the cost\n if (options.cost) {\n return {\n path,\n cost: totalCost,\n };\n }\n\n return path;\n }\n\n /**\n * @deprecated since version 2.0, use `Graph#path` instead\n */\n shortestPath(...args) {\n return this.path(...args);\n }\n\n}\n\nmodule.exports = Graph;\n", "import { EventDispatcher, Object3D, Vector3 } from \"three\";\nimport { Context } from \"./context\";\nimport {\n clearTextTexture,\n clearCanvas,\n vector3ToDevice,\n getCenter,\n timeoutPromise,\n Timer,\n Events,\n generatorKeyByObj,\n HooksName\n} from \"./utils\";\nimport { Config, getConfig } from \"./config\";\nimport {\n Floor,\n Graphic,\n HeatmapDataParam,\n ModelOptions,\n PoiOptionsParam,\n} from \"./elements\";\nimport { SvgLine, SvgPolygon } from \"./elements\";\nimport {\n GraphicInfo,\n GraphicOptions,\n PolygonGeometry,\n ResGraphicInfo,\n LoadQuery\n} from \"./types\";\nimport { debounce } from \"lodash\";\nimport { disposeLoader } from \"./utils/model\";\nimport { Plugin } from \"./plugins/base\";\nimport { Equipment } from \"./plugins/equipment/equipment\";\nimport { loadBuildingGround, loadGraphics } from './api'\n\ninterface BmapEventMap {\n \"zoom-change\": {\n basicZoom: number;\n cameraZoom: number;\n };\n \"center-change\": {\n center: [number, number],\n brand: string,\n project: string,\n },\n [HooksName.SWITCH_FLOOR_BEFORE]: {\n data: {\n curFloor: Floor,\n graphics: Graphic[]\n }\n },\n [HooksName.SWITCH_FLOOR_AFTER]: {\n data: {\n curFloor: Floor,\n graphics: Graphic[]\n }\n }\n}\n\nexport type MapType = \"2d\" | \"3d\";\n\nexport enum MapTypePolar {\n D2 = 0,\n D3 = 1.1,\n}\n\nexport class BMap extends EventDispatcher<BmapEventMap> {\n config: Config;\n\n public context: Context;\n\n public polarKeys: string[] = [];\n\n public azimuthalKeys: string[] = [];\n\n public svgLine?: SvgLine;\n\n public svgPolygon?: SvgPolygon;\n\n public basicZoom = 1;\n\n public prevCameraZoom = 1;\n\n type: MapType = \"2d\";\n\n floorDataMap: Map<string, GraphicInfo[]> = new Map();\n\n buildingGroundMap = new Map<string, GraphicInfo | null>();\n\n buildingGroundPromiseMap = new Map<string, Promise<GraphicInfo | null>>();\n\n currentBuildGround: GraphicInfo | null = null;\n\n observe: ResizeObserver | null = null;\n\n buildingCenter = [0, 0]\n\n timer = new Timer();\n\n plugins: Plugin[] = [];\n\n constructor(\n private container: HTMLElement,\n config: Partial<Config> = {}\n ) {\n super();\n this.config = getConfig(config);\n this.context = new Context(container, this.config);\n this.registryEvent();\n this.context.render();\n }\n\n async loadGraphics({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n }: LoadQuery): Promise<GraphicInfo[]> {\n const data = await loadGraphics({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n }, this.config)\n return data;\n }\n\n changeBuildingCenter(data: GraphicInfo | null, { brand, project }: { brand: string; project: string}) { \n const center = data ? getCenter(\n (data.info.geometry as PolygonGeometry).cds[0]\n ) : [0, 0] as [number, number]\n this.buildingCenter = center\n this.dispatchEvent({ type: \"center-change\", center, project, brand })\n }\n\n async loadBuildingGround({\n brand,\n project,\n }: Omit<\n LoadQuery,\n \"floor\" | \"ts\" | \"resource_type_list\"\n >): Promise<GraphicInfo | null> {\n const key = generatorKeyByObj({ brand, project })\n if (this.buildingGroundMap.has(key)) {\n const data = this.buildingGroundMap.get(key)\n this.changeBuildingCenter(data || null, { brand, project })\n return data || null;\n }\n if (this.buildingGroundPromiseMap.has(key)) {\n return this.buildingGroundPromiseMap.get(key)!\n }\n const p = new Promise<GraphicInfo | null>(async resolve => {\n const data = await loadBuildingGround({brand, project }, this.config)\n this.buildingGroundMap.set(key, data);\n this.changeBuildingCenter(data || null, { brand, project })\n this.buildingGroundPromiseMap.delete(key)\n resolve(data);\n })\n this.buildingGroundPromiseMap.set(key, p)\n return p;\n }\n\n async load({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n }: LoadQuery) {\n const floorKey = generatorKeyByObj({brand, project, floor, ts, resource_type_list});\n if (this.floorDataMap.has(floorKey)) {\n return this.floorDataMap.get(floorKey);\n }\n const [data, buildGround] = await Promise.all([\n this.loadGraphics({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n }),\n this.loadBuildingGround({ brand, project }),\n ]);\n this.transformGraphicData(data);\n data.forEach(item => { \n item.info.transformToBuildingGround = !!buildGround;\n })\n if (!this.config.useFloorCache) {\n this.floorDataMap.clear();\n }\n this.floorDataMap.set(floorKey, data);\n return data;\n }\n\n transformGraphicData(data: GraphicInfo[], center = this.buildingCenter, baseIndex = 0) { \n data.forEach((item) => {\n item.info.geometry.coords = JSON.parse(\n JSON.stringify(item.info.geometry.cds)\n );\n if (item.info.geometry.type === \"polygon\") {\n item.info.geometry.coords.map((cds) => {\n if (Array.isArray(cds)) {\n cds.forEach((coord) => {\n coord[0] -= center[0];\n coord[1] -= center[1];\n });\n }\n });\n } else {\n // point\n const [x, y] = item.info.geometry.cds;\n item.info.geometry.coords = [x - center[0], y - center[1]];\n }\n });\n const { ground, markGraphic, graphic } = this.config;\n for (let i = 0; i < data.length; i++) {\n const item = data[i];\n item.info.deltaHeight = 0.00001 * (baseIndex + i + 1);\n if (item.info.group === \"ground\") {\n item.info.fillColor = ground.color;\n item.info.fillOpacity = ground.opacity;\n item.info.height = ground.height;\n item.info.stroke = ground.stroke;\n item.info.strokeColor = ground.strokeColor;\n item.info.strokeOpacity = ground.strokeOpacity;\n } else if (item.info.userData.mark) {\n item.info.height = markGraphic.height;\n item.info.fillColor = markGraphic.color;\n item.info.fillOpacity = markGraphic.opacity;\n item.info.stroke = markGraphic.stroke;\n item.info.strokeColor = markGraphic.strokeColor;\n item.info.strokeOpacity = markGraphic.strokeOpacity;\n } else {\n item.info.fillOpacity = graphic.fillOpacity;\n if (this.config.initTransToMark) {\n item.info.height = markGraphic.height;\n item.info.fillColor = markGraphic.color;\n item.info.stroke = markGraphic.stroke;\n item.info.strokeColor = markGraphic.strokeColor;\n item.info.strokeOpacity = markGraphic.strokeOpacity;\n }\n }\n }\n }\n\n use(plugin: Plugin) { \n plugin.bmap = this;\n this.plugins.push(plugin)\n }\n\n unUse(plugin: Plugin) { \n this.plugins = this.plugins.filter(item => item !== plugin)\n }\n\n createFloor(data: GraphicInfo[]) {\n const curFloor = new Floor(this.context);\n if (!data.length) {\n return { curFloor, graphics: [] };\n }\n const legacyToGraphicMap = new Map<string, Graphic>();\n const graphics: Graphic[] = [];\n for (const item of data) {\n if (item.info.group === \"ground\") {\n curFloor.createGround(item.info);\n } else {\n const graphic = curFloor.addGraphic(item.info);\n graphic.userData.data = item;\n legacyToGraphicMap.set(item.legacy_id, graphic);\n graphics.push(graphic);\n }\n }\n // curFloor.addShadow()\n curFloor.userData.legacyToGraphicMap = legacyToGraphicMap;\n return { curFloor, graphics };\n }\n\n triggerHooks(hooks: HooksName, data: any) { \n this.dispatchEvent({ type: hooks, data })\n }\n\n switchFloor({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n }: LoadQuery) {\n const floorKey = generatorKeyByObj({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n });\n const curFloorData = this.floorDataMap.get(floorKey);\n this.context.control.removeEventListener(\"change\", this.onControlChange);\n if (curFloorData) {\n const buildingKey = generatorKeyByObj({ brand, project });\n this.currentBuildGround = this.buildingGroundMap.get(buildingKey) || null;\n const createdFloor = this.createFloor(curFloorData);\n if (createdFloor) {\n createdFloor.curFloor.name = floor\n this.triggerHooks(HooksName.SWITCH_FLOOR_BEFORE, createdFloor)\n this.context.switchFloor(createdFloor.curFloor);\n this.initialFloorCamera();\n this.triggerHooks(HooksName.SWITCH_FLOOR_AFTER, createdFloor)\n } else {\n console.warn(\"[switchFloor error] [\" + floor + \"] \u697C\u5C42\u6CA1\u6709\u6570\u636E\");\n }\n } else {\n console.warn(\n \"[switchFloor error] \u6CA1\u6709\u8FD9\u4E2A\u697C\u5C42\uFF0C\u8BF7\u5148\u8C03\u7528load\u65B9\u6CD5\u52A0\u8F7D\u697C\u5C42\"\n );\n }\n }\n\n switchFloorByData(data: GraphicInfo[], name: string, key = name) {\n // \u9700\u8981\u5207\u6362\u697C\u5C42\n const { curFloor, graphics } = this.createFloor(data);\n curFloor.name = name;\n curFloor.key = key;\n const graphicMap = new Map<string, GraphicInfo>();\n data.forEach((graphicInfo) => {\n graphicMap.set(graphicInfo.element_uuid, graphicInfo);\n })\n curFloor.userData.graphicMap = graphicMap;\n this.switchFloorByFloor(curFloor, graphics)\n }\n\n switchFloorByFloor(floor: Floor, graphics = floor.graphicLayer.children) {\n this.triggerHooks(HooksName.SWITCH_FLOOR_BEFORE, { curFloor: floor, graphics })\n this.context.switchFloor(floor);\n this.initialFloorCamera();\n this.triggerHooks(HooksName.SWITCH_FLOOR_AFTER, { curFloor: floor, graphics })\n }\n\n // \u5207\u6362\u697C\u5C42\u540E\u521D\u59CB\u5316\u76F8\u673A\n initialFloorCamera() { \n this.context.cameraBound.setEnable(false);\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = 0;\n this.context.control.maxZoom = Infinity;\n this.context.camera.zoom = 1;\n this.context.setAzimuthalAngle(this.config.control.defaultAzimuthal, 0);\n this.context.setPolarAngle(this.config.control.defaultPolar, 0);\n this.context.fitCameraToGround(undefined, 0);\n const basicZoom = this.context.camera.zoom;\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = basicZoom;\n this.context.control.maxZoom = basicZoom * 25;\n if (this.type === \"3d\") {\n this.context.fitCameraToGround(this.config.defaultPadding, 0, false);\n }\n this.basicZoom = this.context.camera.zoom;\n this.context.control.addEventListener(\"change\", this.onControlChange);\n this.onControlChange();\n this.context.cameraBound.setEnable(true);\n this.context.cameraBound.changePrevCamera();\n }\n\n onControlChange = () => {\n const {\n camera: { zoom },\n } = this.context;\n if (zoom !== this.prevCameraZoom) {\n this.dispatchEvent({\n type: \"zoom-change\",\n basicZoom: this.basicZoom,\n cameraZoom: this.context.camera.zoom,\n });\n this.prevCameraZoom = zoom;\n }\n };\n\n // \u6276\u68AF\n addModel(graphic: Graphic, options: ModelOptions) {\n // \u6839\u636E\u6700\u957F\u8FB9\uFF0C\u83B7\u53D6\u6276\u68AF\u7684\u65B9\u5411\n if (graphic.options.geometry.type === \"polygon\") {\n // \u6839\u636E\u65B9\u5411\u6E32\u67D3\u6A21\u578B\n const model = this.context.currentFloor?.addModel({\n ...options,\n position: graphic.getPosition().setZ(0.1),\n id: graphic.options.id,\n });\n if (model) {\n const {\n facilityAngle = 0,\n facilityXScale = 1,\n facilityYScale = 1,\n } = graphic.options.userData;\n model.rotateZ(((180 - facilityAngle) / 180) * Math.PI);\n model.scale.set(facilityXScale, facilityYScale, 1);\n }\n }\n }\n\n addHeatmap(data: HeatmapDataParam) {\n return this.context.currentFloor?.addHeatmap(data);\n }\n\n getLegacyToGraphicMap(): Map<string, Graphic> {\n return this.context.currentFloor?.userData.legacyToGraphicMap || new Map();\n }\n\n /**\n * \u83B7\u53D6\u5F53\u524D\u697C\u5C42\u5168\u90E8\u7684graphic\n * @returns\n */\n getFloorAllGraphics(): Graphic[] {\n return (\n (this.context.currentFloor?.graphicLayer.children.filter(\n (item) => item instanceof Graphic\n ) as Graphic[]) || []\n );\n }\n\n createGraphicPoi(graphic: Graphic, options: PoiOptionsParam) {\n if (this.context.currentFloor) {\n if (options.id === undefined) {\n options.id = graphic.options.id;\n }\n const position = graphic.getCenter();\n const poi = this.context.currentFloor.addPoi({\n ...options,\n position: { ...position, z: position.z + graphic.options.height / 2 },\n });\n return poi;\n }\n return null;\n }\n\n removeHeatMap() {\n this.context.currentFloor?.removeHeatMap();\n }\n\n /**\n * \u79FB\u52A8\u76F8\u673A\u4F4D\u7F6E\u8BA9\u9009\u4E2D\u7684\u5143\u7D20\u5C45\u4E2D\u663E\u793A\n * @param ele { Graphic | Poi }\n * @param duration\n */\n translateElementToCenter(\n ele: { getPosition: () => Vector3 },\n duration: number = 500\n ) {\n const position = ele.getPosition();\n return this.context.setCameraPosition(position, duration);\n }\n\n /**\n * \u79FB\u52A8\u76F8\u673A\u4F4D\u7F6E\u8BA9\u9009\u4E2D\u7684\u5143\u7D20\u5C45\u4E2D\u663E\u793A\n * @param ele { Graphic | Poi }\n * @param duration\n */\n async translateElementToCenterX(\n ele: { getPosition: () => Vector3 },\n duration: number = 500\n ) {\n return timeoutPromise(new Promise((resolve) => { \n const target = this.context.control.target.clone();\n const position = ele.getPosition();\n this.timer.requestAnimationFrame(() => { \n const {\n clientSize: { width, height },\n camera,\n } = this.context;\n const device = vector3ToDevice(position, camera, width, height);\n const offsetX = device.x - width / 2;\n const v3 = new Vector3();\n v3.setFromMatrixColumn(this.context.camera.matrix, 0);\n v3.normalize();\n v3.multiplyScalar(offsetX / this.context.camera.zoom);\n target.add(v3)\n this.context.setCameraPosition(target, duration).then(resolve)\n })\n }), duration + 500)\n \n }\n\n /**\n * \u83B7\u53D6\u7269\u4F53\u7684\u5C4F\u5E55\u5750\u6807\n */\n getElementDeviceCoordinate(ele: Object3D) {\n const vector = ele.position.clone();\n const { clientWidth, clientHeight } = this.container;\n return vector3ToDevice(\n vector,\n this.context.camera,\n clientWidth,\n clientHeight\n );\n }\n\n /**\n * \u5207\u63622d\u30013d\u89C6\u89D2\n * @param type\n * @param duration\n */\n changeMapType(type: MapType, duration = 500) {\n this.type = type;\n if (type === \"2d\") {\n return this.context.setPolarAngle(MapTypePolar.D2, duration);\n } else {\n return this.context.setPolarAngle(MapTypePolar.D3, duration);\n }\n }\n\n async resetView(duration = 300) {\n const time = duration / 3;\n await this.context.setAzimuthalAngle(\n this.config.control.defaultAzimuthal,\n time\n );\n await this.context.setPolarAngle(\n this.config.control.defaultPolar,\n time\n );\n // await this.changeMapType(this.type, time);\n await this.context.fitCameraToGround(\n this.config.defaultPadding,\n time,\n false\n );\n }\n\n /**\n * \u7F29\u5C0F\u5730\u56FE\n * @param zoom\n * @param duration\n * @returns\n */\n reduceMap(zoom = 0.5, duration = 500) {\n const cameraZoom = this.context.camera.zoom;\n return this.context.setZoom(\n cameraZoom - zoom,\n this.context.control.target,\n duration\n );\n }\n\n /**\n * \u653E\u5927\u5730\u56FE\n * @param zoom\n * @param duration\n * @returns\n */\n enlargeMap(zoom = 0.5, duration = 500) {\n const cameraZoom = this.context.camera.zoom;\n return this.context.setZoom(\n cameraZoom + zoom,\n this.context.control.target,\n duration\n );\n }\n\n onKeydown = (e: KeyboardEvent) => {\n if (this.polarKeys.includes(e.code)) {\n this.context.control.maxPolarAngle = this.config.control.maxPolar;\n this.context.control.minPolarAngle = 0;\n }\n if (this.azimuthalKeys.includes(e.code)) {\n this.context.control.maxAzimuthAngle = Infinity;\n this.context.control.minAzimuthAngle = Infinity;\n }\n };\n\n onKeyUp = (e: KeyboardEvent) => {\n if (this.polarKeys.includes(e.code)) {\n const polar = this.context.control.getPolarAngle();\n this.context.control.maxPolarAngle = polar;\n this.context.control.minPolarAngle = polar;\n }\n if (this.azimuthalKeys.includes(e.code)) {\n const azimuthal = this.context.control.getAzimuthalAngle();\n this.context.control.maxAzimuthAngle = azimuthal;\n this.context.control.minAzimuthAngle = azimuthal;\n }\n };\n\n registryEvent() {\n window.addEventListener(\"keydown\", this.onKeydown);\n window.addEventListener(\"keyup\", this.onKeyUp);\n if (this.config.resizeObserver) {\n const observe = new ResizeObserver(debounce(this.resize, 5));\n observe.observe(this.container);\n this.observe = observe;\n }\n }\n\n unRegistryEvent() {\n window.removeEventListener(\"keydown\", this.onKeydown);\n window.removeEventListener(\"keyup\", this.onKeyUp);\n this.observe?.disconnect();\n this.observe = null;\n }\n\n /**\n * \u914D\u7F6E\u5750\u6807\u5B9A\u70B9 2D/3D\u7EBF\u6027\u5207\u6362\u7684\u5FEB\u6377\u952E\n * @param key\n */\n configurePolarShortcutKeys(keys: string[]) {\n this.polarKeys = keys;\n }\n\n configureAzimuthalShortcutKeys(keys: string[]) {\n this.azimuthalKeys = keys;\n }\n\n rotateMap(radius = 0.1) {\n const azimuthal = this.context.control.getAzimuthalAngle();\n this.context.setAzimuthalAngle(azimuthal + radius, 500);\n\n }\n\n /**\n * \u6D4B\u91CF\u8DDD\u79BB\n * @returns\n */\n async measureDistance() {\n this.cancelDistance();\n return new Promise((resolve, reject) => {\n this.changeMapType(\"2d\", 0);\n this.context.control.enableRotate = false; // \u6D4B\u91CF\u53EA\u80FD\u57282d\u4E2D\u8FDB\u884C\n this.svgLine = new SvgLine(this.context);\n const dispose = this.svgLine.dispose.bind(this.svgLine);\n this.svgLine.dispose = function () {\n dispose();\n reject(\"cancel\");\n };\n this.svgLine.addEventListener(\"distance\", ({ distance }) => {\n resolve(distance);\n });\n });\n }\n\n /**\n * \u53D6\u6D88\u6D4B\u91CF\u957F\u5EA6\n */\n cancelDistance() {\n if (this.svgLine) {\n this.svgLine.dispose();\n this.svgLine = undefined;\n this.context.control.enableRotate = true;\n }\n }\n\n /**\n * \u6D4B\u91CF\u9762\u79EF\n */\n measureArea() {\n this.cancelArea();\n return new Promise((resolve, reject) => {\n this.changeMapType(\"2d\", 0);\n this.context.control.enableRotate = false; // \u6D4B\u91CF\u53EA\u80FD\u57282d\u4E2D\u8FDB\u884C\n this.svgPolygon = new SvgPolygon(this.context);\n const dispose = this.svgPolygon.dispose.bind(this.svgPolygon);\n this.svgPolygon.dispose = function () {\n dispose();\n reject(\"cancel\");\n };\n this.svgPolygon.addEventListener(\"area\", ({ area }) => {\n resolve(area);\n });\n });\n }\n\n /**\n * \u53D6\u6D88\u6D4B\u91CF\u9762\u79EF\n */\n cancelArea() {\n if (this.svgPolygon) {\n this.svgPolygon.dispose();\n this.svgPolygon = undefined;\n this.context.control.enableRotate = true;\n }\n }\n\n /**\n * \u6839\u636EnodeId \u83B7\u53D6graphic\n */\n getGraphicByNodeId(nodeId: string) {\n return (\n this.context.currentFloor?.graphicLayer.getGraphicByNodeId(nodeId) || null\n );\n }\n\n deleteGraphic(graphic: Graphic) {\n this.context.currentFloor?.graphicLayer.removeGraphic(graphic);\n }\n\n createGraphicByOptions(options: GraphicOptions) {\n if (!options.transformToBuildingGround) {\n if (this.currentBuildGround) {\n const center = getCenter(\n (this.currentBuildGround.info.geometry as PolygonGeometry).cds[0]\n );\n if (options.geometry.type === \"polygon\") {\n options.geometry.coords = JSON.parse(\n JSON.stringify(options.geometry.cds)\n );\n options.geometry.coords.map((cds) => {\n if (Array.isArray(cds)) {\n cds.forEach((coord) => {\n coord[0] -= center[0];\n coord[1] -= center[1];\n });\n }\n });\n } else {\n // point\n const [x, y] = options.geometry.cds;\n options.geometry.coords = [x - center[0], y - center[1]];\n }\n }\n }\n return this.context.currentFloor?.graphicLayer.createGraphic(options);\n }\n\n removePoiById(id: string) {\n return this.context.currentFloor?.poiLayer.removePoiById(id);\n }\n\n getPoiById(id: string) {\n return this.context.currentFloor?.poiLayer.getPoiById(id);\n }\n\n getPois() {\n return (this.context.currentFloor?.poiLayer.pois || []).filter(\n (item) => !item.options.built_in\n );\n }\n\n clearPoi() {\n if (this.context.currentFloor) {\n this.context.currentFloor.poiLayer.clear();\n }\n }\n\n removeSelectGraphic(graphic: Graphic) {\n this.context.selection.remove(graphic);\n }\n\n resize = () => {\n this.context.cameraBound.setEnable(false);\n this.context.onWindowResize();\n const azimuthal = this.context.control.getAzimuthalAngle();\n const zoom = this.context.camera.zoom;\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = 0;\n this.context.control.maxZoom = Infinity;\n this.context.camera.zoom = 1;\n this.context.setAzimuthalAngle(0, 0);\n const basicZoom = this.context.getFitCameraToGroundZoom(undefined, 0) || 1;\n\n // \u8BBE\u7F6Ezoom\n this.context.camera.zoom = zoom;\n this.context.control.minZoom = basicZoom;\n this.context.control.maxZoom = basicZoom * 25;\n this.basicZoom = zoom;\n this.context.control.addEventListener(\"change\", this.onControlChange);\n this.context.setAzimuthalAngle(azimuthal, 0);\n this.context.cameraBound.setEnable(true);\n };\n\n dispose() {\n this.timer.dispose();\n this.plugins.forEach(plugin => plugin.dispose())\n this.context.dispose();\n this.floorDataMap.clear();\n this.buildingGroundMap.clear();\n clearTextTexture();\n clearCanvas();\n disposeLoader();\n this.unRegistryEvent();\n }\n}\n", "type Fn = (...arg: any) => any\n\n/**\n * \u4EFB\u52A1\u7BA1\u7406\u5668\n * \u5728\u7C7B\u9500\u6BC1\u7684\u65F6\u5019\uFF0C\u8981\u6E05\u9664\u6240\u6709\u7684\u5F02\u6B65\u5B9A\u65F6\u5668\n */\nexport class Timer { \n tasks = {\n requestAnimation: new Set<number>(),\n timeout: new Set<number>(),\n interval: new Set<number>()\n }\n\n requestAnimationFrame(fn: Fn): number { \n const timer = window.requestAnimationFrame(() => {\n this.tasks.requestAnimation.delete(timer)\n fn()\n })\n this.tasks.requestAnimation.add(timer)\n return timer\n }\n\n cancelAnimationFrame(timer: number) { \n this.tasks.requestAnimation.delete(timer)\n window.cancelAnimationFrame(timer)\n }\n\n setTimeout(fn: Fn, wait: number): number { \n const timer = window.setTimeout(() => {\n this.tasks.timeout.delete(timer)\n fn()\n }, wait)\n this.tasks.timeout.add(timer)\n return timer\n }\n\n clearTimeout(timer: number) {\n this.tasks.timeout.delete(timer)\n window.clearTimeout(timer)\n }\n\n setInterval(fn: Fn, wait: number): number { \n const timer = window.setInterval(() => {\n this.tasks.interval.delete(timer)\n fn()\n }, wait)\n this.tasks.interval.add(timer)\n return timer\n }\n\n clearInterval(timer: number) {\n this.tasks.interval.delete(timer)\n window.clearInterval(timer)\n }\n\n dispose() { \n this.tasks.requestAnimation.forEach(timer => {\n window.cancelAnimationFrame(timer)\n })\n this.tasks.requestAnimation.clear()\n this.tasks.timeout.forEach(timer => {\n window.clearTimeout(timer)\n })\n this.tasks.timeout.clear()\n this.tasks.interval.forEach(timer => {\n window.clearInterval(timer)\n }) \n this.tasks.interval.clear()\n }\n}", "import { Coordinate } from 'src/types'\nimport {\n Scene, WebGLRenderer, OrthographicCamera, HemisphereLight, Shape, \n PCFSoftShadowMap, Group, Color, DirectionalLight, AmbientLight, Path, Vector2\n} from 'three'\nimport { MapControls } from 'three/examples/jsm/controls/MapControls'\n\nexport function initScene() {\n const scene = new Scene()\n scene.background = new Color(0xffffff)\n return scene\n}\n\nexport function initRenderer() {\n const renderer = new WebGLRenderer({\n antialias: true,\n // logarithmicDepthBuffer: true,\n // alpha: false,\n // premultipliedAlpha: false\n })\n renderer.autoClear = true\n renderer.setClearAlpha(1);\n renderer.setClearColor(0xffffff);\n renderer.setPixelRatio(window.devicePixelRatio);\n renderer.shadowMap.enabled = true;\n renderer.shadowMap.autoUpdate = true;\n renderer.shadowMap.type = PCFSoftShadowMap;\n return renderer\n}\n\nexport function initCamera(width: number, height: number): OrthographicCamera {\n const camera = new OrthographicCamera(-width / 2, width / 2, height / 2, -height / 2, -1000, 5000)\n camera.up.set(0, 0, 1);\n camera.position.set(0, 0, 100);\n camera.lookAt(0, 0, 0);\n return camera\n}\n\nexport function initLight() {\n const lights = new Group()\n // \u534A\u7403\u5149\n // const hemisphereLight = new HemisphereLight(0xffffff, 0xffffff, 1);\n // hemisphereLight.intensity = 1;\n // hemisphereLight.position.set(0, 0, 10);\n // hemisphereLight.up.set(0, 0, 1);\n // lights.add(hemisphereLight)\n const ambientLight = new AmbientLight(0xffffff, 2.6);\n lights.add(ambientLight)\n return lights\n}\n\nexport function initControl(camera: OrthographicCamera, domElement: HTMLCanvasElement) {\n const control = new MapControls(camera, domElement)\n // \u7981\u7528\u963B\u5C3C\n control.enableDamping = false\n // \u8BBE\u7F6E2.5D\n // control.maxPolarAngle = 0\n // control.minPolarAngle = 0\n // \u7981\u7528\u6C34\u5E73\u65CB\u8F6C\n // control.maxAzimuthAngle = 0\n // control.minAzimuthAngle = 0\n control.zoomSpeed = 2\n return control\n}\n\nexport function initShape(path: Coordinate[], holePath: Coordinate[][] = []) { \n const shape = new Shape(path.map(item => new Vector2(...item)));\n if (holePath.length) {\n holePath.forEach(cur => {\n var hole = new Path(cur.map(item => new Vector2(...item)));\n shape.holes.push(hole);\n })\n }\n return shape\n}\n\nexport function initDirectionalLight(color = 0xffffff, intensity = 1) {\n const directionalLight = new DirectionalLight(color, intensity);\n directionalLight.castShadow = true;\n directionalLight.shadow.radius = 8;\n directionalLight.shadow.bias = -0.001;\n directionalLight.shadow.mapSize.set(256, 256);\n directionalLight.shadow.camera.left = -200;\n directionalLight.shadow.camera.right = 200;\n directionalLight.shadow.camera.top = 200;\n directionalLight.shadow.camera.bottom = -200;\n return directionalLight\n}", "import { Object3D, Mesh, Light } from 'three'\n\nexport function dispose(o: Object3D, recursive?: boolean): void {\n if (recursive && o.children && o.children.length) {\n o.children.forEach((child) => {\n dispose(child, recursive);\n });\n }\n if ((o as Mesh).isMesh) {\n const m = o as Mesh;\n if (m.geometry) m.geometry.dispose();\n if (m.material) {\n if (Array.isArray(m.material)) {\n m.material.forEach((mat) => {\n mat.dispose();\n });\n } else {\n m.material.dispose();\n }\n }\n }\n if ((o as Light).isLight) {\n (o as Light).dispose?.()\n }\n}", "export function hasChinese(str:string) {\n return /[\\u4E00-\\u9FA5]+/g.test(str);\n}", "import { hasChinese } from './rules'\nimport { DataTexture, RGBAFormat, LinearFilter } from 'three'\n\nconst urlTextureMap = new Map()\nconst textTextureMap = new Map<string, DataTexture>()\n\nexport function initCanvas() {\n const canvas = document.createElement('canvas');\n canvas.width = 1024;\n canvas.height = 64;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true,\n }) as CanvasRenderingContext2D;\n ctx.font = '54px sans-serif';\n ctx.textBaseline = 'hanging';\n ctx.lineWidth = 12;\n ctx.fillStyle = 'rgba(0,0,0,1)';\n ctx.strokeStyle = 'white';\n return { canvas, ctx }\n}\n\nlet canvas: HTMLCanvasElement;\nlet ctx: CanvasRenderingContext2D;\n\nexport function createCanvas() {\n if (!canvas) {\n const { canvas: c, ctx: t } = initCanvas()\n canvas = c;\n ctx = t;\n }\n}\n\nexport function getTextureByText(text: string): DataTexture {\n if (textTextureMap.has(text)) {\n return textTextureMap.get(text)!\n }\n createCanvas()\n\n ctx.clearRect(0, 0, 1024, 64);\n const y = hasChinese(text) ? 4 : 8;\n ctx.strokeText(text, 2, y);\n ctx.fillText(text, 2, y);\n\n let width = Math.ceil(ctx.measureText(text).width);\n width = width % 2 === 0 ? width : width + 1;\n width += 2;\n const imageData = ctx.getImageData(0, 0, width, 64);\n const texture = new DataTexture(\n Uint8Array.from(imageData.data),\n width,\n 64,\n RGBAFormat,\n );\n texture.flipY = true;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n\n textTextureMap.set(text, texture);\n return texture;\n}\n\nexport function clearTextTexture() {\n textTextureMap.clear()\n}\n\nexport function clearCanvas() {\n ctx = null as unknown as CanvasRenderingContext2D;\n canvas = null as unknown as HTMLCanvasElement;\n}", "import { Coordinate } from '../types';\nimport { Vector3, Camera, Vector2 } from 'three';\nimport { point, featureCollection, center } from '@turf/turf'\n\n/**\n * 3D\u5750\u6807\u8F6C\u5C4F\u5E55\u5750\u6807\n * @param vector \n * @param camera \n * @param w container\u7684\u5BBD\n * @param h container\u7684\u9AD8\n * @returns \n */\nexport function vector3ToDevice(vector: Vector3, camera: Camera, w: number, h: number) {\n const _vector = vector.clone().project(camera);//\u901A\u8FC7\u4E16\u754C\u5750\u6807\u83B7\u53D6\u8F6C\u6807\u51C6\u8BBE\u5907\u5750\u6807\n const _w = w / 2;\n const _h = h / 2;\n const x = Math.round(_vector.x * _w + _w);//\u6807\u51C6\u8BBE\u5907\u5750\u6807\u8F6C\u5C4F\u5E55\u5750\u6807\n const y = Math.round(-_vector.y * _h + _h);\n return { x, y }\n}\n\n\n/**\n * \u83B7\u53D6\u591A\u53D8\u5F62\u7684\u4E2D\u5FC3\u70B9\n * @param coordinates \n */\nexport function getCenter(coordinates: Coordinate[]): [number, number] {\n const features = featureCollection(coordinates.map(item => point(item)))\n const cent = center(features)\n return cent.geometry.coordinates as [number, number]\n}\n\ntype Position = {\n x: number,\n y: number\n}\nexport function isContain(point: Position, start: Position, end: Position) {\n // \u5224\u65AD point\u662F\u5426\u5728 start \u548Cend\u5F62\u6210\u7684\u77E9\u5F62\u4E2D\n return point.x >= start.x &&\n point.x <= end.x &&\n point.y >= start.y &&\n point.y <= end.y \n}\n\n/**\n * \u83B7\u53D6\u6700\u957F\u8FB9\u7684\u65B9\u5411\n * @param cds \n */\nexport function getLongestSideDir(cds: Coordinate[]) { \n let maxDistance = 0;\n let dir = new Vector3();\n for (let i = 1; i < cds.length; i++) { \n const point_0 = new Vector3(cds[i - 1][0], cds[i - 1][1], 0);\n const point_1 = new Vector3(cds[i][0], cds[i][1], 0);\n const distance = point_1.distanceTo(point_0)\n if (distance > maxDistance) {\n maxDistance = distance;\n dir = point_1.clone().sub(point_0).normalize();\n }\n }\n return dir;\n}\n\nexport function getLength(start: [number, number], end: [number, number]) {\n return Math.sqrt((end[0] - start[0]) ** 2 + (end[1] - start[1]) ** 2)\n}\n\nexport function getPathLength(path: [number, number][]) { \n let length = 0;\n for (let i = 0; i < path.length - 1; i++) { \n length += getLength(path[i], path[i + 1])\n }\n return length\n}\n\n// \u8BA1\u7B97\u4E09\u4E2A\u70B9\u7684\u89D2\u5EA6\nexport function calc_angle(p0: [number, number], p1: [number, number], p2: [number, number]) {\n const line1 = new Vector2(p1[0] - p0[0], p1[1] - p0[1]);\n const line2 = new Vector2(p1[0] - p2[0], p1[1] - p2[1]);\n const radian = line1.angleTo(line2);\n const angle = (radian * 180) / Math.PI;\n // \u521B\u5EFA\u4ECEp0\u5230p1\u7684\u5411\u91CF\u548Cp0\u5230P2\u7684\u5411\u91CF\n const l01 = new Vector2(p1[0] - p0[0], p1[1] - p0[1]);\n const l02 = new Vector2(p2[0] - p0[0], p2[1] - p0[1]);\n const crossResult = l02.cross(l01);\n if (crossResult > 0) {\n return angle;\n } else {\n return -angle;\n }\n}\n", "import { EventDispatcher } from 'three'\n\nexport function proxyOptions\n <T extends Record<string, any>, M extends { [K in keyof T as `change-${Extract<K, string>}`]: { value: T[K] } }>\n (target: T, master: EventDispatcher<M>): T\n{ \n return new Proxy<T>(target, {\n get: (target, p, receiver) => {\n return Reflect.get(target, p, receiver)\n },\n set: (target, p, newValue, receiver) => {\n const oldValue = Reflect.get(target, p, receiver)\n const res = Reflect.set(target, p, newValue, receiver)\n if (oldValue !== newValue) {\n master.dispatchEvent({ type: `change-${p as Extract<keyof T, string>}`, value: newValue } as any)\n }\n return res\n }\n })\n}", "/**\n * \u53EF\u4EE5\u8BBE\u7F6E\u8D85\u65F6\u65F6\u95F4\u7684promise\n * @param promise \n * @param timeout \n * @returns \n */\nexport function timeoutPromise<T>(promise: Promise<T>, timeout: number): Promise<T> {\n return Promise.race([\n promise,\n new Promise<T>((resolve, reject) => {\n setTimeout(() => reject(new Error(\"Promise timeout\")), timeout);\n })\n ]);\n}", "export function createSvgElement(tag: string) {\n return document.createElementNS('http://www.w3.org/2000/svg', tag); \n}\n\n/**\n * \u521B\u5EFAsvg\n */\nexport function createSvg(w: string, h: string) {\n const svg = createSvgElement(\"svg\");\n svg.setAttribute(\"width\", w)\n svg.setAttribute(\"height\", h)\n svg.style.cssText = \"position: absolute; left: 0; top: 0; pointer-events: none;\"\n return svg;\n}\n\n/**\n * \u521B\u5EFA\u5706\u70B9\n * @param radius \n */\nexport function createCircle(radius = \"2\", fill: string) {\n const circle = createSvgElement(\"circle\");\n circle.setAttribute(\"r\", radius)\n circle.setAttribute(\"fill\", fill)\n return circle\n}\n\n/**\n * \u521B\u5EFA\u7EBF\n * @param stroke \n */\nexport function createLine(stroke: string) {\n const line = createSvgElement(\"line\")\n line.setAttribute(\"stroke\", stroke)\n return line\n}\n\n/**\n * \u521B\u5EFA\u77E9\u5F62\n * @param stroke \n * @returns \n */\nexport function createRect(stroke: string, fill: string) {\n const rect = createSvgElement(\"rect\")\n rect.setAttribute(\"stroke\", stroke)\n rect.setAttribute(\"fill\", fill)\n return rect\n}\n\nexport function setCirclePosition(circle: SVGElement, x: number, y: number) {\n circle.setAttribute('cx', `${x}`)\n circle.setAttribute('cy', `${y}`)\n}\n\ntype Position = { x: number; y: number }\n\nexport function setLineStartEnd(line: SVGElement, start?: Position, end?: Position) {\n if (start) { \n line.setAttribute(\"x1\", `${start.x}`)\n line.setAttribute(\"y1\", `${start.y}`)\n }\n if (end) {\n line.setAttribute(\"x2\", `${end.x}`)\n line.setAttribute(\"y2\", `${end.y}`)\n }\n}\n\nexport function setRectPosition(rect: SVGElement, x: number, y: number, w: number, h: number) {\n rect.setAttribute('x', `${x}`)\n rect.setAttribute('y', `${y}`)\n rect.setAttribute('width', `${w}`)\n rect.setAttribute('height', `${h}`)\n}", "export function sleepOnePromise() {\n return Promise.resolve()\n}\n\nexport function sleepOneRf() { \n return new Promise(resolve => {\n requestAnimationFrame(resolve)\n })\n}", "export function strToNumber(str: string) {\n return parseInt(str.replace(\"#\", \"0x\"), 16);\n}\n\n/**\n * \u7ED9\u989C\u8272\u52A0\u4E0A\u900F\u660E\u5EA6\n * @param hexColor\n * @param alpha\n * @returns\n */\nexport function addAlphaToHexColor(hexColor: string, alpha: number) {\n // \u5C0616\u8FDB\u5236\u989C\u8272\u503C\u8F6C\u6362\u4E3ARGB\u6570\u503C\n let r = parseInt(hexColor.substring(1, 3), 16);\n let g = parseInt(hexColor.substring(3, 5), 16);\n let b = parseInt(hexColor.substring(5, 7), 16);\n\n // \u8BA1\u7B97\u65B0\u7684RGB\u6570\u503C\n let newR = Math.round(r * alpha);\n let newG = Math.round(g * alpha);\n let newB = Math.round(b * alpha);\n\n // \u5C06\u65B0\u7684RGB\u6570\u503C\u8F6C\u6362\u4E3A16\u8FDB\u5236\u683C\u5F0F\n let newHexColor = `#${(1 << 24 | newR << 16 | newG << 8 | newB).toString(16).slice(1)}`;\n\n return newHexColor;\n}\n\nexport function darkenColor(hexColor: string, factor = 0.85) {\n let r: number;\n let g: number;\n let b: number;\n if (hexColor.startsWith(\"#\")) {\n // \u5C06\u5341\u516D\u8FDB\u5236\u989C\u8272\u8F6C\u6362\u4E3ARGB\n r = parseInt(hexColor.substring(1, 3), 16);\n g = parseInt(hexColor.substring(3, 5), 16);\n b = parseInt(hexColor.substring(5, 7), 16);\n } else { \n // rgb\u683C\u5F0F\u7684\n let numbers = hexColor.slice(4, -1).split(\",\");\n r = parseInt(numbers[0].trim())\n g = parseInt(numbers[1].trim())\n b = parseInt(numbers[2].trim())\n }\n // \u8BA1\u7B97\u6697\u70B9\u989C\u8272\n r = Math.min(Math.floor(r * factor), 255);\n g = Math.min(Math.floor(g * factor), 255);\n b = Math.min(Math.floor(b * factor), 255);\n\n\n // \u5C06RGB\u989C\u8272\u8F6C\u6362\u56DE\u5341\u516D\u8FDB\u5236\n let darkHexColor = \"#\" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\n\n return darkHexColor;\n}\n", "import { Object3D, Scene, Mesh, MeshBasicMaterial } from 'three'\nimport { GLTF, GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'\n\nfunction createLoader() { \n const loader = new GLTFLoader()\n return loader\n}\n\nlet loader: GLTFLoader | null = null\nlet modelMap = new Map<string, Promise<GLTF>>()\n\n/**\n * \u52A0\u8F7D\u6A21\u578B\n * @param url \n * @returns \n */\nexport function loadModel(url: string): Promise<GLTF> { \n if (modelMap.has(url)) {\n const gltf = modelMap.get(url)!.then(gltf => { \n gltf.scene = gltf.scene.clone()\n return gltf\n })\n }\n if (!loader) {\n loader = createLoader()\n }\n const p = new Promise<GLTF>((resolve, reject) => { \n loader!.load(url, gltf => {\n resolve(gltf)\n }, undefined, reject)\n })\n modelMap.set(url, p)\n return p.then(gltf => { \n gltf.scene = gltf.scene.clone()\n return gltf\n })\n}\n\nexport function disposeLoader() { \n loader = null\n modelMap.clear()\n}", "export const isMac = navigator.userAgent.toUpperCase().indexOf('MAC') >= 0;\n", "import { isMac } from \"./os\";\n\nexport function isControl(key: string) { \n if (isMac) {\n return key === \"Meta\"\n }\n return key === \"Control\"\n}", "type DefaultFn = (...args: any[]) => void;\n\ninterface EventI {\n on(type: string, callback: DefaultFn): void;\n once(type: string, callback: DefaultFn): void;\n off(type: string, callback: DefaultFn): void;\n offAll(): void;\n emit(type: string, ...args: any[]): void;\n}\n\nexport type { EventI }\n\nconst oncePrefix = '__once__'\n\nexport class Events implements EventI {\n events = new Map<string, Set<DefaultFn>>()\n\n on(type: string, callback: DefaultFn) {\n if (typeof callback !== 'function') return undefined\n const events = this.events.get(type)\n if (events) {\n return events.add(callback)\n }\n return this.events.set(type, new Set([callback]))\n }\n\n once(type: string, callback: DefaultFn) {\n if (typeof callback !== 'function') return undefined\n const event = `${oncePrefix}${type}`\n const events = this.events.get(event)\n if (events) {\n return events.add(callback)\n }\n return this.events.set(event, new Set([callback]))\n }\n\n off(type: string, callback: DefaultFn) {\n const events = this.events.get(type)\n const onceEvents = this.events.get(`${oncePrefix}${type}`)\n if (!events && !onceEvents) {\n return\n }\n if (callback === undefined) {\n events?.clear()\n onceEvents?.clear()\n }\n if (events?.has(callback)) {\n events.delete(callback)\n }\n if (onceEvents?.has(callback)) {\n onceEvents.delete(callback)\n }\n }\n\n offAll() {\n this.events.clear()\n }\n\n emit(type: string, ...args: any[]) {\n const events = this.events.get(type)\n const onceEvents = this.events.get(`${oncePrefix}${type}`)\n if (!events && !onceEvents) {\n return\n }\n events?.forEach((fn) => {\n if (typeof fn === 'function') {\n fn(...args)\n }\n })\n onceEvents?.forEach((fn) => {\n if (typeof fn === 'function') {\n fn(...args)\n }\n })\n onceEvents?.clear()\n }\n}\n", "export enum HooksName {\n SWITCH_FLOOR_BEFORE = \"switch_floor_before\",\n SWITCH_FLOOR_AFTER = \"switch_floor_after\",\n}\n", "/**\n * \u751F\u6210\u5BF9\u8C61\u7684key\n * @param obj \n * @returns \n */\nexport function generatorKeyByObj(obj: Record<string, any>) {\n return Object.keys(obj).sort().map(key => `${key}=${obj[key]}`).join(\"&\")\n}", "export function xhrGet<T>(url: string, options: RequestInit & { responseType?: 'json' | 'arraybuffer' }): Promise<T> {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n\n Object.keys(options.headers || {}).forEach((key) => { \n xhr.setRequestHeader(key, (options.headers as any)![key]);\n })\n\n if (options.responseType) {\n xhr.responseType = options.responseType;\n }\n\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n if (options.responseType === 'arraybuffer') {\n resolve(xhr.response);\n } else {\n try {\n const response = JSON.parse(xhr.responseText);\n resolve(response);\n } catch (error) {\n reject(error);\n }\n }\n } else {\n reject(xhr.statusText);\n }\n };\n\n xhr.onerror = () => {\n reject(xhr.statusText);\n };\n\n xhr.send();\n });\n}", "export class UniqueKey {\n keySet = new Set<string>()\n\n static createKey() {\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n }\n\n genUniqueKey() { \n let key = UniqueKey.createKey()\n while (this.keySet.has(key)) {\n key = UniqueKey.createKey()\n }\n return key\n }\n\n removeKey(key: string) {\n this.keySet.delete(key)\n }\n\n dispose() {\n this.keySet.clear()\n }\n}", "import { Vector2 } from \"three\";\n// @ts-ignore\nimport smooth from \"chaikin-smooth\";\nimport { calc_angle, getLength } from \"./coordinate\";\n\nfunction getAngle(vec0: Vector2, vec1: Vector2): number {\n const v0 = vec0.clone().normalize();\n const v1 = vec1.clone().normalize();\n return Math.acos(v0.dot(v1));\n}\n\nfunction averageStepLength(path: [number, number][]): number {\n let sum = 0;\n path.reduce(([x0, y0], [x1, y1]) => {\n sum += Math.sqrt((x1 - x0) ** 2 + (y1 - y0) ** 2);\n return [x1, y1];\n });\n return sum / path.length;\n}\n\nexport function smoothPath(\n path: [number, number][],\n threshold = 0.25\n): [number, number][] {\n if (averageStepLength(path) < threshold) return path;\n const result = smooth(path);\n return smoothPath(result, threshold);\n}\n\n/**\n * \u8DEF\u5F84\u7B80\u5316\n * @param path \u8DEF\u5F84\u70B9\u96C6\u6570\u7EC4\n * @param ignoreFirst \u662F\u5426\u5728\u7B80\u5316\u8FC7\u7A0B\u4E2D\u5FFD\u7565\u7B2C\u4E00\u4E2A\u70B9\n * @param smoothingOptimization \u662F\u5426\u9488\u5BF9\u5E73\u6ED1\u5BF9\u8DEF\u5F84\u8FDB\u884C\u63D2\u503C\n * @param simplifyDistanceThreshold \u7B80\u5316\u65F6\u8DEF\u5F84\u6700\u77ED\u4FDD\u7559\u7684\u8DDD\u79BB, \u9ED8\u8BA4\u4E3A5\n * @param maximumTurningDegree \u7B80\u5316\u65F6\u4E09\u70B9\u5939\u89D2\u8BA4\u5B9A\u4E3A\u8F6C\u5F2F\u7684\u6700\u5927\u89D2\u5EA6\uFF0C\u9ED8\u8BA4\u4E3A150\n * @param smoothingDistance \u5E73\u6ED1\u65F6\u4F7F\u7528\u7684\u8F6C\u89D2\u6700\u5927\u8DDD\u79BB\n */\nexport function simplifyPath(\n path: [number, number][],\n ignoreFirst = false,\n smoothingOptimization = true,\n simplifyDistanceThreshold = 5,\n maximumTurningDegree = 150,\n smoothingDistance = 3\n): [number, number][] {\n const joints = [];\n let firstIgnored = !ignoreFirst;\n joints.push(path[0]);\n if (path.length < 2) return joints;\n for (let i = 0; i < path.length - 2; i += 1) {\n const p0 = path[i];\n const p1 = path[i + 1];\n const p2 = path[i + 2];\n const v0 = new Vector2(p0[0] - p1[0], p0[1] - p1[1]);\n const v1 = new Vector2(p2[0] - p1[0], p2[1] - p1[1]);\n const deg = (getAngle(v0, v1) / Math.PI) * 180;\n const dist = v0.length() + v1.length();\n\n if (\n !firstIgnored ||\n (deg < maximumTurningDegree && dist > 0.01) ||\n dist > simplifyDistanceThreshold\n ) {\n joints.push(path[i + 1]);\n firstIgnored = true;\n }\n }\n joints.push(path[path.length - 1]);\n if (!smoothingOptimization) return joints;\n\n const simplifiedPath = [];\n simplifiedPath.push(joints[0]);\n for (let i = 0; i < joints.length - 2; i += 1) {\n const head = new Vector2(joints[i][0], joints[i][1]);\n const mid = new Vector2(joints[i + 1][0], joints[i + 1][1]);\n const tail = new Vector2(joints[i + 2][0], joints[i + 2][1]);\n\n const halfHeadMidDist = head.distanceTo(mid) / 2;\n const halfMidTailDist = tail.distanceTo(mid) / 2;\n\n const curveHead = mid.clone();\n const curveTail = mid.clone();\n\n curveHead.add(\n head\n .clone()\n .sub(mid)\n .normalize()\n .multiplyScalar(\n halfHeadMidDist > smoothingDistance\n ? smoothingDistance / 2\n : halfHeadMidDist\n )\n );\n curveTail.add(\n tail\n .clone()\n .sub(mid)\n .normalize()\n .multiplyScalar(\n halfMidTailDist > smoothingDistance\n ? smoothingDistance / 2\n : halfMidTailDist\n )\n );\n\n const curveToSmooth: [number, number][] = [\n [curveHead.x, curveHead.y],\n [mid.x, mid.y],\n [curveTail.x, curveTail.y],\n ];\n simplifiedPath.push(...smoothPath(curveToSmooth, smoothingDistance / 25));\n }\n simplifiedPath.push(joints[joints.length - 1]);\n\n return removeWeightPath(simplifiedPath);\n}\n\n/**\n * \u5BF9\u8DEF\u5F84\u70B9\u505A\u53BB\u91CD\n * @param points \u8DEF\u5F84\u70B9\n * @returns\n */\nexport function removeWeightPath(points: [number, number][]) {\n if (points.length <= 1) {\n return points;\n }\n const checkedPath: [number, number][] = [];\n let lastCheckedPoint: [number, number];\n points.forEach(([x, y]) => {\n if (!lastCheckedPoint) {\n lastCheckedPoint = [x, y];\n checkedPath.push([x, y]);\n } else if (!(x === lastCheckedPoint[0] && y === lastCheckedPoint[1])) {\n lastCheckedPoint = [x, y];\n checkedPath.push([x, y]);\n }\n });\n return checkedPath;\n}\n\n/**\n * \u8BA1\u7B97\u70B9\u5728\u8DEF\u7EBF\u7684\u6700\u77ED\u8DDD\u79BB\u548C\u6295\u5F71\u4F4D\u7F6E\n * @param point \u70B9\n * @param start \u8DEF\u7EBF\u8D77\u70B9\n * @param end \u8DEF\u7EBF\u7EC8\u70B9\n * @returns \n */\n export function distancePointToSegment(\n point: [number, number],\n start: [number, number],\n end: [number, number]\n ): { distance: number, closestPoint: [number, number] } {\n const segmentLength = Math.sqrt(\n (end[0] - start[0]) ** 2 + (end[1] - start[1]) ** 2\n );\n\n if (segmentLength === 0) {\n return {\n distance: Math.sqrt((point[0] - start[0]) ** 2 + (point[1] - start[1]) ** 2),\n closestPoint: start.slice(0) as [number, number],\n }\n }\n\n const t = Math.max(\n 0,\n Math.min(\n 1,\n ((point[0] - start[0]) * (end[0] - start[0]) +\n (point[1] - start[1]) * (end[1] - start[1])) /\n segmentLength ** 2\n )\n );\n const closestPoint: [number, number] = [\n start[0] + t * (end[0] - start[0]),\n start[1] + t * (end[1] - start[1]),\n ];\n\n const distance = Math.sqrt(\n (point[0] - closestPoint[0]) ** 2 + (point[1] - closestPoint[1]) ** 2\n );\n\n return { distance, closestPoint };\n}\n\n/**\n * \u8BA1\u7B97\u8DEF\u7EBF\u7684\u8D77\u70B9\u5728\u8DEF\u7EBF\u4E0A\u79FB\u52A8\u4E00\u5B9A\u7684\u8DDD\u79BB\u540E\u7684\u70B9\n * @param startPoint \n * @param endPoint \n * @param distance \n * @returns \n */\nexport function moveOnRoute(startPoint: [number, number], endPoint: [number, number], distance: number): [number, number] {\n const [startX, startY] = startPoint;\n const [endX, endY] = endPoint;\n \n // \u8BA1\u7B97\u8DEF\u7EBF\u603B\u957F\u5EA6\n const routeLength = Math.sqrt(Math.pow(endX - startX, 2) + Math.pow(endY - startY, 2));\n \n // \u8BA1\u7B97\u79FB\u52A8\u6BD4\u4F8B\n const ratio = distance / routeLength;\n \n // \u8BA1\u7B97\u65B0\u5750\u6807\n const newX = startX + (endX - startX) * ratio;\n const newY = startY + (endY - startY) * ratio;\n \n return [newX, newY];\n}\n\nexport enum PathDirection {\n START = \"start\",\n END = \"end\",\n FRONT = \"front\",\n RIGHT = \"right\",\n LEFT = \"left\",\n RIGHT_FRONT = \"right_front\",\n LEFT_FRONT = \"left_front\",\n RIGHT_BACK = \"right_back\",\n LEFT_BACK = \"left_back\",\n}\n\nexport function calc_direction(p0: [number, number], p1: [number, number], p2: [number, number]) {\n const angle = calc_angle(p0, p1, p2);\n\n if (180 - Math.abs(angle) < 15) {\n return PathDirection.FRONT;\n } else if (angle > 135) {\n return PathDirection.RIGHT_FRONT;\n } else if (angle < -135) {\n return PathDirection.LEFT_FRONT;\n } else if (angle <= 135 && angle >= 60) {\n return PathDirection.RIGHT;\n } else if (angle >= -135 && angle <= -60) {\n return PathDirection.LEFT;\n } else if (angle < 60 && angle > 0) {\n return PathDirection.RIGHT_BACK;\n } else if (angle > -60 && angle < 0) {\n return PathDirection.LEFT_BACK;\n }\n return PathDirection.FRONT;\n}\n\n/**\n * \u5165\u53C2 Point[]\n * \u8FD4\u56DE\n * [{\n * direction: PathDirection\n * distance: number\n * points: Point[]\n * }]\n */\nexport function getDirectPath(points: [number, number][]) {\n const arr = [\n {\n direction: PathDirection.START,\n distance: getLength(points[0], points[1]),\n points: [points[0], points[1]],\n },\n ];\n for (let i = 2; i < points.length; i++) {\n const direction = calc_direction(points[i - 2], points[i - 1], points[i]);\n // \u5982\u679C\u662F\u524D\u884C\uFF0C\u8981\u4FEE\u6539\u8DDD\u79BB\u548C\u70B9\u4F4D\n if (direction === PathDirection.FRONT) {\n const last = arr[arr.length - 1];\n const distance = getLength(points[i - 1], points[i]);\n last.distance += distance;\n if (i !== 2) {\n last.points.push(points[i - 1]);\n }\n } else {\n arr.push({\n direction: direction,\n distance: getLength(points[i - 1], points[i]),\n points: [points[i - 1], points[i]],\n });\n }\n }\n arr.push({\n direction: PathDirection.END,\n distance: 0,\n points: [points[points.length - 1]],\n });\n return arr;\n}", "// \u8DEF\u7F51\n// \u6839\u636E\u4F20\u5165\u7684\u6570\u636E\u751F\u6210\u8DEF\u7F51\n// \u6700\u77ED\u8DEF\u7EBF\u8DEF\u7F51\n// \u6276\u68AF\u4F18\u5148\u8DEF\u7F51\n// \u76F4\u68AF\u4F18\u5148\u8DEF\u7F51\n\nimport Graph from \"node-dijkstra\";\nimport { getLength, getPathLength } from \"./coordinate\";\nimport { EquipmentData } from \"../plugins\";\n\nexport interface RoadData {\n floor: string;\n lines: Array<{\n id: string; // \u552F\u4E00\u503C\n to: string; // \u8DEF\u7F51\u70B9ID \u7EBF\u7684\u5176\u4E2D\u4E00\u7AEF\n from: string; // \u8DEF\u7F51\u70B9ID \u7EBF\u7684\u53E6\u4E00\u7AEF\n color: string; // \u7F16\u8F91\u5668\u7528\u5C55\u793A\u8DEF\u7F51\u7528 bmap\u4E0D\u4F7F\u7528\n locked: boolean; // \u7F16\u8F91\u5668\u7528\u5C55\u793A\u8DEF\u7F51\u7528 bmap\u4E0D\u4F7F\u7528\n opacity: number; // \u7F16\u8F91\u5668\u7528\u5C55\u793A\u8DEF\u7F51\u7528 bmap\u4E0D\u4F7F\u7528\n visible: boolean; // \u7F16\u8F91\u5668\u7528\u5C55\u793A\u8DEF\u7F51\u7528 bmap\u4E0D\u4F7F\u7528\n userData: Record<string, string>; // \u81EA\u5B9A\u4E49\u5143\u6570\u636E\n direction: \"double\" | \"single\" | \"no\"; // \u901A\u884C\u65B9\u5411\n }>; // \u8DEF\u7F51\u7EBF\n points: Array<{\n id: string; // \u8DEF\u7F51\u70B9ID\n cds: [number, number];\n name: string; // \u7C7B\u578B\u4E3A/\u76F4\u68AF/\u7535\u68AF/\u6276\u68AF\u65F6\u5019\u7684\u8BBE\u5907\u540D\u79F0 \u76F8\u540C\u540D\u79F0\u7684\u8BBE\u65BD\u624D\u80FD\u8FDE\u901A \u6BD4\u5982\u5728L1\u548CL2\u90FD\u5404\u6709\u4E00\u4E2A\u7535\u68AF\uFF0C\u5F53\u4E24\u4E2A\u7535\u68AF\u540D\u79F0\u4E00\u81F4\u7684\u65F6\u5019\uFF0C\u8FD9\u4E2A\u7535\u68AF\u5C31\u662F\u53EF\u4EE5\u5728L1\u548CL2\u4E4B\u95F4\u7684\u901A\u884C\u7684\n type:\n | \"normal\"\n | \"graph\"\n | \"straightLadder\"\n | \"staircase\"\n | \"escalator\"\n | \"facility\"; // \u666E\u901A\u70B9/\u5438\u9644\u56FE\u5143\u70B9/\u76F4\u68AF\u70B9/\u697C\u68AF/\u6276\u68AF/\u8BBE\u5907\u8BBE\u65BD\n floor: string; // \u8DEF\u7F51\u70B9\u865A\u62DF\u697C\u5C42\n locked: boolean; // \u7F16\u8F91\u5668\u7528\u5C55\u793A\u8DEF\u7F51\u7528 bmap\u4E0D\u4F7F\u7528\n nodeId: string; // \u8DEF\u7F51\u70B9\u5438\u9644\u7684\u5757\u513FID\n visible: boolean; // \u7F16\u8F91\u5668\u7528\u5C55\u793A\u8DEF\u7F51\u7528 bmap\u4E0D\u4F7F\u7528\n targetId: string; // \u5438\u9644\u5BF9\u8C61\u7684ID\uFF0C\u5982\u679C\u5438\u9644\u7684\u662F\u8BBE\u65BD\u5C31\u662F\u8BBE\u65BDID\uFF0C\n userData: Record<string, string>; // \u81EA\u5B9A\u4E49\u5143\u6570\u636E\n escalatorType: \"\" | \"single\" | \"double\" | \"jd\"; // \u6276\u68AF\u7C7B\u578B \u5355\u68AF \u53CC\u68AF \u526A\u5200\u68AF\n escalatorDirection: \"\" | \"up\" | \"down\" | \"exit\"; // \u6276\u68AF\u65B9\u5411 \u4E0A\u884C \u4E0B\u884C \u51FA\u53E3\n }>;\n}\n\nexport interface Start {\n floor: string;\n nodeId?: string;\n coord?: [number, number];\n}\n\ntype FacilityEnd = {\n floor?: string; // \u8BBE\u65BD\u6240\u5728\u697C\u5C42\n facility?: string; // \u8BBE\u65BDid \u6709\u8BBE\u65BD\u8981\u6839\u636E\u8D77\u70B9\u627E\u6700\u8FD1\u7684\u8BBE\u65BD\n};\nexport type End = Start & FacilityEnd;\n\nexport type RouteType = \"\" | \"escalator\" | \"straightLadder\"\n\nexport type PathData = {\n floor: string;\n points: [number, number][];\n endType: string;\n destId: string;\n}[];\n\nexport class RoadNetwork {\n roadInfo: RoadData[] = [];\n\n // \u8DEF\u7F51\u70B9 key\u662F${floor}-${point.id}\n pointMap = new Map<string, RoadData[\"points\"][0]>();\n // ${floor}-${nodeId} -> ${floor}-${point.id}\n nodeMap = new Map<string, string>();\n\n // ${targetId} -> RoadData[\"points\"]\n facilityMap = new Map<string, RoadData[\"points\"]>();\n\n // \u76F4\u68AF\n straightLadderMap = new Map<string, RoadData[\"points\"]>();\n // \u6276\u68AF\n escalatorMap = new Map<\n string,\n { start: RoadData[\"points\"][0]; end: RoadData[\"points\"][0] }\n >();\n // \u6B65\u884C\u68AF\n staircaseMap = new Map<string, RoadData[\"points\"]>();\n\n // \u8DEF\u7F51\u7EBF\n lineMap = new Map<string, Map<string, number>>();\n\n // \u6700\u77ED\u8DEF\u7EBF\u8DEF\u7F51\u7B97\u6CD5\n baseRoute = new Graph();\n\n // \u6276\u68AF\u4F18\u5148\u8DEF\u7F51\n escalatorRoute = new Graph();\n\n // \u76F4\u68AF\u4F18\u5148\u8DEF\u7F51\n straightLadderRoute = new Graph();\n\n constructor(\n private lift_priority = 3\n ) {}\n\n initRoute(roadInfo: RoadData[]) {\n this.clear();\n this.roadInfo = roadInfo;\n if (roadInfo.length) {\n roadInfo.forEach((floorRoadInfo) => {\n floorRoadInfo.points.forEach((point) => {\n const pointKey = `${floorRoadInfo.floor}-${point.id}`;\n this.pointMap.set(pointKey, point);\n this.nodeMap.set(`${point.floor}-${point.nodeId}`, pointKey);\n // \u76F4\u68AF\n if (point.type === \"straightLadder\") {\n const arr = this.straightLadderMap.get(point.name) || [];\n arr.push({ ...point });\n this.straightLadderMap.set(point.name, arr);\n }\n // \u6B65\u884C\u68AF\n if (point.type === \"staircase\") {\n const arr = this.staircaseMap.get(point.name) || [];\n arr.push({ ...point });\n this.staircaseMap.set(point.name, arr);\n }\n // \u6276\u68AF\n if (point.type === \"escalator\") {\n const obj = this.escalatorMap.get(point.name) || ({} as any);\n if (point.escalatorDirection === \"exit\") {\n // \u6276\u68AF\u51FA\u53E3\n obj.end = { floor: point.floor, id: point.id };\n } else {\n obj.start = { floor: point.floor, id: point.id };\n }\n this.escalatorMap.set(point.name, obj);\n }\n // \u8BBE\u5907\u8BBE\u65BD\n if (point.type === \"facility\") {\n const arr = this.facilityMap.get(point.targetId) || [];\n arr.push({ ...point });\n this.facilityMap.set(point.targetId, arr);\n }\n });\n floorRoadInfo.lines\n .filter((item) => item.direction !== \"no\")\n .forEach((item) => {\n const fromKey = `${floorRoadInfo.floor}-${item.from}`;\n const toKey = `${floorRoadInfo.floor}-${item.to}`;\n const fromCds = this.pointMap.get(fromKey)?.cds;\n const toCds = this.pointMap.get(toKey)?.cds;\n if (fromCds?.length && toCds?.length) {\n const distance = getLength(fromCds, toCds);\n this.addLineItem(fromKey, toKey, distance);\n if (item.direction === \"double\") {\n this.addLineItem(toKey, fromKey, distance);\n }\n }\n });\n });\n this.initBaseRoute();\n this.initEscalatorRoute();\n this.initStraightLadderRoute();\n }\n }\n\n addLineItem(\n start: string,\n end: string,\n distance: number,\n lineMap = this.lineMap\n ) {\n const map = lineMap.get(start) || new Map();\n map.set(end, distance);\n lineMap.set(start, map);\n }\n\n /**\n * \u628A\u8BBE\u65BD\u6DFB\u52A0\u7684\u8DEF\u7F51\u56FE\u4E2D\n * @param escalatorPriority \u6276\u68AF\u6743\u91CD\n * @param straightLadderPriority \u76F4\u68AF\u6743\u91CD\n * @param staircasePriority \u6B65\u884C\u68AF\u6743\u91CD\n * @param lineMap \u8DEF\u7F51\n */\n addFacilityToLineMap(\n escalatorPriority: number,\n straightLadderPriority: number,\n staircasePriority: number,\n lineMap: Map<string, Map<string, number>>\n ) {\n // \u8BBE\u7F6E\u7535\u68AF / \u6B65\u884C\u68AF\n [...this.straightLadderMap, ...this.staircaseMap].forEach(([_, value]) => {\n if (value.length < 2) {\n return;\n }\n for (let i = 0; i < value.length; i++) {\n const fromKey = `${value[i].floor}-${value[i].id}`;\n for (let j = 0; j < value.length; j++) {\n if (i !== j) {\n const toKey = `${value[j].floor}-${value[j].id}`;\n const fromCds = this.pointMap.get(fromKey)?.cds;\n const toCds = this.pointMap.get(toKey)?.cds;\n if (fromCds?.length && toCds?.length) {\n if (value[i].type === \"straightLadder\") {\n // \u7535\u68AF\n const distance = straightLadderPriority;\n this.addLineItem(fromKey, toKey, distance, lineMap);\n } else {\n // \u6B65\u884C\u68AF\n const distance = staircasePriority;\n this.addLineItem(fromKey, toKey, distance, lineMap);\n }\n }\n }\n }\n }\n });\n // \u6276\u68AF\n this.escalatorMap.forEach((value, _) => {\n if (value.start && value.end) {\n const fromKey = `${value.start.floor}-${value.start.id}`;\n const toKey = `${value.end.floor}-${value.end.id}`;\n const fromCds = this.pointMap.get(fromKey)?.cds;\n const toCds = this.pointMap.get(toKey)?.cds;\n if (fromCds?.length && toCds?.length) {\n // \u6276\u68AF\u7684\u4F18\u5148\u7EA7\n const distance = escalatorPriority;\n this.addLineItem(fromKey, toKey, distance, lineMap);\n }\n }\n });\n }\n\n // \u6700\u77ED\u8DEF\u5F84\n initBaseRoute() {\n // \u6700\u77ED\u8DEF\u5F84 \u8981\u628A\u901A\u884C\u8BBE\u65BD\u7684\u6743\u91CD\u653E\u5230\u5F88\u4F4E\n const lineMap = new Map([...this.lineMap]);\n this.addFacilityToLineMap(1, this.lift_priority, 30000, lineMap);\n this.baseRoute = new Graph(lineMap);\n }\n\n // \u6276\u68AF\u4F18\u5148\n initEscalatorRoute() {\n // \u6276\u68AF\u4F18\u5148 \u8981\u628A\u901A\u884C\u8BBE\u65BD\u7684\u6743\u91CD\u653E\u5230\u5F88\u9AD8\uFF0C\u53EF\u4EE5\u5FFD\u7565\u8DEF\u7EBF\u7684\u6743\u91CD\n const lineMap = new Map([...this.lineMap]);\n const step = 10000;\n this.addFacilityToLineMap(\n 1 * step,\n this.lift_priority * step,\n 30000 * step,\n lineMap\n );\n this.escalatorRoute = new Graph(lineMap);\n }\n\n // \u76F4\u68AF\u4F18\u5148\n initStraightLadderRoute() {\n // \u76F4\u68AF\u4F18\u5148 \u8981\u628A\u901A\u884C\u8BBE\u65BD\u7684\u6743\u91CD\u653E\u5230\u5F88\u9AD8\uFF0C\u53EF\u4EE5\u5FFD\u7565\u8DEF\u7EBF\u7684\u6743\u91CD\n const lineMap = new Map([...this.lineMap]);\n const step = 10000;\n this.addFacilityToLineMap(3 * step, 1 * step, 30000 * step, lineMap);\n this.straightLadderRoute = new Graph(lineMap);\n }\n\n checkStart(start: Start) {\n if (!start.floor) {\n return false;\n }\n if (!start.nodeId && (!start.coord || start.coord.length < 2)) {\n return false;\n }\n return true;\n }\n\n checkEnd(end: End) {\n if (end.facility) { return true }\n return this.checkStart(end)\n }\n\n transformStart(start: Start): { floor: string; id: string } | null {\n if (start.nodeId) {\n const pointKey = this.nodeMap.get(`${start.floor}-${start.nodeId}`);\n if (pointKey) {\n const [floor, id] = pointKey.split(\"-\");\n return {\n floor,\n id,\n };\n }\n }\n if (start.coord?.length) {\n // \u5438\u9644\u5230\u6700\u8FD1\u7684\u70B9\n const floorRoadInfo = this.roadInfo.find(\n (item) => item.floor === start.floor\n );\n if (!floorRoadInfo) {\n return null;\n }\n const point = floorRoadInfo.points.reduce(\n (obj, cur) => {\n const distance = getLength(start.coord!, cur.cds);\n if (distance < obj.min) {\n obj.min = distance;\n obj.point = cur;\n }\n return obj;\n },\n { min: Infinity, point: floorRoadInfo.points[0] }\n );\n return {\n floor: point.point.floor,\n id: point.point.id,\n };\n }\n return null;\n }\n\n transformEnd(\n end: End\n ): { floor: string; id: string } | { facility: string } | null {\n if (end.floor) {\n const data = this.transformStart(end);\n if (data) {\n return data;\n }\n }\n if (end.facility) {\n const facilityPoints = this.facilityMap.get(end.facility);\n if (facilityPoints?.length) {\n return {\n floor: end.floor,\n facility: end.facility,\n };\n }\n }\n return null;\n }\n\n /**\n *\n * @param start \u8D77\u70B9\n * @param end \u7EC8\u70B9\n * @param type '' \u6700\u77ED\u8DEF\u5F84 escalator \u6276\u68AF\u4F18\u5148 straightLadder \u76F4\u68AF\u4F18\u5148\n * @returns\n */\n getPath(start: Start, end: End, type: RouteType = \"\") {\n if (!this.checkStart(start)) {\n return \"start-error\";\n }\n if (!this.checkEnd(end)) {\n return \"end-error\";\n }\n const transformedStart = this.transformStart(start);\n if (!transformedStart) {\n return \"no-start\";\n }\n const transformedEnd = this.transformEnd(end);\n if (!transformedEnd) {\n return \"no-end\";\n }\n let getPathFn = this.getBasePath.bind(this);\n switch (type) {\n case \"escalator\":\n getPathFn = this.getEscalatorPath.bind(this);\n case \"straightLadder\":\n getPathFn = this.getStraightLadderPath.bind(this);\n default:\n getPathFn = this.getBasePath.bind(this);\n }\n if ((transformedEnd as any).id) {\n // \u6709\u660E\u786E\u7684\u76EE\u7684\u5730\u4E86 \u76F4\u63A5\u89C4\u5212\u8DEF\u7EBF\n return getPathFn(\n transformedStart,\n transformedEnd as { floor: string; id: string }\n );\n } else if ((transformedEnd as any).facility) {\n // \u5BFB\u627E\u6700\u8FD1\u7684\u8BBE\u65BD \u5982\u679C\u4F20\u5165\u4E86\u76EE\u7684\u5730\u697C\u5C42\uFF0C\u53EA\u627E\u5BF9\u5E94\u697C\u5C42\u7684\u8BBE\u65BD\n const facilityPoints = this.facilityMap\n .get((transformedEnd as any).facility)!\n .filter((item) => {\n if ((transformedEnd as any).floor) {\n return item.floor === (transformedEnd as any).floor;\n } else {\n return true;\n }\n });\n if (!facilityPoints.length) {\n return null;\n }\n const paths: PathData[] = facilityPoints\n .map((item) =>\n getPathFn(transformedStart, { floor: item.floor, id: item.id })\n )\n .filter((item) => !!item) as PathData[];\n // \u5BFB\u627E\u6700\u8FD1\u7684\u8DEF\u7EBF\n return paths.reduce(\n (obj, cur) => {\n const distance = cur.reduce((sum, cur) => sum + getPathLength(cur.points), 0)\n if (distance < obj.distance) {\n obj.distance = distance;\n obj.path = cur;\n }\n return obj;\n },\n { distance: Infinity, path: paths[0] }\n ).path;\n }\n }\n\n // \u4ECE\u8DEF\u7F51\u4E2D\u89C4\u5212\u8DEF\u7EBF\n private getRoutePath(\n start: { floor: string; id: string },\n end: { floor: string; id: string },\n route: Graph\n ) {\n const startPointId = `${start.floor}-${start.id}`;\n const endPointId = `${end.floor}-${end.id}`;\n const paths = route.path(startPointId, endPointId) as string[] | null;\n if (!paths) {\n return null;\n }\n const arr: PathData = [];\n paths.map((item) => {\n const point = this.pointMap.get(item);\n if (point) {\n const { floor } = point;\n if (arr[arr.length - 1]?.floor === floor) {\n const pathData = arr[arr.length - 1];\n pathData.points.push(point.cds);\n // type: normal | graph | escalator(\u6276\u68AF) | straightLadder(\u76F4\u68AF) | staircase(\u697C\u68AF) | facility(\u8BBE\u5907)\n pathData.endType = point.type;\n pathData.destId = point.nodeId;\n } else {\n arr.push({\n floor,\n points: [point.cds],\n endType: point.type,\n destId: point.nodeId,\n });\n }\n }\n });\n return arr;\n }\n\n // \u89C4\u5212\u6700\u77ED\u8DEF\u7EBF\n private getBasePath(\n start: { floor: string; id: string },\n end: { floor: string; id: string }\n ) {\n return this.getRoutePath(start, end, this.baseRoute);\n }\n\n // \u89C4\u5212\u6276\u68AF\u4F18\u5148\u8DEF\u7EBF\n private getEscalatorPath(\n start: { floor: string; id: string },\n end: { floor: string; id: string }\n ) {\n return this.getRoutePath(start, end, this.escalatorRoute);\n }\n\n // \u89C4\u5212\u76F4\u68AF\u4F18\u5148\u8DEF\u7EBF\n private getStraightLadderPath(\n start: { floor: string; id: string },\n end: { floor: string; id: string }\n ) {\n return this.getRoutePath(start, end, this.straightLadderRoute);\n }\n\n clear() {\n this.roadInfo = [];\n // \u8DEF\u7F51\u70B9 key\u662F${floor}-${point.id}\n this.pointMap.clear()\n // ${floor}-${nodeId} -> ${floor}-${point.id}\n this.nodeMap.clear()\n // ${targetId} -> RoadData[\"points\"]\n this.facilityMap.clear()\n // \u76F4\u68AF\n this.straightLadderMap.clear()\n // \u6276\u68AF\n this.escalatorMap.clear()\n // \u6B65\u884C\u68AF\n this.staircaseMap.clear()\n // \u8DEF\u7F51\u7EBF\n this.lineMap.clear()\n // \u6700\u77ED\u8DEF\u7EBF\u8DEF\u7F51\u7B97\u6CD5\n this.baseRoute = new Graph();\n // \u6276\u68AF\u4F18\u5148\u8DEF\u7F51\n this.escalatorRoute = new Graph();\n // \u76F4\u68AF\u4F18\u5148\u8DEF\u7F51\n this.straightLadderRoute = new Graph();\n }\n}\n", "/**\n * \u9A7C\u5CF0\u8F6C\u4E0B\u5212\u7EBF\n * @param str \n * @returns \n */\nexport function convertToSnakeCase(str: string) {\n return str.replace(/[A-Z]/g, (match) => '_' + match.toLowerCase()).replace(/^_/, '');\n}", "import { convertToSnakeCase } from \"./string\";\nimport { UniqueKey } from \"./unique-key\";\n\nconst uniqueKey = new UniqueKey();\n\n/**\n * \u8C03\u7528webworker\u7684\u65B9\u6CD5\n * @param type \n * @param data \n * @returns Promise<any>\n */\nexport function triggerWorker<T = any, R = any>(worker: Worker, type: string, data: T): Promise<R> { \n return new Promise((resolve, reject) => { \n const key = uniqueKey.genUniqueKey();\n const onMessage = ({ data }: MessageEvent) => { \n if (data.type === `${type}_result` && data.key === key) {\n uniqueKey.removeKey(key)\n self.removeEventListener(\"message\", onMessage)\n if (data.error) {\n reject(data.error)\n } else {\n resolve(data.data)\n }\n }\n }\n\n worker.addEventListener(\"message\", onMessage)\n worker.postMessage({ type, key, data })\n })\n}\n\nexport function toWebWorker(obj: Record<string, (...args: any[]) => any>) {\n const events: any = {};\n for (const key in obj) {\n if (key.startsWith(\"on\")) {\n events[convertToSnakeCase(key.slice(2))] = obj[key];\n }\n }\n const onMessage = async ({ data }: MessageEvent) => { \n if (events[data.type]) {\n try {\n const result = await events[data.type](data.data);\n self.postMessage({ type: `${data.type}_result`, key: data.key, data: result })\n } catch (e) {\n self.postMessage({ type: `${data.type}_result`, key: data.key, error: e }) \n }\n } else {\n self.postMessage({ type: `${data.type}_result`, key: data.key, error: \"no_event\" })\n }\n }\n self.addEventListener(\"message\", onMessage)\n\n return () => {\n self.removeEventListener(\"message\", onMessage)\n }\n}", "import { MapControls } from \"three/examples/jsm/controls/MapControls\";\nimport {\n Timer,\n initCamera,\n initRenderer,\n initScene,\n initLight,\n initControl,\n dispose,\n vector3ToDevice,\n timeoutPromise,\n} from \"./utils\";\nimport {\n EventDispatcher,\n OrthographicCamera,\n Light,\n Box2,\n Vector3,\n Vector2,\n Raycaster,\n Object3D,\n Box3,\n Color,\n AmbientLight,\n} from \"three\";\nimport { Graphic, Poi, Floor } from \"./elements\";\nimport { Group as TweenGroup, Tween } from \"@tweenjs/tween.js\";\nimport { Config } from \"./config\";\nimport { Selection } from \"./operations/selection/selection\";\nimport { HoverHelper } from \"./operations\";\nimport { MaterialFactory } from \"./factory\";\nimport { CameraBound } from \"./utils/camera-bound\";\nimport { TextureFactory } from \"./factory/texture\";\n\nexport interface ContextEventMap {\n update: {};\n \"graphic-click\": {\n graphics: Graphic[];\n position: Vector3 | null\n };\n \"poi-click\": {\n pois: Poi[];\n };\n 'pointer-level': {};\n 'pointer-over': {\n e: PointerEvent;\n graphics: Graphic[];\n pois: Poi[];\n position: Vector3 | null;\n };\n 'pointer-move': {\n e: PointerEvent;\n graphics: Graphic[];\n pois: Poi[];\n position: Vector3 | null;\n },\n 'change-ratio': {\n px: number;\n },\n \"select-graphic\": {\n graphics: Graphic[],\n isMultipleSelect: boolean,\n },\n \"hover\": {\n graphics: Graphic[];\n },\n \"control-change\": {},\n \"resize\": {\n width: number;\n height: number;\n }\n}\n\nexport class Context extends EventDispatcher<ContextEventMap> {\n scene = initScene();\n\n renderer = initRenderer();\n\n camera!: OrthographicCamera;\n\n control!: MapControls;\n\n lights = initLight();\n\n // \u7BA1\u7406\u4EFB\u52A1\uFF0C\u9632\u6B62\u5185\u5B58\u6CC4\u6F0F\n timer = new Timer();\n \n tweenGroup = new TweenGroup();\n \n currentFloor?: Floor;\n\n selection: Selection;\n\n hoverHelper: HoverHelper;\n \n private basicRatio?: number; // zoom=1\u7684\u65F6\u5019\uFF0C100M\u5BF9\u5E94\u7684\u50CF\u7D20\u4E2A\u6570\n\n public materialFactory!: MaterialFactory;\n\n public textureFactory!: TextureFactory;\n\n cameraBound!: CameraBound;\n\n clientSize = {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n }\n\n renderRf: number = 0\n\n constructor(public container: HTMLElement, public config: Config) {\n super();\n this.container.style.position = \"relative\";\n this.container.style.overflow = \"hidden\";\n this.init();\n this.selection = new Selection(this);\n this.hoverHelper = new HoverHelper(this);\n this.materialFactory = new MaterialFactory(this);\n this.textureFactory = new TextureFactory(this);\n this.resizeClientSize()\n this.registryEvent();\n }\n\n resizeClientSize() { \n const { x, y, width, height } = this.container.getBoundingClientRect()\n this.clientSize = {\n width: width || this.container.clientWidth,\n height: height || this.container.clientHeight,\n x,\n y\n }\n }\n\n init() {\n const { clientWidth: w, clientHeight: h } = this.container;\n this.camera = initCamera(w, h);\n this.renderer.setSize(w, h);\n this.control = initControl(this.camera, this.renderer.domElement);\n this.control.maxPolarAngle = this.config.control.maxPolar;\n this.container.appendChild(this.renderer.domElement);\n this.scene.add(this.lights);\n this.basicRatio = this.getRatio()\n // \u65CB\u8F6C\u89C6\u89D2\u7684\u65F6\u5019\uFF0C\u9690\u85CF\u548C\u663E\u793A\u9634\u5F71\n this.control.addEventListener(\"change\", () => {\n const polarAngle = this.control.getPolarAngle();\n this.currentFloor?.setShadowOpacity(polarAngle / this.config.control.maxPolar)\n this.dispatchEvent({ type: 'change-ratio', px: (this.basicRatio || 0) * this.camera.zoom })\n this.dispatchEvent({ type: 'control-change' })\n });\n this.cameraBound = new CameraBound(this);\n }\n\n /**\n * \u83B7\u53D6\u4E24\u4E2A\u70B9\u4E4B\u95F4\u7684\u50CF\u7D20\u6570\n */\n getRatio(point1 = new Vector3(0, 0, 0), point2 = new Vector3(100, 0, 0)) {\n const { clientWidth, clientHeight } = this.container\n const device1 = vector3ToDevice(point1, this.camera, clientWidth, clientHeight)\n const device2 = vector3ToDevice(point2, this.camera, clientWidth, clientHeight)\n return Math.ceil(Math.sqrt((device2.x - device1.x) ** 2 + (device2.y - device1.y) ** 2))\n }\n\n changeAmbientLightColor(color: string | number) {\n this.lights.children.forEach((item) => {\n if (item instanceof AmbientLight) {\n item.color = new Color(color);\n }\n });\n }\n\n switchFloor(floor: Floor) {\n if (this.currentFloor) {\n this.scene.remove(this.currentFloor)\n this.currentFloor.dispose()\n }\n this.currentFloor = floor\n this.scene.add(floor)\n // \u4FEE\u6539\u706F\u5149\u7684\u4F4D\u7F6E\n const position = floor.getCenter()\n if (position) {\n this.lights.position.x = position.x\n this.lights.position.y = position.y\n }\n }\n\n onWindowResize = () => {\n const { container, camera, renderer } = this;\n let { clientWidth: w, clientHeight: h } = container;\n w = Math.max(1, w);\n h = Math.max(1, h);\n camera.left = -w / 2;\n camera.right = w / 2;\n camera.top = h / 2;\n camera.bottom = -h / 2;\n camera.updateProjectionMatrix();\n renderer.setSize(w, h);\n this.resizeClientSize()\n this.dispatchEvent({ type:'resize', width: w, height: h })\n };\n\n onClick = (e: MouseEvent) => {\n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY);\n if (graphics.length) {\n this.dispatchEvent({\n type: \"graphic-click\",\n graphics: graphics,\n position\n });\n }\n const pois = this.getPoisByDeviceXy(e.offsetX, e.offsetY);\n if (pois.length) {\n this.dispatchEvent({ type: \"poi-click\", pois: pois as Poi[] });\n }\n };\n\n /**\n * \u83B7\u53D6\u5C4F\u5E55\u5750\u6807\u5BF9\u5E94\u7684graphic\n * @param x\n * @param y\n * @returns\n */\n getGraphicsByDeviceXy(x: number, y: number): { graphics: Graphic[], position: Vector3 | null } {\n const point = new Vector2();\n point.x = (x / this.clientSize.width) * 2 - 1;\n point.y = (y / this.clientSize.height) * -2 + 1;\n const raycaster = new Raycaster();\n raycaster.setFromCamera(point, this.camera);\n // fix: \u90E8\u5206\u56FE\u5143\u5728\u9F20\u6807\u60AC\u505C\u7684\u65F6\u5019\uFF0C\u6CA1\u6709\u88AB\u9009\u4E2D\n raycaster.ray.origin.sub(raycaster.ray.direction.clone().multiplyScalar(100))\n const res = this.currentFloor?.graphicLayer.getGraphicByRaycaster(raycaster)\n return res || { graphics: [], position: null }\n }\n\n /**\n * \u83B7\u53D6\u5C4F\u5E55\u5750\u6807\u5BF9\u5E94\u7684poi\n * @param x\n * @param y\n * @returns\n */\n getPoisByDeviceXy(x: number, y: number) {\n const pois = this.currentFloor?.poiLayer.getPoiByDeviceXy(x, y)\n return pois || [];\n }\n\n onPointerover = (e: PointerEvent) => { \n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY);\n const pois = this.getPoisByDeviceXy(e.offsetX, e.offsetY) as Poi[];\n this.dispatchEvent({ type: 'pointer-over', e, graphics, pois, position })\n }\n\n onPointermove = (e: PointerEvent) => { \n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY)\n const pois = this.getPoisByDeviceXy(e.offsetX, e.offsetY) as Poi[];\n this.dispatchEvent({ type: 'pointer-move', e, graphics, pois, position })\n }\n\n onPointerleave = (e: PointerEvent) => { \n this.dispatchEvent({ type: \"pointer-level\" })\n }\n\n onSelectionSelect = ({ graphics, isMultipleSelect }: {graphics: Graphic[], isMultipleSelect: boolean}) => { \n this.dispatchEvent({ type: \"select-graphic\", graphics, isMultipleSelect })\n }\n\n onHoverChange = ({ graphics }: { graphics: Graphic[] }) => { \n this.dispatchEvent({ type: \"hover\", graphics })\n }\n\n registryEvent() {\n window.addEventListener(\"resize\", this.onWindowResize);\n this.container.addEventListener(\"click\", this.onClick);\n this.container.addEventListener(\"pointerover\", this.onPointerover)\n this.container.addEventListener(\"pointermove\", this.onPointermove)\n this.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.container.addEventListener(\"pointercancel\", this.onPointerleave)\n this.container.addEventListener(\"pointerout\", this.onPointerleave)\n this.selection.addEventListener(\"select\", this.onSelectionSelect)\n this.hoverHelper.addEventListener(\"hover-change\", this.onHoverChange)\n }\n\n unRegistryEvent() {\n window.removeEventListener(\"resize\", this.onWindowResize);\n this.container.removeEventListener(\"click\", this.onClick);\n this.container.removeEventListener(\"pointerover\", this.onPointerover)\n this.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.container.removeEventListener(\"pointercancel\", this.onPointerleave)\n this.container.removeEventListener(\"pointerout\", this.onPointerleave)\n this.selection.removeEventListener(\"select\", this.onSelectionSelect)\n this.hoverHelper.removeEventListener(\"hover-change\", this.onHoverChange)\n }\n\n /**\n * \u8BBE\u7F6E\u7EB5\u5411\u65CB\u8F6C\u89D2\u5EA6\n * @param polar \u5F27\u5EA6\n */\n public setPolarAngle(polar: number, duration = 500) {\n if (duration === 0) {\n this.control.maxPolarAngle = polar;\n this.control.minPolarAngle = polar;\n this.control.update();\n this.control.maxPolarAngle = this.config.control.maxPolar;\n this.control.minPolarAngle = 0;\n return Promise.resolve();\n }\n return timeoutPromise(\n new Promise((resolve) => {\n const start = { polar: this.control.getPolarAngle() };\n const end = { polar };\n const tween = new Tween(start, this.tweenGroup)\n .to(end, duration)\n .onUpdate(() => {\n this.control.maxPolarAngle = start.polar;\n this.control.minPolarAngle = start.polar;\n this.control.update();\n })\n .onComplete(() => {\n this.control.enabled = true;\n this.control.maxPolarAngle = this.config.control.maxPolar;\n this.control.minPolarAngle = 0;\n this.tweenGroup.remove(tween);\n resolve(true);\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n /**\n * \u8BBE\u7F6E\u6A2A\u5411\u65CB\u8F6C\u89D2\u5EA6\n * @param azimuthal \u5F27\u5EA6\n */\n public setAzimuthalAngle(azimuthal: number, duration = 500) {\n const { maxAzimuthAngle, minAzimuthAngle } = this.control\n const disable = maxAzimuthAngle === minAzimuthAngle\n if (!disable) {\n if (azimuthal > maxAzimuthAngle && azimuthal < minAzimuthAngle) { return }\n }\n if (duration === 0) {\n this.control.maxAzimuthAngle = azimuthal;\n this.control.minAzimuthAngle = azimuthal;\n this.control.update();\n if (!disable) {\n this.control.maxAzimuthAngle = maxAzimuthAngle;\n this.control.minAzimuthAngle = minAzimuthAngle;\n }\n return\n }\n return timeoutPromise(\n new Promise((resolve) => {\n const start = { azimuthal: this.control.getAzimuthalAngle() };\n const end = { azimuthal };\n const tween = new Tween(start, this.tweenGroup)\n .to(end, duration)\n .onUpdate(() => {\n this.control.maxAzimuthAngle = start.azimuthal;\n this.control.minAzimuthAngle = start.azimuthal;\n this.control.update();\n })\n .onComplete(() => {\n this.control.enabled = true;\n if (!disable) {\n this.control.maxAzimuthAngle = maxAzimuthAngle;\n this.control.minAzimuthAngle = minAzimuthAngle;\n }\n this.tweenGroup.remove(tween);\n resolve(true);\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n getCameraLookAt() {\n return new Vector3().subVectors(this.control.target, this.camera.position);\n }\n\n /**\n * \u6309\u7167\u4E00\u4E2A\u4E2D\u5FC3\u70B9\u8BBE\u7F6E\u76F8\u673A\u7684\u653E\u5927\u7F29\u5C0F\n * @param zoom\n * @param center\n * @returns\n */\n public setZoom(zoom: number, center: Vector3, duration = 500) {\n const lookAtVector = this.getCameraLookAt();\n const start = {\n zoom: this.camera.zoom,\n target: this.control.target.clone(),\n };\n if (!duration) { \n this.camera.position.copy(center.clone().sub(lookAtVector));\n this.control.target.copy(center);\n this.camera.zoom = zoom;\n this.control.update()\n return\n }\n return timeoutPromise(\n new Promise((resolve) => {\n const tween = new Tween(start, this.tweenGroup)\n .to(\n {\n zoom,\n target: center,\n },\n duration\n )\n .onUpdate(() => {\n this.camera.position.copy(start.target.clone().sub(lookAtVector));\n this.control.target.copy(start.target);\n this.camera.zoom = start.zoom;\n this.control.update();\n })\n .onComplete(() => {\n this.tweenGroup.remove(tween);\n this.control.enabled = true;\n resolve(true)\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n getFitCameraToObjectZoom(\n object: Object3D,\n padding: [number, number, number, number] = [20, 20, 20, 20],\n duration = 500,\n force2DView = true, // \u5F3A\u5236\u8BA1\u7B972d\u89C6\u89D2\u7684\u5927\u5C0F\n ) { \n const [top, right, bottom, left] = padding;\n const { clientSize: { width, height } } = this;\n const polar = this.control.getPolarAngle()\n if (force2DView) {\n // \u83B7\u53D6\u57282D\u89C6\u56FE\u4E0B\u7684\u5927\u5C0F\n this.setPolarAngle(0, 0)\n }\n // \u83B7\u53D6\u7269\u4F53\u7684\u4E09\u7EF4\u76D2\u5B50\u5750\u6807\n const boundingBox = new Box3().setFromObject(object);\n this.setPolarAngle(polar, 0)\n const { max, min } = boundingBox;\n // \u9700\u8981\u83B7\u53D6\u5230box\u76844\u4E2A\u70B9\u7684\u5750\u6807\n const leftTop = new Vector3(min.x, max.y, max.z);\n const rightTop = new Vector3(max.x, max.y, max.z);\n const rightBottom = new Vector3(max.x, min.y, min.z);\n const leftBottom = new Vector3(min.x, min.y, min.z);\n // \u5750\u6807\u8F6C\u6210\u5C4F\u5E55\u5750\u6807\u5E76\u8BA1\u7B97\u51FA\u5360\u7528\u5C4F\u5E55\u5750\u6807\u7684\u5927\u5C0F\n const leftTop2d = vector3ToDevice(leftTop, this.camera, width, height);\n const rightTop2d = vector3ToDevice(rightTop, this.camera, width, height);\n const leftBottom2d = vector3ToDevice(leftBottom, this.camera, width, height);\n const rightBottom2d = vector3ToDevice(rightBottom, this.camera, width, height);\n const boundingBox2d = new Box2().setFromPoints([\n new Vector2(leftTop2d.x, leftTop2d.y),\n new Vector2(rightTop2d.x, rightTop2d.y),\n new Vector2(leftBottom2d.x, leftBottom2d.y),\n new Vector2(rightBottom2d.x, rightBottom2d.y),\n ]);\n const size = boundingBox2d.getSize(new Vector2());\n\n // \u8BA1\u7B97\u5728\u5C4F\u5E55\u4E0Ax,y\u65B9\u5411\u4E0A\u9700\u8981\u8C03\u6574\u7684\u500D\u6570\n const xScale = (width - right - left) / size.x;\n const yScale = (height - top - bottom) / size.y;\n const scale = Math.min(xScale, yScale);\n const center = new Vector3((max.x + min.x) / 2, (max.y + min.y) / 2, (max.z + min.z) / 2);\n return { zoom: scale * this.camera.zoom, center };\n }\n\n /**\n * \u653E\u5927\u76F8\u673A\u5230\u7269\u4F53\u5360\u5168\u5C4F\n * @param object\n * @param padding\n * @param duration\n * @returns\n */\n fitCameraToObject(\n object: Object3D,\n padding: [number, number, number, number] = [20, 20, 20, 20],\n duration = 500,\n force2DView = true, // \u5F3A\u5236\u8BA1\u7B972d\u89C6\u89D2\u7684\u5927\u5C0F\n ) {\n const { zoom, center } = this.getFitCameraToObjectZoom(object, padding, duration, force2DView)\n return this.setZoom(zoom, center, duration);\n }\n\n getFitCameraToGroundZoom(padding: [number, number, number, number] = [20, 20, 20, 20], duration = 500, force2DView = true) {\n if (this.currentFloor && this.currentFloor.hasElement) {\n return this.getFitCameraToObjectZoom(this.currentFloor.groundUpper, padding, duration, force2DView).zoom;\n }\n }\n\n fitCameraToGround(padding: [number, number, number, number] = [20, 20, 20, 20], duration = 500, force2DView = true) { \n if (this.currentFloor && this.currentFloor.hasElement) {\n return this.fitCameraToObject(this.currentFloor.groundUpper, padding, duration, force2DView);\n } else {\n return Promise.resolve(false);\n }\n }\n\n /**\n * \u4FEE\u6539\u76F8\u673A\u4F4D\u7F6E\n * @param position \u4FEE\u6539\u540E\u7684\u76F8\u673A\u7684\u4F4D\u7F6E\n * @param duration \u52A8\u753B\u6301\u7EED\u65F6\u95F4\n */\n public setCameraPosition(position: Vector3, duration: number) {\n return timeoutPromise(\n new Promise((resolve) => {\n const start = this.camera.position.clone();\n const lookAtVector = this.getCameraLookAt();\n const tween = new Tween(start, this.tweenGroup)\n .to(position, duration)\n .onUpdate(() => {\n this.camera.position.copy(start.clone().sub(lookAtVector));\n this.control.target.copy(start.clone());\n this.control.update();\n })\n .onComplete(() => {\n this.tweenGroup.remove(tween);\n this.camera.position.copy(start.clone().sub(lookAtVector));\n this.control.target.copy(position.clone());\n this.control.update();\n this.control.enabled = true;\n resolve(true);\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n render() {\n // console.log(\"render\")\n this.renderer.render(this.scene, this.camera);\n this.dispatchEvent({ type: \"update\" });\n this.renderRf = this.timer.requestAnimationFrame(() => {\n this.render();\n });\n this.tweenGroup.update();\n }\n\n pauseRender() { \n this.timer.cancelAnimationFrame(this.renderRf)\n }\n\n continueRender() {\n this.render()\n }\n\n dispose() {\n this.cameraBound.dispose()\n this.selection.dispose()\n this.hoverHelper.dispose()\n this.tweenGroup.getAll().forEach((item) => item.stop());\n this.tweenGroup.removeAll();\n this.unRegistryEvent();\n this.renderer.domElement.remove()\n this.timer.dispose();\n this.renderer.dispose();\n (this.lights.children as Light[]).forEach((light: Light) =>\n light.dispose()\n );\n this.materialFactory.dispose();\n this.textureFactory.dispose();\n dispose(this.scene);\n }\n}\n", "import { EventDispatcher } from \"three\";\nimport { Context } from \"../../context\";\nimport { Graphic, Poi } from \"../../elements\";\nimport { BoxSelection } from \"./box-selection\";\nimport { isControl, isMac } from \"../../utils\";\n\ninterface SelectionEventMap {\n \"select\": {\n graphics: Graphic[],\n isMultipleSelect: boolean,\n }\n}\n\nexport class Selection extends EventDispatcher<SelectionEventMap> {\n public _list = new Set<Graphic>()\n\n public boxSelection: BoxSelection;\n public prevPanStatus?: boolean;\n public prevRotateStatus?: boolean;\n public downPoint: { x: number, y: number } | null = null\n\n public isMultipleSelect = false;\n\n constructor(public context: Context) {\n super()\n this.boxSelection = new BoxSelection(context)\n this.boxSelection.setEnable(false)\n this.registryEvent()\n }\n\n get list() {\n return this._list\n }\n\n enableBoxSelection() { \n if (this.isMultipleSelect) { return }\n this.isMultipleSelect = true;\n this.boxSelection.setEnable(true)\n this.prevPanStatus = this.context.control.enablePan\n this.prevRotateStatus = this.context.control.enableRotate\n this.context.control.enablePan = false\n this.context.control.enableRotate = false\n }\n\n disableBoxSelection() { \n if (this.isMultipleSelect) { \n this.isMultipleSelect = false;\n this.boxSelection.setEnable(false)\n this.context.control.enablePan = !!this.prevPanStatus\n this.context.control.enableRotate = !!this.prevRotateStatus\n }\n }\n\n onPointerDown = (e: PointerEvent) => {\n this.downPoint = { x: e.offsetX, y: e.offsetY }\n }\n\n onPointerUp = (e: PointerEvent) => {\n if (!this.downPoint) { return }\n const { offsetX, offsetY } = e\n const { x, y } = this.downPoint\n if (Math.sqrt((x - offsetX) ** 2 + (y - offsetY) ** 2) > 3) {\n return\n }\n const { graphics } = this.context.getGraphicsByDeviceXy(offsetX, offsetY)\n const graphicIdSet = new Set(graphics.map(item => item.options.id))\n const pois = this.context.getPoisByDeviceXy(offsetX, offsetY) as Poi[];\n pois.forEach(item => { \n if (!graphicIdSet.has(item.options.id)) {\n const graphic = this.context.currentFloor?.graphicLayer.graphicMap.get(item.options.id) || null\n if (graphic && graphic.options.geometry.type === 'point') { \n graphics.push(graphic)\n graphicIdSet.add(item.options.id)\n }\n }\n })\n if (!(isMac ? e.metaKey : e.ctrlKey)) {\n this._list.clear()\n }\n graphics.forEach(item => this._list.add(item))\n this.selectEnd()\n this.downPoint = null\n }\n\n onPointerOut = (e: PointerEvent) => { \n this.disableBoxSelection()\n }\n\n onKeyDown = (e: KeyboardEvent) => {\n if (isControl(e.key)) {\n this.enableBoxSelection()\n }\n }\n\n onKeyUp = (e: KeyboardEvent) => {\n if (isControl(e.key)) {\n this.disableBoxSelection()\n }\n }\n\n onBoxSelected = ({ list }: { list: Graphic[] }) => { \n this._list.clear()\n list.forEach(item => {\n this._list.add(item)\n })\n this.selectEnd()\n }\n\n selectEnd() {\n this.dispatchEvent({type: \"select\", graphics: [...this._list], isMultipleSelect: this.isMultipleSelect})\n }\n\n registryEvent() {\n this.context.container.addEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.addEventListener(\"pointerup\", this.onPointerUp)\n this.context.container.addEventListener(\"pointerout\", this.onPointerOut)\n this.context.container.addEventListener(\"pointercancel\", this.onPointerOut)\n window.addEventListener(\"keydown\", this.onKeyDown)\n window.addEventListener(\"keyup\", this.onKeyUp)\n this.boxSelection.addEventListener(\"selected\", this.onBoxSelected)\n }\n\n unRegistryEvent() {\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.removeEventListener(\"pointerup\", this.onPointerUp)\n this.context.container.removeEventListener(\"pointerout\", this.onPointerOut)\n this.context.container.removeEventListener(\"pointercancel\", this.onPointerOut)\n window.removeEventListener(\"keydown\", this.onKeyDown)\n window.removeEventListener(\"keyup\", this.onKeyUp)\n this.boxSelection.removeEventListener(\"selected\", this.onBoxSelected)\n }\n\n clear() {\n this._list.clear()\n }\n\n remove(graphic: Graphic) { \n this._list.delete(graphic)\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}", "import {\n Object3D,\n ExtrudeGeometry,\n Mesh,\n Box3,\n MeshBasicMaterial,\n Raycaster,\n Object3DEventMap,\n Vector3,\n BufferGeometry,\n LineBasicMaterial,\n LineSegments,\n ShaderMaterial,\n Ray,\n} from \"three\";\nimport { initShape, proxyOptions, darkenColor } from \"../utils\";\nimport { GraphicOptions, PolygonGeometry } from \"src/types\";\nimport { Context } from \"../context\";\n\n// \u95E8\u7684\u7C7B\u578B\nconst DoorType = {\n single: \"\u5355\u5F00\u95E8\",\n double: \"\u53CC\u5F00\u95E8\",\n move: \"\u79FB\u52A8\u95E8\",\n};\n\n// \u95E8\u7684\u6750\u8D28\nconst DoorMaterial = {\n wood: \"\u6728\u95E8\",\n glass: \"\u73BB\u7483\u95E8\",\n aluminum: \"\u94DD\u5408\u91D1\u95E8\",\n};\n\n// \u5355\u4E2A\u95E8\u7684\u914D\u7F6E\nexport interface Door {\n // \u540D\u79F0\n name: string;\n id: string;\n width: number;\n // \u5185\u5F00/\u5916\u5F00\n open: boolean;\n // \u7C7B\u578B \u5355\u5F00\u95E8 \u53CC\u5F00\u95E8 \u79FB\u52A8\u95E8\n type: keyof typeof DoorType;\n // \u6750\u8D28\n material: keyof typeof DoorMaterial;\n}\n\nexport type GraphicOptionsParam = Partial<GraphicOptions>;\n\nexport type GraphicEventMap = {\n [K in keyof GraphicOptions as `change-${K}`]: { value: GraphicOptions[K] };\n} & Object3DEventMap;\n\nexport const defaultGraphicOptions: GraphicOptions = {\n id: \"\", // \u56FE\u5F62id\n height: 0.1, // \u56FE\u5F62\u9AD8\u5EA6\n airHeight: 0, // \u60AC\u7A7A\u9AD8\u5EA6\n area: 0, // \u9762\u79EF\n group: \"\", // \u5206\u7EC4\n fillColor: \"#EFF4FB\", // \u989C\u8272\n strokeColor: \"#ffffff\", // \u8FB9\u6846\n fillOpacity: 1, // \u900F\u660E\u5EA6\n strokeOpacity: 1, // \u63CF\u8FB9\u900F\u660E\u5EA6\n strokeWidth: 1, // \u63CF\u8FB9\u5BBD\u5EA6\n doors: [], // \u95E8\u914D\u7F6E\n locked: false,\n visible: true,\n geometry: {\n type: \"polygon\",\n cds: [],\n coords: [],\n curveCpt: [],\n curveIndex: [],\n },\n layerType: \"\",\n zIndex: 0,\n stroke: true,\n deltaHeight: 0,\n userData: {},\n gradualColor: [],\n renderType: \"single\",\n colorFactor: 0.9\n};\n\nexport class Graphic extends Object3D<GraphicEventMap> {\n public geometry!: ExtrudeGeometry;\n\n public material!: MeshBasicMaterial | MeshBasicMaterial[] | ShaderMaterial[] | ShaderMaterial;\n\n public mesh!: Mesh;\n\n public line!: LineSegments;\n\n public lineMaterial?: LineBasicMaterial;\n\n public lineGeometry?: BufferGeometry;\n\n public options: GraphicOptions;\n\n constructor(\n private context: Context,\n options: GraphicOptionsParam\n ) {\n super();\n this.options = proxyOptions<GraphicOptions, GraphicEventMap>(\n { ...defaultGraphicOptions, ...options },\n this\n );\n if (this.options.geometry.type === \"point\") {\n const [x, y] = this.options.geometry.coords;\n this.position.set(x, y, this.options.height + this.options.airHeight);\n return this;\n }\n this.init();\n this.visible = this.options.visible;\n this.addEventListener(\"change-fillColor\", ({ value }) => {\n this.initMaterial();\n this.initMesh();\n });\n this.addEventListener(\"change-fillOpacity\", ({ value }) => {\n this.initMaterial();\n this.initMesh();\n });\n this.addEventListener(\"change-height\", ({ value }) => {\n this.dispose();\n this.init();\n });\n this.addEventListener(\"change-strokeColor\", ({ value }) => {\n if (!this.options.stroke) {\n return;\n }\n this.initLineMaterial();\n this.createBorder();\n });\n this.addEventListener(\"change-strokeOpacity\", ({ value }) => {\n if (!this.options.stroke) {\n return;\n }\n this.initLineMaterial();\n this.createBorder();\n });\n // this.addEventListener('change-strokeWidth', ({ value }) => {\n // this.initLineMaterial();\n // this.createBorder();\n // })\n this.addEventListener(\"change-airHeight\", ({ value }) => {\n this.position.z = value;\n });\n this.addEventListener(\"change-visible\", ({ value }) => {\n this.visible = value;\n });\n this.addEventListener(\"change-stroke\", ({ value }) => {\n if (value) {\n if (this.line) {\n return;\n }\n this.initLineGeometry();\n this.initLineMaterial();\n this.createBorder();\n } else if (this.line) {\n this.remove(this.line);\n this.lineGeometry?.dispose();\n }\n });\n this.addEventListener(\"change-renderType\", () => {\n this.initMaterial();\n this.initMesh();\n })\n this.addEventListener(\"change-gradualColor\", () => {\n this.initMaterial();\n this.initMesh();\n })\n }\n\n getCenter() {\n if (this.options.geometry.type === \"point\") {\n return this.position.clone();\n }\n const center = new Vector3();\n const box = new Box3();\n box.setFromObject(this);\n box.getCenter(center);\n return center;\n }\n\n getSize() {\n if (this.options.geometry.type === \"point\") {\n return new Vector3(0, 0, 0);\n }\n const box = new Box3();\n const size = new Vector3();\n box.setFromObject(this);\n box.getSize(size);\n return size;\n }\n\n getPosition() {\n const center = this.getCenter();\n center.setZ(center.z + this.options.height / 2);\n return center;\n }\n\n init() {\n this.geometry = this.initGeometry();\n this.initMaterial();\n this.initMesh();\n this.mesh.position.z = this.options.airHeight + this.options.deltaHeight;\n if (this.options.stroke) {\n // \u521B\u5EFA\u8FB9\u6846\n this.initLineMaterial();\n this.initLineGeometry();\n this.createBorder();\n }\n }\n\n initGeometry() {\n const shape = initShape(\n (this.options.geometry as PolygonGeometry).coords[0],\n (this.options.geometry as PolygonGeometry).coords.slice(1)\n );\n const geometry = new ExtrudeGeometry(shape, {\n steps: 1,\n bevelEnabled: false,\n depth: this.options.height,\n curveSegments: 4,\n });\n return geometry;\n }\n\n initSingleMaterial() {\n const material = this.context.materialFactory.createMeshBasicMaterial({\n color: this.options.fillColor,\n opacity: this.options.fillOpacity,\n });\n if (this.options.height <= 0.1) {\n this.material = material;\n return material;\n }\n const material1 = this.context.materialFactory.createMeshBasicMaterial({\n color: darkenColor(this.options.fillColor),\n opacity: this.options.fillOpacity,\n });\n this.material = [material, material1];\n return [material, material1];\n }\n\n // createMesh(pos: Vector3, color = 0xff0000) { \n // const geometry = new BoxGeometry(1, 1, 1)\n // const material = new MeshBasicMaterial({ color })\n // const mesh = new Mesh(geometry, material)\n // mesh.position.copy(pos)\n // this.context.scene.add(mesh)\n // }\n\n // createLine(points: Vector3[], color = 0xff0000) {\n // const material = new LineBasicMaterial({\n // color: color\n // });\n // const geometry = new BufferGeometry().setFromPoints(points);\n // const line = new Line( geometry, material );\n // this.context.scene.add(line)\n // }\n\n getMaxAndMin(pos: Vector3, dir: Vector3) {\n const box = new Box3().setFromObject(this)\n const minOrigin = pos.clone().add(dir.clone().multiplyScalar(1000))\n const raycaster = new Ray(minOrigin, dir.clone().multiplyScalar(-1));\n const min = new Vector3()\n raycaster.intersectBox(box, min);\n const maxOrigin = pos.clone().add(dir.clone().multiplyScalar(-1000))\n const raycaster2 = new Ray(maxOrigin, dir.clone());\n const max = new Vector3()\n raycaster2.intersectBox(box, max);\n return {\n max, min\n }\n }\n\n initGradualMaterial() { \n const { max, min } = new Box3().setFromObject(this)\n const _max = max.clone().sub(min)\n const maxValue = Math.max(_max.x, _max.y, _max.z) / 2\n const pos = this.getPosition();\n const dir = new Vector3(-1.0, 0.2, 0.0).normalize()\n const { max: __max, min: _min } = this.getMaxAndMin(pos, dir)\n\n const material = this.context.materialFactory.createShaderMaterial({\n gradualColor: this.options.gradualColor,\n center: this.getPosition(),\n maxValue,\n opacity: this.options.fillOpacity,\n direction: new Vector3(-1.0, 0.2, 0.0),\n max: __max,\n min: _min\n })\n if (this.options.height <= 0.1) {\n this.material = material;\n return material;\n }\n\n const center = this.getCenter();\n const dir2 = new Vector3(-1.0, 0.2, 1.0).normalize()\n const { max: ___max, min: __min } = this.getMaxAndMin(center, dir2)\n const material1 = this.context.materialFactory.createShaderMaterial({\n gradualColor: [darkenColor(this.options.gradualColor[0], this.options.colorFactor), darkenColor(this.options.gradualColor[1], this.options.colorFactor)],\n center: this.getCenter(),\n maxValue,\n opacity: this.options.fillOpacity,\n direction: new Vector3(-1.0, 0.2, 1.0),\n max: ___max,\n min: __min\n })\n\n this.material = [material, material1];\n return [material, material1];\n }\n\n initMaterial() {\n if (this.options.renderType === 'gradual') { \n return this.initGradualMaterial()\n } else {\n return this.initSingleMaterial()\n }\n }\n\n initLineMaterial() {\n const lineMaterial = this.context.materialFactory.createLineMaterial({\n color: this.options.strokeColor,\n opacity: this.options.strokeOpacity,\n });\n this.lineMaterial = lineMaterial;\n return lineMaterial;\n }\n\n initMesh() {\n if (this.mesh) {\n this.remove(this.mesh);\n }\n this.mesh = new Mesh(this.geometry, this.material);\n this.add(this.mesh);\n }\n\n getBorderPoints() {\n const points = [];\n const height = this.options.height + this.options.deltaHeight;\n // \u70B9\u7684\u5750\u6807\u8981\u81EA\u5DF1\u7B97\uFF0C\u53EA\u753B\u5173\u952E\u8282\u70B9\u7684\u5782\u76F4\u7EBFcurveIndex\u662F\u5173\u952E\u8282\u70B9,\u5982\u679C\u662F\u66F2\u7EBF\u6709\u8FD9\u4E2A\u503C\uFF0C\u4E0D\u662F\u66F2\u7EBF\u4E0D\u4E00\u5B9A\u6709\n const { coords } = this.options.geometry as PolygonGeometry;\n for (let j = 0; j < coords.length; j++) {\n const curCds = coords[j];\n for (let i = 0; i < curCds.length; i++) {\n const cur = curCds[i];\n const next = i + 1 === curCds.length ? curCds[0] : curCds[i + 1];\n // \u628A\u62C9\u5347\u4E0A\u53BB\u7684\u70B9\u653E\u8FDB\u53BB\n points.push(new Vector3(cur[0], cur[1], height));\n points.push(new Vector3(next[0], next[1], height));\n }\n }\n return points;\n }\n\n initLineGeometry() {\n if (this.lineGeometry) {\n this.lineGeometry.dispose();\n }\n const points = this.getBorderPoints();\n const lineGeometry = new BufferGeometry().setFromPoints(points);\n this.lineGeometry = lineGeometry;\n }\n\n createBorder() {\n if (this.line) {\n this.remove(this.line);\n }\n const line = new LineSegments(this.lineGeometry, this.lineMaterial);\n line.position.z = this.options.airHeight + 0.01;\n this.line = line;\n this.add(line);\n return line;\n }\n\n raycast(raycaster: Raycaster) {\n if (!this.visible) {\n return false;\n }\n if (this.options.geometry.type === \"point\") {\n return false;\n }\n this.mesh.updateMatrixWorld(true)\n const intersects = raycaster.intersectObject(this.mesh);\n if (intersects[0]) {\n const { point: position, distance } = intersects[0];\n return { position, distance };\n }\n return false;\n }\n\n dispose() {\n this.geometry?.dispose();\n this.line?.geometry.dispose();\n this.clear();\n }\n}\n", "import {\n Object3D, PlaneGeometry, DirectionalLight,\n Mesh, MeshStandardMaterial, ShadowMaterial, Color, Vector3, DoubleSide\n} from 'three';\nimport { dispose, initDirectionalLight } from '../utils'\n\nexport class Shadow extends Object3D {\n\n public directionalLight: DirectionalLight\n\n public plane!: Mesh\n\n public basicOpacity = 0.07\n\n constructor() {\n super()\n this.directionalLight = this.initLight()\n this.initPlane()\n }\n\n // \u521B\u5EFA\u5149\u6E90\n initLight() { \n const directionalLight = initDirectionalLight(0xffffff, 0.5)\n directionalLight.position.set(0, 0, 100);\n this.add(directionalLight);\n return directionalLight\n }\n \n changeLightCamera(size: Vector3) {\n const x = size.x\n const y = size.y\n this.directionalLight.shadow.camera.left = -x;\n this.directionalLight.shadow.camera.right = x;\n this.directionalLight.shadow.camera.top = y;\n this.directionalLight.shadow.camera.bottom = -y;\n this.directionalLight.shadow.camera.near = 0.5;\n this.directionalLight.shadow.camera.far = Math.max(x, y);\n }\n\n changeLightColor(color: number | string) {\n this.directionalLight.color = new Color(color)\n }\n\n setPosition(position: Vector3) {\n this.position.copy(position)\n this.directionalLight.position.set(-position.x / 2, -position.y / 2, 100)\n }\n\n // \u521B\u5EFA\u5E73\u9762\u767D\u8272\n initPlane(width = 1000, height = 1000) { \n const geometry = new PlaneGeometry(width, height)\n const material = new ShadowMaterial({\n transparent: true,\n opacity: 0,\n side: DoubleSide\n })\n const mesh = new Mesh(geometry, material)\n mesh.receiveShadow = true\n mesh.position.z = -10\n this.add(mesh)\n this.plane = mesh\n return mesh\n }\n\n setTarget(target: Object3D) {\n this.directionalLight.target = target\n }\n\n transformOpacity(opacity: number): number {\n return opacity * this.basicOpacity\n }\n\n setOpacity(opacity: number) { \n (this.plane.material as MeshStandardMaterial).opacity = this.transformOpacity(opacity);\n }\n \n dispose() {\n dispose(this, true)\n }\n\n}", "import { proxyOptions, sleepOnePromise } from '../utils';\nimport { EventDispatcher, Object3D, Object3DEventMap, Vector3 } from 'three';\nimport { Context } from '../context'\nimport { Overlay } from './overlay';\n\nexport interface PoiOptions {\n texts: { text: string, styles?: { [key: string]: string }; }[];\n icon?: string;\n icon_size?: [number, number]; // \u5BBD \u9AD8\n icon_position?: 'top' | 'bottom' | 'center';\n level: number; // \u6E32\u67D3\u4F18\u5148\u7EA7\n collision_enable: boolean; // \u662F\u5426\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\n opacity: number;\n id: string; // poi\u7684key\n position: { x: number; y: number; z: number };\n icon_opacity: number;\n icon_border: { color: string, width: number };\n background: string;\n collision_hide_icon: boolean;\n built_in: boolean; // \u662F\u5426\u662F\u5185\u7F6E\u7684poi\n box_only_icon: boolean; // \u5305\u56F4\u76D2\u662F\u4E0D\u662F\u53EA\u5305\u542B\u56FE\u6807\n}\n\ntype PoiEventMap = {\n [K in keyof PoiOptions as `change-${K}`]: { value: PoiOptions[K] };\n} & Object3DEventMap;\n\nconst defaultOptions: PoiOptions = {\n texts: [{ text: \"\" }],\n level: 1,\n icon_position: 'bottom',\n collision_enable: true,\n opacity: 1,\n id: \"\",\n position: { x: 0, y: 0, z: 0 },\n icon_opacity: 1,\n icon_border: { color: \"#586EE0\", width: 0 },\n background: \"\",\n collision_hide_icon: true,\n built_in: false,\n box_only_icon: false\n}\n\nexport type PoiOptionsParam = Partial<PoiOptions>\n\nexport class Poi extends EventDispatcher<PoiEventMap> {\n\n public div!: HTMLDivElement\n\n public textDiv!: HTMLDivElement\n\n public img?: HTMLImageElement\n\n public overlay: Overlay\n\n public options: PoiOptions\n\n public visible = true\n\n size = { width: 0, height: 0 }\n\n position = new Vector3()\n\n userData: any = {};\n\n showTextStatus = true\n\n disposed = false\n\n constructor(private context: Context, options: PoiOptionsParam) {\n super()\n this.options = proxyOptions<PoiOptions, PoiEventMap>({...defaultOptions, ...options}, this)\n this.position.set(options.position?.x || 0, options.position?.y || 0, options.position?.z || 0)\n this.overlay = new Overlay(this.context, { autoUpdate: false })\n this.overlay.addEventListener(\"update-position\", ({ x, y, height }) => { \n this.overlay.div.style.transform = `translate3d(calc(${x}px - 50%), calc(${-height + y}px - ${this.options.icon && this.options.icon_position !== 'center' ? '100%' : '50%'}), 0)`;\n })\n this.overlay.bindElement(this as unknown as Object3D)\n this.registryEvent()\n this.initDiv()\n this.addEventListener(\"change-icon\", ({ value }) => {\n if (value) {\n if (!this.img) {\n this.addIcon()\n this._changePosition()\n } else {\n this.img.setAttribute('src', value)\n }\n } else {\n this.img && this.div.removeChild(this.img)\n this.img = undefined\n this._changePosition()\n this.resetSize()\n }\n })\n this.addEventListener(\"change-texts\", ({ value }) => {\n const div = this.textDiv\n if (div) {\n const text = this.initText()\n this.div.replaceChild(text, div)\n } else {\n this.addText()\n }\n this.resetSize()\n })\n this.addEventListener(\"change-opacity\", ({ value }) => {\n this.overlay.setOpacity(value)\n })\n this.addEventListener(\"change-icon_size\", ({ value }) => {\n if (this.img) {\n this.img.style.width = `${value?.[0] || 32}px`\n this.img.style.height = `${value?.[1] || 32}px`\n this.resetSize()\n }\n })\n this.addEventListener(\"change-icon_opacity\", ({ value }) => {\n if (this.img) {\n this.img.style.opacity = `${value}`\n }\n })\n this.addEventListener(\"change-icon_border\", ({ value }) => {\n if (this.img) {\n this.img.style.border = `${value.width}px solid ${value.color}`\n }\n })\n this.addEventListener(\"change-background\", ({ value }) => {\n this.div.style.background = value;\n })\n }\n\n get withinDisplayRange() {\n return this.overlay.withinDisplayRange\n }\n\n async resetSize() {\n await sleepOnePromise()\n if (this.disposed) { return }\n if (this.options.box_only_icon) {\n if (!this.img) { return }\n const { width, height } = this.img.getBoundingClientRect()\n this.size = {\n width: width + 2, \n height: height + 2\n }\n } else {\n const { width, height } = this.div.getBoundingClientRect()\n this.size = {\n width: width + 2, \n height: height + 2\n }\n }\n }\n\n renderHelperBox() {\n // let div = this.helperDiv\n // if (!div) {\n // div = document.createElement('div')\n // this.context.container.appendChild(div)\n // }\n // const box = this.getBox()\n // div.style.cssText = `position: absolute; top: ${box.top}px;left: ${box.left}px;width: ${box.right - box.left}px;height: ${box.bottom - box.top}px;border: 1px solid red;`\n // this.helperDiv = div;\n }\n\n get clientPos() {\n return this.overlay.clientPos\n }\n\n initDiv() {\n const div = document.createElement(\"div\");\n this.div = div;\n this.addText()\n if (this.options.icon) { \n this.addIcon()\n }\n div.style.fontSize = `12px`;\n div.style.textShadow = `#fff 1px 0 0, #fff 0 1px 0, #fff -1px 0 0, #fff 0 -1px 0`;\n div.style.display = `flex`;\n div.style.flexDirection = `column`;\n div.style.justifyContent = `center`;\n div.style.alignItems = `center`;\n div.style.padding = \"4px\";\n this.overlay.setOpacity(this.options.opacity);\n this.overlay.div.style.pointerEvents = `none`;\n this.overlay.div.style.userSelect = `none`;\n this.overlay.div.appendChild(div)\n // this._changePosition()\n this.resetSize()\n return div\n }\n\n addIcon() { \n if (!this.img) {\n const icon = this.initIcon()\n if (this.options.icon_position === \"top\") {\n if (this.div.firstChild) {\n this.div.insertBefore(icon, this.div.firstChild)\n } else {\n this.div.appendChild(icon)\n }\n } else {\n this.div.appendChild(icon)\n }\n }\n }\n\n addText() { \n const text = this.initText()\n if (this.options.icon_position === \"top\") {\n this.div.appendChild(text)\n } else {\n if (this.div.firstChild) {\n this.div.insertBefore(text, this.div.firstChild)\n } else {\n this.div.appendChild(text)\n }\n }\n }\n\n getPosition() {\n return this.position\n }\n\n initText() {\n const textDiv = document.createElement(\"div\")\n textDiv.appendChild(this.createTextFragment())\n textDiv.style.textAlign = \"center\"\n this.textDiv = textDiv\n return textDiv\n }\n\n createTextFragment() { \n const f = document.createDocumentFragment()\n this.options.texts.forEach(item => { \n const div = document.createElement(\"div\")\n div.style.whiteSpace = 'nowrap';\n if (item.styles) { \n for (let [key, value] of Object.entries(item.styles)) { \n div.style[key as any] = value;\n }\n }\n div.textContent = item.text;\n f.appendChild(div)\n })\n return f\n }\n\n initIcon() {\n const img = document.createElement(\"img\")\n img.setAttribute(\"src\", this.options.icon!)\n img.style.width = `${this.options.icon_size?.[0] || 32}px`\n img.style.height = `${this.options.icon_size?.[1] || 32}px`\n img.style.opacity = `${this.options.icon_opacity}px`\n img.style.borderRadius = '50%';\n if (this.options.icon_border.width) {\n img.style.border = `${this.options.icon_border.width}px solid ${this.options.icon_border.color}`\n }\n img.onload = () => {\n // this._changePosition()\n this.resetSize()\n }\n this.img = img\n return img\n }\n\n private _changePosition = () => {\n this.overlay.updatePosition(true)\n }\n\n registryEvent() {\n // this.context.addEventListener('update', this._changePosition)\n }\n\n unRegistryEvent() {\n // this.context.removeEventListener('update', this._changePosition)\n }\n\n setVisible(visible: boolean) {\n if (visible === this.visible) { return }\n this.visible = visible\n this.changeOverlayVisible(visible)\n }\n\n changeOverlayVisible(visible: boolean) {\n if (visible === this.overlay.visible && this.options.collision_hide_icon) { return }\n if (this.options.collision_hide_icon) {\n this.overlay.visible = visible;\n this.overlay.div.style.visibility = visible ? \"visible\" : \"hidden\"\n } else {\n if (this.showTextStatus === visible) { return }\n this.textDiv.style.visibility = visible ? \"visible\" : \"hidden\"\n this.showTextStatus = visible\n }\n }\n\n parentSetVisible(visible: boolean) { \n if (!this.visible) { \n return\n }\n this.changeOverlayVisible(visible)\n // if (visible) {\n // this.renderHelperBox()\n // } else {\n // this.helperDiv?.remove()\n // this.helperDiv = null\n // }\n }\n\n getBox(boxScale = this.context.config.poi.boxScale) {\n const { width, height } = this.size\n const w = width * boxScale;\n const h = height * boxScale;\n const { x, y } = this.overlay.clientPos\n return {\n left: x - w / 2,\n right: x + w / 2,\n top: this.options.icon ? y - h : y - h / 2,\n bottom: this.options.icon ? y : y + h / 2,\n }\n }\n\n getOriginBox() { \n return this.getBox(1)\n }\n\n isContain(x: number, y: number) {\n if (!this.overlay.visible) { return false }\n if (!this.visible) {return false}\n const box = this.getOriginBox()\n return x >= box.left && x <= box.right && y >= box.top && y <= box.bottom\n }\n\n dispose() {\n this.unRegistryEvent();\n this.div = null as unknown as HTMLDivElement;\n this.textDiv = null as unknown as HTMLDivElement;\n this.img = undefined\n this.overlay.dispose();\n this.disposed = true\n }\n}", "import { Context } from \"../context\";\nimport { Box3, EventDispatcher, Object3D, Vector3 } from \"three\";\nimport { vector3ToDevice } from \"../utils\";\nimport { debounce } from \"lodash\";\nimport { Graphic } from \"./graphic\";\n\ninterface OverlayOptions {\n autoUpdate: boolean;\n appendToBody: boolean;\n autoChangePlacement: boolean;\n}\n\nconst defaultOptions: OverlayOptions = {\n autoUpdate: true,\n appendToBody: false,\n autoChangePlacement: false,\n};\n\ninterface OverlayEventMap {\n \"update-position\": {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n}\n\ntype Placement =\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"leftTop\"\n | \"rightTop\"\n | \"leftBottom\"\n | \"rightBottom\"\n | \"center\";\n\nexport class Overlay extends EventDispatcher<OverlayEventMap> {\n public div: HTMLDivElement;\n\n private element?: Object3D & { getPosition?: () => Vector3 };\n\n public position = new Vector3();\n\n clientPos = { x: 0, y: 0 };\n\n visible = true;\n\n public options: OverlayOptions;\n\n placement: Placement = \"top\";\n\n observer: MutationObserver | null = null;\n\n constructor(\n private context: Context,\n options: Partial<OverlayOptions> = {}\n ) {\n super();\n this.options = { ...defaultOptions, ...options };\n this.registryEvent();\n this.div = this.initDiv();\n if (this.options.appendToBody) {\n document.body.appendChild(this.div);\n } else {\n this.context.container.appendChild(this.div);\n }\n }\n\n initObserver() {\n const observer = new MutationObserver(\n debounce(() => {\n if (this.div) {\n this.usePlacement();\n }\n }, 100)\n );\n observer.observe(this.div, {\n childList: true,\n subtree: true,\n attributes: true,\n });\n this.observer = observer;\n }\n\n getPlacementPosition(): Record<Placement, Vector3> {\n if (this.element instanceof Graphic && this.element.options.geometry.type === \"polygon\") {\n const { max, min } = new Box3().setFromObject(this.element!);\n const centerX = (max.x + min.x) / 2;\n const centerY = (max.y + min.y) / 2;\n return {\n left: new Vector3(min.x, centerY, max.z),\n leftTop: new Vector3(min.x, max.y, max.z),\n top: new Vector3(centerX, max.y, max.z),\n rightTop: new Vector3(max.x, max.y, max.z),\n right: new Vector3(max.x, centerY, max.z),\n rightBottom: new Vector3(max.x, min.y, max.z),\n bottom: new Vector3(centerX, min.y, max.z),\n leftBottom: new Vector3(min.x, min.y, max.z),\n center: new Vector3(centerX, centerY, max.z),\n };\n }\n const {x, y, z} = this.element?.getPosition?.() || this.position\n return {\n left: new Vector3(x, y, z),\n leftTop: new Vector3(x, y, z),\n top: new Vector3(x, y, z),\n rightTop: new Vector3(x, y, z),\n right: new Vector3(x, y, z),\n rightBottom: new Vector3(x, y, z),\n bottom: new Vector3(x, y, z),\n leftBottom: new Vector3(x, y, z),\n center: new Vector3(x, y, z),\n };\n }\n\n getPlacementScreenPosition(): Record<Placement, { x: number; y: number }> {\n const { width, height } = this.context.clientSize;\n const positions = this.getPlacementPosition();\n return Object.keys(positions).reduce((obj, key) => {\n const { x, y } = vector3ToDevice(\n (positions as any)[key],\n this.context.camera,\n width,\n height\n );\n (obj as any)[key] = { x, y };\n return obj;\n }, {}) as Record<Placement, { x: number; y: number }>;\n }\n\n // \u68C0\u67E5\u662F\u4E0D\u662F\u6EA2\u51FA\u4E86context.container\n // @return true \u8868\u793A\u6CA1\u6709\u6EA2\u51FA\n checkOverflow(\n max: { x: number; y: number },\n min: { x: number; y: number }\n ): boolean {\n const { width, height } = this.context.clientSize;\n return min.x > 0 && max.x < width && min.y < height && max.y > 0;\n }\n\n // \u8BA1\u7B97\u9002\u7528\u7684placement\n getPlacement(): { type: Placement, position: { x: number, y: number } } {\n const { clientWidth, clientHeight } = this.div;\n const positions = this.getPlacementScreenPosition();\n const halfWidth = clientWidth / 2;\n const halfHeight = clientHeight / 2;\n const placements: {\n type: Placement;\n getBox: (\n x: number,\n y: number\n ) => {\n max: { x: number; y: number };\n min: { x: number; y: number };\n };\n }[] = [\n {\n type: \"center\",\n getBox(x: number, y: number) {\n return {\n max: { x: halfWidth + x, y: y - clientHeight },\n min: { x: x - halfWidth, y: y },\n };\n },\n },\n {\n type: \"left\",\n getBox(x, y) {\n return {\n max: { x: x, y: y - halfHeight },\n min: { x: x - clientWidth, y: y + halfHeight },\n };\n },\n },\n {\n type: \"leftTop\",\n getBox(x, y) {\n return {\n max: { x: x, y: y - clientHeight },\n min: { x: x - clientWidth, y: y },\n };\n },\n },\n {\n type: \"top\",\n getBox(x, y) {\n return {\n max: { x: x + halfWidth, y: y - clientHeight },\n min: { x: x - halfWidth, y: y },\n };\n },\n },\n {\n type: \"rightTop\",\n getBox(x, y) {\n return {\n max: { x: x + clientWidth, y: y - clientHeight },\n min: { x: x, y: y },\n };\n },\n },\n {\n type: \"right\",\n getBox(x, y) {\n return {\n max: { x: x + clientWidth, y: y - halfHeight },\n min: { x: x, y: y + halfHeight },\n };\n },\n },\n {\n type: \"rightBottom\",\n getBox(x, y) {\n return {\n max: { x: x + clientWidth, y: y },\n min: { x: x, y: y + clientHeight },\n };\n },\n },\n {\n type: \"bottom\",\n getBox(x, y) {\n return {\n max: { x: x + halfWidth, y: y },\n min: { x: x - halfWidth, y: y + clientHeight },\n };\n },\n },\n {\n type: \"leftBottom\",\n getBox(x, y) {\n return {\n max: { x: x, y: y },\n min: { x: x - clientWidth, y: y + halfHeight },\n };\n },\n },\n ];\n for (let i = 0; i < placements.length; i++) {\n const placement = placements[i];\n const position = positions[placement.type];\n const { max, min } = placement.getBox(position.x, position.y);\n if (this.checkOverflow(max, min)) {\n return {\n type: placement.type,\n position,\n };\n }\n }\n return {\n type: \"center\",\n position: positions.center\n };\n }\n\n initDiv() {\n const div = document.createElement(\"div\");\n div.style.position = \"absolute\";\n return div;\n }\n\n usePlacement() {\n const placement = this.getPlacement();\n this.div.className = `overlay_${placement.type}`;\n this._updatePosition(placement.position.x, placement.position.y)\n }\n\n bindElement(element: Object3D) {\n this.element = element;\n if (this.options.autoChangePlacement) {\n this.initObserver();\n // TODO\n // this.usePlacement();\n }\n this.onUpdate();\n }\n\n unBindElement() {\n this.element = undefined;\n }\n\n setVisible(visible: boolean, display = \"block\") {\n if (visible === this.visible) {\n return;\n }\n this.div.style.display = visible ? display : \"none\";\n this.visible = visible;\n }\n\n setOpacity(opacity: number) {\n this.div.style.opacity = `${opacity}`;\n }\n\n getPosition() {\n if (this.element) {\n if (typeof this.element.getPosition === \"function\") {\n return this.element.getPosition();\n }\n const box = new Box3().setFromObject(this.element);\n const center = box.getCenter(new Vector3());\n return center;\n } else {\n return this.position;\n }\n }\n\n get withinDisplayRange() {\n const { x, y } = this.clientPos;\n const { width, height } = this.context.clientSize;\n return x >= 0 && x <= width && y >= 0 && y <= height;\n }\n\n _updatePosition(x: number, y: number) { \n this.clientPos = { x, y };\n const { width, height, x: clientX, y: clientY } = this.context.clientSize;\n if (this.options.appendToBody) {\n this.div.style.left = `${clientX}px`;\n this.div.style.top = `${clientY + height}px`;\n }\n if (this.options.autoUpdate) {\n this.div.style.transform = `translate3d(${x}px, ${-height + y}px, 0)`;\n } else {\n this.dispatchEvent({ type: \"update-position\", x, y, width, height });\n }\n }\n\n updatePosition(force = false) {\n const vector = this.getPosition();\n const { width, height } = this.context.clientSize;\n const { x, y } = vector3ToDevice(\n vector,\n this.context.camera,\n width,\n height\n );\n if (this.clientPos.x === x && this.clientPos.y === y && !force) {\n return;\n }\n this._updatePosition(x, y)\n }\n\n onUpdate = () => {\n if (this.options.autoChangePlacement) { \n this.usePlacement();\n } else {\n this.updatePosition();\n }\n };\n\n registryEvent() {\n this.context.addEventListener(\"update\", this.onUpdate);\n }\n\n unRegistryEvent() {\n this.context.removeEventListener(\"update\", this.onUpdate);\n }\n\n dispose() {\n this.unRegistryEvent();\n this.unBindElement();\n this.observer?.disconnect();\n this.div?.remove();\n this.div = null as unknown as HTMLDivElement;\n }\n}\n", "import { Context } from \"../context\";\nimport { Box3, Group, Object3D, Vector3 } from \"three\";\nimport { Graphic, GraphicOptionsParam } from \"./graphic\";\nimport { Shadow } from \"./shadow\";\nimport { PoiOptionsParam } from \"./poi\";\nimport { HeatmapDataParam, HeatmapElement } from './heatmap'\nimport { Model, ModelOptions } from \"./model\";\nimport { Layer, GraphicLayer, PoiLayer } from \"../layer\";\n\nexport class Floor extends Object3D {\n \n graphicLayer: GraphicLayer;\n\n poiLayer: PoiLayer;\n\n wallLayer: Layer;\n\n textureLayer: Layer;\n \n glbModelLayer: Layer;\n\n laneLayer: Layer;\n\n grounds: Set<Graphic> = new Set();\n \n groundLayer: Layer;\n\n shadow = new Shadow();\n\n heatmap?: HeatmapElement;\n\n groundUpper = new Object3D();\n\n models = new Object3D()\n\n modelMap = new Map()\n\n groundMaxHeight = 0;\n\n name: string = \"\";\n\n key: string = \"\";\n\n constructor(public context: Context) {\n super()\n this.groundLayer = new Layer(this.context)\n this.graphicLayer = new GraphicLayer(this.context);\n this.poiLayer = new PoiLayer(this.context);\n this.wallLayer = new Layer(this.context);\n this.textureLayer = new Layer(this.context);\n this.glbModelLayer = new Layer(this.context);\n this.laneLayer = new Layer(this.context);\n this.groundUpper.add(this.graphicLayer)\n this.groundUpper.add(this.poiLayer)\n this.groundUpper.add(this.wallLayer)\n this.groundUpper.add(this.textureLayer)\n this.groundUpper.add(this.glbModelLayer)\n this.groundUpper.add(this.laneLayer)\n this.add(this.groundUpper)\n this.add(this.groundLayer)\n this.add(this.models)\n }\n\n getPosition() { \n const box = new Box3().setFromObject(this)\n return box.getCenter(new Vector3())\n }\n\n createGround(options: GraphicOptionsParam) {\n // options.deltaHeight = 0.00001 * this.grounds.size\n const ground = new Graphic(this.context, options)\n this.addGrounds([ground])\n }\n\n addGrounds(grounds: Graphic[]) {\n grounds.forEach(ground => { \n if (!this.grounds.has(ground)) {\n ground.mesh.castShadow = true;\n this.grounds.add(ground)\n this.groundLayer.add(ground)\n }\n })\n this.changeGroundMaxHeight()\n }\n\n changeGroundMaxHeight() { \n const grounds = Array.from(this.grounds)\n this.groundMaxHeight = this.grounds.size > 0 ? Math.max(...grounds.map(ground => ground.options.height + ground.options.airHeight + ground.options.deltaHeight)) : 0\n this.groundUpper.position.z = this.groundMaxHeight\n }\n\n get hasElement() { \n return !!(this.grounds.size || this.graphicLayer.children.length)\n }\n\n getCenter() { \n return new Box3().setFromObject(this).getCenter(new Vector3())\n }\n \n addModel(options: ModelOptions) { \n const model = new Model(this.context, options)\n this.models.add(model)\n this.modelMap.set(options.id, model)\n return model\n }\n\n addShadow() { \n const box = new Box3().setFromObject(this.groundUpper)\n const center = box.getCenter(new Vector3())\n const size = box.getSize(new Vector3())\n this.shadow.setPosition(center)\n this.shadow.changeLightCamera(size)\n // this.add(this.shadow)\n }\n\n addGraphic(graphicOptions: GraphicOptionsParam) {\n return this.graphicLayer.createGraphic(graphicOptions)\n }\n\n addPoi(poiOptions: PoiOptionsParam) {\n return this.poiLayer.createPoi(poiOptions)\n }\n\n addHeatmap(data: HeatmapDataParam) {\n if (!this.heatmap) {\n this.heatmap = new HeatmapElement(this.context)\n this.add(this.heatmap)\n }\n this.heatmap.loadData(data)\n const box = new Box3().setFromObject(this.graphicLayer)\n this.heatmap.position.setZ(box.max.z)\n return this.heatmap\n }\n\n removeHeatMap() {\n if (this.heatmap) {\n this.remove(this.heatmap)\n this.heatmap.dispose()\n this.heatmap = undefined\n }\n }\n\n setShadowOpacity(opacity: number) {\n this.shadow.setOpacity(opacity)\n }\n\n setShadowVisible(visible: boolean) {\n this.shadow.visible = visible;\n }\n\n dispose() {\n this.shadow.dispose();\n this.groundLayer.dispose()\n this.graphicLayer.dispose()\n this.poiLayer.dispose()\n this.wallLayer.dispose()\n this.textureLayer.dispose();\n this.glbModelLayer.dispose();\n this.laneLayer.dispose();\n this.grounds.forEach(ground => ground.dispose())\n this.heatmap?.dispose()\n this.groundUpper.clear()\n this.models.children.forEach((model) => (model as unknown as Model).dispose())\n this.models.clear()\n this.modelMap.clear()\n this.clear()\n }\n\n}", "import { Context } from \"../context\";\nimport {\n MeshBasicMaterial, Object3D, PlaneGeometry,\n Texture, DoubleSide, Mesh, Matrix3, Vector2\n} from \"three\";\nimport { create, Heatmap, HeatmapData, DataPoint } from '@mars3d/heatmap.js'\nimport { featureCollection, point, bbox, center as getCenter } from '@turf/turf'\n\ntype V = 'value'\ntype X = 'x'\ntype Y = 'y'\n\nexport type HeatmapDataParam = HeatmapData<DataPoint<V, X, Y>>\n\nexport class HeatmapElement extends Object3D {\n\n public heatmap?: Heatmap<V, X, Y>;\n\n public div: HTMLDivElement\n\n public plane?: Mesh;\n\n constructor(public context: Context) {\n super()\n this.div = document.createElement(\"div\")\n }\n\n clearHeatmap() {\n if (this.div.firstChild) {\n this.div.removeChild(this.div.firstChild)\n }\n this.heatmap = undefined;\n }\n\n loadData(data: HeatmapDataParam) {\n this.clearHeatmap()\n const { width, height, leftTop, center } = this.getBox(data)\n this.heatmap = create({\n width: width,\n height: height,\n container: this.div,\n ...this.context.config.heatMap,\n } as any);\n this.heatmap.setData(this.transformData(data, leftTop))\n this.initPlane(width, height)\n this.position.set(center[0], center[1], this.position.z)\n }\n\n initPlane(width: number, height: number) {\n if (this.plane) { this.remove(this.plane) }\n const geometry = new PlaneGeometry(width, height)\n const texture = new Texture(this.div.firstChild as HTMLCanvasElement);\n texture.needsUpdate = true;\n const material = new MeshBasicMaterial({\n transparent: true,\n side: DoubleSide,\n map: texture,\n });\n material.needsUpdate = true;\n this.plane = new Mesh(geometry, material)\n this.add(this.plane)\n }\n\n getTransMatrix({ x, y }: { x: number, y: number }) {\n // \u5148\u628A\u5DE6\u4E0A\u89D2\u5E73\u79FB\u523000\u70B9\uFF0C\u7136\u540E\u5BF9y\u8F74\u53D6\u53CD\n return new Matrix3().makeScale(1, -1).multiply(new Matrix3().makeTranslation(0 - x, 0 - y))\n }\n\n /**\n * \u6240\u6709\u70B9\u7684\u5750\u6807\u51CF\u53BB\u5DE6\u4E0A\u89D2\u4ECE00\u70B9\u5F00\u59CB\u753Bcanvas\n * @param data \n * @param leftTop \n * @returns \n */\n transformData(data: HeatmapDataParam, leftTop: { x: number, y: number }): HeatmapDataParam {\n const matrix = this.getTransMatrix(leftTop)\n const $data = data.data.map(item => { \n const vector = new Vector2(item.x, item.y).applyMatrix3(matrix)\n return {\n x: vector.x,\n y: vector.y,\n value: item.value\n }\n })\n return {\n data: $data,\n max: data.max,\n min: data.min\n }\n }\n\n getBox(data: HeatmapDataParam) {\n const features = featureCollection(data.data.map(item => point([item.x, item.y])))\n // \u8FD4\u56DE\u4E00\u4E2A\u77E9\u5F62\u8FB9\u6846\u5750\u6807\n const box = bbox(features);\n const width = box[2] - box[0]\n const height = box[3] - box[1]\n const leftTop = { x: box[0], y: box[3] }\n const center = getCenter(features)\n return { width, height, leftTop, center: center.geometry.coordinates }\n }\n\n dispose() {\n this.div = null as unknown as HTMLDivElement\n this.heatmap = undefined\n }\n}", "import { Box3, Object3D, Vector3 } from \"three\";\nimport { Context } from \"../context\";\nimport { loadModel, dispose } from \"../utils\";\nimport { Poi } from \"./poi\";\nimport { GLTF } from \"three/examples/jsm/loaders/GLTFLoader\";\n\nexport interface ModelOptions {\n modelUrl: string;\n position?: Vector3;\n id: string;\n}\n\nexport class Model extends Object3D {\n\n model: GLTF | null = null\n\n constructor(public context: Context, private options: ModelOptions) {\n super()\n this.position.copy(options.position || new Vector3(0, 0, 0))\n this.loadModel()\n }\n \n async loadModel() { \n const object = await loadModel(this.options.modelUrl);\n object.scene.rotation.set(Math.PI / 2, Math.PI / 2, 0)\n this.add(object.scene)\n this.model = object\n }\n\n dispose() {\n dispose(this)\n this.model = null\n }\n}", "import { Graphic, GraphicOptionsParam } from \"../elements\";\nimport { Box3, Raycaster, Vector3 } from \"three\";\nimport { Layer } from \"./layer\";\nimport { Context } from \"../context\";\n\nexport class GraphicLayer extends Layer {\n\n graphicMap = new Map<string, Graphic>()\n\n constructor(context: Context) {\n super(context)\n }\n\n getCenter(): Vector3 { \n const box = new Box3().setFromObject(this)\n return box.getCenter(new Vector3())\n }\n\n createGraphic(options: GraphicOptionsParam) {\n // options.deltaHeight = 0.00001 * this.graphicMap.size;\n const graphic = new Graphic(this.context, options)\n this.add(graphic)\n this.graphicMap.set(options.id!, graphic)\n return graphic\n }\n\n removeGraphic(graphic: Graphic) { \n this.remove(graphic)\n this.graphicMap.delete(graphic.options.id!)\n graphic.dispose()\n }\n\n removeGraphicById(id: string) {\n if (this.graphicMap.has(id)) {\n this.removeGraphic(this.graphicMap.get(id)!)\n }\n }\n\n getGraphicByNodeId(id: string) {\n return this.graphicMap.get(id) || null\n }\n\n /**\n * \u83B7\u53D6\u5C04\u7EBF\u76F8\u4EA4\u7684\u5143\u7D20\n * @param raycaster \n */\n getGraphicByRaycaster(raycaster: Raycaster): { graphics: Graphic[], position: Vector3 | null } {\n const initData: {\n position: Vector3 | null,\n graphic: Graphic | null,\n distance: number\n } = { distance: 10000, graphic: null, position: null }\n const data = this.children.reduce((res, item) => {\n if (item instanceof Graphic) {\n const pos = item.raycast(raycaster)\n if (pos) {\n const { distance } = pos\n if (distance < res.distance) {\n return {\n distance: pos.distance,\n position: pos.position,\n graphic: item\n }\n }\n }\n return res\n } else {\n return res\n }\n }, initData)\n if (data === initData) {\n return { graphics: [], position: null }\n }\n return { graphics: [data.graphic!], position: data.position }\n }\n}", "import { Context } from \"../context\";\nimport { Object3D } from \"three\";\nimport { dispose } from '../utils'\n\nexport class Layer extends Object3D {\n constructor(public context: Context) {\n super();\n }\n\n dispose() {\n dispose(this)\n this.children.forEach(item => (item as any).dispose?.())\n this.clear()\n }\n}", "import { Poi, PoiOptionsParam } from \"../elements\";\nimport { Layer } from \"./layer\";\nimport { Context } from '../context'\nimport { debounce } from 'lodash'\nimport { Timer } from \"../utils\";\n\nexport class PoiLayer extends Layer {\n pois: Poi[] = []\n debounceCollisionDetection: () => void\n\n timer = new Timer()\n \n constructor(context: Context) {\n super(context)\n this.registryEvent()\n this.debounceCollisionDetection = debounce(this.collisionDetection, 10)\n }\n\n clear(force = false) {\n this.pois.forEach(item => {\n if (item.options.built_in && !force) { \n return\n }\n item.dispose()\n })\n this.pois = force ? [] : this.pois.filter(item => item.options.built_in)\n return this\n }\n\n createPoi(options: PoiOptionsParam) {\n const poi = new Poi(this.context, options)\n this.pushPoi(poi)\n poi.addEventListener(\"change-level\", () => this.changePoiLevelOrCollisionEnable(poi))\n poi.addEventListener(\"change-collision_enable\", () => this.changePoiLevelOrCollisionEnable(poi))\n Promise.resolve().then(() => { \n this.debounceCollisionDetection()\n })\n return poi\n }\n\n changePoiLevelOrCollisionEnable(poi: Poi) {\n const index = this.pois.findIndex(item => item === poi)\n if (index === -1) { return }\n this.pois.splice(index, 1)\n this.pushPoi(poi)\n }\n\n removePoi(poi: Poi) {\n const index = this.pois.findIndex(item => item === poi)\n if (index === -1) { return }\n this.pois.splice(index, 1)\n poi.dispose()\n }\n\n removePoiById(id: string) {\n const poi = this.pois.find(item => item.options.id === id)\n if (poi) {\n this.removePoi(poi)\n }\n }\n\n getPoiById(id: string) { \n const poi = this.pois.find(item => item.options.id === id)\n return poi || null\n }\n\n /**\n * \u4FDD\u5B58poi\u6309\u7167level\u6392\u5E8F\n * @param poi \n */\n pushPoi(poi: Poi) {\n // \u4E0D\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\u7684\u5728\u6700\u524D\u9762\n if (!poi.options.collision_enable) {\n this.pois.unshift(poi)\n return\n }\n // level\u6700\u5C0F\u7684\u5728\u6700\u540E\u9762\n if (poi.options.level === 0) {\n this.pois.push(poi)\n return\n }\n for (let i = 0; i < this.pois.length; i++) {\n const item = this.pois[i]\n // \u4E0D\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\u7684\u5728\u524D\u9762\n if (!item.options.collision_enable) { \n continue\n }\n if (item.options.level <= poi.options.level) {\n this.pois.splice(i, 0, poi)\n return\n }\n }\n // \u63D2\u5165\u5230\u6700\u540E\n this.pois.push(poi) \n }\n\n getPoiByDeviceXy(x: number, y: number) {\n const pois = this.pois.filter(item => {\n return (item instanceof Poi) && item.isContain(x, y)\n })\n return pois\n }\n\n onUpdate = () => { \n this.timer.requestAnimationFrame(() => { \n this.collisionDetection()\n })\n }\n\n /**\n * \u78B0\u649E\u68C0\u6D4B\n */\n collisionDetection() {\n const range: { left: number; right: number; top: number; bottom: number; }[] = []\n // \u6392\u9664\u5728\u5C4F\u5E55\u5916\u7684poi\n const pois = this.pois.filter(item => item.visible && item.withinDisplayRange)\n pois.forEach((item, index) => {\n const { left, right, top, bottom } = item.getBox()\n if (index === 0 || !item.options.collision_enable) {\n range.push({ left, right, top, bottom })\n item.parentSetVisible(true)\n return\n }\n // valid boolean \u8868\u793A\u53D1\u751F\u4E86\u78B0\u649E\n const valid = range.some((box) => { \n // \u5224\u65AD\u56DB\u4E2A\u70B9\u662F\u4E0D\u662F\u90FD\u4E0D\u5728box\u7684\u8303\u56F4\u5185\n return box.left < right && box.right > left && box.top < bottom && box.bottom > top;\n })\n item.parentSetVisible(!valid)\n if (!valid) { \n range.push({ left, right, top, bottom })\n }\n })\n }\n\n registryEvent() {\n this.context.addEventListener('update', this.onUpdate)\n }\n\n unRegistryEvent() { \n this.context.removeEventListener('update', this.onUpdate)\n }\n \n dispose() {\n this.timer.dispose()\n this.pois.forEach(item => item.dispose())\n this.pois.length = 0;\n this.debounceCollisionDetection = () => { }\n super.dispose()\n this.unRegistryEvent()\n }\n}", "import { Context } from \"../context\";\nimport { EventDispatcher, Vector3 } from \"three\";\nimport { createSvg, vector3ToDevice } from '../utils'\n\nexport class BaseSvg<T extends {} = {}> extends EventDispatcher<T> {\n protected points: Vector3[] = [];\n\n protected svg: SVGElement;\n\n protected enable = true;\n\n constructor(public context: Context) {\n super()\n this.svg = createSvg(`${context.container.clientWidth}`, `${context.container.clientHeight}`)\n context.container.appendChild(this.svg)\n this._registryEvent()\n }\n\n private _onResize = ({ width, height }: { width: number; height: number }) => {\n if (this.svg) {\n this.svg.setAttribute(\"width\", `${width}`)\n this.svg.setAttribute(\"height\", `${height}`)\n }\n }\n\n private _registryEvent() {\n this.context.addEventListener(\"resize\", this._onResize)\n }\n\n private _unRegistryEvent() { \n this.context.removeEventListener(\"resize\", this._onResize)\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n if (enable) {\n this.svg.style.display = 'block';\n } else {\n this.svg.style.display = 'none';\n }\n }\n\n getIntersectByPointerEvent(e: PointerEvent) {\n const { camera, renderer } = this.context\n const { offsetX: x, offsetY: y } = e\n const { clientWidth, clientHeight } = renderer.domElement;\n const nx = x / clientWidth * 2 - 1;\n const ny = 1 - y / clientHeight * 2;\n\n const v = new Vector3(nx, ny, 0);\n\n return v.unproject(camera);\n }\n\n getSvgCoordinate(vector: Vector3) {\n const { camera, container } = this.context\n const coord = vector3ToDevice(vector, camera, container.clientWidth, container.clientHeight)\n return coord\n }\n \n dispose() {\n this._unRegistryEvent()\n this.context.container.removeChild(this.svg)\n this.svg = null as unknown as SVGElement\n }\n}", "import { Context } from \"../context\";\nimport { Vector3 } from \"three\";\nimport { setCirclePosition, createCircle, createLine, setLineStartEnd } from '../utils'\nimport { BaseSvg } from './base-svg'\n\ninterface SvgLineEventMap {\n 'distance': { distance: number }\n}\n\nexport class SvgLine extends BaseSvg<SvgLineEventMap> {\n\n public circles: SVGElement[] \n \n public line: SVGElement\n\n constructor(public context: Context) {\n super(context)\n const { config: { svg: { circle, line } } } = context\n this.circles = [createCircle(circle.radius, circle.fill), createCircle(circle.radius, circle.fill)]\n this.line = createLine(line.stroke)\n this.svg.appendChild(this.circles[0]);\n this.svg.appendChild(this.circles[1]);\n this.svg.appendChild(this.line);\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.addEventListener(\"pointermove\", this.onPointermove)\n this.context.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.addEventListener(\"pointerdown\", this.onPointerdown)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.context.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerdown)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (this.points[0]) {\n const point1 = this.getSvgCoordinate(this.points[0])\n setCirclePosition(this.circles[0], point1.x, point1.y)\n setLineStartEnd(this.line, point1)\n }\n if (this.points[1]) {\n const point2 = this.getSvgCoordinate(this.points[1])\n setCirclePosition(this.circles[1], point2.x, point2.y)\n setLineStartEnd(this.line, undefined, point2)\n }\n }\n \n \n onPointermove = (e: PointerEvent) => { \n // \u53EA\u5728\u6709\u7B2C\u4E00\u4E2A\u70B9\u7684\u65F6\u5019\u9700\u8981\n if (this.points.length !== 1) { return }\n this.line.style.display = \"block\";\n setLineStartEnd(this.line, undefined, { x: e.offsetX, y: e.offsetY })\n }\n \n onPointerleave = () => { \n if (this.points[1]) { return } // \u5982\u679C\u5DF2\u7ECF\u6709\u4E24\u4E2A\u70B9\u4E86\u5C31\u4E0D\u505A\u5904\u7406\n this.line.style.display = \"none\";\n }\n \n onPointerdown = (e: PointerEvent) => {\n if (this.points[1]) { return } // \u5982\u679C\u5DF2\u7ECF\u6709\u4E24\u4E2A\u70B9\u4E86\u5C31\u4E0D\u505A\u5904\u7406\n const point = this.getIntersectByPointerEvent(e)\n if (point) {\n const { offsetX: x, offsetY: y } = e\n // \u4FEE\u6539\u70B9\n const circle = this.circles[this.points.length]\n setCirclePosition(circle, x, y)\n if (!this.points.length) { \n // \u8BBE\u7F6E\u7EBF\u7684\u8D77\u59CB\u70B9\n setLineStartEnd(this.line, { x, y }, { x, y })\n }\n this.addPoint(point)\n }\n }\n\n addPoint(vector: Vector3) {\n this.points.push(vector)\n if (this.points.length >= 2) {\n const distance = this.calculatedDistance()\n this.dispatchEvent({ type: 'distance', distance })\n }\n }\n\n /**\n * \u8BA1\u7B97\u4E24\u4E2A\u70B9\u4E4B\u95F4\u7684\u8DDD\u79BB\n */\n calculatedDistance() { \n const [{ x: x1, y: y1 }, { x: x2, y: y2 }] = this.points\n return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)\n }\n \n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.line = null as unknown as SVGElement\n this.circles = []\n }\n}", "import { Context } from \"../context\";\nimport { BaseSvg } from \"./base-svg\";\nimport { setCirclePosition, setLineStartEnd, createLine, createCircle } from '../utils'\nimport { Vector3 } from \"three\";\n\ninterface SvgPolygonEventMap {\n 'area': { area: number }\n}\n\nexport class SvgPolygon extends BaseSvg<SvgPolygonEventMap> {\n\n public circles: SVGElement[] = []\n\n public lines: SVGElement[] = []\n\n public isClose = false\n\n constructor(context: Context) {\n super(context)\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n public get lastLine() {\n return this.lines.slice(-1)[0]\n }\n\n public addCircle(circle: SVGElement) {\n this.circles.push(circle)\n this.svg.appendChild(circle)\n }\n\n public addLine(line: SVGElement) {\n this.lines.push(line)\n this.svg.appendChild(line)\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.addEventListener(\"pointermove\", this.onPointermove)\n this.context.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.addEventListener(\"pointerdown\", this.onPointerdown)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.context.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerdown)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (this.points.length) {\n this.points.forEach((point, index) => {\n const devicePoint = this.getSvgCoordinate(point)\n if (this.circles[index]) {\n setCirclePosition(this.circles[index], devicePoint.x, devicePoint.y)\n }\n if (index !== 0) {\n setLineStartEnd(this.lines[index - 1], undefined, devicePoint)\n }\n if (this.lines[index]) {\n setLineStartEnd(this.lines[index], devicePoint)\n }\n }) \n }\n }\n \n \n onPointermove = (e: PointerEvent) => { \n // \u5FC5\u987B\u8981\u6709\u4E00\u4E2A\u70B9\u5E76\u4E14\u8FD8\u6CA1\u6709\u95ED\u5408\u624D\u9700\u8981\u5904\u7406\n if (!this.lastLine || this.isClose) { return }\n this.lastLine.style.display = \"block\";\n setLineStartEnd(this.lastLine, undefined, { x: e.offsetX, y: e.offsetY })\n }\n \n onPointerleave = () => { \n // \u5982\u679C\u5DF2\u7ECF\u95ED\u5408\u4E86\u5C31\u4E0D\u9700\u8981\u5904\u7406\u4E86\n if (this.isClose) { return } \n this.lastLine.style.display = \"none\";\n }\n \n onPointerdown = (e: PointerEvent) => {\n // \u5982\u679C\u5DF2\u7ECF\u95ED\u5408\u4E86\n if (this.isClose) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) {\n const { offsetX: x, offsetY: y } = e\n if (this.checkAdsorb(x, y)) {\n this.isClose = true\n this.addPoint(this.points[0])\n } else {\n this.addPoint(point)\n }\n const { circle: { fill, radius }, line: { stroke } } = this.context.config.svg\n if (!this.isClose) {\n // \u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u70B9\n const circle = createCircle(radius, fill)\n setCirclePosition(circle, x, y)\n this.addCircle(circle)\n }\n if (this.lines.length) {\n // \u5982\u679C\u5DF2\u7ECF\u6709\u4E00\u6761\u7EBF\u4E86 \u8981\u95ED\u5408\u8FD9\u6761\u7EBF\n setLineStartEnd(this.lastLine, undefined, { x, y })\n }\n // \u5982\u679C\u8FD9\u4E2A\u591A\u8FB9\u5F62\u8FD8\u6CA1\u6709\u95ED\u5408 \u5C31\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u7EBF \u5305\u62EC\u521B\u5EFA\u7B2C\u4E00\u6761\u7EBF\n if (!this.isClose) {\n const line = createLine(stroke)\n // \u8BBE\u7F6E\u7EBF\u7684\u8D77\u59CB\u70B9\n setLineStartEnd(line, { x, y }, { x, y })\n this.addLine(line)\n }\n }\n }\n\n /**\n * \u68C0\u6D4B\u662F\u5426\u53EF\u4EE5\u5438\u9644\n * \u5750\u6807\u70B9\u6700\u5C113\u4E2A \u4F20\u5165\u7684\u5750\u6807\u70B9\u548C\u7B2C\u4E00\u4E2A\u5750\u6807\u7684\u50CF\u7D20\u76F8\u5DEE\u4E0D\u8D85\u8FC75\u4E2A\u50CF\u7D20\n */\n checkAdsorb(x: number, y: number) {\n if (this.points.length < 3) { return false }\n const circle = this.circles[0]\n const cx = +circle.getAttribute(\"cx\")!\n const cy = +circle.getAttribute(\"cy\")!\n return Math.sqrt((x - cx) ** 2 + (y - cy) ** 2) <= 5\n }\n\n addPoint(vector: Vector3) {\n this.points.push(vector)\n if (this.isClose) {\n const area = this.calculatedArea()\n this.dispatchEvent({ type: 'area', area })\n }\n }\n // \u8BA1\u7B97\u9762\u79EF\n calculatedArea() {\n const cds = this.points.map(item => [item.x, item.y])\n let area = 0\n const numPoints = cds.length\n for (let i = 0; i < numPoints; i++) {\n const j = (i + 1) % numPoints\n area += (cds[i][0] * cds[j][1] - cds[j][0] * cds[i][1])\n }\n return Math.abs(area / 2)\n }\n\n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.lines = []\n this.circles = []\n }\n}", "import { Context } from \"../context\";\nimport { Box3 } from \"three\";\nimport { vector3ToDevice, createRect, setRectPosition } from '../utils'\nimport { BaseSvg } from './base-svg'\nimport { Graphic } from \"./graphic\";\n\ninterface SvgLineEventMap {\n 'distance': { distance: number }\n}\n\nexport class SelectBox extends BaseSvg<SvgLineEventMap> {\n\n public rect!: SVGElement\n\n public cornerRect: SVGElement[] = [] // \u56DB\u4E2A\u89D2\u4E0A\u7684\u65B9\u5757\n\n public centerRect: SVGElement[] = [] // \u56DB\u4E2A\u7EBF\u4E2D\u95F4\u7684\u65B9\u5757\n\n public graphic?: Graphic\n\n constructor(public context: Context) {\n super(context)\n const { config: { svg: { line } } } = context\n this.rect = createRect(line.stroke, \"transparent\")\n this.svg.appendChild(this.rect)\n for (let i = 0; i < 4; i++) {\n this.cornerRect[i] = createRect(line.stroke, \"#ffffff\")\n this.centerRect[i] = createRect(line.stroke, \"#ffffff\")\n this.svg.appendChild(this.cornerRect[i])\n this.svg.appendChild(this.centerRect[i])\n }\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n registryEvent() { \n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (!this.graphic) {\n setRectPosition(this.rect, 0, 0, 0, 0)\n for (let i = 0; i < this.cornerRect.length; i++) {\n setRectPosition(this.cornerRect[i], 0, 0, 0, 0)\n setRectPosition(this.centerRect[i], 0, 0, 0, 0)\n }\n } else {\n const box = new Box3().setFromObject(this.graphic)\n const { camera, container: { clientWidth: w, clientHeight: h } } = this.context\n const { min, max } = box\n const leftBottom = vector3ToDevice(min, camera, w, h)\n const rightTop = vector3ToDevice(max, camera, w, h)\n // \u753B\u51FA\u4E00\u4E2A\u6846\u6765\n setRectPosition(this.rect, leftBottom.x, rightTop.y, Math.abs(rightTop.x - leftBottom.x), Math.abs(rightTop.y - leftBottom.y))\n // \u56DB\u4E2A\u89D2\u7684\u4F4D\u7F6E\n const { x: left, y: bottom } = leftBottom\n const { x: right, y: top } = rightTop\n const halfWidth = 5;\n const corners = [\n { x: left - halfWidth, y: top - halfWidth }, // \u5DE6\u4E0A\u89D2\n { x: right - halfWidth, y: top - halfWidth }, // \u53F3\u4E0A\u89D2\n { x: left - halfWidth, y: bottom - halfWidth }, // \u5DE6\u4E0B\u89D2\n { x: right - halfWidth, y: bottom - halfWidth }, // \u53F3\u4E0B\u89D2 \n ]\n for (let i = 0; i < corners.length; i++) {\n setRectPosition(this.cornerRect[i], corners[i].x, corners[i].y, halfWidth * 2, halfWidth * 2)\n }\n // \u56DB\u4E2A\u4E2D\u95F4\u7684\u4F4D\u7F6E\n const centerHalfWidth = 4;\n const centerX = (left + right) / 2\n const centerY = (bottom + top) / 2\n const centers = [\n { x: centerX - centerHalfWidth, y: top - centerHalfWidth }, // \u4E0A\n { x: left - centerHalfWidth, y: centerY - centerHalfWidth }, // \u5DE6\n { x: right - centerHalfWidth, y: centerY - centerHalfWidth }, // \u53F3\n { x: centerX - centerHalfWidth, y: bottom - centerHalfWidth }, // \u4E0B\n ]\n for (let i = 0; i < centers.length; i++) {\n setRectPosition(this.centerRect[i], centers[i].x, centers[i].y, centerHalfWidth * 2, centerHalfWidth * 2)\n }\n }\n }\n \n selectGraphic(graphic: Graphic) { \n this.graphic = graphic\n }\n\n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.rect = null as unknown as SVGElement\n this.cornerRect = []\n this.centerRect = []\n }\n}", "import { PolygonGeometry } from \"../types\";\nimport { Context } from \"../context\";\nimport {\n BufferGeometry,\n Color,\n ExtrudeGeometry,\n LineBasicMaterial,\n LineSegments,\n Mesh,\n Object3D,\n ShaderMaterial,\n Vector3,\n} from \"three\";\nimport { darkenColor, initShape } from \"../utils\";\nimport { mergeGeometries } from \"three/examples/jsm/utils/BufferGeometryUtils\";\n\nexport interface WallOptions {\n id: string;\n height: number;\n fillColor: string;\n fillOpacity: number;\n strokeColor: string;\n strokeOpacity: number;\n geometry: PolygonGeometry;\n deltaHeight?: number;\n userData: Record<string, any>;\n}\n\nexport class Wall extends Object3D {\n public geometry?: BufferGeometry;\n\n public material?: ShaderMaterial;\n\n public lineMaterial?: LineBasicMaterial;\n\n public lineGeometry?: BufferGeometry;\n\n public Mesh?: Mesh;\n\n public LineMesh?: LineSegments;\n constructor(\n private context: Context,\n public options: WallOptions[]\n ) {\n super();\n if (!options.length) {\n return;\n }\n this.init();\n }\n\n initGeometry() {\n const geometries = this.options.map((option) => {\n const shape = initShape(\n option.geometry.coords[0],\n option.geometry.coords.slice(1)\n );\n const geometry = new ExtrudeGeometry(shape, {\n steps: 1,\n bevelEnabled: false,\n depth: option.height,\n curveSegments: 4,\n });\n return geometry;\n });\n // \u5408\u5E76geometry\n this.geometry = mergeGeometries(geometries);\n geometries.forEach((item) => item.dispose());\n }\n\n initMaterial() {\n // \u81EA\u5B9A\u4E49\u7684 ShaderMaterial\n const vertexShader = ` \n varying vec3 vPosition; // \u7528\u4E8E\u4F20\u9012\u9876\u70B9\u7684\u4F4D\u7F6E\u7ED9\u7247\u6BB5\u7740\u8272\u5668\n uniform float maxZ; // \u58F0\u660E\u4E00\u4E2Auniform\u53D8\u91CF\n uniform vec3 uColor;\n uniform vec3 uColor2; \n uniform float uOpacity; \n\n void main() { \n vPosition = position; // \u5411\u7247\u6BB5\u7740\u8272\u5668\u4F20\u9012\u4F4D\u7F6E \n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); \n } \n `;\n\n const fragmentShader = ` \n varying vec3 vPosition; // \u63A5\u6536\u9876\u70B9\u4F4D\u7F6E\n uniform float maxZ;\n uniform vec3 uColor;\n uniform vec3 uColor2;\n uniform float uOpacity; \n\n void main() { \n // \u5224\u65AD\u5F53\u524D\u9876\u70B9\u662F\u5426\u4E3A\u9876\u9762 \n if (vPosition.z >= maxZ) { \n gl_FragColor = vec4(uColor, uOpacity); //\uFF08\u9876\u9762\u989C\u8272\uFF09 \n } else { \n gl_FragColor = vec4(uColor2, uOpacity); // \u5176\u4ED6\u9762\u989C\u8272\uFF09 \n } \n } \n `;\n let maxZ = -Infinity; // \u521D\u59CB\u5316\u4E3A\u8D1F\u65E0\u7A77\n const positionAttribute = this.geometry!.getAttribute(\"position\");\n\n // \u904D\u5386\u6240\u6709\u9876\u70B9\n if (positionAttribute) {\n for (let i = 0; i < positionAttribute.count; i++) {\n const z = positionAttribute.getZ(i); // \u83B7\u53D6\u7B2C i \u4E2A\u9876\u70B9\u7684 z \u503C\n if (z > maxZ) {\n maxZ = z; // \u66F4\u65B0\u6700\u5927\u503C\n }\n }\n }\n\n // \u521B\u5EFA ShaderMaterial\n const shaderMaterial = new ShaderMaterial({\n uniforms: {\n maxZ: { value: maxZ }, // \u521D\u59CB\u5316maxZ\u7684\u503C\n uColor: { value: new Color(this.options[0].fillColor) }, // \u9876\u9762\u989C\u8272\n uColor2: { value: new Color(darkenColor(this.options[0].fillColor)) }, // \u4FA7\u9762\u989C\u8272\n uOpacity: { value: this.options[0].fillOpacity }, // \u900F\u660E\u5EA6\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n });\n this.material = shaderMaterial;\n }\n\n initLineMaterial() {\n const { strokeColor, strokeOpacity } = this.options[0];\n const lineMaterial = this.context.materialFactory.createLineMaterial({\n color: strokeColor,\n opacity: strokeOpacity,\n });\n this.lineMaterial = lineMaterial;\n return lineMaterial;\n }\n\n getBorderPoints(option: WallOptions) {\n const { height, deltaHeight, geometry } = option;\n const points = [];\n const _height = height + (deltaHeight || 0);\n // \u70B9\u7684\u5750\u6807\u8981\u81EA\u5DF1\u7B97\uFF0C\u53EA\u753B\u5173\u952E\u8282\u70B9\u7684\u5782\u76F4\u7EBFcurveIndex\u662F\u5173\u952E\u8282\u70B9,\u5982\u679C\u662F\u66F2\u7EBF\u6709\u8FD9\u4E2A\u503C\uFF0C\u4E0D\u662F\u66F2\u7EBF\u4E0D\u4E00\u5B9A\u6709\n const { coords } = geometry;\n for (let j = 0; j < coords.length; j++) {\n const curCds = coords[j];\n for (let i = 0; i < curCds.length; i++) {\n const cur = curCds[i];\n const next = i + 1 === curCds.length ? curCds[0] : curCds[i + 1];\n // \u628A\u62C9\u5347\u4E0A\u53BB\u7684\u70B9\u653E\u8FDB\u53BB\n points.push(new Vector3(cur[0], cur[1], _height));\n points.push(new Vector3(next[0], next[1], _height));\n }\n }\n return points;\n }\n\n initLineGeometry() {\n const geometries = this.options.map((option) => {\n const points = this.getBorderPoints(option);\n return new BufferGeometry().setFromPoints(points);\n });\n this.lineGeometry = mergeGeometries(geometries);\n }\n\n createBorder() {\n const line = new LineSegments(this.lineGeometry, this.lineMaterial);\n this.LineMesh = line;\n this.add(line);\n return line;\n }\n\n init() {\n this.initGeometry();\n this.initMaterial();\n const mesh = new Mesh(this.geometry, this.material);\n this.add(mesh);\n this.initLineMaterial();\n this.initLineGeometry();\n this.createBorder();\n }\n\n dispose() {\n this.geometry?.dispose();\n this.material?.dispose();\n this.lineGeometry?.dispose();\n this.clear();\n }\n}\n", "// \u8D34\u56FE\n\nimport { initShape, proxyOptions } from \"../utils\";\nimport { Context } from \"../context\";\nimport { Euler, ExtrudeGeometry, Mesh, MeshBasicMaterial, Object3D, Object3DEventMap, PlaneGeometry, Vector3 } from \"three\";\nimport { PolygonGeometry } from \"../types\";\n\nexport interface GroundTextureOptions {\n uuid: string;\n iconUrl: string;\n name: string;\n secondRotate: number;\n deltaHeight: number,\n airHeight: number;\n height: number;\n geometry: PolygonGeometry;\n opacity: number;\n visible: boolean;\n}\n\nexport const defaultOptions: GroundTextureOptions = {\n uuid: \"\",\n iconUrl: \"\",\n name: \"\",\n secondRotate: 0,\n airHeight: 0,\n deltaHeight: 0,\n height: 0,\n geometry: { cds: [], type: \"polygon\", coords: [], curveCpt: [], curveIndex: [] },\n opacity: 1,\n visible: true,\n};\n\ntype TextureEventMap = {\n [K in keyof GroundTextureOptions as `change-${K}`]: { value: GroundTextureOptions[K] };\n} & Object3DEventMap;\n\nexport type GroundTextureOptionsParam = Partial<GroundTextureOptions>;\n\nexport class GroundTexture extends Object3D {\n options: GroundTextureOptions;\n\n mesh?: Mesh;\n\n constructor(\n private context: Context,\n options: GroundTextureOptionsParam\n ) {\n super();\n this.options = proxyOptions<GroundTextureOptions, TextureEventMap>(\n { ...defaultOptions, ...options },\n this\n );\n this.init();\n }\n\n async init() { \n const { deltaHeight, airHeight, geometry, iconUrl, opacity } = this.options\n // \u521B\u5EFA\u4E00\u4E2A\u77E9\u5F62\u5E73\u9762\n const shape = initShape(\n geometry.coords[0],\n geometry.coords.slice(1)\n );\n const extrudeGeometry = new ExtrudeGeometry(shape, {\n steps: 1,\n bevelEnabled: false,\n depth: 0,\n curveSegments: 4,\n });\n const planeMaterial = await this.context.materialFactory.createGroundTextureMaterial({\n url: iconUrl,\n opacity: opacity,\n })\n const mesh = new Mesh(extrudeGeometry, planeMaterial)\n this.mesh = mesh\n this.mesh.position.z = airHeight + deltaHeight;\n this.add(mesh)\n }\n\n dispose() {\n this.mesh?.geometry.dispose()\n this.clear()\n }\n}\n", "import { Box3, Object3D, Vector3 } from \"three\";\nimport { Context } from \"../context\";\nimport { loadModel, dispose } from \"../utils\";\nimport { GLTF } from \"three/examples/jsm/loaders/GLTFLoader\";\nimport { PolygonGeometry } from \"src/types\";\n\nexport interface GlbModelOptions {\n url: string;\n geometry: PolygonGeometry;\n id: string;\n width: number;\n rotate: number;\n airHeight: number;\n deltaHeight: number;\n}\n\nconst defaultGlbOptions: GlbModelOptions = {\n url: \"\",\n geometry: { type: \"polygon\", cds: [], coords: [], curveCpt: [], curveIndex: [] },\n id: \"\",\n width: 0,\n rotate: 1,\n airHeight: 1,\n deltaHeight: 0\n}\n\nexport class GlbModel extends Object3D {\n\n model: GLTF | null = null\n\n options: GlbModelOptions;\n\n constructor(public context: Context, options: Partial<GlbModelOptions>) {\n super()\n this.options = Object.assign({}, defaultGlbOptions, options)\n this.loadModel()\n }\n \n async loadModel() { \n const object = await loadModel(this.options.url);\n object.scene.rotation.set(Math.PI / 2, Math.PI / 2, 0)\n const box = new Box3().setFromObject(object.scene);\n const size = box.getSize(new Vector3())\n const max = Math.max(size.x, size.y)\n const scale = this.options.width / max\n this.scale.set(scale, scale, scale)\n this.add(object.scene)\n this.position.copy(box.getCenter(new Vector3()))\n this.position.z += this.options.airHeight + this.options.deltaHeight\n this.model = object\n }\n\n dispose() {\n dispose(this)\n this.model = null\n }\n}", "import { PolygonGeometry } from \"../types\";\nimport { Context } from \"../context\";\nimport { BufferGeometry, ExtrudeGeometry, LineBasicMaterial, LineSegments, Mesh, MeshBasicMaterial, Object3D, Vector3 } from \"three\";\nimport { initShape } from \"../utils\";\nimport { mergeGeometries } from 'three/examples/jsm/utils/BufferGeometryUtils'\nimport { Line2 } from 'three/examples/jsm/lines/Line2'\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry'\n\nexport interface LaneOptions {\n id: string;\n airHeight: number;\n fillColor: string;\n fillOpacity: number;\n secondColor: string;\n secondWidth: number;\n strokeColor: string;\n strokeOpacity: number;\n geometry: PolygonGeometry;\n double: boolean;\n dashed: boolean;\n deltaHeight?: number;\n userData: Record<string, any>;\n}\n\nexport class Lane extends Object3D {\n\n public geometry?: BufferGeometry;\n\n public material?: MeshBasicMaterial;\n\n public lineMaterial?: LineBasicMaterial;\n\n public lineGeometry?: BufferGeometry;\n\n public Mesh?: Mesh;\n\n public LineMesh?: LineSegments;\n constructor(private context: Context, public options: LaneOptions[]) {\n super();\n if (!options.length) { return }\n this.init() \n }\n\n initGeometry() {\n const geometries = this.options.map(option => { \n const shape = initShape(\n option.geometry.coords[0],\n option.geometry.coords.slice(1)\n );\n const geometry = new ExtrudeGeometry(shape, {\n steps: 1,\n bevelEnabled: false,\n depth: 0,\n curveSegments: 4,\n });\n return geometry;\n })\n // \u5408\u5E76geometry\n this.geometry = mergeGeometries(geometries); \n geometries.forEach(item => item.dispose())\n }\n\n initMaterial() { \n const { fillColor, fillOpacity } = this.options[0]\n const material = this.context.materialFactory.createMeshBasicMaterial({\n color: fillColor,\n opacity: fillOpacity,\n });\n this.material = material;\n return material\n }\n\n initLineMaterial() {\n const { strokeColor, strokeOpacity } = this.options[0]\n const lineMaterial = this.context.materialFactory.createLineMaterial({\n color: strokeColor,\n opacity: strokeOpacity,\n });\n this.lineMaterial = lineMaterial;\n return lineMaterial;\n }\n\n getBorderPoints(option: LaneOptions) {\n const { deltaHeight, geometry } = option;\n const points = [];\n const _height = (deltaHeight || 0);\n // \u70B9\u7684\u5750\u6807\u8981\u81EA\u5DF1\u7B97\uFF0C\u53EA\u753B\u5173\u952E\u8282\u70B9\u7684\u5782\u76F4\u7EBFcurveIndex\u662F\u5173\u952E\u8282\u70B9,\u5982\u679C\u662F\u66F2\u7EBF\u6709\u8FD9\u4E2A\u503C\uFF0C\u4E0D\u662F\u66F2\u7EBF\u4E0D\u4E00\u5B9A\u6709\n const { coords } = geometry;\n for (let j = 0; j < coords.length; j++) {\n const curCds = coords[j];\n for (let i = 0; i < curCds.length; i++) {\n const cur = curCds[i];\n const next = i + 1 === curCds.length ? curCds[0] : curCds[i + 1];\n // \u628A\u62C9\u5347\u4E0A\u53BB\u7684\u70B9\u653E\u8FDB\u53BB\n points.push(new Vector3(cur[0], cur[1], _height));\n points.push(new Vector3(next[0], next[1], _height));\n }\n }\n return points;\n }\n\n initDoubleLine() { \n const options = this.options.filter(option => option.double && option.geometry.otherCoords?.[1]?.length);\n if (!options.length) { return }\n // \u5148\u6309\u7167\u8F66\u9053\u4E2D\u95F4\u7EBF\u7684\u989C\u8272\u505A\u4E2A\u5206\u7EC4\n const group = options.reduce((obj, cur) => { \n const key = `${cur.secondColor}-${cur.dashed}`\n if (obj[key]) {\n obj[key].push(cur)\n }\n if (!obj[key]) {\n obj[key] = [cur]\n }\n return obj\n }, {} as Record<string, LaneOptions[]>)\n Object.values(group).map(options => {\n const material = this.context.materialFactory.createLine2MaterialMap({\n color: options[0].secondColor,\n width: 0.2,\n dashed: options[0].dashed,\n })\n options.map(option => { \n const geometry = new LineGeometry()\n const vec = option.geometry.otherCoords![1].map(item => [...item, 0]).flat(2)\n geometry.setPositions(vec);\n const line = new Line2(geometry, material);\n line.computeLineDistances()\n line.position.z += 0.001;\n this.add(line)\n })\n })\n }\n\n initLineGeometry() {\n const geometries = this.options.map(option => { \n const points = this.getBorderPoints(option);\n return new BufferGeometry().setFromPoints(points);\n })\n this.lineGeometry = mergeGeometries(geometries);\n }\n\n createBorder() {\n const line = new LineSegments(this.lineGeometry, this.lineMaterial);\n this.LineMesh = line;\n this.add(line);\n return line;\n }\n\n init() { \n this.initGeometry();\n this.initMaterial();\n const mesh = new Mesh(this.geometry, this.material);\n this.add(mesh)\n this.initLineMaterial();\n this.initLineGeometry();\n this.createBorder();\n this.initDoubleLine();\n this.position.z += 0.001 + (this.options[0].deltaHeight || 0);\n }\n\n dispose() {\n this.geometry?.dispose();\n this.lineGeometry?.dispose();\n this.clear();\n }\n \n}", "import { createRect, isContain, setRectPosition, vector3ToDevice } from \"../../utils\";\nimport { Context } from \"../../context\";\nimport { BaseSvg, Graphic } from \"../../elements\";\nimport { Frustum, Vector3 } from \"three\";\n\ninterface BoxSelectionEventMap { \n \"selected\": {\n list: Graphic[]\n }\n}\n\nexport class BoxSelection extends BaseSvg<BoxSelectionEventMap> {\n\n public startPoint?: Vector3;\n\n public endPoint?: Vector3;\n\n rect: SVGElement;\n\n frustum = new Frustum();\n\n constructor(context: Context) { \n super(context);\n const { config: { selectBox: { fill, stroke } } } = context\n this.rect = createRect(stroke, fill)\n this.svg.appendChild(this.rect)\n this.registryEvent()\n }\n\n setEnable(enable: boolean): void {\n super.setEnable(enable)\n setRectPosition(this.rect, 0, 0, 0, 0)\n if (enable) {\n this.registryEvent()\n } else {\n this.startPoint = undefined\n this.unRegistryEvent()\n }\n }\n\n onPointerDown = (e: PointerEvent) => { \n if (!this.enable) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.startPoint = point\n }\n this.endPoint = undefined;\n }\n\n onPointerMove = (e: PointerEvent) => { \n if (!this.enable || !this.startPoint) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.endPoint = point\n }\n }\n\n onPointerUp = (e: PointerEvent) => { \n if (!this.enable) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.endPoint = point\n }\n this.doSelect()\n this.startPoint = undefined\n }\n\n onUpdate = () => {\n if (this.startPoint) {\n const startPoint = this.getSvgCoordinate(this.startPoint)\n let endPoint = { ...startPoint }\n if (this.endPoint) {\n endPoint = this.getSvgCoordinate(this.endPoint)\n }\n const leftTop = { x: Math.min(startPoint.x, endPoint.x), y: Math.min(startPoint.y, endPoint.y) }\n const width = Math.abs(endPoint.x - startPoint.x)\n const height = Math.abs(endPoint.y - startPoint.y)\n setRectPosition(this.rect, leftTop.x, leftTop.y, width, height)\n } else {\n setRectPosition(this.rect, 0, 0, 0, 0)\n }\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.addEventListener(\"pointermove\", this.onPointerMove)\n this.context.container.addEventListener(\"pointerup\", this.onPointerUp)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.removeEventListener(\"pointermove\", this.onPointerMove)\n this.context.container.removeEventListener(\"pointerup\", this.onPointerUp)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n doSelect() { \n if (this.startPoint && this.endPoint) {\n const dis = this.startPoint.distanceTo(this.endPoint);\n if (dis < 0.1) { return }\n const { context: { camera, container: { clientWidth: w, clientHeight: h } } } = this\n const startDevice = vector3ToDevice(this.startPoint!, camera, w, h)\n const endDevice = vector3ToDevice(this.endPoint!, camera, w, h)\n const leftTop = { x: Math.min(startDevice.x, endDevice.x), y: Math.min(startDevice.y, endDevice.y) }\n const rightBottom = { x: Math.max(startDevice.x, endDevice.x), y: Math.max(startDevice.y, endDevice.y) }\n const list = this.searchMapInFrustum(leftTop, rightBottom);\n this.dispatchEvent({ type: \"selected\", list })\n }\n }\n\n searchMapInFrustum(leftTop: { x: number, y: number }, rightBottom: { x: number, y: number }): Graphic[] {\n const { context } = this\n return context.currentFloor?.graphicLayer.children.filter(item => {\n return item instanceof Graphic && this.searchChildInFrustum(item, leftTop, rightBottom)\n }) as Graphic[] || []\n }\n\n searchChildInFrustum(object: Graphic, leftTop: { x: number, y: number }, rightBottom: { x: number, y: number }): boolean {\n const { context: { camera, container: { clientWidth: w, clientHeight: h } } } = this\n if (!object) return false;\n if (!object.mesh) { \n // \u70B9\n const position = object.getPosition()\n if (position) {\n const position2d = vector3ToDevice(position, camera, w, h)\n return isContain(position2d, leftTop, rightBottom)\n }\n return false\n }\n if (!object.mesh.geometry.boundingBox) {\n object.mesh.geometry.computeBoundingBox();\n }\n const box = object.mesh.geometry.boundingBox;\n if (!box) { return false }\n const { min, max } = box\n const minDevice = vector3ToDevice(min, camera, w, h)\n const maxDevice = vector3ToDevice(max, camera, w, h)\n \n if (!isContain(minDevice, leftTop, rightBottom)) { return false }\n if (!isContain(maxDevice, leftTop, rightBottom)) { return false; }\n return true;\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}\n\n", "import { Graphic, Poi } from \"../../elements\";\nimport { Context } from \"../../context\";\nimport { EventDispatcher } from \"three\";\nimport { Timer } from \"../../utils\";\nimport { debounce } from \"lodash\";\n\ninterface HoverHelperEventMap {\n \"hover-change\": {\n graphics: Graphic[]\n },\n}\n\nexport class HoverHelper extends EventDispatcher<HoverHelperEventMap> { \n\n curGraphics = new Set<Graphic>()\n\n timer = new Timer()\n\n graphicTimerMap = new Map<Graphic, number>()\n \n constructor(private context: Context) {\n super()\n this.registryEvent()\n }\n\n onPointerMove = ({ graphics, pois, e }: { graphics: Graphic[], pois: Poi[], e: PointerEvent }) => {\n const poiGraphics = pois\n .map(item => this.context.currentFloor?.graphicLayer.graphicMap.get(item.options.id))\n .filter(graphic => graphic && graphic.options.geometry.type === \"point\") as Graphic[]\n if (!graphics.length && !poiGraphics.length && this.curGraphics.size) {\n this.curGraphics.clear()\n this.handleHoverGraphicsChange()\n return\n }\n const { time } = this.context.config.hover\n const allGraphics = new Set<Graphic>()\n if (poiGraphics.length) { \n // \u627E\u79BB\u4E2D\u5FC3\u70B9\u6700\u65B0\u7684\u90A3\u4E2A\n let resGraphic: Graphic;\n let distance = 10000;\n poiGraphics.forEach(graphic => { \n const poi = pois.find(poi => poi.options.id === graphic.options.id)!\n const { x, y } = poi.clientPos\n let curDistance = Math.sqrt((x - e.offsetX) ** 2 + (y - e.offsetY) ** 2)\n if (curDistance < distance) {\n distance = curDistance\n resGraphic = graphic\n }\n })\n allGraphics.add(resGraphic!)\n }\n if (!allGraphics.size) { \n graphics.forEach(graphic => allGraphics.add(graphic))\n }\n allGraphics.forEach((graphic) => {\n // \u5982\u679C\u5DF2\u7ECF\u6709hover\u7684\u5B9A\u65F6\u5668\u5728\u6267\u884C\u4E86\u5C31\u8FD4\u56DE\n if (this.graphicTimerMap.get(graphic)) { \n return\n }\n // \u5982\u679C\u8FD9\u4E2A\u5143\u7D20\u7684hover\u5DF2\u7ECF\u89E6\u53D1\u8FC7\u4E86\u5C31\u8FD4\u56DE\n if (this.curGraphics.has(graphic)) { \n return\n }\n // \u8FD9\u4E2A\u5143\u7D20\u6CA1\u6709\u89E6\u53D1\u8FC7\u4E5F\u6CA1\u6709\u5B9A\u65F6\u5668\u5C31\u6DFB\u52A0\u4E00\u4E2A\u5B9A\u65F6\u5668\n const timer = this.timer.setTimeout(() => {\n this.curGraphics.add(graphic)\n this.graphicTimerMap.delete(graphic)\n this.timer.clearTimeout(timer)\n this.handleHoverGraphicsChange()\n }, time)\n this.graphicTimerMap.set(graphic, timer)\n })\n // \u5982\u679C\u5B9A\u65F6\u5668\u7684\u5143\u7D20\u4E0D\u5B58\u5728\u5728\u5F53\u524Dgraphics\u4E2D\u4E86\u5C31\u5220\u9664\n this.graphicTimerMap.forEach((timer, graphic) => { \n if (!allGraphics.has(graphic)) { \n this.timer.clearTimeout(timer)\n this.graphicTimerMap.delete(graphic)\n }\n })\n // \u5982\u679C\u5DF2\u7ECFhover\u7684\u5143\u7D20\u4E0D\u5B58\u5728\u5728\u5F53\u524D\u7684graphics\u4E86\u5C31\u5220\u9664\n const size = this.curGraphics.size\n this.curGraphics.forEach((graphic) => { \n if (!allGraphics.has(graphic)) { \n this.curGraphics.delete(graphic)\n }\n })\n // \u5982\u679C\u6709\u5220\u9664\u5C31\u89E6\u53D1\u4E8B\u4EF6\n if (size !== this.curGraphics.size) {\n this.handleHoverGraphicsChange()\n }\n }\n\n onPointerLevel = () => {\n this.curGraphics.clear()\n this.handleHoverGraphicsChange()\n }\n\n onBodyPointerMove = (e: PointerEvent) => { \n if (this.curGraphics.size) {\n // \u5224\u65AD\u9F20\u6807\u662F\u4E0D\u662F\u4E0D\u5728container\u8303\u56F4\u4E86\n const rect = this.context.container.getBoundingClientRect()\n if (e.clientX < rect.left || e.clientX > rect.right || e.clientY < rect.top || e.clientY > rect.bottom) {\n this.onPointerLevel()\n }\n }\n }\n\n handleHoverGraphicsChange(graphics = this.curGraphics) { \n this.dispatchEvent({ type: 'hover-change', graphics: Array.from(graphics) })\n }\n\n registryEvent() {\n this.context.addEventListener(\"pointer-over\", this.onPointerMove)\n this.context.addEventListener(\"pointer-move\", this.onPointerMove)\n this.context.addEventListener(\"pointer-level\", this.onPointerLevel)\n document.body.addEventListener(\"pointermove\", this.onBodyPointerMove)\n }\n\n unRegistryEvent() {\n this.context.removeEventListener(\"pointer-over\", this.onPointerMove)\n this.context.removeEventListener(\"pointer-move\", this.onPointerMove)\n this.context.removeEventListener(\"pointer-level\", this.onPointerLevel)\n document.body.removeEventListener(\"pointermove\", this.onBodyPointerMove)\n }\n\n dispose() {\n this.unRegistryEvent()\n this.timer.dispose()\n }\n}", "import { LineMaterial } from \"three/examples/jsm/lines/LineMaterial\";\nimport { Context } from \"../context\";\nimport {\n Color,\n LineBasicMaterial,\n MeshStandardMaterial,\n MeshBasicMaterial,\n ShaderMaterial,\n Vector3,\n DoubleSide,\n Vector2\n} from \"three\";\n\nfunction vectorToString(vector: Vector3) {\n return `${vector.x}-${vector.y}-${vector.z}`;\n}\n\ninterface LineMaterialOptions {\n color: string;\n opacity: number;\n}\n\ninterface MeshStandardMaterialOptions {\n color: string;\n opacity: number;\n}\n\ninterface MeshBasicMaterialOptions {\n color: string;\n opacity: number;\n}\n\ninterface ShaderMaterialOptions {\n gradualColor: string[];\n center: Vector3;\n maxValue: number;\n opacity: number;\n direction: Vector3;\n max: Vector3;\n min: Vector3;\n}\n\ninterface GroundTextureMaterialOptions {\n url: string;\n opacity: number;\n}\n\ninterface Line2MaterialMapOptions {\n color: string;\n width: number;\n dashed: boolean;\n}\n\n\nexport class MaterialFactory {\n private lineMaterialMap = new Map<string, LineBasicMaterial>();\n\n private meshStandardMaterialMap = new Map<string, MeshStandardMaterial>();\n\n private meshBasicMaterialMap = new Map<string, MeshBasicMaterial>();\n\n private shaderMaterialMap = new Map<string, ShaderMaterial>();\n\n private groundTextureMaterialMap = new Map<string, MeshBasicMaterial>();\n\n private line2MaterialMap = new Map<string, LineMaterial>();\n\n constructor(private context: Context) {}\n\n generateLineMaterialKey({ color, opacity }: LineMaterialOptions) {\n return `${color}-${opacity}`;\n }\n\n createLineMaterial({ color, opacity }: LineMaterialOptions) {\n const key = this.generateLineMaterialKey({ color, opacity });\n if (this.lineMaterialMap.has(key)) {\n return this.lineMaterialMap.get(key)!;\n }\n const lineMaterial = new LineBasicMaterial({\n color: new Color(color).convertLinearToSRGB(),\n transparent: true,\n opacity: opacity,\n });\n this.lineMaterialMap.set(key, lineMaterial);\n return lineMaterial;\n }\n\n createMeshStandardMaterial({ color, opacity }: MeshStandardMaterialOptions) {\n const key = `${color}-${opacity}`;\n if (this.meshStandardMaterialMap.has(key)) {\n return this.meshStandardMaterialMap.get(key)!;\n }\n const material = new MeshStandardMaterial({\n color: new Color(color).convertLinearToSRGB(),\n roughness: 1,\n transparent: true,\n opacity: opacity,\n depthWrite: true,\n });\n this.meshStandardMaterialMap.set(key, material);\n return material;\n }\n\n createMeshBasicMaterial({ color, opacity }: MeshBasicMaterialOptions) {\n const key = `${color}-${opacity}`;\n if (this.meshBasicMaterialMap.has(key)) {\n return this.meshBasicMaterialMap.get(key)!;\n }\n const material = new MeshBasicMaterial({\n color: color,\n transparent: true,\n opacity: opacity,\n depthWrite: true,\n });\n this.meshBasicMaterialMap.set(key, material);\n return material;\n }\n\n createShaderMaterial({\n gradualColor,\n center,\n maxValue,\n opacity,\n direction,\n max,\n min,\n }: ShaderMaterialOptions) {\n const key = `${gradualColor.toString()}-${vectorToString(\n center\n )}-${maxValue}-${opacity}-${vectorToString(direction)}`;\n if (this.shaderMaterialMap.has(key)) {\n return this.shaderMaterialMap.get(key)!;\n }\n // \u81EA\u5B9A\u4E49\u7740\u8272\u5668\u4EE3\u7801\n const vertexShader = `\n uniform vec3 uColor;\n uniform vec3 uGradualColor;\n uniform vec3 center;\n uniform vec3 uDirection;\n uniform vec3 uMax;\n uniform vec3 uMin;\n uniform float maxValue;\n varying vec3 vColor; \n\n void main() {\n vec3 lineVec = uMax - uMin; // \u7EBF\u6BB5AB\u7684\u65B9\u5411\u5411\u91CF\n vec3 AP = position - uMin; // \u5411\u91CFAP\n float t = dot(AP, lineVec) / dot(lineVec, lineVec); // \u53C2\u6570t\n t = clamp(t, 0.0, 1.0); // \u9650\u5236t\u5728[0, 1]\u8303\u56F4\u5185\uFF0C\u786E\u4FDD\u6700\u77ED\u8DDD\u79BB\u5728\u7EBF\u6BB5AB\u4E0A\n \n vec3 closestPoint = uMin + t * lineVec; // \u6700\u77ED\u8DDD\u79BB\u70B9\u7684\u4F4D\u7F6E\n vec3 vecAP = closestPoint - uMin; // \u5411\u91CFAP'\n float distance = length(vecAP);\n float maxLen = length(lineVec);\n\n vec3 direction = normalize(uDirection);\n float gradient = dot(normalize(normal), normalize(uDirection));\n vec3 currentPosition = position - center;\n // float colorFactor = (dot(direction, currentPosition) / maxValue) * 0.5 + 0.5;\n float colorFactor = distance / maxLen;\n\n vColor = mix(uColor, uGradualColor, 1.0 - t);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `;\n\n const fragmentShader = `\n varying vec3 vColor;\n uniform float opacity;\n\n void main() {\n gl_FragColor = vec4(vColor.x, vColor.y, vColor.z, opacity);\n }\n `;\n\n // \u521B\u5EFA\u81EA\u5B9A\u4E49ShaderMaterial\n const material = new ShaderMaterial({\n uniforms: {\n uColor: {\n value: new Color(gradualColor[0]).convertLinearToSRGB(),\n },\n uGradualColor: {\n value: new Color(gradualColor[1]).convertLinearToSRGB(),\n },\n center: {\n value: center,\n },\n maxValue: {\n value: maxValue,\n },\n opacity: {\n value: opacity,\n },\n uDirection: {\n value: direction,\n },\n uMax: {\n value: max,\n },\n uMin: {\n value: min,\n },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n side: DoubleSide,\n });\n this.shaderMaterialMap.set(key, material);\n return material;\n }\n\n async createGroundTextureMaterial({ url, opacity }: GroundTextureMaterialOptions) {\n const key = `${url}-${opacity}`\n if (this.groundTextureMaterialMap.has(key)) {\n return this.groundTextureMaterialMap.get(key)!\n }\n const texture = await this.context.textureFactory.getTexture(url)\n const material = new MeshBasicMaterial({\n map: texture,\n transparent: true,\n opacity,\n })\n this.groundTextureMaterialMap.set(key, material)\n return material\n }\n\n createLine2MaterialMap({ color, width, dashed }: Line2MaterialMapOptions) {\n const key = `${color}-${width}-${dashed}`\n if (this.line2MaterialMap.has(key)) {\n return this.line2MaterialMap.get(key)!\n }\n const material = new LineMaterial({\n color: parseInt(color.slice(1), 16),\n dashed,\n linewidth: width,\n worldUnits: true,\n dashSize: 1,\n gapSize: 3,\n dashScale: 1,\n resolution: new Vector2(this.context.clientSize.width, this.context.clientSize.height)\n })\n this.line2MaterialMap.set(key, material)\n return material\n }\n\n dispose() {\n this.lineMaterialMap.forEach((val, _) => {\n val.dispose();\n });\n this.lineMaterialMap.clear();\n\n this.meshStandardMaterialMap.forEach((val, _) => {\n val.dispose();\n });\n this.meshStandardMaterialMap.clear();\n\n this.meshBasicMaterialMap.forEach((val, _) => {\n val.dispose();\n });\n this.meshBasicMaterialMap.clear();\n\n this.shaderMaterialMap.forEach((val, _) => {\n val.dispose();\n });\n this.shaderMaterialMap.clear();\n\n this.groundTextureMaterialMap.forEach((val, _) => { \n val.dispose()\n val.map?.dispose()\n })\n this.groundTextureMaterialMap.clear()\n\n this.line2MaterialMap.forEach((val, _) => { \n val.dispose()\n })\n this.line2MaterialMap.clear()\n }\n}\n", "import { Box3, Group, Vector3 } from \"three\";\nimport { Context } from \"../context\";\nimport { vector3ToDevice } from \"./coordinate\";\nimport { Floor } from \"../elements\";\n\nexport class CameraBound {\n private prevCamera = {\n position: new Vector3(),\n zoom: 1,\n target: new Vector3()\n }\n\n private enable = true;\n\n constructor(private context: Context) {\n this.registryEvent()\n this.changePrevCamera()\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n changePrevCamera() {\n this.prevCamera = {\n position: this.context.camera.position.clone(),\n zoom: this.context.camera.zoom,\n target: this.context.control.target.clone()\n }\n }\n\n backToPrevCamera() {\n this.setEnable(false)\n this.context.camera.position.copy(this.prevCamera.position)\n this.context.camera.zoom = this.prevCamera.zoom;\n this.context.control.target.copy(this.prevCamera.target)\n this.context.control.update()\n this.setEnable(true)\n }\n\n registryEvent() { \n this.context.addEventListener(\"control-change\", this.onCameraChange)\n }\n\n unRegistryEvent() {\n this.context.removeEventListener(\"control-change\", this.onCameraChange)\n }\n\n getCurFloorScreenPosition() {\n const floors = this.context.scene.children.filter(el => el instanceof Floor)\n if (!floors.length) {\n return null\n }\n const box = new Box3().setFromObject(this.context.scene);\n const { camera, clientSize: { width: w, height: h } } = this.context\n const { min, max } = box\n const lb = vector3ToDevice(min, camera, w, h)\n const rt = vector3ToDevice(max, camera, w, h)\n const lt = vector3ToDevice(new Vector3(min.x, max.y, max.z), camera, w, h)\n const rb = vector3ToDevice(new Vector3(max.x, min.y, min.z), camera, w, h)\n const left = Math.min(lb.x, rt.x, lt.x, rb.x)\n const right = Math.max(lb.x, rt.x, lt.x, rb.x)\n const top = Math.min(lb.y, rt.y, lt.y, rb.y)\n const bottom = Math.max(lb.y, rt.y, lt.y, rb.y)\n return { left, right, top, bottom }\n }\n\n /**\n * \u68C0\u6D4B\u5730\u56FE\u662F\u4E0D\u662F\u5728\u663E\u793A\u8303\u56F4\n * @param param0 \n * @returns \n */\n checkDistanceToScreenEdge({ left, right, top, bottom }: { left: number, right: number, top: number, bottom: number }) { \n const { width, height } = this.context.clientSize\n const [pt, pr, pb, pl] = this.context.config.cameraBound.padding\n // \u5224\u65AD\u53F3\u8FB9\u662F\u4E0D\u662F\u8D85\u51FA true \u6CA1\u6709\u8D85\u51FA\n const checkedRight = right >= pl;\n const checkedLeft = (width - left) >= pr;\n const checkedTop = (height - top) >= pb;\n const checkedBottom = bottom >= pt;\n return checkedRight && checkedLeft && checkedTop && checkedBottom\n }\n\n onCameraChange = () => {\n // \u5224\u65AD\u5982\u679C\u8D85\u51FA\u5C31\u7528\u4E4B\u524D\u7684prevCamera\n // \u83B7\u53D6\u5730\u56FE\u7684\u5C4F\u5E55\u4F4D\u7F6E\n // \u5148\u4E0D\u505A\u8FB9\u754C\u5224\u65AD\n const bound = this.getCurFloorScreenPosition();\n if (bound) {\n const { left, right, top, bottom } = bound\n const isInBound = this.checkDistanceToScreenEdge({ left, right, top, bottom });\n if (isInBound) {\n this.changePrevCamera()\n } else {\n this.backToPrevCamera()\n }\n }\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}", "import { Texture, TextureLoader } from \"three\";\nimport { Context } from \"../context\";\n\nexport class TextureFactory {\n \n textureMap: Map<string, Texture> = new Map()\n\n loader = new TextureLoader()\n \n constructor(private context: Context) { }\n \n async getTexture(url: string): Promise<Texture> {\n if (this.textureMap.has(url)) {\n return this.textureMap.get(url)!\n }\n const texture = await this.loader.loadAsync(url)\n this.textureMap.set(url, texture)\n return texture\n }\n\n dispose() {\n this.textureMap.forEach(texture => {\n texture.dispose()\n })\n this.textureMap.clear()\n }\n}", "import { merge } from 'lodash'\nimport { HeatmapConfiguration } from '@mars3d/heatmap.js'\n\nexport interface Config {\n apiDomain: string,\n apiInfo: RequestInit,\n apiPath: {\n floorGraphic: string,\n floorRange: string,\n equipmentList: string,\n roadNetwork: string,\n },\n resizeObserver: boolean;\n heatMap: Partial<HeatmapConfiguration>,\n useFloorCache: boolean;\n control: {\n maxPolar: number;\n defaultPolar: number;\n defaultAzimuthal: number;\n },\n defaultPadding: [number, number, number, number];\n initTransToMark: boolean;\n svg: {\n circle: {\n radius: string;\n fill: string;\n },\n line: {\n stroke: string;\n }\n },\n selectBox: {\n stroke: string;\n fill: string;\n },\n hover: {\n time: number;\n },\n ground: {\n color: string;\n opacity: number;\n height: number;\n stroke: boolean,\n strokeColor: string,\n strokeOpacity: number\n },\n markGraphic: {\n color: string;\n opacity: number;\n height: number;\n stroke: boolean;\n strokeColor: string;\n strokeOpacity: number;\n },\n graphic: {\n fillOpacity: number,\n },\n cameraBound: {\n padding: [number, number, number, number]\n },\n poi: {\n boxScale: number;\n }\n}\n\nexport const defaultConfig: Config = {\n apiDomain: \"\",\n apiInfo: {},\n apiPath: {\n floorGraphic: \"/api/inception-map/floor/get\",\n floorRange: \"/api/inception-map/range/get\",\n equipmentList: \"/api/inception-map/equipment/get\",\n roadNetwork: \"/api/inception-map/road_network/get\"\n },\n resizeObserver: false,\n initTransToMark: false,\n heatMap: {\n radius: 50,\n gradient: {\n 0: '#8F9FCD',\n 0.5: '#6284FF',\n 1: '#F95D5D',\n },\n },\n useFloorCache: true,\n control: {\n maxPolar: 1.2,\n defaultPolar: 1.1,\n defaultAzimuthal: 0,\n },\n defaultPadding: [20, 20, 20, 20],\n svg: {\n circle: {\n radius: \"2\",\n fill: \"#1CADFF\"\n },\n line: {\n stroke: \"#1CADFF\"\n }\n },\n selectBox: {\n stroke: \"#1CADFF\",\n fill: \"rgba(28, 173, 255, 0.3)\"\n },\n hover: {\n time: 100\n },\n ground: {\n color: \"#F6F6F6\",\n opacity: 1,\n height: 0.001,\n stroke: false, \n strokeColor: \"#E6E6E6\",\n strokeOpacity: 1\n },\n markGraphic: {\n color: \"#EEF0F3\",\n opacity: 1,\n height: 0.001,\n stroke: false,\n strokeColor: \"#000\",\n strokeOpacity: 1\n },\n graphic: {\n fillOpacity: 1,\n },\n cameraBound: {\n padding: [150, 150, 150, 150]\n },\n poi: {\n boxScale: 1.0\n }\n}\n\nexport function getConfig(config: Partial<Config>): Config {\n return merge({}, defaultConfig, config);\n}", "import { Config } from \"../config\";\nimport { GraphicInfo, ResGraphicInfo, LoadQuery } from \"../types\";\n\ntype BuildingGroundQuery = Omit<LoadQuery, \"floor\" | \"ts\" | \"resource_type_list\">;\n\n/**\n * \u8BF7\u6C42\u697C\u680B\u5730\u9762\n */\nexport async function loadBuildingGround({ brand, project }: BuildingGroundQuery, config: Config): Promise<GraphicInfo | null> {\n const {\n apiDomain,\n apiPath: { floorRange },\n apiInfo,\n } = config;\n const url = `${apiDomain}${floorRange}?brand=${brand}&project=${project}&phase=${project}&building=${project}`;\n const data = await fetch(url, apiInfo)\n .then((res) => res.json())\n .then((res) => res.data)\n .then((res: ResGraphicInfo[]): GraphicInfo | null => {\n const data = (res || [])[0];\n if (data) {\n data.info = JSON.parse(data.info);\n }\n return data as unknown as GraphicInfo | null;\n });\n return data;\n}\n\n/**\n * \u52A0\u8F7D\u56FE\u5143\n * @param param0 \n * @param config \n * @returns \n */\nexport async function loadGraphics({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n}: LoadQuery, config: Config): Promise<GraphicInfo[]> {\n const {\n apiDomain,\n apiPath: { floorGraphic },\n apiInfo,\n } = config;\n const url = `${apiDomain}${floorGraphic}?brand=${brand}&project=${project}&phase=${project}&building=${project}&floor=${floor}&ts=${ts}&resource_type_list=${resource_type_list}`;\n const data = await fetch(url, apiInfo)\n .then((res) => res.json())\n .then((res) => res.data)\n .then((res: ResGraphicInfo[]): GraphicInfo[] => {\n (res || []).map((item) => (item.info = JSON.parse(item.info)));\n return (res || []) as unknown as GraphicInfo[];\n });\n return data;\n}\n", "import { BMap } from \"../bmap\";\nimport { EventDispatcher } from 'three'\n\nexport class Plugin<T extends {} = {}> extends EventDispatcher<T> {\n\n bmap: BMap;\n\n constructor(bmap: BMap) {\n super()\n this.bmap = bmap;\n }\n\n dispose() {}\n \n}", "import { BMap } from \"../../bmap\";\nimport { Plugin } from \"../base\";\nimport { HooksName } from \"../../utils\";\nimport { Graphic } from \"../../elements\";\n\nexport interface EquipmentData {\n equipment_id: string;\n equipment_name: string;\n equipment_icon: string;\n}\n\ninterface EventMap {\n \"change-equipment-list\": {\n data: EquipmentData[]\n };\n}\n\nexport class Equipment extends Plugin<EventMap> {\n equipmentList: EquipmentData[] = [];\n\n equipmentMap: Map<string, EquipmentData> = new Map();\n\n constructor(bmap: BMap) {\n super(bmap);\n this.fetchEquipment();\n this.bmap.addEventListener(HooksName.SWITCH_FLOOR_AFTER, this.onSwitchFloor);\n }\n\n async fetchEquipment() {\n const {\n apiDomain,\n apiPath: { equipmentList },\n apiInfo,\n } = this.bmap.config;\n const url = `${apiDomain}${equipmentList}`;\n await fetch(url, apiInfo)\n .then((res) => res.json())\n .then((res) => res.data)\n .then((res: EquipmentData[]) => {\n this.equipmentList = res;\n this.equipmentMap = new Map(\n res.map((item) => [item.equipment_id, item])\n );\n });\n this.dispatchEvent({ \n type: \"change-equipment-list\",\n data: this.equipmentList\n })\n if (this.bmap.context.currentFloor) {\n this.changeGraphicToEquipment(\n this.bmap.context.currentFloor.graphicLayer.children as Graphic[]\n );\n }\n }\n\n onSwitchFloor = ({ data: { graphics } }: { data: { graphics: Graphic[] } }) => {\n if (!this.equipmentList.length) {\n return;\n }\n this.changeGraphicToEquipment(graphics);\n };\n\n getGraphicEquipment(graphic: Graphic) {\n return graphic.userData.data.info.userData.equipment;\n }\n\n changeGraphicToEquipment(graphics: Graphic[]) {\n graphics\n .filter((graphic) => {\n const equipment = this.getGraphicEquipment(graphic);\n return equipment && this.equipmentMap.has(equipment);\n })\n .forEach((graphic) => {\n const equipment = this.equipmentMap.get(\n this.getGraphicEquipment(graphic)\n );\n const poi = this.bmap.createGraphicPoi(graphic, {\n icon: equipment?.equipment_icon,\n built_in: true,\n icon_size: [14, 14],\n });\n if (poi) {\n poi.userData.data = equipment;\n poi.userData.type = \"equipment\"\n }\n });\n }\n\n dispose() {\n this.bmap.removeEventListener(HooksName.SWITCH_FLOOR_AFTER, this.onSwitchFloor); this\n \n Array.from(this.bmap.context.currentFloor?.poiLayer.pois || []).forEach(poi => { \n if (poi.userData.type === \"equipment\") {\n this.bmap.context.currentFloor?.poiLayer.removePoi(poi)\n }\n })\n }\n}\n", "\nexport default function inlineWorker(scriptText) {\n let blob = new Blob([scriptText], {type: 'text/javascript'});\n let url = URL.createObjectURL(blob);\n let worker = new Worker(url);\n URL.revokeObjectURL(url);\n return worker;\n}\n", "import inlineWorker from '__inline-worker'\nexport default function Worker() {\n return inlineWorker(\"\");\n}\n", "import {\n Mesh,\n Object3D,\n TextureLoader,\n Color,\n Vector2,\n Vector3,\n NormalBlending,\n RepeatWrapping,\n Texture,\n} from \"three\";\nimport { Navigation } from \"./navigation\";\n// @ts-ignore\nimport { MeshLine, MeshLineMaterial } from \"../../external/meshLine\";\nimport Arrow from \"./arrow.png\";\nimport { getPathLength, vector3ToDevice } from \"../../utils\";\n\nexport interface PathConfig {\n texture_url: string;\n lineWidth: number;\n color: number;\n}\n\nexport const defaultConfig: PathConfig = {\n texture_url: Arrow,\n lineWidth: 8,\n color: 0xffffff,\n};\n\nexport class Path extends Object3D {\n mesh: Mesh | null = null;\n\n geometry: MeshLine | null = null;\n\n material: MeshLineMaterial | null = null;\n\n texture: Texture | null = null;\n\n config: PathConfig = defaultConfig;\n\n points: [number, number][] = [];\n\n basicRepeat = 1;\n\n constructor(\n public navigation: Navigation,\n config?: Partial<PathConfig>\n ) {\n super();\n this.config = Object.assign({}, defaultConfig, config);\n this.registryEvent();\n }\n\n registryEvent() {\n this.navigation.bmap.context.addEventListener(\n \"control-change\",\n this.onControlChange\n );\n this.navigation.bmap.context.addEventListener(\"update\", this.onUpdate)\n }\n\n unRegistryEvent() {\n this.navigation.bmap.context.removeEventListener(\n \"control-change\",\n this.onControlChange\n );\n this.navigation.bmap.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onControlChange = () => {\n this.changeRepeat();\n };\n\n onUpdate = () => { \n if (!this.texture) { return }\n // this.texture.offset.x -= 0.02\n // this.texture.needsUpdate = true\n }\n\n getRepeat(): number {\n const {\n points,\n navigation: {\n bmap: {\n context: {\n camera,\n clientSize: { width, height },\n },\n },\n },\n } = this;\n const screenPoints = points\n .map(([x, y]) =>\n vector3ToDevice(new Vector3(x, y, 0), camera, width, height)\n )\n .map(({ x, y }) => [x, y]) as [number, number][];\n const pointLength = getPathLength(screenPoints);\n return pointLength / 32\n }\n\n changeRepeat() {\n if (!this.material) {\n return;\n }\n const repeat = this.getRepeat();\n this.material.repeat = new Vector2(repeat, 1);\n }\n\n loadTexture(url: string): Promise<Texture> {\n return new Promise((r, j) => {\n new TextureLoader().load(url, r, undefined, j);\n });\n }\n\n transformPoints(points: [number, number][]): number[] {\n // \u9664\u4E86\u9996\u5C3E \u4E2D\u95F4\u7684\u70B9\u90FD\u9700\u8981\u4E24\u4EFD\n const _points = [];\n for (let i = 0; i < points.length; i++) {\n _points.push(...points[i], 0);\n }\n return _points;\n }\n\n updatePoints(points: [number, number][]) {\n this.points = points;\n this.changeRepeat();\n const _points = this.transformPoints(points);\n if (this.geometry) {\n this.geometry.setPoints(_points);\n }\n }\n\n async create(points: [number, number][]) {\n const lineGeometry = (this.geometry = new MeshLine());\n this.updatePoints(points);\n\n if (!this.texture) {\n const texture = (this.texture = await this.loadTexture(\n this.config.texture_url\n ));\n texture.wrapS = texture.wrapT = RepeatWrapping;\n }\n\n const material = (this.material = new MeshLineMaterial({\n useMap: true,\n color: new Color(this.config.color),\n transparent: true,\n resolution: new Vector2(\n this.navigation.bmap.context.clientSize.width,\n this.navigation.bmap.context.clientSize.height\n ),\n depthTest: true,\n sizeAttenuation: false,\n lineWidth: this.config.lineWidth * 2,\n map: this.texture,\n blending: NormalBlending,\n repeat: new Vector2(this.getRepeat(), 1),\n }));\n // \u751F\u6210\u6A21\u578B\n const mesh = (this.mesh = new Mesh(lineGeometry, material));\n this.add(mesh);\n return mesh;\n }\n\n dispose() {\n this.unRegistryEvent();\n this.clear();\n this.geometry?.dispose();\n this.material?.dispose();\n this.texture?.dispose();\n }\n}\n", "import {\n BufferGeometry,\n Matrix4,\n Vector3,\n Ray,\n Sphere,\n LineSegments,\n BufferAttribute,\n ShaderChunk,\n ShaderMaterial,\n UniformsLib,\n Color,\n Vector2\n} from \"three\";\nclass MeshLine extends BufferGeometry {\n constructor() {\n super();\n this.isMeshLine = true;\n this.type = \"MeshLine\";\n\n this.positions = [];\n\n this.previous = [];\n this.next = [];\n this.side = [];\n this.width = [];\n this.indices_array = [];\n this.uvs = [];\n this.counters = [];\n this._points = [];\n this._geom = null;\n\n this.widthCallback = null;\n\n // Used to raycast\n this.matrixWorld = new Matrix4();\n\n Object.defineProperties(this, {\n // this is now a bufferGeometry\n // add getter to support previous api\n geometry: {\n enumerable: true,\n get: function () {\n return this;\n },\n },\n geom: {\n enumerable: true,\n get: function () {\n return this._geom;\n },\n set: function (value) {\n this.setGeometry(value, this.widthCallback);\n },\n },\n // for declaritive architectures\n // to return the same value that sets the points\n // eg. this.points = points\n // console.log(this.points) -> points\n points: {\n enumerable: true,\n get: function () {\n return this._points;\n },\n set: function (value) {\n this.setPoints(value, this.widthCallback);\n },\n },\n });\n }\n}\n\nMeshLine.prototype.setMatrixWorld = function (matrixWorld) {\n this.matrixWorld = matrixWorld;\n};\n\n// setting via a geometry is rather superfluous\n// as you're creating a unecessary geometry just to throw away\n// but exists to support previous api\nMeshLine.prototype.setGeometry = function (g, c) {\n // as the input geometry are mutated we store them\n // for later retreival when necessary (declaritive architectures)\n this._geometry = g;\n this.setPoints(g.getAttribute(\"position\").array, c);\n};\n\nMeshLine.prototype.setPoints = function (points, wcb) {\n if (!(points instanceof Float32Array) && !(points instanceof Array)) {\n console.error(\n \"ERROR: The BufferArray of points is not instancied correctly.\"\n );\n return;\n }\n // as the points are mutated we store them\n // for later retreival when necessary (declaritive architectures)\n this._points = points;\n this.widthCallback = wcb;\n this.positions = [];\n this.counters = [];\n if (points.length && points[0] instanceof Vector3) {\n // could transform Vector3 array into the array used below\n // but this approach will only loop through the array once\n // and is more performant\n for (var j = 0; j < points.length; j++) {\n var p = points[j];\n var c = j / points.length;\n this.positions.push(p.x, p.y, p.z);\n this.positions.push(p.x, p.y, p.z);\n this.counters.push(c);\n this.counters.push(c);\n }\n } else {\n for (var j = 0; j < points.length; j += 3) {\n var c = j / points.length;\n this.positions.push(points[j], points[j + 1], points[j + 2]);\n this.positions.push(points[j], points[j + 1], points[j + 2]);\n this.counters.push(c);\n this.counters.push(c);\n }\n }\n this.process();\n};\n\nfunction MeshLineRaycast(raycaster, intersects) {\n var inverseMatrix = new Matrix4();\n var ray = new Ray();\n var sphere = new Sphere();\n var interRay = new Vector3();\n var geometry = this.geometry;\n // Checking boundingSphere distance to ray\n\n if (!geometry.boundingSphere) geometry.computeBoundingSphere();\n sphere.copy(geometry.boundingSphere);\n sphere.applyMatrix4(this.matrixWorld);\n\n if (raycaster.ray.intersectSphere(sphere, interRay) === false) {\n return;\n }\n\n inverseMatrix.copy(this.matrixWorld).invert();\n ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);\n\n var vStart = new Vector3();\n var vEnd = new Vector3();\n var interSegment = new Vector3();\n var step = this instanceof LineSegments ? 2 : 1;\n var index = geometry.index;\n var attributes = geometry.attributes;\n\n if (index !== null) {\n var indices = index.array;\n var positions = attributes.position.array;\n var widths = attributes.width.array;\n\n for (var i = 0, l = indices.length - 1; i < l; i += step) {\n var a = indices[i];\n var b = indices[i + 1];\n\n vStart.fromArray(positions, a * 3);\n vEnd.fromArray(positions, b * 3);\n var width =\n widths[Math.floor(i / 3)] !== undefined ? widths[Math.floor(i / 3)] : 1;\n var precision =\n raycaster.params.Line.threshold + (this.material.lineWidth * width) / 2;\n var precisionSq = precision * precision;\n\n var distSq = ray.distanceSqToSegment(\n vStart,\n vEnd,\n interRay,\n interSegment\n );\n\n if (distSq > precisionSq) continue;\n\n interRay.applyMatrix4(this.matrixWorld); //Move back to world space for distance calculation\n\n var distance = raycaster.ray.origin.distanceTo(interRay);\n\n if (distance < raycaster.near || distance > raycaster.far) continue;\n\n intersects.push({\n distance: distance,\n // What do we want? intersection point on the ray or on the segment??\n // point: raycaster.ray.at( distance ),\n point: interSegment.clone().applyMatrix4(this.matrixWorld),\n index: i,\n face: null,\n faceIndex: null,\n object: this,\n });\n // make event only fire once\n i = l;\n }\n }\n}\nMeshLine.prototype.raycast = MeshLineRaycast;\nMeshLine.prototype.compareV3 = function (a, b) {\n var aa = a * 6;\n var ab = b * 6;\n return (\n this.positions[aa] === this.positions[ab] &&\n this.positions[aa + 1] === this.positions[ab + 1] &&\n this.positions[aa + 2] === this.positions[ab + 2]\n );\n};\n\nMeshLine.prototype.copyV3 = function (a) {\n var aa = a * 6;\n return [this.positions[aa], this.positions[aa + 1], this.positions[aa + 2]];\n};\n\nMeshLine.prototype.getDistance = function (i) { \n let maxLength = 0;\n for (let k = 0; k < i; k++) {\n const index = 6 * k;\n const p0 = new Vector3(this.positions[index], this.positions[index + 1], this.positions[index + 2]);\n const p1 = new Vector3(this.positions[index + 6], this.positions[index + 7], this.positions[index + 8]);\n const distance = p0.distanceTo(p1)\n // console.log(p0, p1, distance)\n maxLength += distance;\n }\n return maxLength\n}\n\nMeshLine.prototype.process = function () {\n var l = this.positions.length / 6;\n\n this.previous = [];\n this.next = [];\n this.side = [];\n this.width = [];\n this.indices_array = [];\n this.uvs = [];\n\n var w;\n // \u8DEF\u7EBF\u7684\u8DDD\u79BB\n const maxLength = this.getDistance(l - 1);\n\n\n var v;\n // initial previous points\n if (this.compareV3(0, l - 1)) {\n v = this.copyV3(l - 2);\n } else {\n v = this.copyV3(0);\n }\n this.previous.push(v[0], v[1], v[2]);\n this.previous.push(v[0], v[1], v[2]);\n\n for (var j = 0; j < l; j++) {\n // sides\n this.side.push(1);\n this.side.push(-1);\n\n // widths\n if (this.widthCallback) w = this.widthCallback(j / (l - 1));\n else w = 1;\n this.width.push(w);\n this.width.push(w);\n\n // uvs\n // \u6839\u636E\u8DDD\u79BB\u8BA1\u7B97uv \uFF0C \u800C\u4E0D\u662F\u6839\u636E\u4E0B\u6807\n if (j === 0) { \n this.uvs.push(0, 0);\n this.uvs.push(0, 1);\n } else if (j === l - 1) {\n this.uvs.push(1, 0);\n this.uvs.push(1, 1);\n } else {\n const s = this.getDistance(j) / maxLength\n this.uvs.push(s, 0);\n this.uvs.push(s, 1);\n }\n\n if (j < l - 1) {\n // points previous to poisitions\n v = this.copyV3(j);\n this.previous.push(v[0], v[1], v[2]);\n this.previous.push(v[0], v[1], v[2]);\n\n // indices\n var n = j * 2;\n this.indices_array.push(n, n + 1, n + 2);\n this.indices_array.push(n + 2, n + 1, n + 3);\n }\n if (j > 0) {\n // points after poisitions\n v = this.copyV3(j);\n this.next.push(v[0], v[1], v[2]);\n this.next.push(v[0], v[1], v[2]);\n }\n }\n\n // last next point\n if (this.compareV3(l - 1, 0)) {\n v = this.copyV3(1);\n } else {\n v = this.copyV3(l - 1);\n }\n this.next.push(v[0], v[1], v[2]);\n this.next.push(v[0], v[1], v[2]);\n\n // redefining the attribute seems to prevent range errors\n // if the user sets a differing number of vertices\n if (\n !this._attributes ||\n this._attributes.position.count !== this.positions.length\n ) {\n this._attributes = {\n position: new BufferAttribute(new Float32Array(this.positions), 3),\n previous: new BufferAttribute(new Float32Array(this.previous), 3),\n next: new BufferAttribute(new Float32Array(this.next), 3),\n side: new BufferAttribute(new Float32Array(this.side), 1),\n width: new BufferAttribute(new Float32Array(this.width), 1),\n uv: new BufferAttribute(new Float32Array(this.uvs), 2),\n index: new BufferAttribute(new Uint16Array(this.indices_array), 1),\n counters: new BufferAttribute(new Float32Array(this.counters), 1),\n };\n } else {\n this._attributes.position.copyArray(new Float32Array(this.positions));\n this._attributes.position.needsUpdate = true;\n this._attributes.previous.copyArray(new Float32Array(this.previous));\n this._attributes.previous.needsUpdate = true;\n this._attributes.next.copyArray(new Float32Array(this.next));\n this._attributes.next.needsUpdate = true;\n this._attributes.side.copyArray(new Float32Array(this.side));\n this._attributes.side.needsUpdate = true;\n this._attributes.width.copyArray(new Float32Array(this.width));\n this._attributes.width.needsUpdate = true;\n this._attributes.uv.copyArray(new Float32Array(this.uvs));\n this._attributes.uv.needsUpdate = true;\n this._attributes.index.copyArray(new Uint16Array(this.indices_array));\n this._attributes.index.needsUpdate = true;\n }\n\n this.setAttribute(\"position\", this._attributes.position);\n this.setAttribute(\"previous\", this._attributes.previous);\n this.setAttribute(\"next\", this._attributes.next);\n this.setAttribute(\"side\", this._attributes.side);\n this.setAttribute(\"width\", this._attributes.width);\n this.setAttribute(\"uv\", this._attributes.uv);\n this.setAttribute(\"counters\", this._attributes.counters);\n\n this.setIndex(this._attributes.index);\n\n this.computeBoundingSphere();\n this.computeBoundingBox();\n};\n\nfunction memcpy(src, srcOffset, dst, dstOffset, length) {\n var i;\n\n src = src.subarray || src.slice ? src : src.buffer;\n dst = dst.subarray || dst.slice ? dst : dst.buffer;\n\n src = srcOffset\n ? src.subarray\n ? src.subarray(srcOffset, length && srcOffset + length)\n : src.slice(srcOffset, length && srcOffset + length)\n : src;\n\n if (dst.set) {\n dst.set(src, dstOffset);\n } else {\n for (i = 0; i < src.length; i++) {\n dst[i + dstOffset] = src[i];\n }\n }\n\n return dst;\n}\n\n/**\n * Fast method to advance the line by one position. The oldest position is removed.\n * @param position\n */\nMeshLine.prototype.advance = function (position) {\n var positions = this._attributes.position.array;\n var previous = this._attributes.previous.array;\n var next = this._attributes.next.array;\n var l = positions.length;\n\n // PREVIOUS\n memcpy(positions, 0, previous, 0, l);\n\n // POSITIONS\n memcpy(positions, 6, positions, 0, l - 6);\n\n positions[l - 6] = position.x;\n positions[l - 5] = position.y;\n positions[l - 4] = position.z;\n positions[l - 3] = position.x;\n positions[l - 2] = position.y;\n positions[l - 1] = position.z;\n\n // NEXT\n memcpy(positions, 6, next, 0, l - 6);\n\n next[l - 6] = position.x;\n next[l - 5] = position.y;\n next[l - 4] = position.z;\n next[l - 3] = position.x;\n next[l - 2] = position.y;\n next[l - 1] = position.z;\n\n this._attributes.position.needsUpdate = true;\n this._attributes.previous.needsUpdate = true;\n this._attributes.next.needsUpdate = true;\n};\n\nShaderChunk[\"meshline_vert\"] = [\n \"\",\n ShaderChunk.logdepthbuf_pars_vertex,\n ShaderChunk.fog_pars_vertex,\n \"\",\n \"attribute vec3 previous;\",\n \"attribute vec3 next;\",\n \"attribute float side;\",\n \"attribute float width;\",\n \"attribute float counters;\",\n \"\",\n \"uniform vec2 resolution;\",\n \"uniform float lineWidth;\",\n \"uniform vec3 color;\",\n \"uniform float opacity;\",\n \"uniform float sizeAttenuation;\",\n \"\",\n \"varying vec2 vUV;\",\n \"varying vec4 vColor;\",\n \"varying float vCounters;\",\n \"\",\n \"vec2 fix( vec4 i, float aspect ) {\",\n \"\",\n \" vec2 res = i.xy / i.w;\",\n \" res.x *= aspect;\",\n \"\t vCounters = counters;\",\n \" return res;\",\n \"\",\n \"}\",\n \"\",\n \"void main() {\",\n \"\",\n \" float aspect = resolution.x / resolution.y;\",\n \"\",\n \" vColor = vec4( color, opacity );\",\n \" vUV = uv;\",\n \"\",\n \" mat4 m = projectionMatrix * modelViewMatrix;\",\n \" vec4 finalPosition = m * vec4( position, 1.0 );\",\n \" vec4 prevPos = m * vec4( previous, 1.0 );\",\n \" vec4 nextPos = m * vec4( next, 1.0 );\",\n \"\",\n \" vec2 currentP = fix( finalPosition, aspect );\",\n \" vec2 prevP = fix( prevPos, aspect );\",\n \" vec2 nextP = fix( nextPos, aspect );\",\n \"\",\n \" float w = lineWidth * width;\",\n \"\",\n \" vec2 dir;\",\n \" if( nextP == currentP ) dir = normalize( currentP - prevP );\",\n \" else if( prevP == currentP ) dir = normalize( nextP - currentP );\",\n \" else {\",\n \" vec2 dir1 = normalize( currentP - prevP );\",\n \" vec2 dir2 = normalize( nextP - currentP );\",\n \" dir = normalize( dir1 + dir2 );\",\n \"\",\n \" vec2 perp = vec2( -dir1.y, dir1.x );\",\n \" vec2 miter = vec2( -dir.y, dir.x );\",\n \" //w = clamp( w / dot( miter, perp ), 0., 4. * lineWidth * width );\",\n \"\",\n \" }\",\n \"\",\n \" //vec2 normal = ( cross( vec3( dir, 0. ), vec3( 0., 0., 1. ) ) ).xy;\",\n \" vec4 normal = vec4( -dir.y, dir.x, 0., 1. );\",\n \" normal.xy *= .5 * w;\",\n \" normal *= projectionMatrix;\",\n \" if( sizeAttenuation == 0. ) {\",\n \" normal.xy *= finalPosition.w;\",\n \" normal.xy /= ( vec4( resolution, 0., 1. ) * projectionMatrix ).xy;\",\n \" }\",\n \"\",\n \" finalPosition.xy += normal.xy * side;\",\n \"\",\n \" gl_Position = finalPosition;\",\n \"\",\n ShaderChunk.logdepthbuf_vertex,\n ShaderChunk.fog_vertex &&\n \" vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\",\n ShaderChunk.fog_vertex,\n \"}\",\n].join(\"\\n\");\n\nShaderChunk[\"meshline_frag\"] = [\n \"\",\n ShaderChunk.fog_pars_fragment,\n ShaderChunk.logdepthbuf_pars_fragment,\n \"\",\n \"uniform sampler2D map;\",\n \"uniform sampler2D alphaMap;\",\n \"uniform float useMap;\",\n \"uniform float useAlphaMap;\",\n \"uniform float useDash;\",\n \"uniform float dashArray;\",\n \"uniform float dashOffset;\",\n \"uniform float dashRatio;\",\n \"uniform float visibility;\",\n \"uniform float alphaTest;\",\n \"uniform vec2 repeat;\",\n \"\",\n \"varying vec2 vUV;\",\n \"varying vec4 vColor;\",\n \"varying float vCounters;\",\n \"\",\n \"void main() {\",\n \"\",\n ShaderChunk.logdepthbuf_fragment,\n \"\",\n \" vec4 c = vColor;\",\n \" if( useMap == 1. ) c *= texture2D( map, vUV * repeat );\",\n \" if( useAlphaMap == 1. ) c.a *= texture2D( alphaMap, vUV * repeat ).a;\",\n \" if( c.a < alphaTest ) discard;\",\n \" if( useDash == 1. ){\",\n \" c.a *= ceil(mod(vCounters + dashOffset, dashArray) - (dashArray * dashRatio));\",\n \" }\",\n \" gl_FragColor = c;\",\n \" gl_FragColor.a *= step(vCounters, visibility);\",\n \"\",\n ShaderChunk.fog_fragment,\n \"}\",\n].join(\"\\n\");\n\nclass MeshLineMaterial extends ShaderMaterial {\n constructor(parameters) {\n super({\n uniforms: Object.assign({}, UniformsLib.fog, {\n lineWidth: { value: 1 },\n map: { value: null },\n useMap: { value: 0 },\n alphaMap: { value: null },\n useAlphaMap: { value: 0 },\n color: { value: new Color(0xffffff) },\n opacity: { value: 1 },\n resolution: { value: new Vector2(1, 1) },\n sizeAttenuation: { value: 1 },\n dashArray: { value: 0 },\n dashOffset: { value: 0 },\n dashRatio: { value: 0.5 },\n useDash: { value: 0 },\n visibility: { value: 1 },\n alphaTest: { value: 0 },\n repeat: { value: new Vector2(1, 1) },\n }),\n\n vertexShader: ShaderChunk.meshline_vert,\n\n fragmentShader: ShaderChunk.meshline_frag,\n });\n this.isMeshLineMaterial = true;\n this.type = \"MeshLineMaterial\";\n\n Object.defineProperties(this, {\n lineWidth: {\n enumerable: true,\n get: function () {\n return this.uniforms.lineWidth.value;\n },\n set: function (value) {\n this.uniforms.lineWidth.value = value;\n },\n },\n map: {\n enumerable: true,\n get: function () {\n return this.uniforms.map.value;\n },\n set: function (value) {\n this.uniforms.map.value = value;\n },\n },\n useMap: {\n enumerable: true,\n get: function () {\n return this.uniforms.useMap.value;\n },\n set: function (value) {\n this.uniforms.useMap.value = value;\n },\n },\n alphaMap: {\n enumerable: true,\n get: function () {\n return this.uniforms.alphaMap.value;\n },\n set: function (value) {\n this.uniforms.alphaMap.value = value;\n },\n },\n useAlphaMap: {\n enumerable: true,\n get: function () {\n return this.uniforms.useAlphaMap.value;\n },\n set: function (value) {\n this.uniforms.useAlphaMap.value = value;\n },\n },\n color: {\n enumerable: true,\n get: function () {\n return this.uniforms.color.value;\n },\n set: function (value) {\n this.uniforms.color.value = value;\n },\n },\n opacity: {\n enumerable: true,\n get: function () {\n return this.uniforms.opacity.value;\n },\n set: function (value) {\n this.uniforms.opacity.value = value;\n },\n },\n resolution: {\n enumerable: true,\n get: function () {\n return this.uniforms.resolution.value;\n },\n set: function (value) {\n this.uniforms.resolution.value.copy(value);\n },\n },\n sizeAttenuation: {\n enumerable: true,\n get: function () {\n return this.uniforms.sizeAttenuation.value;\n },\n set: function (value) {\n this.uniforms.sizeAttenuation.value = value;\n },\n },\n dashArray: {\n enumerable: true,\n get: function () {\n return this.uniforms.dashArray.value;\n },\n set: function (value) {\n this.uniforms.dashArray.value = value;\n this.useDash = value !== 0 ? 1 : 0;\n },\n },\n dashOffset: {\n enumerable: true,\n get: function () {\n return this.uniforms.dashOffset.value;\n },\n set: function (value) {\n this.uniforms.dashOffset.value = value;\n },\n },\n dashRatio: {\n enumerable: true,\n get: function () {\n return this.uniforms.dashRatio.value;\n },\n set: function (value) {\n this.uniforms.dashRatio.value = value;\n },\n },\n useDash: {\n enumerable: true,\n get: function () {\n return this.uniforms.useDash.value;\n },\n set: function (value) {\n this.uniforms.useDash.value = value;\n },\n },\n visibility: {\n enumerable: true,\n get: function () {\n return this.uniforms.visibility.value;\n },\n set: function (value) {\n this.uniforms.visibility.value = value;\n },\n },\n alphaTest: {\n enumerable: true,\n get: function () {\n return this.uniforms.alphaTest.value;\n },\n set: function (value) {\n this.uniforms.alphaTest.value = value;\n },\n },\n repeat: {\n enumerable: true,\n get: function () {\n return this.uniforms.repeat.value;\n },\n set: function (value) {\n this.uniforms.repeat.value.copy(value);\n },\n },\n });\n\n this.setValues(parameters);\n }\n}\n\nMeshLineMaterial.prototype.copy = function (source) {\n ShaderMaterial.prototype.copy.call(this, source);\n\n this.lineWidth = source.lineWidth;\n this.map = source.map;\n this.useMap = source.useMap;\n this.alphaMap = source.alphaMap;\n this.useAlphaMap = source.useAlphaMap;\n this.color.copy(source.color);\n this.opacity = source.opacity;\n this.resolution.copy(source.resolution);\n this.sizeAttenuation = source.sizeAttenuation;\n this.dashArray.copy(source.dashArray);\n this.dashOffset.copy(source.dashOffset);\n this.dashRatio.copy(source.dashRatio);\n this.useDash = source.useDash;\n this.visibility = source.visibility;\n this.alphaTest = source.alphaTest;\n this.repeat.copy(source.repeat);\n\n return this;\n};\n\nexport { MeshLineMaterial, MeshLine, MeshLineRaycast };\n", "import { BMap } from \"../../bmap\";\nimport { Plugin } from \"../base\";\n// @ts-ignore\nimport PathWorker from \"./path.worker\";\nimport { Path, PathConfig } from \"./path\";\nimport { End, HooksName, PathData, RoadData, RouteType, Start, UniqueKey, getLength, triggerWorker } from \"../../utils\";\nimport { Floor, Poi, PoiOptions } from \"../../elements\";\nimport {\n distancePointToSegment,\n moveOnRoute,\n simplifyPath,\n} from \"../../utils/path\";\nimport { Group as TweenGroup, Tween } from \"@tweenjs/tween.js\";\n\nexport type Point = [number, number];\n\ninterface EventMap {\n \"fetch-road-status\": {\n status: boolean;\n };\n \"path-animation\": {};\n \"path-animation-end\": {};\n \"fetch-road-data\": {\n roadInfo: RoadData[]\n }\n}\n\nexport interface NavigationConfig {\n path?: Partial<PathConfig>; // \u8DEF\u7EBF\u7684\u53C2\u6570\n speed: number; // \u52A8\u753B\u901F\u5EA6 km/h\n cheapMaximumDistance: number; // \u5438\u9644\u8DEF\u7EBF\u7684\u6700\u5927\u4FBF\u5B9C\u8DDD\u79BB, \u5982\u679C\u5B9A\u4F4D\u70B9\u79BB\u8DEF\u7F51\u8D85\u8FC7\u8FD9\u4E2A\u8DDD\u79BB\uFF0C\u5C31\u4E0D\u505A\u8DEF\u7EBF\u5438\u9644\uFF0C\u6CA1\u6709\u8DEF\u7EBF\u52A8\u753B\u4E86\n startPoi: Partial<PoiOptions>;\n needStartPoi: boolean;\n loadRoad: boolean;\n}\n\nconst defaultConfig: NavigationConfig = {\n path: {},\n speed: 10,\n cheapMaximumDistance: 20,\n needStartPoi: false,\n startPoi: {},\n loadRoad: true\n};\n\nexport class Navigation extends Plugin<EventMap> {\n path: Path | null = null;\n\n worker: any = PathWorker();\n\n fetchRoadStatus = false;\n\n uniqueKey = new UniqueKey();\n\n paths: PathData = [];\n\n options: NavigationConfig;\n\n pathTween = new TweenGroup();\n\n startPoi: Poi | null = null;\n\n // \u5904\u7406\u8DEF\u7EBF\u52A8\u753B\n animationPathOptions: {\n cPathIndex: number;\n } = {\n cPathIndex: 0, // \u5728\u5E73\u6ED1\u8DEF\u7EBF\u4E2D\u7684\u4E0B\u6807\uFF08\u5E73\u6ED1\u4F46\u662F\u672A\u505A\u63D2\u503C\u7684\u6570\u636E\uFF0C\u662F\u505A\u8DEF\u7EBF\u6E32\u67D3\u7684\uFF09\n };\n\n cPath: Point[] = []; // \u5F53\u524D\u697C\u5C42\u7684\u5E73\u6ED1\u540E\u7684\u8DEF\u7EBF\n\n constructor(\n bmap: BMap,\n project: string,\n options: Partial<NavigationConfig> = {}\n ) {\n super(bmap);\n this.options = Object.assign({}, defaultConfig, options);\n // \u8BF7\u6C42\u8DEF\u7F51\n const {\n apiDomain,\n apiPath: { roadNetwork },\n apiInfo,\n } = this.bmap.config;\n this.registryEvent();\n if (this.options.loadRoad) {\n triggerWorker<any, RoadData[]>(this.worker, \"load_road\", {\n url: `${apiDomain || location.origin}${roadNetwork}?project=${project}`,\n ...apiInfo,\n }).then((roadInfo) => { \n this.fetchRoadStatus = true;\n this.dispatchEvent({ type: \"fetch-road-status\", status: true });\n this.dispatchEvent({ type: \"fetch-road-data\", roadInfo });\n }).catch((e) => { \n console.log(\"[\u52A0\u8F7D\u8DEF\u7F51\u5931\u8D25]\", e)\n })\n }\n }\n\n registryEvent() {\n this.bmap.context.addEventListener(\"update\", this.onUpdate);\n this.bmap.addEventListener(\n HooksName.SWITCH_FLOOR_AFTER,\n this.onSwitchFloor\n );\n }\n\n unRegistryEvent() {\n this.bmap.context.removeEventListener(\"update\", this.onUpdate);\n this.bmap.removeEventListener(\n HooksName.SWITCH_FLOOR_AFTER,\n this.onSwitchFloor\n );\n }\n\n onUpdate = () => {\n this.pathTween.update();\n };\n\n async setRoadData(roadData: RoadData[]) {\n this.fetchRoadStatus = false;\n this.dispatchEvent({ type: \"fetch-road-status\", status: false });\n await triggerWorker(this.worker, \"set_road_info\", roadData)\n this.fetchRoadStatus = true;\n this.dispatchEvent({ type: \"fetch-road-status\", status: true });\n }\n\n clearPath() {\n if (this.path) {\n this.bmap.context.scene.remove(this.path);\n this.path.dispose();\n this.path = null;\n this.pathTween.getAll().forEach((item) => item.stop());\n this.pathTween.removeAll();\n }\n }\n\n onSwitchFloor = ({ data: { curFloor } }: { data: { curFloor: Floor } }) => {\n if (this.paths.length) {\n const curFloorPathData = this.paths.find(\n (item) => item.floor === curFloor.name\n );\n if (curFloorPathData) {\n this.renderPath(this.translatePoints(curFloorPathData.points));\n } else {\n this.clearPath();\n }\n } else {\n this.clearPath();\n }\n };\n\n getDirectionPath(points: Point[]) {\n return triggerWorker(this.worker, \"get_direction_path\", points)\n }\n\n addPath(paths: PathData) {\n this.paths = paths;\n const floorName = this.bmap.context.currentFloor?.name;\n const curFloorPath = paths.find((item) => item.floor === floorName);\n if (curFloorPath) {\n if (this.bmap.currentBuildGround) {\n // \u628A\u6240\u6709\u70B9\u4F4D\u79FB\u5230\u4E2D\u5FC3\u70B9\n this.renderPath(this.translatePoints(curFloorPath.points));\n } else {\n // \u76D1\u542C\u6709\u4E86\u5730\u9762\u4E8B\u4EF6\n const onCenterChange = () => {\n this.bmap.removeEventListener(\"center-change\", onCenterChange);\n this.renderPath(this.translatePoints(curFloorPath.points));\n };\n this.bmap.addEventListener(\"center-change\", onCenterChange);\n }\n } else {\n this.clearPath();\n }\n }\n\n translatePoints(points: Point[]): Point[] {\n const [x, y] = this.bmap.buildingCenter;\n return points.map((item) => {\n return [item[0] - x, item[1] - y];\n });\n }\n\n // \u89C4\u5212\u8DEF\u7EBF\n // \u8DEF\u7EBF\u7684\u683C\u5F0F\n // \u591A\u697C\u5C42\n // [{floor: \"xx\", points: Point[], endType: '\u7EC8\u70B9\u7684\u7C7B\u578B\uFF0C\u7535\u68AF/\u6276\u68AF/\u7EC8\u70B9' }, {}]\n // \u6BCF\u4E2A\u697C\u5C42\u4E2D \u6BCF\u4E2A\u70B9\u7684z\u8F74\u7684\u5750\u6807\u4ECE\u697C\u5C42\u7684\u5730\u9762\u9AD8\u5EA6\u83B7\u53D6\n\n getPath(\n start: Start,\n end: End,\n type: RouteType = \"\"\n ): Promise<PathData> {\n return new Promise((resolve, reject) => {\n const _getPath = () => {\n triggerWorker(this.worker, \"get_path\", { start, end, type })\n .then((data) => {\n if (!data) {\n reject(\"no-path\")\n } else if (typeof data === \"string\") {\n reject(data)\n } else {\n resolve(data)\n }\n })\n }\n if (this.fetchRoadStatus) {\n _getPath()\n } else {\n const onChangeStatus = ({ status }: { status: boolean }) => {\n if (status) {\n this.removeEventListener(\"fetch-road-status\", onChangeStatus);\n _getPath()\n }\n };\n this.addEventListener(\"fetch-road-status\", onChangeStatus);\n }\n });\n }\n\n renderPath(points: Point[]) {\n const cPath: Point[] = this.catmullRomCurve3(points);\n this.cPath = cPath;\n // animationPathOptions \u4FDD\u5B58\u5230\u8FD9\u91CC\n // \u91CD\u7F6E\u52A8\u753B\u53C2\u6570\n this.animationPathOptions = {\n cPathIndex: 0,\n };\n if (this.path) {\n this.path.updatePoints(cPath);\n } else {\n this.path = new Path(this, this.options.path);\n this.path.create(cPath);\n this.path.position.z =\n this.bmap.context.currentFloor!.groundMaxHeight + 1.0;\n this.bmap.context.scene.add(this.path);\n }\n if (this.startPoi) {\n this.startPoi.dispose()\n this.startPoi = null;\n }\n if (this.options.needStartPoi) {\n this.startPoi = this.bmap.context.currentFloor?.addPoi({\n ...this.options.startPoi,\n position: { x: cPath[0][0], y: cPath[0][1], z: 0.0001 },\n collision_enable: false,\n }) || null;\n }\n // test animation\n // const [x, y] = this.bmap.buildingCenter;\n // const pos = cPath.slice(-1)[0]\n // this.animationTo({floor: this.bmap.context.currentFloor!.name, pos: [pos[0] + x, pos[1] + y]})\n }\n\n catmullRomCurve3(points: Point[]) {\n return simplifyPath(points, false, true, 0.1, 150, 2.5);\n }\n\n /**\n * \u6309\u7167\u6307\u5B9A\u901F\u5EA6\u79FB\u52A8\u5230\u76EE\u6807\u4F4D\u7F6E\n * @param point \u76EE\u6807\u4F4D\u7F6E\n * @param speed \u79FB\u52A8\u901F\u5EA6\n */\n async animationTo(\n point: { floor: string; pos: [number, number] },\n speed = this.options.speed\n ) {\n if (point.floor !== this.bmap.context.currentFloor?.name || !this.path) {\n return;\n }\n const {\n animationPathOptions: { cPathIndex },\n } = this;\n // \u5269\u4E0B\u7684\u8DEF\u7EBF\n const currentPath = [\n this.path.points[0],\n ...this.cPath.slice(cPathIndex + 1),\n ];\n const translatedPos = this.translatePoints([point.pos])[0]\n // \u4F20\u5165\u4E00\u4E2A\u4F4D\u7F6E \u5148\u8BA1\u7B97\u8FD9\u4E2A\u70B9\u5438\u9644\u5230\u8DEF\u7EBF\u4E0A\u7684\u4F4D\u7F6E\u548C\u8DDD\u79BB \u548C\u8DEF\u7EBF\u6BB5\u7684\u4E0B\u6807 \n const { distance, pos, index } = currentPath.reduce(\n (res, cur, index, arr) => {\n if (index === arr.length - 1) {\n return res;\n }\n const { distance, closestPoint } = distancePointToSegment(\n translatedPos,\n cur,\n arr[index + 1]\n );\n if (distance < res.distance) {\n res.distance = distance;\n res.pos = closestPoint;\n res.index = index;\n }\n return res;\n },\n {\n distance: Number.MAX_SAFE_INTEGER,\n pos: point.pos,\n index: 0,\n }\n );\n // \u5982\u679C\u8DDD\u79BB\u8D85\u51FA\u6700\u5927\u8DDD\u79BB\u4E0D\u505A\u4FEE\u6539\n if (distance > this.options.cheapMaximumDistance) {\n return;\n }\n // \u5982\u679C\u5438\u9644\u7684\u7ED3\u679C\u662F\u7B2C\u4E00\u4E2A\u70B9\u4E5F\u4E0D\u9700\u8981\u505A\u5904\u7406\n if (\n this.path.points[0][0] === pos[0] &&\n this.path.points[0][1] === pos[1]\n ) {\n return;\n }\n // \u6839\u636E\u5438\u9644\u540E\u7684\u4F4D\u7F6E\u548C\u73B0\u5728\u8DEF\u7EBF\u7684\u8D77\u70B9\u8BA1\u7B97\u4E00\u4E2A\u9700\u8981\u79FB\u52A8\u7684\u8DDD\u79BB\n let moveDistance = 0;\n let moveDistanceArray: number[] = [];\n if (index === 0) {\n // \u8FD8\u662F\u5728\u540C\u4E00\u4E2A\u8DEF\u6BB5\u4E2D\u53EF\u4EE5\u76F4\u63A5\u8BA1\u7B97\u8DDD\u79BB\n moveDistance = getLength(currentPath[0], pos);\n moveDistanceArray = [moveDistance];\n } else {\n // \u8DE8\u8DEF\u6BB5\u4E86 \u8981\u5FAA\u73AF\u8BA1\u7B97\n // \u7B2C\u4E00\u6BB5\u662F\u88AB\u5207\u5272\u8FC7\u7684\n moveDistanceArray = [getLength(currentPath[0], currentPath[1])];\n // \u4E2D\u95F4\u7684\u8DEF\u7EBF\u662F\u5B8C\u6574\u7684\n for (let i = 1; i < index; i++) {\n moveDistanceArray.push(getLength(currentPath[i], currentPath[i + 1]));\n }\n // \u6700\u540E\u4E00\u6BB5\u53EF\u80FD\u4E5F\u662F\u88AB\u5207\u5272\u8FC7\u7684\n moveDistanceArray.push(getLength(currentPath[index], pos));\n moveDistance = moveDistanceArray.reduce((sum, cur) => sum + cur, 0);\n }\n // \u6839\u636E\u8FD9\u4E2A\u8DDD\u79BB\u8BA1\u7B97\u52A8\u753B\u65F6\u95F4\n const speedSecond = this.kmPerHourToMetersPerSecond(speed);\n const timeSecond = moveDistance / speedSecond;\n // \u6309\u7167\u8DDD\u79BB\u7684\u7EF4\u5EA6\u5F00\u59CB\u52A8\u753B\n this.pathTween.getAll().forEach((item) => item.stop());\n this.pathTween.removeAll();\n const start = { distance: 0 };\n // \u8BA1\u7B97\u51FA\u6BCF\u4E00\u8282\u8DEF\u7EBF\u7684\u8DDD\u79BB\uFF0C\u52A8\u753B\u7684\u65F6\u5019\u65B9\u4FBF\u627E\u79FB\u52A8\u540E\u7684\u4F4D\u7F6E\u5728\u90A3\u6BB5\u8DEF\u7EBF\n return new Promise((resolve) => { \n const tween = new Tween(start, this.pathTween)\n .to({ distance: moveDistance }, timeSecond * 1000)\n .onUpdate(() => {\n // \u6BCF\u6B21\u52A8\u753B\u4E2D\u83B7\u53D6\u79FB\u52A8\u7684\u8DDD\u79BB\uFF0C\u8BA1\u7B97\u4ECE\u8D77\u70B9\u5F00\u59CB\u79FB\u52A8\u8DDD\u79BB\u4E4B\u540E\u7684\u4F4D\u7F6E \uFF08\u5750\u6807\u548C\u539F\u59CB\u8DEF\u7EBF\u7684\u4E0B\u6807\uFF08\u8DEF\u7EBF\u6BB5\uFF09\uFF09\n for (let i = 0; i < moveDistanceArray.length; i++) {\n const sumDistance = moveDistanceArray\n .slice(0, i + 1)\n .reduce((sum, cur) => sum + cur, 0);\n if (sumDistance >= start.distance) {\n // \u4F4D\u79FB\u5230\u5F53\u524D\u8DEF\u6BB5 \u8BA1\u7B97\u4E00\u4E0B\u4F4D\u79FB\u540E\u7684\u4F4D\u7F6E\n const prevDistance = sumDistance - moveDistanceArray[i];\n // \u9700\u8981\u5728\u5F53\u524D\u7684\u8DEF\u6BB5\u4E2D\u79FB\u52A8\u7684\u8DDD\u79BB\n const needDistance = start.distance - prevDistance;\n const startPoint = currentPath[i];\n const nextPoint = currentPath[i + 1];\n // \u6839\u636E\u65B0\u7684\u4F4D\u7F6E\u548C\u8DEF\u7EBF\u6BB5\u4FEE\u6539\u8DEF\u7EBF\n const pos = moveOnRoute(startPoint, nextPoint, needDistance);\n this.path?.updatePoints([pos, ...currentPath.slice(i + 1)]);\n this.animationPathOptions.cPathIndex += i;\n if (this.startPoi) {\n this.startPoi.position.setX(pos[0]).setY(pos[1])\n }\n this.dispatchEvent({type: \"path-animation\"})\n return;\n }\n }\n })\n .onComplete(() => {\n this.pathTween.remove(tween);\n this.dispatchEvent({type: \"path-animation-end\"})\n resolve(true)\n })\n .start();\n })\n }\n\n kmPerHourToMetersPerSecond(speedInKmPerHour: number): number {\n const speedInMetersPerSecond = (speedInKmPerHour * 1000) / 3600;\n return speedInMetersPerSecond;\n }\n\n dispose() {\n this.worker.terminate();\n this.unRegistryEvent();\n this.path?.dispose();\n this.uniqueKey.dispose();\n this.startPoi?.dispose();\n }\n}\n", "import { loadGraphics } from \"../../api\";\nimport { Graphic } from \"../../elements\";\nimport { GraphicInfo, LoadQuery } from \"../../types\";\nimport { HooksName, generatorKeyByObj } from \"../../utils\";\nimport { Plugin } from \"../base\";\n\ntype LoadGraphicQuery = Omit<LoadQuery, \"resource_type_list\">;\n\nexport class SplitLoad extends Plugin {\n cacheData = new Map<string, GraphicInfo[]>();\n\n floorDataLengthMap = new Map();\n\n async load(query: LoadQuery): Promise<GraphicInfo[]> {\n const cacheKey = generatorKeyByObj(query);\n if (this.cacheData.has(cacheKey)) {\n return this.cacheData.get(cacheKey)!;\n }\n console.time(\"floor/get\u8BF7\u6C42\" + query.resource_type_list)\n const [,data] = await Promise.all([this.loadBuildGround(query), loadGraphics(query, this.bmap.config)]);\n console.timeEnd(\"floor/get\u8BF7\u6C42\" + query.resource_type_list)\n const lenKey = generatorKeyByObj({ floor: query.floor, ts: query.ts });\n this.bmap.transformGraphicData(data, this.bmap.buildingCenter, this.floorDataLengthMap.get(lenKey) || 0);\n data.forEach((item) => (item.info.transformToBuildingGround = false));\n this.cacheData.set(cacheKey, data);\n const len = this.floorDataLengthMap.get(lenKey) || 0;\n this.floorDataLengthMap.set(lenKey, len + data.length)\n return data;\n }\n\n isSameFloor(query: LoadGraphicQuery) {\n return this.bmap.context.currentFloor?.key === generatorKeyByObj(query);\n }\n\n switchFloorByData(data: GraphicInfo[], query: LoadGraphicQuery) {\n if (!this.isSameFloor(query)) {\n // \u9700\u8981\u5207\u6362\u697C\u5C42\n const floorName = generatorKeyByObj(query);\n const { curFloor, graphics } = this.bmap.createFloor(data);\n curFloor.name = query.floor;\n curFloor.key = floorName;\n const graphicMap = new Map<string, GraphicInfo>();\n data.forEach((graphicInfo) => {\n graphicMap.set(graphicInfo.element_uuid, graphicInfo);\n })\n curFloor.userData.graphicMap = graphicMap;\n this.bmap.triggerHooks(HooksName.SWITCH_FLOOR_BEFORE, { curFloor, graphics })\n this.bmap.context.switchFloor(curFloor);\n this.bmap.initialFloorCamera();\n this.bmap.triggerHooks(HooksName.SWITCH_FLOOR_AFTER, { curFloor, graphics })\n } else {\n if (!data.length) {\n return;\n }\n const curFloor = this.bmap.context.currentFloor!;\n const legacyToGraphicMap = curFloor.userData.legacyToGraphicMap;\n const graphicMap = curFloor.userData.graphicMap;\n const graphics: Graphic[] = [];\n for (const item of data) {\n if (item.info.group === \"ground\") {\n curFloor.createGround(item.info);\n } else {\n const graphic = curFloor.addGraphic(item.info);\n graphic.userData.data = item;\n legacyToGraphicMap.set(item.legacy_id, graphic);\n graphics.push(graphic);\n }\n graphicMap.set(item.element_uuid, item);\n }\n this.bmap.triggerHooks(HooksName.SWITCH_FLOOR_BEFORE, { curFloor, graphics })\n this.bmap.initialFloorCamera();\n this.bmap.triggerHooks(HooksName.SWITCH_FLOOR_AFTER, { curFloor, graphics })\n }\n }\n\n filterData(data: GraphicInfo[], query: LoadGraphicQuery) {\n if (!this.isSameFloor(query)) {\n // \u65B0\u7684\u697C\u5C42\u6570\u636E\n return data;\n }\n // \u8981\u548C\u5DF2\u6709\u7684\u697C\u5C42\u6570\u636E\u505A\u7ED3\u5408\n const graphicMap = this.bmap.context.currentFloor!.userData.graphicMap;\n return data.filter((graphic) => !graphicMap.has(graphic.element_uuid));\n }\n\n private async switchFloorByStoreData(query: LoadGraphicQuery) {\n const storeData = await this.load({ ...query, resource_type_list: \"6\" });\n const filterData = this.filterData(storeData, query);\n this.switchFloorByData(filterData, query);\n }\n\n private async switchFloorByOtherData(query: LoadGraphicQuery) {\n const otherData = await this.load({\n ...query,\n resource_type_list: \"1,2,3,4\",\n });\n const filterData = this.filterData(otherData, query);\n this.switchFloorByData(filterData, query);\n }\n\n async loadBuildGround({ brand, project }: LoadGraphicQuery) {\n const buildingKey = generatorKeyByObj({ brand, project })\n await this.bmap.loadBuildingGround({ brand: brand, project: project })\n this.bmap.currentBuildGround = this.bmap.buildingGroundMap.get(buildingKey) || null;\n return this.bmap.currentBuildGround\n }\n\n async changeFloor(query: LoadGraphicQuery) {\n await Promise.all([\n this.switchFloorByStoreData(query),\n this.switchFloorByOtherData(query),\n ]);\n return Array.from(this.bmap.context.currentFloor!.userData.graphicMap.values());\n }\n}\n", "import { Floor } from \"../../elements\";\nimport { BMap } from \"../../bmap\";\nimport { Plugin } from \"../base\";\nimport { PoiLayer } from \"../../layer\";\nimport { Group } from \"three\";\n\nexport class MulFloors extends Plugin {\n poiLayer: PoiLayer;\n\n floors: Floor[] = [];\n\n group = new Group();\n constructor(bmap: BMap) {\n super(bmap);\n this.poiLayer = new PoiLayer(bmap.context);\n }\n\n show(floors: Floor[]) {\n let height = floors[0].userData.height;\n floors.forEach((floor) => {\n floor.poiLayer.pois.forEach((poi) => {\n this.poiLayer.pushPoi(poi);\n });\n floor.poiLayer.pois.length = 0;\n floor.poiLayer.dispose();\n floor.position.z = height;\n height += floor.userData.height;\n });\n const { scene, currentFloor } = this.bmap.context;\n if (currentFloor) {\n scene.remove(currentFloor);\n currentFloor.dispose();\n }\n this.group.add(this.poiLayer, ...floors);\n scene.add(this.group);\n this.floors = floors;\n }\n\n hide() {\n const { scene } = this.bmap.context;\n scene.remove(this.group);\n this.poiLayer.clear(true);\n this.floors.forEach((floor) => {\n floor.dispose();\n });\n this.floors = [];\n this.group.clear();\n }\n\n fitCamera() {\n const { context, config, type } = this.bmap;\n context.cameraBound.setEnable(false);\n // \u8BBE\u7F6Ezoom\n context.control.minZoom = 0;\n context.control.maxZoom = Infinity;\n context.camera.zoom = 1;\n context.setAzimuthalAngle(config.control.defaultAzimuthal, 0);\n context.setPolarAngle(config.control.defaultPolar, 0);\n context.fitCameraToObject(this.group, undefined, 0);\n const basicZoom = context.camera.zoom;\n // \u8BBE\u7F6Ezoom\n context.control.minZoom = basicZoom;\n context.control.maxZoom = basicZoom * 25;\n if (type === \"3d\") {\n context.fitCameraToObject(this.group, config.defaultPadding, 0, false);\n }\n this.bmap.basicZoom = context.camera.zoom;\n context.control.addEventListener(\n \"change\",\n this.bmap.onControlChange.bind(this.bmap)\n );\n this.bmap.onControlChange();\n context.cameraBound.setEnable(true);\n }\n\n dispose(): void {\n this.poiLayer.dispose();\n this.floors.forEach((item) => item.dispose());\n this.floors = [];\n }\n}\n", "let _db: IDBDatabase;\n\n/**\n * \u83B7\u53D6indexDb\u8FDE\u63A5\n * @param database\n * @returns\n */\nexport function createDb(database = \"aibee_map\"): Promise<{db: IDBDatabase, type: string}> {\n return new Promise((resolve, reject) => {\n if (_db) {\n return resolve({db: _db, type: \"success\"});\n }\n const request = indexedDB.open(database);\n\n request.onupgradeneeded = function(event: any) { \n _db = event.target.result; \n console.log(\"onupgradeneeded\")\n // \u5728\u8FD9\u91CC\u8FDB\u884C createObjectStore \u64CD\u4F5C \n resolve({db: _db, type: \"onupgradeneeded\"});\n }; \n\n request.onsuccess = (event: any) => {\n _db = event.target.result;\n resolve({db: _db, type: \"success\"});\n };\n\n request.onerror = (event: any) => {\n reject(event);\n };\n });\n}\n\n/**\n * \u67E5\u8BE2\u6570\u636E\n * @param storeName \n * @param key \n * @param db \n * @returns \n */\nexport function get(storeName: string, key: string, db = _db) {\n return new Promise((resolve, reject) => {\n if (!db) {\n reject(\"\u6CA1\u6709db\");\n }\n const objectStore = db\n .transaction([storeName], \"readonly\")\n .objectStore(storeName);\n const request = objectStore.get(key);\n request.onsuccess = () => {\n if (request.result) {\n resolve(request.result.value);\n } else {\n resolve(null);\n }\n };\n request.onerror = (event) => {\n console.log(\"[getVersionByKey]\", event);\n resolve(null);\n };\n });\n}\n\n/**\n * \u6DFB\u52A0\u6570\u636E\n * @param storeName \n * @param key \n * @param value \n * @param db \n * @returns \n */\nexport function set(storeName: string, key: string, value: any, db = _db) {\n return new Promise((resolve, reject) => {\n if (!db) {\n reject(\"\u6CA1\u6709db\");\n }\n return new Promise((resolve, reject) => { \n const objectStore = db\n .transaction([storeName], \"readwrite\")\n .objectStore(storeName);\n const request = objectStore.add({ key, value })\n request.onsuccess = function (event) {\n resolve(event)\n }\n request.onerror = function (event) {\n reject(event)\n }\n })\n })\n}\n\n/**\n * \u521B\u5EFA\u6570\u636E\u8868\n * @param storeName \n * @param db \n * @returns \n */\nexport function createStore(storeName: string, db = _db) {\n if (!db) {\n return\n }\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName, { keyPath: \"key\" });\n }\n}\n\n/**\n * \u5220\u9664\u6570\u636E\n * @param storeName \n * @param key \n * @param db \n * @returns \n */\nexport function remove(storeName: string, key: string, db = _db) {\n return new Promise((resolve, reject) => {\n if (!db) {\n reject(\"\u6CA1\u6709db\");\n }\n return new Promise((resolve, reject) => {\n const objectStore = db.transaction([storeName], 'readwrite').objectStore(storeName)\n const request = objectStore.delete(key)\n request.onsuccess = function (event) {\n resolve(event)\n }\n request.onerror = function (event) {\n reject(event)\n }\n })\n })\n}\n\n/**\n * \u66F4\u65B0\u6570\u636E\n * @param storeName \n * @param key \n * @param value \n * @param db \n * @returns \n */\nexport function update(storeName: string, key: string, value: any, db = _db) {\n return new Promise((resolve, reject) => {\n if (!db) {\n reject(\"\u6CA1\u6709db\");\n }\n return new Promise((resolve, reject) => {\n const objectStore = db.transaction([storeName], 'readwrite').objectStore(storeName)\n const request = objectStore.put({ key, value })\n request.onsuccess = function (event) {\n resolve(event)\n }\n request.onerror = function (event) {\n reject(event)\n }\n })\n })\n}\n\nexport function closeDb() {\n _db?.close();\n _db = null as unknown as IDBDatabase;\n}", "import { PointGeometry, PolygonGeometry } from \"../../types\";\n\nexport function transformGraphicData(\n data: { geometry: PolygonGeometry | PointGeometry; deltaHeight?: number }[],\n center: [number, number],\n baseIndex = 0\n) {\n data.forEach((item) => {\n item.geometry.coords = JSON.parse(JSON.stringify(item.geometry.cds));\n if (item.geometry.type === \"polygon\") {\n item.geometry.coords.map((cds) => {\n if (Array.isArray(cds)) {\n cds.forEach((coord) => {\n coord[0] -= center[0];\n coord[1] -= center[1];\n });\n }\n });\n if (item.geometry.otherCds) {\n item.geometry.otherCoords = item.geometry.otherCds.map((cds) =>\n cds.map((item) => translatePosToCenter(item, center))\n );\n }\n } else {\n // point\n item.geometry.coords = translatePosToCenter(item.geometry.cds, center);\n }\n });\n for (let i = 0; i < data.length; i++) {\n const item = data[i];\n item.deltaHeight = 0.00001 * (baseIndex + i + 1);\n }\n}\n\nexport function translatePosToCenter(\n cds: [number, number],\n center: [number, number]\n): [number, number] {\n return [cds[0] - center[0], cds[1] - center[1]];\n}\n", "// \u52A0\u8F7DAibee\u5730\u56FE/\u8DEF\u7F51\u6570\u636E\n\nimport { createStore, createDb, closeDb, set, get } from \"../../utils/index-db\";\nimport { BMap } from \"../../bmap\";\nimport { Floor, Graphic, Wall, GroundTexture, GlbModel, Lane } from \"../../elements\";\nimport { AibeeFloorData, AibeeGraphicLayer, AibeeLaneLayer, AibeeRangeLayer, AibeeWallLayer } from \"./type\";\nimport { transformGraphicData, translatePosToCenter } from \"./utils\";\nimport { PointGeometry } from \"src/types\";\n\nexport interface AibeeLoaderOption {\n loadRoadNetwork: boolean; // \u52A0\u8F7D\u8DEF\u7F51\u6570\u636E\n}\n\nexport const defaultAibeeLoaderOption = {\n loadRoadNetwork: false,\n}\n\nconst VersionStoreName = \"version\"; // \u7248\u672C\nconst MapDataStoreName = \"map_data\" // \u5730\u56FE\u6570\u636E \nconst RoadNetworkDataStoreName = \"road_network_data\" // \u8DEF\u7F51\n\nexport interface AibeeFloorInfo {\n floor_id: number;\n map_url: string;\n map_url_bin: string;\n route_url: string;\n route_url_bin: string;\n version_id: string;\n floor: string;\n floor_name: string;\n}\n\nexport class AibeeLoader {\n\n floors: AibeeFloorInfo[] = []\n\n constructor(public bmap: BMap) {\n this.initDb()\n }\n\n async initDb() {\n try {\n const {db, type} = await createDb()\n if (type === \"onupgradeneeded\") {\n createStore(VersionStoreName)\n createStore(MapDataStoreName)\n createStore(RoadNetworkDataStoreName)\n }\n } catch(e) {\n console.log(\"[\u6253\u5F00indexDb\u9519\u8BEF]\", e)\n }\n }\n\n async load(data: string | AibeeFloorInfo[]) {\n this.clear()\n if (Array.isArray(data)) {\n this.floors = data;\n } else {\n const res = await fetch(data).then(res => res.json())\n if (res.code === '0') {\n this.floors = res.data.list\n }\n }\n }\n\n setCacheData(storeName: string, key: string | number, data: any) { \n return set(storeName, `${key}`, data)\n }\n\n getCacheData<T>(storeName: string, key: string | number): Promise<T> { \n return get(storeName, `${key}`) as Promise<T>\n }\n\n getFloorCacheKey(floorInfo: AibeeFloorInfo) {\n return `${floorInfo.floor_id}`\n }\n\n async getFloorData(floor: string): Promise<Floor | null> {\n const floorInfo = this.floors.find(item => item.floor === floor)\n if (!floorInfo) { return null }\n const cacheKey = this.getFloorCacheKey(floorInfo)\n try {\n const cacheVersion = await this.getCacheData(VersionStoreName, cacheKey)\n if (cacheVersion === floorInfo.version_id) {\n const res: AibeeFloorData = await this.getCacheData(MapDataStoreName, cacheKey)\n if (res) {\n return this.getDataByJson(res)\n }\n }\n return this.getFloorDataByFloorInfo(floorInfo)\n } catch {\n return this.getFloorDataByFloorInfo(floorInfo)\n }\n }\n\n async getFloorDataByFloorInfo(floorInfo: AibeeFloorInfo): Promise<Floor> { \n const cacheKey = this.getFloorCacheKey(floorInfo)\n // \u76F4\u63A5\u8BF7\u6C42json\u6570\u636E\n console.time(`zstd_json`)\n const res1 = await fetch(floorInfo.map_url).then(res => res.json())\n console.timeEnd(`zstd_json`)\n this.setCacheData(MapDataStoreName, cacheKey, res1)\n this.setCacheData(VersionStoreName, cacheKey, floorInfo.version_id)\n return this.getDataByJson(res1)\n }\n\n // \u83B7\u53D6\u8DEF\u7F51\u6570\u636E\n async getRoadNetworkData() {\n const res = await Promise.all(this.floors.map(async item => { \n const cacheKey = this.getFloorCacheKey(item)\n try {\n const cacheVersion = await this.getCacheData(VersionStoreName, cacheKey)\n if (cacheVersion === item.version_id) {\n const res: AibeeFloorData = await this.getCacheData(RoadNetworkDataStoreName, cacheKey)\n if (res) {\n return res\n }\n }\n const route = await fetch(item.route_url).then(res => res.json())\n await this.setCacheData(RoadNetworkDataStoreName, cacheKey, route)\n return route\n } catch {\n const route = await fetch(item.route_url).then(res => res.json())\n await this.setCacheData(RoadNetworkDataStoreName, cacheKey, route)\n return route\n }\n }))\n return res.filter(item => item.points)\n }\n\n // \u7A7A\u95F2\u65F6\u95F4\u8BF7\u6C42\u5176\u4ED6\u6570\u636E\n async getOtherDataByFreeTime() {\n // TODO \u53EF\u4EE5\u8003\u8651\u5728webworker\u4E2D\u8BF7\u6C42\u6570\u636E\uFF0C\u5355\u72EC\u8BA1\u7B97\u8BF7\u6C42\u7684\u5E76\u53D1\u6570\u91CF\n // TODO \u83B7\u53D6\u5176\u4ED6\u6570\u636E\n }\n\n // \u83B7\u53D6\u591A\u697C\u5C42\u6570\u636E\n async getMulFloorsData(floors: string[]): Promise<Floor[]> { \n return Promise.all(floors.map(floor => this.getFloorData(floor)))\n .then(data => data.filter(item => item)) as Promise<Floor[]>\n }\n\n async getDataByUrl(url: string): Promise<Floor> {\n const data: AibeeFloorData = await fetch(url).then(res => res.json())\n return this.getDataByJson(data)\n }\n\n getDataByJson(data: AibeeFloorData): Floor {\n const floor = new Floor(this.bmap.context)\n let center: [number, number] = [0, 0]\n data.layers.forEach(layer => { \n switch (layer.l_type) {\n case \"range\":\n const data = layer.elements[0] as AibeeRangeLayer['elements'][0]\n center = [data.center_x, data.center_y]\n break;\n case \"graph\":\n const graphics: Graphic[] = []\n const graphicMap = new Map<string, Graphic>();\n transformGraphicData(layer.elements, center)\n layer.elements.forEach(options => { \n if (options.group === \"ground\") {\n floor.createGround(options)\n } else {\n const graphic = floor.addGraphic(options)\n graphics.push(graphic)\n graphicMap.set(options.id, graphic)\n }\n })\n floor.userData.graphics = graphics\n floor.userData.graphicMap = graphicMap\n break;\n case \"ground\":\n transformGraphicData(layer.elements, center)\n const grounds = layer.elements.map(options => new Graphic(this.bmap.context, options))\n floor.addGrounds(grounds)\n break;\n case \"wall\":\n transformGraphicData(layer.elements, center)\n // \u5206\u7EC4\n const wallGroup = layer.elements.reduce((obj, options) => { \n const { fillColor, fillOpacity, strokeColor, strokeOpacity, height } = options\n const key = `${fillColor}-${fillOpacity}-${strokeColor}-${strokeOpacity}-${height}`\n if (obj[key]) {\n obj[key].push(options)\n } else {\n obj[key] = [options]\n }\n return obj\n }, {} as Record<string, AibeeWallLayer[\"elements\"]>)\n Object.values(wallGroup).forEach(optionArray => { \n const wall = new Wall(this.bmap.context, optionArray as any)\n floor.wallLayer.add(wall)\n })\n break;\n case \"lane\":\n transformGraphicData(layer.elements, center)\n // \u5206\u7EC4\n const laneGroup = layer.elements.reduce((obj, options) => { \n const { fillColor, fillOpacity, strokeColor, strokeOpacity } = options\n const key = `${fillColor}-${fillOpacity}-${strokeColor}-${strokeOpacity}`\n if (obj[key]) {\n obj[key].push(options)\n } else {\n obj[key] = [options]\n }\n return obj\n }, {} as Record<string, AibeeLaneLayer[\"elements\"]>)\n Object.values(laneGroup).forEach(optionArray => { \n const lane = new Lane(this.bmap.context, optionArray as any)\n floor.laneLayer.add(lane)\n })\n break;\n case \"texture2d\":\n case \"texture3d\":\n transformGraphicData(layer.elements, center)\n layer.elements.forEach(options => {\n const texture = new GroundTexture(this.bmap.context, options)\n floor.textureLayer.add(texture)\n })\n break;\n case \"glb\":\n transformGraphicData(layer.elements, center)\n layer.elements.forEach(options => {\n const model = new GlbModel(this.bmap.context, {\n ...options,\n url: options.secondUrl,\n rotate: options.secondRotate,\n width: options.secondWidth,\n })\n floor.glbModelLayer.add(model)\n })\n break;\n case \"store\":\n layer.elements.map(options => { \n const pos = translatePosToCenter([options.center_x, options.center_y], center)\n floor.poiLayer.createPoi({\n icon: options.poi_info.icon,\n texts: [{ text: options.store_name || options.poi_info.name }],\n position: { x: pos[0], y: pos[1], z: options.airHeight }\n })\n })\n break;\n case \"facility\":\n layer.elements.map(options => { \n const pos = translatePosToCenter(options.geometry.cds as PointGeometry['cds'], center)\n floor.poiLayer.createPoi({\n icon: options.poi_info.icon,\n texts: [{ text: options.store_name || options.poi_info.name }],\n position: { x: pos[0], y: pos[1], z: options.airHeight }\n })\n })\n break;\n case \"parkingSpace\":\n transformGraphicData(layer.elements, center)\n let parkingSpacesGraphics: Graphic[] = [];\n let parkingSpacesGraphicMap = new Map<string, Graphic>()\n\n layer.elements.forEach(options => { \n const graphic = floor.addGraphic(options)\n parkingSpacesGraphics.push(graphic)\n parkingSpacesGraphicMap.set(options.id, graphic)\n const pos = translatePosToCenter([options.center_x, options.center_y], center)\n floor.poiLayer.createPoi({\n texts: [{ text: options.text[0] }],\n position: { x: pos[0], y: pos[1], z: options.airHeight }\n })\n })\n floor.userData.parkingSpaces = parkingSpacesGraphics\n floor.userData.parkingSpacesGraphicMap = parkingSpacesGraphicMap\n break;\n }\n })\n floor.userData.center = center\n floor.userData.height = data.floorHeight\n return floor\n }\n\n clear() {\n // TODO \u6E05\u9664\u7F13\u5B58\u7684\u6570\u636E\n }\n\n dispose() {\n this.clear()\n closeDb()\n }\n}"],
|
|
5
|
-
"mappings": "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UG,EAAI,CAAC,EAAIsB,EAAS,EAC5BzB,EAAUG,EAAI,CAAC,EAAIsB,EAAS,EAG5BN,GAAOnB,EAAW,EAAG2B,EAAM,EAAGxB,EAAI,CAAC,EAEnCwB,EAAKxB,EAAI,CAAC,EAAIsB,EAAS,EACvBE,EAAKxB,EAAI,CAAC,EAAIsB,EAAS,EACvBE,EAAKxB,EAAI,CAAC,EAAIsB,EAAS,EACvBE,EAAKxB,EAAI,CAAC,EAAIsB,EAAS,EACvBE,EAAKxB,EAAI,CAAC,EAAIsB,EAAS,EACvBE,EAAKxB,EAAI,CAAC,EAAIsB,EAAS,EAEvB,KAAK,YAAY,SAAS,YAAc,GACxC,KAAK,YAAY,SAAS,YAAc,GACxC,KAAK,YAAY,KAAK,YAAc,EACtC,EAEA,cAAY,cAAmB,CAC7B,GACA,cAAY,wBACZ,cAAY,gBACZ,GACA,2BACA,uBACA,wBACA,yBACA,4BACA,GACA,2BACA,2BACA,sBACA,yBACA,iCACA,GACA,oBACA,uBACA,2BACA,GACA,qCACA,GACA,6BACA,uBACA,0BACA,kBACA,GACA,IACA,GACA,gBACA,GACA,kDACA,GACA,uCACA,gBACA,GACA,mDACA,sDACA,gDACA,4CACA,GACA,oDACA,2CACA,2CACA,GACA,mCACA,GACA,gBACA,mEACA,wEACA,aACA,qDACA,qDACA,0CACA,GACA,+CACA,8CACA,6EACA,GACA,QACA,GACA,2EACA,mDACA,2BACA,kCACA,oCACA,wCACA,6EACA,QACA,GACA,4CACA,GACA,mCACA,GACA,cAAY,mBACZ,cAAY,YACV,iEACF,cAAY,WACZ,GACF,EAAE,KAAK;AAAA,CAAI,EAEX,cAAY,cAAmB,CAC7B,GACA,cAAY,kBACZ,cAAY,0BACZ,GACA,yBACA,8BACA,wBACA,6BACA,yBACA,2BACA,4BACA,2BACA,4BACA,2BACA,uBACA,GACA,oBACA,uBACA,2BACA,GACA,gBACA,GACA,cAAY,qBACZ,GACA,uBACA,8DACA,4EACA,qCACA,2BACA,yFACA,QACA,wBACA,qDACA,GACA,cAAY,aACZ,GACF,EAAE,KAAK;AAAA,CAAI,EAEX,IAA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",
|
|
6
|
-
"names": ["require_vec2_copy", "__commonJSMin", "exports", "module", "out", "a", "require_chaikin_smooth", "__commonJSMin", "exports", "module", "copy", "input", "output", "i", "p0", "p1", "p0x", "p0y", "p1x", "p1y", "Q", "R", "require_PriorityQueue", "__commonJSMin", "exports", "module", "PriorityQueue", "a", "b", "key", "value", "priority", "element", "require_removeDeepFromMap", "__commonJSMin", "exports", "module", "removeDeepFromMap", "map", "key", "newMap", "aKey", "val", "require_toDeepMap", "__commonJSMin", "exports", "module", "isValidNode", "val", "cost", "toDeepMap", "source", "map", "key", "require_validateDeep", "__commonJSMin", "exports", "module", "validateDeep", "map", "value", "key", "require_Graph", "__commonJSMin", "exports", "module", "Queue", "removeDeepFromMap", "toDeepMap", "validateDeep", "Graph", "graph", "name", "neighbors", "nodes", "key", "start", "goal", "options", "explored", "frontier", "previous", "path", "totalCost", "avoid", "node", "nodeKey", "nCost", "nNode", "frontierPriority", "nodeCost", "args", "import_three", "Timer", "fn", "timer", "wait", "import_three", "import_MapControls", "initScene", "scene", "initRenderer", "renderer", "initCamera", "width", "height", "camera", "initLight", "lights", "ambientLight", "initControl", "domElement", "control", "initShape", "path", "holePath", "shape", "item", "cur", "hole", "initDirectionalLight", "color", "intensity", "directionalLight", "dispose", "o", "recursive", "child", "m", "mat", "hasChinese", "str", "import_three", "textTextureMap", "initCanvas", "canvas", "ctx", "createCanvas", "c", "t", "getTextureByText", "text", "y", "hasChinese", "width", "imageData", "texture", "clearTextTexture", "clearCanvas", "import_three", "import_turf", "vector3ToDevice", "vector", "camera", "w", "h", "_vector", "_w", "_h", "x", "y", "getCenter", "coordinates", "features", "item", "isContain", "point", "start", "end", "getLongestSideDir", "cds", "maxDistance", "dir", "i", "point_0", "point_1", "distance", "getLength", "getPathLength", "path", "length", "calc_angle", "p0", "p1", "p2", "line1", "line2", "angle", "l01", "proxyOptions", "target", "master", "p", "receiver", "newValue", "oldValue", "res", "timeoutPromise", "promise", "timeout", "resolve", "reject", "createSvgElement", "tag", "createSvg", "w", "h", "svg", "createCircle", "radius", "fill", "circle", "createLine", "stroke", "line", "createRect", "rect", "setCirclePosition", "x", "y", "setLineStartEnd", "start", "end", "setRectPosition", "sleepOnePromise", "sleepOneRf", "resolve", "strToNumber", "str", "addAlphaToHexColor", "hexColor", "alpha", "r", "g", "b", "newR", "newG", "newB", "darkenColor", "factor", "numbers", "import_GLTFLoader", "createLoader", "loader", "modelMap", "loadModel", "url", "gltf", "p", "resolve", "reject", "disposeLoader", "isMac", "isControl", "key", "isMac", "oncePrefix", "Events", "type", "callback", "events", "event", "onceEvents", "args", "fn", "HooksName", "generatorKeyByObj", "obj", "key", "xhrGet", "url", "options", "resolve", "reject", "xhr", "key", "response", "error", "UniqueKey", "_UniqueKey", "key", "import_three", "import_chaikin_smooth", "getAngle", "vec0", "vec1", "v0", "v1", "averageStepLength", "path", "sum", "x0", "y0", "x1", "y1", "smoothPath", "threshold", "result", "smooth", "simplifyPath", "ignoreFirst", "smoothingOptimization", "simplifyDistanceThreshold", "maximumTurningDegree", "smoothingDistance", "joints", "firstIgnored", "i", "p0", "p1", "p2", "deg", "dist", "simplifiedPath", "head", "mid", "tail", "halfHeadMidDist", "halfMidTailDist", "curveHead", "curveTail", "curveToSmooth", "removeWeightPath", "points", "checkedPath", "lastCheckedPoint", "x", "y", "distancePointToSegment", "point", "start", "end", "segmentLength", "t", "closestPoint", "moveOnRoute", "startPoint", "endPoint", "distance", "startX", "startY", "endX", "endY", "routeLength", "ratio", "newX", "newY", "PathDirection", "calc_direction", "angle", "calc_angle", "getDirectPath", "arr", "getLength", "direction", "last", "import_node_dijkstra", "RoadNetwork", "lift_priority", "Graph", "roadInfo", "floorRoadInfo", "point", "pointKey", "arr", "obj", "item", "fromKey", "toKey", "fromCds", "toCds", "distance", "getLength", "start", "end", "lineMap", "map", "escalatorPriority", "straightLadderPriority", "staircasePriority", "_", "value", "i", "j", "step", "floor", "id", "cur", "data", "type", "transformedStart", "transformedEnd", "getPathFn", "facilityPoints", "paths", "sum", "getPathLength", "route", "startPointId", "endPointId", "pathData", "convertToSnakeCase", "str", "match", "uniqueKey", "UniqueKey", "triggerWorker", "worker", "type", "data", "resolve", "reject", "key", "onMessage", "toWebWorker", "obj", "events", "convertToSnakeCase", "result", "e", "import_three", "import_tween", "import_three", "import_three", "defaultGraphicOptions", "Graphic", "context", "options", "proxyOptions", "x", "y", "value", "center", "box", "size", "shape", "initShape", "material", "material1", "darkenColor", "pos", "dir", "minOrigin", "raycaster", "min", "maxOrigin", "raycaster2", "max", "_max", "maxValue", "__max", "_min", "dir2", "___max", "__min", "lineMaterial", "points", "height", "coords", "j", "curCds", "i", "cur", "next", "lineGeometry", "line", "intersects", "position", "distance", "import_three", "Shadow", "directionalLight", "initDirectionalLight", "size", "x", "y", "color", "position", "width", "height", "geometry", "material", "mesh", "target", "opacity", "dispose", "import_three", "import_three", "import_lodash", "defaultOptions", "Overlay", "context", "options", "observer", "Graphic", "max", "min", "centerX", "centerY", "x", "y", "z", "width", "height", "positions", "obj", "key", "vector3ToDevice", "clientWidth", "clientHeight", "halfWidth", "halfHeight", "placements", "i", "placement", "position", "div", "element", "visible", "display", "opacity", "clientX", "clientY", "force", "vector", "defaultOptions", "Poi", "context", "options", "proxyOptions", "Overlay", "x", "y", "height", "value", "div", "text", "sleepOnePromise", "width", "icon", "textDiv", "f", "item", "key", "img", "visible", "boxScale", "w", "h", "box", "import_three", "import_three", "import_heatmap", "import_turf", "HeatmapElement", "context", "data", "width", "height", "leftTop", "center", "geometry", "texture", "material", "x", "y", "matrix", "item", "vector", "features", "box", "getCenter", "import_three", "Model", "context", "options", "object", "loadModel", "dispose", "import_three", "import_three", "Layer", "context", "dispose", "item", "GraphicLayer", "Layer", "context", "options", "graphic", "Graphic", "id", "raycaster", "initData", "data", "res", "item", "pos", "distance", "import_lodash", "PoiLayer", "Layer", "Timer", "context", "force", "item", "options", "poi", "Poi", "index", "id", "i", "x", "y", "range", "left", "right", "top", "bottom", "valid", "box", "Floor", "context", "Layer", "GraphicLayer", "PoiLayer", "Shadow", "options", "ground", "Graphic", "grounds", "model", "Model", "box", "center", "size", "graphicOptions", "poiOptions", "data", "HeatmapElement", "opacity", "visible", "import_three", "BaseSvg", "context", "createSvg", "width", "height", "enable", "e", "camera", "renderer", "x", "y", "clientWidth", "clientHeight", "nx", "ny", "vector", "container", "vector3ToDevice", "SvgLine", "BaseSvg", "context", "circle", "line", "createCircle", "createLine", "enable", "point1", "setCirclePosition", "setLineStartEnd", "point2", "e", "point", "x", "y", "vector", "distance", "x1", "y1", "x2", "y2", "SvgPolygon", "BaseSvg", "context", "enable", "circle", "line", "point", "index", "devicePoint", "setCirclePosition", "setLineStartEnd", "e", "x", "y", "fill", "radius", "stroke", "createCircle", "createLine", "cx", "cy", "vector", "area", "cds", "item", "numPoints", "i", "j", "import_three", "SelectBox", "BaseSvg", "context", "line", "createRect", "i", "enable", "box", "camera", "w", "h", "min", "max", "leftBottom", "vector3ToDevice", "rightTop", "setRectPosition", "left", "bottom", "right", "top", "halfWidth", "corners", "centerHalfWidth", "centerX", "centerY", "centers", "graphic", "import_three", "import_BufferGeometryUtils", "Wall", "context", "options", "geometries", "option", "shape", "initShape", "item", "vertexShader", "fragmentShader", "maxZ", "positionAttribute", "i", "z", "shaderMaterial", "darkenColor", "strokeColor", "strokeOpacity", "lineMaterial", "height", "deltaHeight", "geometry", "points", "_height", "coords", "j", "curCds", "cur", "next", "line", "mesh", "import_three", "defaultOptions", "GroundTexture", "context", "options", "proxyOptions", "deltaHeight", "airHeight", "geometry", "iconUrl", "opacity", "shape", "initShape", "extrudeGeometry", "planeMaterial", "mesh", "import_three", "defaultGlbOptions", "GlbModel", "context", "options", "object", "loadModel", "box", "size", "max", "scale", "dispose", "import_three", "import_BufferGeometryUtils", "import_Line2", "import_LineGeometry", "Lane", "context", "options", "geometries", "option", "shape", "initShape", "item", "fillColor", "fillOpacity", "material", "strokeColor", "strokeOpacity", "lineMaterial", "deltaHeight", "geometry", "points", "_height", "coords", "j", "curCds", "i", "cur", "next", "group", "obj", "key", "vec", "line", "mesh", "import_three", "BoxSelection", "BaseSvg", "context", "fill", "stroke", "createRect", "enable", "setRectPosition", "e", "point", "startPoint", "endPoint", "leftTop", "width", "height", "camera", "w", "h", "startDevice", "vector3ToDevice", "endDevice", "rightBottom", "list", "item", "Graphic", "object", "position", "position2d", "isContain", "box", "min", "max", "minDevice", "maxDevice", "Selection", "context", "BoxSelection", "e", "offsetX", "offsetY", "x", "y", "graphics", "graphicIdSet", "item", "graphic", "isMac", "isControl", "list", "import_three", "HoverHelper", "context", "Timer", "graphics", "pois", "e", "poiGraphics", "item", "graphic", "time", "allGraphics", "resGraphic", "distance", "poi", "x", "y", "curDistance", "timer", "size", "rect", "import_LineMaterial", "import_three", "vectorToString", "vector", "MaterialFactory", "context", "color", "opacity", "key", "lineMaterial", "material", "gradualColor", "center", "maxValue", "direction", "max", "min", "vertexShader", "fragmentShader", "url", "texture", "width", "dashed", "val", "_", "import_three", "CameraBound", "context", "enable", "el", "Floor", "box", "camera", "w", "h", "min", "max", "lb", "vector3ToDevice", "rt", "lt", "rb", "left", "right", "top", "bottom", "width", "height", "pt", "pr", "pb", "pl", "checkedRight", "checkedLeft", "checkedTop", "checkedBottom", "bound", "import_three", "TextureFactory", "context", "url", "texture", "Context", "container", "config", "Selection", "HoverHelper", "MaterialFactory", "TextureFactory", "initScene", "initRenderer", "initLight", "Timer", "TweenGroup", "x", "y", "width", "height", "w", "h", "initCamera", "initControl", "polarAngle", "CameraBound", "point1", "point2", "clientWidth", "clientHeight", "device1", "vector3ToDevice", "device2", "color", "item", "floor", "position", "camera", "renderer", "e", "graphics", "pois", "point", "raycaster", "isMultipleSelect", "polar", "duration", "timeoutPromise", "resolve", "start", "end", "tween", "azimuthal", "maxAzimuthAngle", "minAzimuthAngle", "disable", "zoom", "center", "lookAtVector", "object", "padding", "force2DView", "top", "right", "bottom", "left", "boundingBox", "max", "min", "leftTop", "rightTop", "rightBottom", "leftBottom", "leftTop2d", "rightTop2d", "leftBottom2d", "rightBottom2d", "size", "xScale", "yScale", "scale", "light", "dispose", "import_lodash", "defaultConfig", "getConfig", "config", "import_lodash", "loadBuildingGround", "brand", "project", "config", "apiDomain", "floorRange", "apiInfo", "url", "res", "data", "loadGraphics", "floor", "ts", "resource_type_list", "floorGraphic", "item", "MapTypePolar", "BMap", "container", "config", "getConfig", "Context", "Timer", "brand", "project", "floor", "ts", "resource_type_list", "loadGraphics", "data", "center", "getCenter", "key", "generatorKeyByObj", "p", "resolve", "loadBuildingGround", "floorKey", "buildGround", "item", "baseIndex", "cds", "coord", "x", "y", "ground", "markGraphic", "graphic", "i", "plugin", "curFloor", "Floor", "legacyToGraphicMap", "graphics", "hooks", "curFloorData", "buildingKey", "createdFloor", "name", "graphicMap", "graphicInfo", "basicZoom", "zoom", "options", "model", "facilityAngle", "facilityXScale", "facilityYScale", "Graphic", "position", "ele", "duration", "timeoutPromise", "target", "width", "height", "camera", "offsetX", "vector3ToDevice", "v3", "vector", "clientWidth", "clientHeight", "type", "time", "cameraZoom", "e", "polar", "azimuthal", "observe", "keys", "radius", "reject", "SvgLine", "dispose", "distance", "SvgPolygon", "area", "nodeId", "id", "clearTextTexture", "clearCanvas", "disposeLoader", "import_three", "Plugin", "bmap", "Equipment", "Plugin", "bmap", "apiDomain", "equipmentList", "apiInfo", "url", "res", "item", "graphics", "graphic", "equipment", "poi", "inlineWorker", "scriptText", "blob", "url", "worker", "Worker", "inlineWorker", "import_three", "import_three", "MeshLine", "value", "matrixWorld", "g", "c", "points", "wcb", "j", "p", "MeshLineRaycast", "raycaster", "intersects", "inverseMatrix", "ray", "sphere", "interRay", "geometry", "vStart", "vEnd", "interSegment", "step", "index", "attributes", "indices", "positions", "widths", "i", "l", "a", "b", "width", "precision", "precisionSq", "distSq", "distance", "aa", "ab", "maxLength", "k", "p0", "p1", "w", "v", "memcpy", "src", "srcOffset", "dst", "dstOffset", "length", "position", "previous", "next", "MeshLineMaterial", "parameters", "source", "defaultConfig", "arrow_default", "Path", "navigation", "config", "points", "camera", "width", "height", "screenPoints", "x", "y", "vector3ToDevice", "getPathLength", "repeat", "url", "r", "j", "_points", "i", "lineGeometry", "MeshLine", "texture", "material", "MeshLineMaterial", "mesh", "import_tween", "defaultConfig", "Navigation", "Plugin", "Worker", "UniqueKey", "TweenGroup", "bmap", "project", "options", "apiDomain", "roadNetwork", "apiInfo", "triggerWorker", "roadInfo", "e", "roadData", "item", "curFloor", "curFloorPathData", "points", "paths", "floorName", "curFloorPath", "onCenterChange", "x", "y", "start", "end", "type", "resolve", "reject", "_getPath", "data", "onChangeStatus", "status", "cPath", "Path", "simplifyPath", "point", "speed", "cPathIndex", "currentPath", "translatedPos", "distance", "pos", "index", "res", "cur", "arr", "closestPoint", "distancePointToSegment", "moveDistance", "moveDistanceArray", "getLength", "i", "sum", "speedSecond", "timeSecond", "tween", "sumDistance", "prevDistance", "needDistance", "startPoint", "nextPoint", "moveOnRoute", "speedInKmPerHour", "SplitLoad", "Plugin", "query", "cacheKey", "generatorKeyByObj", "data", "loadGraphics", "lenKey", "item", "len", "curFloor", "legacyToGraphicMap", "graphicMap", "graphics", "graphic", "floorName", "graphicInfo", "storeData", "filterData", "otherData", "brand", "project", "buildingKey", "import_three", "MulFloors", "Plugin", "bmap", "PoiLayer", "floors", "height", "floor", "poi", "scene", "currentFloor", "context", "config", "type", "basicZoom", "item", "_db", "createDb", "database", "resolve", "reject", "request", "event", "get", "storeName", "key", "db", "set", "value", "createStore", "closeDb", "_db", "transformGraphicData", "data", "center", "baseIndex", "item", "cds", "coord", "translatePosToCenter", "i", "defaultAibeeLoaderOption", "VersionStoreName", "MapDataStoreName", "RoadNetworkDataStoreName", "AibeeLoader", "bmap", "db", "type", "createDb", "createStore", "e", "data", "res", "storeName", "key", "set", "get", "floorInfo", "floor", "item", "cacheKey", "res1", "route", "floors", "url", "Floor", "center", "layer", "graphics", "graphicMap", "transformGraphicData", "options", "graphic", "grounds", "Graphic", "wallGroup", "obj", "fillColor", "fillOpacity", "strokeColor", "strokeOpacity", "height", "optionArray", "wall", "Wall", "laneGroup", "lane", "Lane", "texture", "GroundTexture", "model", "GlbModel", "pos", "translatePosToCenter", "parkingSpacesGraphics", "parkingSpacesGraphicMap", "closeDb"]
|
|
3
|
+
"sources": ["../node_modules/.pnpm/vec2-copy@1.0.0/node_modules/vec2-copy/index.js", "../node_modules/.pnpm/chaikin-smooth@1.0.4/node_modules/chaikin-smooth/index.js", "../node_modules/.pnpm/node-dijkstra@2.5.0/node_modules/node-dijkstra/libs/PriorityQueue.js", "../node_modules/.pnpm/node-dijkstra@2.5.0/node_modules/node-dijkstra/libs/removeDeepFromMap.js", "../node_modules/.pnpm/node-dijkstra@2.5.0/node_modules/node-dijkstra/libs/toDeepMap.js", "../node_modules/.pnpm/node-dijkstra@2.5.0/node_modules/node-dijkstra/libs/validateDeep.js", "../node_modules/.pnpm/node-dijkstra@2.5.0/node_modules/node-dijkstra/libs/Graph.js", "../src/bmap.ts", "../src/utils/timer.ts", "../src/utils/init-helper.ts", "../src/utils/dispose.ts", "../src/utils/rules.ts", "../src/utils/texture.ts", "../src/utils/coordinate.ts", "../src/utils/proxy.ts", "../src/utils/promise.ts", "../src/utils/svg.ts", "../src/utils/sleep.ts", "../src/utils/color.ts", "../src/utils/model.ts", "../src/utils/os.ts", "../src/utils/keyboard.ts", "../src/utils/events.ts", "../src/utils/event-name.ts", "../src/utils/obj-utils.ts", "../src/utils/ajax.ts", "../src/utils/unique-key.ts", "../src/utils/path.ts", "../src/utils/road.ts", "../src/utils/string.ts", "../src/utils/webworker.ts", "../src/context.ts", "../src/operations/selection/selection.ts", "../src/elements/graphic.ts", "../src/elements/shadow.ts", "../src/elements/poi.ts", "../src/elements/overlay.ts", "../src/elements/floor.ts", "../src/elements/heatmap.ts", "../src/elements/model.ts", "../src/layer/graphic-layer.ts", "../src/layer/layer.ts", "../src/layer/poi-layer.ts", "../src/elements/base-svg.ts", "../src/elements/svg-line.ts", "../src/elements/svg-polygon.ts", "../src/elements/select-box.ts", "../src/elements/wall.ts", "../src/elements/ground-texture.ts", "../src/elements/glb-model.ts", "../src/elements/lane.ts", "../src/elements/merge-graphic.ts", "../src/operations/selection/box-selection.ts", "../src/operations/hover/hover-helper.ts", "../src/factory/material.ts", "../src/utils/camera-bound.ts", "../src/factory/texture.ts", "../src/config.ts", "../src/api/floor.ts", "../src/plugins/base.ts", "../src/plugins/equipment/equipment.ts", "inline-worker:__inline-worker", "../src/plugins/navigation/path.worker.ts", "../src/plugins/navigation/path.ts", "../src/external/meshLine.js", "../src/plugins/navigation/navigation.ts", "../src/plugins/split-load/split-load.ts", "../src/plugins/mul-floors/mul-floors.ts", "../src/utils/index-db.ts", "../src/loader/AibeeLoader/utils.ts", "../src/loader/AibeeLoader/index.ts"],
|
|
4
|
+
"sourcesContent": ["module.exports = function vec2Copy(out, a) {\n out[0] = a[0]\n out[1] = a[1]\n return out\n}", "var copy = require('vec2-copy')\n\nmodule.exports = function(input, output) {\n if (!Array.isArray(output))\n output = []\n\n if (input.length>0)\n output.push(copy([0, 0], input[0]))\n for (var i=0; i<input.length-1; i++) {\n var p0 = input[i]\n var p1 = input[i+1]\n var p0x = p0[0],\n p0y = p0[1],\n p1x = p1[0],\n p1y = p1[1]\n\n var Q = [ 0.75 * p0x + 0.25 * p1x, 0.75 * p0y + 0.25 * p1y ]\n var R = [ 0.25 * p0x + 0.75 * p1x, 0.25 * p0y + 0.75 * p1y ]\n output.push(Q)\n output.push(R)\n }\n if (input.length > 1)\n output.push(copy([0, 0], input[ input.length-1 ]))\n return output\n}", "/**\n * This very basic implementation of a priority queue is used to select the\n * next node of the graph to walk to.\n *\n * The queue is always sorted to have the least expensive node on top.\n * Some helper methods are also implemented.\n *\n * You should **never** modify the queue directly, but only using the methods\n * provided by the class.\n */\nclass PriorityQueue {\n\n /**\n * Creates a new empty priority queue\n */\n constructor() {\n // The `keys` set is used to greatly improve the speed at which we can\n // check the presence of a value in the queue\n this.keys = new Set();\n this.queue = [];\n }\n\n /**\n * Sort the queue to have the least expensive node to visit on top\n *\n * @private\n */\n sort() {\n this.queue.sort((a, b) => a.priority - b.priority);\n }\n\n /**\n * Sets a priority for a key in the queue.\n * Inserts it in the queue if it does not already exists.\n *\n * @param {any} key Key to update or insert\n * @param {number} value Priority of the key\n * @return {number} Size of the queue\n */\n set(key, value) {\n const priority = Number(value);\n if (isNaN(priority)) throw new TypeError('\"priority\" must be a number');\n\n if (!this.keys.has(key)) {\n // Insert a new entry if the key is not already in the queue\n this.keys.add(key);\n this.queue.push({ key, priority });\n } else {\n // Update the priority of an existing key\n this.queue.map((element) => {\n if (element.key === key) {\n Object.assign(element, { priority });\n }\n\n return element;\n });\n }\n\n this.sort();\n return this.queue.length;\n }\n\n /**\n * The next method is used to dequeue a key:\n * It removes the first element from the queue and returns it\n *\n * @return {object} First priority queue entry\n */\n next() {\n const element = this.queue.shift();\n\n // Remove the key from the `_keys` set\n this.keys.delete(element.key);\n\n return element;\n }\n\n /**\n * @return {boolean} `true` when the queue is empty\n */\n isEmpty() {\n return Boolean(this.queue.length === 0);\n }\n\n /**\n * Check if the queue has a key in it\n *\n * @param {any} key Key to lookup\n * @return {boolean}\n */\n has(key) {\n return this.keys.has(key);\n }\n\n /**\n * Get the element in the queue with the specified key\n *\n * @param {any} key Key to lookup\n * @return {object}\n */\n get(key) {\n return this.queue.find(element => element.key === key);\n }\n\n}\n\nmodule.exports = PriorityQueue;\n", "/**\n * Removes a key and all of its references from a map.\n * This function has no side-effects as it returns\n * a brand new map.\n *\n * @param {Map} map - Map to remove the key from\n * @param {string} key - Key to remove from the map\n * @return {Map} New map without the passed key\n */\nfunction removeDeepFromMap(map, key) {\n const newMap = new Map();\n\n for (const [aKey, val] of map) {\n if (aKey !== key && val instanceof Map) {\n newMap.set(aKey, removeDeepFromMap(val, key));\n } else if (aKey !== key) {\n newMap.set(aKey, val);\n }\n }\n\n return newMap;\n}\n\nmodule.exports = removeDeepFromMap;\n", "/**\n * Validates a cost for a node\n *\n * @private\n * @param {number} val - Cost to validate\n * @return {bool}\n */\nfunction isValidNode(val) {\n const cost = Number(val);\n\n if (isNaN(cost) || cost <= 0) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Creates a deep `Map` from the passed object.\n *\n * @param {Object} source - Object to populate the map with\n * @return {Map} New map with the passed object data\n */\nfunction toDeepMap(source) {\n const map = new Map();\n const keys = Object.keys(source);\n\n keys.forEach((key) => {\n const val = source[key];\n\n if (val !== null && typeof val === 'object' && !Array.isArray(val)) {\n return map.set(key, toDeepMap(val));\n }\n\n if (!isValidNode(val)) {\n throw new Error(`Could not add node at key \"${key}\", make sure it's a valid node`, val);\n }\n\n return map.set(key, Number(val));\n });\n\n return map;\n}\n\nmodule.exports = toDeepMap;\n", "/**\n * Validate a map to ensure all it's values are either a number or a map\n *\n * @param {Map} map - Map to valiadte\n */\nfunction validateDeep(map) {\n if (!(map instanceof Map)) {\n throw new Error(`Invalid graph: Expected Map instead found ${typeof map}`);\n }\n\n map.forEach((value, key) => {\n if (typeof value === 'object' && value instanceof Map) {\n validateDeep(value);\n return;\n }\n\n if (typeof value !== 'number' || value <= 0) {\n throw new Error(`Values must be numbers greater than 0. Found value ${value} at ${key}`);\n }\n });\n}\n\nmodule.exports = validateDeep;\n", "const Queue = require('./PriorityQueue');\nconst removeDeepFromMap = require('./removeDeepFromMap');\nconst toDeepMap = require('./toDeepMap');\nconst validateDeep = require('./validateDeep');\n\n/** Creates and manages a graph */\nclass Graph {\n\n /**\n * Creates a new Graph, optionally initializing it a nodes graph representation.\n *\n * A graph representation is an object that has as keys the name of the point and as values\n * the points reacheable from that node, with the cost to get there:\n *\n * {\n * node (Number|String): {\n * neighbor (Number|String): cost (Number),\n * ...,\n * },\n * }\n *\n * In alternative to an object, you can pass a `Map` of `Map`. This will\n * allow you to specify numbers as keys.\n *\n * @param {Objec|Map} [graph] - Initial graph definition\n * @example\n *\n * const route = new Graph();\n *\n * // Pre-populated graph\n * const route = new Graph({\n * A: { B: 1 },\n * B: { A: 1, C: 2, D: 4 },\n * });\n *\n * // Passing a Map\n * const g = new Map()\n *\n * const a = new Map()\n * a.set('B', 1)\n *\n * const b = new Map()\n * b.set('A', 1)\n * b.set('C', 2)\n * b.set('D', 4)\n *\n * g.set('A', a)\n * g.set('B', b)\n *\n * const route = new Graph(g)\n */\n constructor(graph) {\n if (graph instanceof Map) {\n validateDeep(graph);\n this.graph = graph;\n } else if (graph) {\n this.graph = toDeepMap(graph);\n } else {\n this.graph = new Map();\n }\n }\n\n /**\n * Adds a node to the graph\n *\n * @param {string} name - Name of the node\n * @param {Object|Map} neighbors - Neighbouring nodes and cost to reach them\n * @return {this}\n * @example\n *\n * const route = new Graph();\n *\n * route.addNode('A', { B: 1 });\n *\n * // It's possible to chain the calls\n * route\n * .addNode('B', { A: 1 })\n * .addNode('C', { A: 3 });\n *\n * // The neighbors can be expressed in a Map\n * const d = new Map()\n * d.set('A', 2)\n * d.set('B', 8)\n *\n * route.addNode('D', d)\n */\n addNode(name, neighbors) {\n let nodes;\n if (neighbors instanceof Map) {\n validateDeep(neighbors);\n nodes = neighbors;\n } else {\n nodes = toDeepMap(neighbors);\n }\n\n this.graph.set(name, nodes);\n\n return this;\n }\n\n /**\n * @deprecated since version 2.0, use `Graph#addNode` instead\n */\n addVertex(name, neighbors) {\n return this.addNode(name, neighbors);\n }\n\n /**\n * Removes a node and all of its references from the graph\n *\n * @param {string|number} key - Key of the node to remove from the graph\n * @return {this}\n * @example\n *\n * const route = new Graph({\n * A: { B: 1, C: 5 },\n * B: { A: 3 },\n * C: { B: 2, A: 2 },\n * });\n *\n * route.removeNode('C');\n * // The graph now is:\n * // { A: { B: 1 }, B: { A: 3 } }\n */\n removeNode(key) {\n this.graph = removeDeepFromMap(this.graph, key);\n\n return this;\n }\n\n /**\n * Compute the shortest path between the specified nodes\n *\n * @param {string} start - Starting node\n * @param {string} goal - Node we want to reach\n * @param {object} [options] - Options\n *\n * @param {boolean} [options.trim] - Exclude the origin and destination nodes from the result\n * @param {boolean} [options.reverse] - Return the path in reversed order\n * @param {boolean} [options.cost] - Also return the cost of the path when set to true\n *\n * @return {array|object} Computed path between the nodes.\n *\n * When `option.cost` is set to true, the returned value will be an object with shape:\n * - `path` *(Array)*: Computed path between the nodes\n * - `cost` *(Number)*: Cost of the path\n *\n * @example\n *\n * const route = new Graph()\n *\n * route.addNode('A', { B: 1 })\n * route.addNode('B', { A: 1, C: 2, D: 4 })\n * route.addNode('C', { B: 2, D: 1 })\n * route.addNode('D', { C: 1, B: 4 })\n *\n * route.path('A', 'D') // => ['A', 'B', 'C', 'D']\n *\n * // trimmed\n * route.path('A', 'D', { trim: true }) // => [B', 'C']\n *\n * // reversed\n * route.path('A', 'D', { reverse: true }) // => ['D', 'C', 'B', 'A']\n *\n * // include the cost\n * route.path('A', 'D', { cost: true })\n * // => {\n * // path: [ 'A', 'B', 'C', 'D' ],\n * // cost: 4\n * // }\n */\n path(start, goal, options = {}) {\n // Don't run when we don't have nodes set\n if (!this.graph.size) {\n if (options.cost) return { path: null, cost: 0 };\n\n return null;\n }\n\n const explored = new Set();\n const frontier = new Queue();\n const previous = new Map();\n\n let path = [];\n let totalCost = 0;\n\n let avoid = [];\n if (options.avoid) avoid = [].concat(options.avoid);\n\n if (avoid.includes(start)) {\n throw new Error(`Starting node (${start}) cannot be avoided`);\n } else if (avoid.includes(goal)) {\n throw new Error(`Ending node (${goal}) cannot be avoided`);\n }\n\n // Add the starting point to the frontier, it will be the first node visited\n frontier.set(start, 0);\n\n // Run until we have visited every node in the frontier\n while (!frontier.isEmpty()) {\n // Get the node in the frontier with the lowest cost (`priority`)\n const node = frontier.next();\n\n // When the node with the lowest cost in the frontier in our goal node,\n // we can compute the path and exit the loop\n if (node.key === goal) {\n // Set the total cost to the current value\n totalCost = node.priority;\n\n let nodeKey = node.key;\n while (previous.has(nodeKey)) {\n path.push(nodeKey);\n nodeKey = previous.get(nodeKey);\n }\n\n break;\n }\n\n // Add the current node to the explored set\n explored.add(node.key);\n\n // Loop all the neighboring nodes\n const neighbors = this.graph.get(node.key) || new Map();\n neighbors.forEach((nCost, nNode) => {\n // If we already explored the node, or the node is to be avoided, skip it\n if (explored.has(nNode) || avoid.includes(nNode)) return null;\n\n // If the neighboring node is not yet in the frontier, we add it with\n // the correct cost\n if (!frontier.has(nNode)) {\n previous.set(nNode, node.key);\n return frontier.set(nNode, node.priority + nCost);\n }\n\n const frontierPriority = frontier.get(nNode).priority;\n const nodeCost = node.priority + nCost;\n\n // Otherwise we only update the cost of this node in the frontier when\n // it's below what's currently set\n if (nodeCost < frontierPriority) {\n previous.set(nNode, node.key);\n return frontier.set(nNode, nodeCost);\n }\n\n return null;\n });\n }\n\n // Return null when no path can be found\n if (!path.length) {\n if (options.cost) return { path: null, cost: 0 };\n\n return null;\n }\n\n // From now on, keep in mind that `path` is populated in reverse order,\n // from destination to origin\n\n // Remove the first value (the goal node) if we want a trimmed result\n if (options.trim) {\n path.shift();\n } else {\n // Add the origin waypoint at the end of the array\n path = path.concat([start]);\n }\n\n // Reverse the path if we don't want it reversed, so the result will be\n // from `start` to `goal`\n if (!options.reverse) {\n path = path.reverse();\n }\n\n // Return an object if we also want the cost\n if (options.cost) {\n return {\n path,\n cost: totalCost,\n };\n }\n\n return path;\n }\n\n /**\n * @deprecated since version 2.0, use `Graph#path` instead\n */\n shortestPath(...args) {\n return this.path(...args);\n }\n\n}\n\nmodule.exports = Graph;\n", "import { EventDispatcher, Object3D, Vector3 } from \"three\";\nimport { Context } from \"./context\";\nimport {\n clearTextTexture,\n clearCanvas,\n vector3ToDevice,\n getCenter,\n timeoutPromise,\n Timer,\n Events,\n generatorKeyByObj,\n HooksName\n} from \"./utils\";\nimport { Config, getConfig } from \"./config\";\nimport {\n Floor,\n Graphic,\n HeatmapDataParam,\n ModelOptions,\n PoiOptionsParam,\n} from \"./elements\";\nimport { SvgLine, SvgPolygon } from \"./elements\";\nimport {\n GraphicInfo,\n GraphicOptions,\n PolygonGeometry,\n ResGraphicInfo,\n LoadQuery\n} from \"./types\";\nimport { debounce } from \"lodash\";\nimport { disposeLoader } from \"./utils/model\";\nimport { Plugin } from \"./plugins/base\";\nimport { Equipment } from \"./plugins/equipment/equipment\";\nimport { loadBuildingGround, loadGraphics } from './api'\n\ninterface BmapEventMap {\n \"zoom-change\": {\n basicZoom: number;\n cameraZoom: number;\n };\n \"center-change\": {\n center: [number, number],\n brand: string,\n project: string,\n },\n [HooksName.SWITCH_FLOOR_BEFORE]: {\n data: {\n curFloor: Floor,\n graphics: Graphic[]\n }\n },\n [HooksName.SWITCH_FLOOR_AFTER]: {\n data: {\n curFloor: Floor,\n graphics: Graphic[]\n }\n }\n}\n\nexport type MapType = \"2d\" | \"3d\";\n\nexport enum MapTypePolar {\n D2 = 0,\n D3 = 1.1,\n}\n\nexport class BMap extends EventDispatcher<BmapEventMap> {\n config: Config;\n\n public context: Context;\n\n public polarKeys: string[] = [];\n\n public azimuthalKeys: string[] = [];\n\n public svgLine?: SvgLine;\n\n public svgPolygon?: SvgPolygon;\n\n public basicZoom = 1;\n\n public prevCameraZoom = 1;\n\n type: MapType = \"2d\";\n\n floorDataMap: Map<string, GraphicInfo[]> = new Map();\n\n buildingGroundMap = new Map<string, GraphicInfo | null>();\n\n buildingGroundPromiseMap = new Map<string, Promise<GraphicInfo | null>>();\n\n currentBuildGround: GraphicInfo | null = null;\n\n observe: ResizeObserver | null = null;\n\n buildingCenter = [0, 0]\n\n timer = new Timer();\n\n plugins: Plugin[] = [];\n\n constructor(\n private container: HTMLElement,\n config: Partial<Config> = {}\n ) {\n super();\n this.config = getConfig(config);\n this.context = new Context(container, this.config);\n this.registryEvent();\n this.context.render();\n }\n\n async loadGraphics({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n }: LoadQuery): Promise<GraphicInfo[]> {\n const data = await loadGraphics({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n }, this.config)\n return data;\n }\n\n changeBuildingCenter(data: GraphicInfo | null, { brand, project }: { brand: string; project: string}) { \n const center = data ? getCenter(\n (data.info.geometry as PolygonGeometry).cds[0]\n ) : [0, 0] as [number, number]\n this.buildingCenter = center\n this.dispatchEvent({ type: \"center-change\", center, project, brand })\n }\n\n async loadBuildingGround({\n brand,\n project,\n }: Omit<\n LoadQuery,\n \"floor\" | \"ts\" | \"resource_type_list\"\n >): Promise<GraphicInfo | null> {\n const key = generatorKeyByObj({ brand, project })\n if (this.buildingGroundMap.has(key)) {\n const data = this.buildingGroundMap.get(key)\n this.changeBuildingCenter(data || null, { brand, project })\n return data || null;\n }\n if (this.buildingGroundPromiseMap.has(key)) {\n return this.buildingGroundPromiseMap.get(key)!\n }\n const p = new Promise<GraphicInfo | null>(async resolve => {\n const data = await loadBuildingGround({brand, project }, this.config)\n this.buildingGroundMap.set(key, data);\n this.changeBuildingCenter(data || null, { brand, project })\n this.buildingGroundPromiseMap.delete(key)\n resolve(data);\n })\n this.buildingGroundPromiseMap.set(key, p)\n return p;\n }\n\n async load({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n }: LoadQuery) {\n const floorKey = generatorKeyByObj({brand, project, floor, ts, resource_type_list});\n if (this.floorDataMap.has(floorKey)) {\n return this.floorDataMap.get(floorKey);\n }\n const [data, buildGround] = await Promise.all([\n this.loadGraphics({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n }),\n this.loadBuildingGround({ brand, project }),\n ]);\n this.transformGraphicData(data);\n data.forEach(item => { \n item.info.transformToBuildingGround = !!buildGround;\n })\n if (!this.config.useFloorCache) {\n this.floorDataMap.clear();\n }\n this.floorDataMap.set(floorKey, data);\n return data;\n }\n\n transformGraphicData(data: GraphicInfo[], center = this.buildingCenter, baseIndex = 0) { \n data.forEach((item) => {\n item.info.geometry.coords = JSON.parse(\n JSON.stringify(item.info.geometry.cds)\n );\n if (item.info.geometry.type === \"polygon\") {\n item.info.geometry.coords.map((cds) => {\n if (Array.isArray(cds)) {\n cds.forEach((coord) => {\n coord[0] -= center[0];\n coord[1] -= center[1];\n });\n }\n });\n } else {\n // point\n const [x, y] = item.info.geometry.cds;\n item.info.geometry.coords = [x - center[0], y - center[1]];\n }\n });\n const { ground, markGraphic, graphic } = this.config;\n for (let i = 0; i < data.length; i++) {\n const item = data[i];\n item.info.deltaHeight = 0.00001 * (baseIndex + i + 1);\n if (item.info.group === \"ground\") {\n item.info.fillColor = ground.color;\n item.info.fillOpacity = ground.opacity;\n item.info.height = ground.height;\n item.info.stroke = ground.stroke;\n item.info.strokeColor = ground.strokeColor;\n item.info.strokeOpacity = ground.strokeOpacity;\n } else if (item.info.userData.mark) {\n item.info.height = markGraphic.height;\n item.info.fillColor = markGraphic.color;\n item.info.fillOpacity = markGraphic.opacity;\n item.info.stroke = markGraphic.stroke;\n item.info.strokeColor = markGraphic.strokeColor;\n item.info.strokeOpacity = markGraphic.strokeOpacity;\n } else {\n item.info.fillOpacity = graphic.fillOpacity;\n if (this.config.initTransToMark) {\n item.info.height = markGraphic.height;\n item.info.fillColor = markGraphic.color;\n item.info.stroke = markGraphic.stroke;\n item.info.strokeColor = markGraphic.strokeColor;\n item.info.strokeOpacity = markGraphic.strokeOpacity;\n }\n }\n }\n }\n\n use(plugin: Plugin) { \n plugin.bmap = this;\n this.plugins.push(plugin)\n }\n\n unUse(plugin: Plugin) { \n this.plugins = this.plugins.filter(item => item !== plugin)\n }\n\n createFloor(data: GraphicInfo[]) {\n const curFloor = new Floor(this.context);\n if (!data.length) {\n return { curFloor, graphics: [] };\n }\n const legacyToGraphicMap = new Map<string, Graphic>();\n const graphics: Graphic[] = [];\n for (const item of data) {\n if (item.info.group === \"ground\") {\n curFloor.createGround(item.info);\n } else {\n const graphic = curFloor.addGraphic(item.info);\n graphic.userData.data = item;\n legacyToGraphicMap.set(item.legacy_id, graphic);\n graphics.push(graphic);\n }\n }\n // curFloor.addShadow()\n curFloor.userData.legacyToGraphicMap = legacyToGraphicMap;\n return { curFloor, graphics };\n }\n\n triggerHooks(hooks: HooksName, data: any) { \n this.dispatchEvent({ type: hooks, data })\n }\n\n switchFloor({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n }: LoadQuery) {\n const floorKey = generatorKeyByObj({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n });\n const curFloorData = this.floorDataMap.get(floorKey);\n this.context.control.removeEventListener(\"change\", this.onControlChange);\n if (curFloorData) {\n const buildingKey = generatorKeyByObj({ brand, project });\n this.currentBuildGround = this.buildingGroundMap.get(buildingKey) || null;\n const createdFloor = this.createFloor(curFloorData);\n if (createdFloor) {\n createdFloor.curFloor.name = floor\n this.triggerHooks(HooksName.SWITCH_FLOOR_BEFORE, createdFloor)\n this.context.switchFloor(createdFloor.curFloor);\n this.initialFloorCamera();\n this.triggerHooks(HooksName.SWITCH_FLOOR_AFTER, createdFloor)\n } else {\n console.warn(\"[switchFloor error] [\" + floor + \"] \u697C\u5C42\u6CA1\u6709\u6570\u636E\");\n }\n } else {\n console.warn(\n \"[switchFloor error] \u6CA1\u6709\u8FD9\u4E2A\u697C\u5C42\uFF0C\u8BF7\u5148\u8C03\u7528load\u65B9\u6CD5\u52A0\u8F7D\u697C\u5C42\"\n );\n }\n }\n\n switchFloorByData(data: GraphicInfo[], name: string, key = name) {\n // \u9700\u8981\u5207\u6362\u697C\u5C42\n const { curFloor, graphics } = this.createFloor(data);\n curFloor.name = name;\n curFloor.key = key;\n const graphicMap = new Map<string, GraphicInfo>();\n data.forEach((graphicInfo) => {\n graphicMap.set(graphicInfo.element_uuid, graphicInfo);\n })\n curFloor.userData.graphicMap = graphicMap;\n this.switchFloorByFloor(curFloor, graphics)\n }\n\n switchFloorByFloor(floor: Floor, graphics = floor.graphicLayer.children) {\n this.triggerHooks(HooksName.SWITCH_FLOOR_BEFORE, { curFloor: floor, graphics })\n this.context.switchFloor(floor);\n this.initialFloorCamera();\n this.triggerHooks(HooksName.SWITCH_FLOOR_AFTER, { curFloor: floor, graphics })\n }\n\n // \u5207\u6362\u697C\u5C42\u540E\u521D\u59CB\u5316\u76F8\u673A\n initialFloorCamera() { \n this.context.cameraBound.setEnable(false);\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = 0;\n this.context.control.maxZoom = Infinity;\n this.context.camera.zoom = 1;\n this.context.setAzimuthalAngle(this.config.control.defaultAzimuthal, 0);\n this.context.setPolarAngle(this.config.control.defaultPolar, 0);\n this.context.fitCameraToGround(undefined, 0);\n const basicZoom = this.context.camera.zoom;\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = basicZoom;\n this.context.control.maxZoom = basicZoom * 25;\n if (this.type === \"3d\") {\n this.context.fitCameraToGround(this.config.defaultPadding, 0, false);\n }\n this.basicZoom = this.context.camera.zoom;\n this.context.control.addEventListener(\"change\", this.onControlChange);\n this.onControlChange();\n this.context.cameraBound.setEnable(true);\n this.context.cameraBound.changePrevCamera();\n }\n\n onControlChange = () => {\n const {\n camera: { zoom },\n } = this.context;\n if (zoom !== this.prevCameraZoom) {\n this.dispatchEvent({\n type: \"zoom-change\",\n basicZoom: this.basicZoom,\n cameraZoom: this.context.camera.zoom,\n });\n this.prevCameraZoom = zoom;\n }\n };\n\n // \u6276\u68AF\n addModel(graphic: Graphic, options: ModelOptions) {\n // \u6839\u636E\u6700\u957F\u8FB9\uFF0C\u83B7\u53D6\u6276\u68AF\u7684\u65B9\u5411\n if (graphic.options.geometry.type === \"polygon\") {\n // \u6839\u636E\u65B9\u5411\u6E32\u67D3\u6A21\u578B\n const model = this.context.currentFloor?.addModel({\n ...options,\n position: graphic.getPosition().setZ(0.1),\n id: graphic.options.id,\n });\n if (model) {\n const {\n facilityAngle = 0,\n facilityXScale = 1,\n facilityYScale = 1,\n } = graphic.options.userData;\n model.rotateZ(((180 - facilityAngle) / 180) * Math.PI);\n model.scale.set(facilityXScale, facilityYScale, 1);\n }\n }\n }\n\n addHeatmap(data: HeatmapDataParam) {\n return this.context.currentFloor?.addHeatmap(data);\n }\n\n getLegacyToGraphicMap(): Map<string, Graphic> {\n return this.context.currentFloor?.userData.legacyToGraphicMap || new Map();\n }\n\n /**\n * \u83B7\u53D6\u5F53\u524D\u697C\u5C42\u5168\u90E8\u7684graphic\n * @returns\n */\n getFloorAllGraphics(): Graphic[] {\n return (\n (this.context.currentFloor?.graphicLayer.children.filter(\n (item) => item instanceof Graphic\n ) as Graphic[]) || []\n );\n }\n\n createGraphicPoi(graphic: Graphic, options: PoiOptionsParam) {\n if (this.context.currentFloor) {\n if (options.id === undefined) {\n options.id = graphic.options.id;\n }\n const position = graphic.getCenter();\n const poi = this.context.currentFloor.addPoi({\n ...options,\n position: { ...position, z: position.z + graphic.options.height / 2 },\n });\n return poi;\n }\n return null;\n }\n\n removeHeatMap() {\n this.context.currentFloor?.removeHeatMap();\n }\n\n /**\n * \u79FB\u52A8\u76F8\u673A\u4F4D\u7F6E\u8BA9\u9009\u4E2D\u7684\u5143\u7D20\u5C45\u4E2D\u663E\u793A\n * @param ele { Graphic | Poi }\n * @param duration\n */\n translateElementToCenter(\n ele: { getPosition: () => Vector3 },\n duration: number = 500\n ) {\n const position = ele.getPosition();\n return this.context.setCameraPosition(position, duration);\n }\n\n /**\n * \u79FB\u52A8\u76F8\u673A\u4F4D\u7F6E\u8BA9\u9009\u4E2D\u7684\u5143\u7D20\u5C45\u4E2D\u663E\u793A\n * @param ele { Graphic | Poi }\n * @param duration\n */\n async translateElementToCenterX(\n ele: { getPosition: () => Vector3 },\n duration: number = 500\n ) {\n return timeoutPromise(new Promise((resolve) => { \n const target = this.context.control.target.clone();\n const position = ele.getPosition();\n this.timer.requestAnimationFrame(() => { \n const {\n clientSize: { width, height },\n camera,\n } = this.context;\n const device = vector3ToDevice(position, camera, width, height);\n const offsetX = device.x - width / 2;\n const v3 = new Vector3();\n v3.setFromMatrixColumn(this.context.camera.matrix, 0);\n v3.normalize();\n v3.multiplyScalar(offsetX / this.context.camera.zoom);\n target.add(v3)\n this.context.setCameraPosition(target, duration).then(resolve)\n })\n }), duration + 500)\n \n }\n\n /**\n * \u83B7\u53D6\u7269\u4F53\u7684\u5C4F\u5E55\u5750\u6807\n */\n getElementDeviceCoordinate(ele: Object3D) {\n const vector = ele.position.clone();\n const { clientWidth, clientHeight } = this.container;\n return vector3ToDevice(\n vector,\n this.context.camera,\n clientWidth,\n clientHeight\n );\n }\n\n /**\n * \u5207\u63622d\u30013d\u89C6\u89D2\n * @param type\n * @param duration\n */\n changeMapType(type: MapType, duration = 500) {\n this.type = type;\n if (type === \"2d\") {\n return this.context.setPolarAngle(MapTypePolar.D2, duration);\n } else {\n return this.context.setPolarAngle(MapTypePolar.D3, duration);\n }\n }\n\n async resetView(duration = 300) {\n const time = duration / 3;\n await this.context.setAzimuthalAngle(\n this.config.control.defaultAzimuthal,\n time\n );\n await this.context.setPolarAngle(\n this.config.control.defaultPolar,\n time\n );\n // await this.changeMapType(this.type, time);\n await this.context.fitCameraToGround(\n this.config.defaultPadding,\n time,\n false\n );\n }\n\n /**\n * \u7F29\u5C0F\u5730\u56FE\n * @param zoom\n * @param duration\n * @returns\n */\n reduceMap(zoom = 0.5, duration = 500) {\n const cameraZoom = this.context.camera.zoom;\n return this.context.setZoom(\n cameraZoom - zoom,\n this.context.control.target,\n duration\n );\n }\n\n /**\n * \u653E\u5927\u5730\u56FE\n * @param zoom\n * @param duration\n * @returns\n */\n enlargeMap(zoom = 0.5, duration = 500) {\n const cameraZoom = this.context.camera.zoom;\n return this.context.setZoom(\n cameraZoom + zoom,\n this.context.control.target,\n duration\n );\n }\n\n onKeydown = (e: KeyboardEvent) => {\n if (this.polarKeys.includes(e.code)) {\n this.context.control.maxPolarAngle = this.config.control.maxPolar;\n this.context.control.minPolarAngle = 0;\n }\n if (this.azimuthalKeys.includes(e.code)) {\n this.context.control.maxAzimuthAngle = Infinity;\n this.context.control.minAzimuthAngle = Infinity;\n }\n };\n\n onKeyUp = (e: KeyboardEvent) => {\n if (this.polarKeys.includes(e.code)) {\n const polar = this.context.control.getPolarAngle();\n this.context.control.maxPolarAngle = polar;\n this.context.control.minPolarAngle = polar;\n }\n if (this.azimuthalKeys.includes(e.code)) {\n const azimuthal = this.context.control.getAzimuthalAngle();\n this.context.control.maxAzimuthAngle = azimuthal;\n this.context.control.minAzimuthAngle = azimuthal;\n }\n };\n\n registryEvent() {\n window.addEventListener(\"keydown\", this.onKeydown);\n window.addEventListener(\"keyup\", this.onKeyUp);\n if (this.config.resizeObserver) {\n const observe = new ResizeObserver(debounce(this.resize, 5));\n observe.observe(this.container);\n this.observe = observe;\n }\n }\n\n unRegistryEvent() {\n window.removeEventListener(\"keydown\", this.onKeydown);\n window.removeEventListener(\"keyup\", this.onKeyUp);\n this.observe?.disconnect();\n this.observe = null;\n }\n\n /**\n * \u914D\u7F6E\u5750\u6807\u5B9A\u70B9 2D/3D\u7EBF\u6027\u5207\u6362\u7684\u5FEB\u6377\u952E\n * @param key\n */\n configurePolarShortcutKeys(keys: string[]) {\n this.polarKeys = keys;\n }\n\n configureAzimuthalShortcutKeys(keys: string[]) {\n this.azimuthalKeys = keys;\n }\n\n rotateMap(radius = 0.1) {\n const azimuthal = this.context.control.getAzimuthalAngle();\n this.context.setAzimuthalAngle(azimuthal + radius, 500);\n\n }\n\n /**\n * \u6D4B\u91CF\u8DDD\u79BB\n * @returns\n */\n async measureDistance() {\n this.cancelDistance();\n return new Promise((resolve, reject) => {\n this.changeMapType(\"2d\", 0);\n this.context.control.enableRotate = false; // \u6D4B\u91CF\u53EA\u80FD\u57282d\u4E2D\u8FDB\u884C\n this.svgLine = new SvgLine(this.context);\n const dispose = this.svgLine.dispose.bind(this.svgLine);\n this.svgLine.dispose = function () {\n dispose();\n reject(\"cancel\");\n };\n this.svgLine.addEventListener(\"distance\", ({ distance }) => {\n resolve(distance);\n });\n });\n }\n\n /**\n * \u53D6\u6D88\u6D4B\u91CF\u957F\u5EA6\n */\n cancelDistance() {\n if (this.svgLine) {\n this.svgLine.dispose();\n this.svgLine = undefined;\n this.context.control.enableRotate = true;\n }\n }\n\n /**\n * \u6D4B\u91CF\u9762\u79EF\n */\n measureArea() {\n this.cancelArea();\n return new Promise((resolve, reject) => {\n this.changeMapType(\"2d\", 0);\n this.context.control.enableRotate = false; // \u6D4B\u91CF\u53EA\u80FD\u57282d\u4E2D\u8FDB\u884C\n this.svgPolygon = new SvgPolygon(this.context);\n const dispose = this.svgPolygon.dispose.bind(this.svgPolygon);\n this.svgPolygon.dispose = function () {\n dispose();\n reject(\"cancel\");\n };\n this.svgPolygon.addEventListener(\"area\", ({ area }) => {\n resolve(area);\n });\n });\n }\n\n /**\n * \u53D6\u6D88\u6D4B\u91CF\u9762\u79EF\n */\n cancelArea() {\n if (this.svgPolygon) {\n this.svgPolygon.dispose();\n this.svgPolygon = undefined;\n this.context.control.enableRotate = true;\n }\n }\n\n /**\n * \u6839\u636EnodeId \u83B7\u53D6graphic\n */\n getGraphicByNodeId(nodeId: string) {\n return (\n this.context.currentFloor?.graphicLayer.getGraphicByNodeId(nodeId) || null\n );\n }\n\n deleteGraphic(graphic: Graphic) {\n this.context.currentFloor?.graphicLayer.removeGraphic(graphic);\n }\n\n createGraphicByOptions(options: GraphicOptions) {\n if (!options.transformToBuildingGround) {\n if (this.currentBuildGround) {\n const center = getCenter(\n (this.currentBuildGround.info.geometry as PolygonGeometry).cds[0]\n );\n if (options.geometry.type === \"polygon\") {\n options.geometry.coords = JSON.parse(\n JSON.stringify(options.geometry.cds)\n );\n options.geometry.coords.map((cds) => {\n if (Array.isArray(cds)) {\n cds.forEach((coord) => {\n coord[0] -= center[0];\n coord[1] -= center[1];\n });\n }\n });\n } else {\n // point\n const [x, y] = options.geometry.cds;\n options.geometry.coords = [x - center[0], y - center[1]];\n }\n }\n }\n return this.context.currentFloor?.graphicLayer.createGraphic(options);\n }\n\n removePoiById(id: string) {\n return this.context.currentFloor?.poiLayer.removePoiById(id);\n }\n\n getPoiById(id: string) {\n return this.context.currentFloor?.poiLayer.getPoiById(id);\n }\n\n getPois() {\n return (this.context.currentFloor?.poiLayer.pois || []).filter(\n (item) => !item.options.built_in\n );\n }\n\n clearPoi() {\n if (this.context.currentFloor) {\n this.context.currentFloor.poiLayer.clear();\n }\n }\n\n removeSelectGraphic(graphic: Graphic) {\n this.context.selection.remove(graphic);\n }\n\n resize = () => {\n this.context.cameraBound.setEnable(false);\n this.context.onWindowResize();\n const azimuthal = this.context.control.getAzimuthalAngle();\n const zoom = this.context.camera.zoom;\n // \u8BBE\u7F6Ezoom\n this.context.control.minZoom = 0;\n this.context.control.maxZoom = Infinity;\n this.context.camera.zoom = 1;\n this.context.setAzimuthalAngle(0, 0);\n const basicZoom = this.context.getFitCameraToGroundZoom(undefined, 0) || 1;\n\n // \u8BBE\u7F6Ezoom\n this.context.camera.zoom = zoom;\n this.context.control.minZoom = basicZoom;\n this.context.control.maxZoom = basicZoom * 25;\n this.basicZoom = zoom;\n this.context.control.addEventListener(\"change\", this.onControlChange);\n this.context.setAzimuthalAngle(azimuthal, 0);\n this.context.cameraBound.setEnable(true);\n };\n\n dispose() {\n this.timer.dispose();\n this.plugins.forEach(plugin => plugin.dispose())\n this.context.dispose();\n this.floorDataMap.clear();\n this.buildingGroundMap.clear();\n clearTextTexture();\n clearCanvas();\n disposeLoader();\n this.unRegistryEvent();\n }\n}\n", "type Fn = (...arg: any) => any\n\n/**\n * \u4EFB\u52A1\u7BA1\u7406\u5668\n * \u5728\u7C7B\u9500\u6BC1\u7684\u65F6\u5019\uFF0C\u8981\u6E05\u9664\u6240\u6709\u7684\u5F02\u6B65\u5B9A\u65F6\u5668\n */\nexport class Timer { \n tasks = {\n requestAnimation: new Set<number>(),\n timeout: new Set<number>(),\n interval: new Set<number>()\n }\n\n requestAnimationFrame(fn: Fn): number { \n const timer = window.requestAnimationFrame(() => {\n this.tasks.requestAnimation.delete(timer)\n fn()\n })\n this.tasks.requestAnimation.add(timer)\n return timer\n }\n\n cancelAnimationFrame(timer: number) { \n this.tasks.requestAnimation.delete(timer)\n window.cancelAnimationFrame(timer)\n }\n\n setTimeout(fn: Fn, wait: number): number { \n const timer = window.setTimeout(() => {\n this.tasks.timeout.delete(timer)\n fn()\n }, wait)\n this.tasks.timeout.add(timer)\n return timer\n }\n\n clearTimeout(timer: number) {\n this.tasks.timeout.delete(timer)\n window.clearTimeout(timer)\n }\n\n setInterval(fn: Fn, wait: number): number { \n const timer = window.setInterval(() => {\n this.tasks.interval.delete(timer)\n fn()\n }, wait)\n this.tasks.interval.add(timer)\n return timer\n }\n\n clearInterval(timer: number) {\n this.tasks.interval.delete(timer)\n window.clearInterval(timer)\n }\n\n dispose() { \n this.tasks.requestAnimation.forEach(timer => {\n window.cancelAnimationFrame(timer)\n })\n this.tasks.requestAnimation.clear()\n this.tasks.timeout.forEach(timer => {\n window.clearTimeout(timer)\n })\n this.tasks.timeout.clear()\n this.tasks.interval.forEach(timer => {\n window.clearInterval(timer)\n }) \n this.tasks.interval.clear()\n }\n}", "import { Coordinate } from 'src/types'\nimport {\n Scene, WebGLRenderer, OrthographicCamera, Shape, \n PCFSoftShadowMap, Group, Color, DirectionalLight, AmbientLight, Path, Vector2\n} from 'three'\nimport { MapControls } from 'three/examples/jsm/controls/MapControls'\n\nexport function initScene() {\n const scene = new Scene()\n scene.background = new Color(0xffffff)\n return scene\n}\n\nexport function initRenderer() {\n const renderer = new WebGLRenderer({\n antialias: true,\n // logarithmicDepthBuffer: true,\n // alpha: false,\n // premultipliedAlpha: false\n })\n renderer.autoClear = true\n renderer.setClearAlpha(1);\n renderer.setClearColor(0xffffff);\n renderer.setPixelRatio(window.devicePixelRatio);\n renderer.shadowMap.enabled = true;\n renderer.shadowMap.autoUpdate = true;\n renderer.shadowMap.type = PCFSoftShadowMap;\n return renderer\n}\n\nexport function initCamera(width: number, height: number): OrthographicCamera {\n const camera = new OrthographicCamera(-width / 2, width / 2, height / 2, -height / 2, -1000, 5000)\n camera.up.set(0, 0, 1);\n camera.position.set(0, 0, 100);\n camera.lookAt(0, 0, 0);\n return camera\n}\n\nexport function initLight() {\n const lights = new Group()\n // \u534A\u7403\u5149\n // const hemisphereLight = new HemisphereLight(0xffffff, 0xffffff, 1);\n // hemisphereLight.intensity = 1;\n // hemisphereLight.position.set(0, 0, 10);\n // hemisphereLight.up.set(0, 0, 1);\n // lights.add(hemisphereLight)\n const ambientLight = new AmbientLight(0xffffff, 2.6);\n lights.add(ambientLight)\n return lights\n}\n\nexport function initControl(camera: OrthographicCamera, domElement: HTMLCanvasElement) {\n const control = new MapControls(camera, domElement)\n // \u7981\u7528\u963B\u5C3C\n control.enableDamping = false\n // \u8BBE\u7F6E2.5D\n // control.maxPolarAngle = 0\n // control.minPolarAngle = 0\n // \u7981\u7528\u6C34\u5E73\u65CB\u8F6C\n // control.maxAzimuthAngle = 0\n // control.minAzimuthAngle = 0\n control.zoomSpeed = 2\n return control\n}\n\nexport function initShape(path: Coordinate[], holePath: Coordinate[][] = []) { \n const shape = new Shape(path.map(item => new Vector2(...item)));\n if (holePath.length) {\n holePath.forEach(cur => {\n var hole = new Path(cur.map(item => new Vector2(...item)));\n shape.holes.push(hole);\n })\n }\n return shape\n}\n\nexport function initDirectionalLight(color = 0xffffff, intensity = 1) {\n const directionalLight = new DirectionalLight(color, intensity);\n directionalLight.castShadow = true;\n directionalLight.shadow.radius = 8;\n directionalLight.shadow.bias = -0.001;\n directionalLight.shadow.mapSize.set(256, 256);\n directionalLight.shadow.camera.left = -200;\n directionalLight.shadow.camera.right = 200;\n directionalLight.shadow.camera.top = 200;\n directionalLight.shadow.camera.bottom = -200;\n return directionalLight\n}", "import { Object3D, Mesh, Light } from 'three'\n\nexport function dispose(o: Object3D, recursive?: boolean): void {\n if (recursive && o.children && o.children.length) {\n o.children.forEach((child) => {\n dispose(child, recursive);\n });\n }\n if ((o as Mesh).isMesh) {\n const m = o as Mesh;\n if (m.geometry) m.geometry.dispose();\n if (m.material) {\n if (Array.isArray(m.material)) {\n m.material.forEach((mat) => {\n mat.dispose();\n });\n } else {\n m.material.dispose();\n }\n }\n }\n if ((o as Light).isLight) {\n (o as Light).dispose?.()\n }\n}", "export function hasChinese(str:string) {\n return /[\\u4E00-\\u9FA5]+/g.test(str);\n}", "import { hasChinese } from './rules'\nimport { DataTexture, RGBAFormat, LinearFilter } from 'three'\n\nconst urlTextureMap = new Map()\nconst textTextureMap = new Map<string, DataTexture>()\n\nexport function initCanvas() {\n const canvas = document.createElement('canvas');\n canvas.width = 1024;\n canvas.height = 64;\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true,\n }) as CanvasRenderingContext2D;\n ctx.font = '54px sans-serif';\n ctx.textBaseline = 'hanging';\n ctx.lineWidth = 12;\n ctx.fillStyle = 'rgba(0,0,0,1)';\n ctx.strokeStyle = 'white';\n return { canvas, ctx }\n}\n\nlet canvas: HTMLCanvasElement;\nlet ctx: CanvasRenderingContext2D;\n\nexport function createCanvas() {\n if (!canvas) {\n const { canvas: c, ctx: t } = initCanvas()\n canvas = c;\n ctx = t;\n }\n}\n\nexport function getTextureByText(text: string): DataTexture {\n if (textTextureMap.has(text)) {\n return textTextureMap.get(text)!\n }\n createCanvas()\n\n ctx.clearRect(0, 0, 1024, 64);\n const y = hasChinese(text) ? 4 : 8;\n ctx.strokeText(text, 2, y);\n ctx.fillText(text, 2, y);\n\n let width = Math.ceil(ctx.measureText(text).width);\n width = width % 2 === 0 ? width : width + 1;\n width += 2;\n const imageData = ctx.getImageData(0, 0, width, 64);\n const texture = new DataTexture(\n Uint8Array.from(imageData.data),\n width,\n 64,\n RGBAFormat,\n );\n texture.flipY = true;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n\n textTextureMap.set(text, texture);\n return texture;\n}\n\nexport function clearTextTexture() {\n textTextureMap.clear()\n}\n\nexport function clearCanvas() {\n ctx = null as unknown as CanvasRenderingContext2D;\n canvas = null as unknown as HTMLCanvasElement;\n}", "import { Coordinate } from '../types';\nimport { Vector3, Camera, Vector2 } from 'three';\nimport { point, featureCollection, center } from '@turf/turf'\n\n/**\n * 3D\u5750\u6807\u8F6C\u5C4F\u5E55\u5750\u6807\n * @param vector \n * @param camera \n * @param w container\u7684\u5BBD\n * @param h container\u7684\u9AD8\n * @returns \n */\nexport function vector3ToDevice(vector: Vector3, camera: Camera, w: number, h: number) {\n const _vector = vector.clone().project(camera);//\u901A\u8FC7\u4E16\u754C\u5750\u6807\u83B7\u53D6\u8F6C\u6807\u51C6\u8BBE\u5907\u5750\u6807\n const _w = w / 2;\n const _h = h / 2;\n const x = Math.round(_vector.x * _w + _w);//\u6807\u51C6\u8BBE\u5907\u5750\u6807\u8F6C\u5C4F\u5E55\u5750\u6807\n const y = Math.round(-_vector.y * _h + _h);\n return { x, y }\n}\n\n\n/**\n * \u83B7\u53D6\u591A\u53D8\u5F62\u7684\u4E2D\u5FC3\u70B9\n * @param coordinates \n */\nexport function getCenter(coordinates: Coordinate[]): [number, number] {\n const features = featureCollection(coordinates.map(item => point(item)))\n const cent = center(features)\n return cent.geometry.coordinates as [number, number]\n}\n\ntype Position = {\n x: number,\n y: number\n}\nexport function isContain(point: Position, start: Position, end: Position) {\n // \u5224\u65AD point\u662F\u5426\u5728 start \u548Cend\u5F62\u6210\u7684\u77E9\u5F62\u4E2D\n return point.x >= start.x &&\n point.x <= end.x &&\n point.y >= start.y &&\n point.y <= end.y \n}\n\n/**\n * \u83B7\u53D6\u6700\u957F\u8FB9\u7684\u65B9\u5411\n * @param cds \n */\nexport function getLongestSideDir(cds: Coordinate[]) { \n let maxDistance = 0;\n let dir = new Vector3();\n for (let i = 1; i < cds.length; i++) { \n const point_0 = new Vector3(cds[i - 1][0], cds[i - 1][1], 0);\n const point_1 = new Vector3(cds[i][0], cds[i][1], 0);\n const distance = point_1.distanceTo(point_0)\n if (distance > maxDistance) {\n maxDistance = distance;\n dir = point_1.clone().sub(point_0).normalize();\n }\n }\n return dir;\n}\n\nexport function getLength(start: [number, number], end: [number, number]) {\n return Math.sqrt((end[0] - start[0]) ** 2 + (end[1] - start[1]) ** 2)\n}\n\nexport function getPathLength(path: [number, number][]) { \n let length = 0;\n for (let i = 0; i < path.length - 1; i++) { \n length += getLength(path[i], path[i + 1])\n }\n return length\n}\n\n// \u8BA1\u7B97\u4E09\u4E2A\u70B9\u7684\u89D2\u5EA6\nexport function calc_angle(p0: [number, number], p1: [number, number], p2: [number, number]) {\n const line1 = new Vector2(p1[0] - p0[0], p1[1] - p0[1]);\n const line2 = new Vector2(p1[0] - p2[0], p1[1] - p2[1]);\n const radian = line1.angleTo(line2);\n const angle = (radian * 180) / Math.PI;\n // \u521B\u5EFA\u4ECEp0\u5230p1\u7684\u5411\u91CF\u548Cp0\u5230P2\u7684\u5411\u91CF\n const l01 = new Vector2(p1[0] - p0[0], p1[1] - p0[1]);\n const l02 = new Vector2(p2[0] - p0[0], p2[1] - p0[1]);\n const crossResult = l02.cross(l01);\n if (crossResult > 0) {\n return angle;\n } else {\n return -angle;\n }\n}\n", "import { EventDispatcher } from 'three'\n\nexport function proxyOptions\n <T extends Record<string, any>, M extends { [K in keyof T as `change-${Extract<K, string>}`]: { value: T[K] } }>\n (target: T, master: EventDispatcher<M>): T\n{ \n return new Proxy<T>(target, {\n get: (target, p, receiver) => {\n return Reflect.get(target, p, receiver)\n },\n set: (target, p, newValue, receiver) => {\n const oldValue = Reflect.get(target, p, receiver)\n const res = Reflect.set(target, p, newValue, receiver)\n if (oldValue !== newValue) {\n master.dispatchEvent({ type: `change-${p as Extract<keyof T, string>}`, value: newValue } as any)\n }\n return res\n }\n })\n}", "/**\n * \u53EF\u4EE5\u8BBE\u7F6E\u8D85\u65F6\u65F6\u95F4\u7684promise\n * @param promise \n * @param timeout \n * @returns \n */\nexport function timeoutPromise<T>(promise: Promise<T>, timeout: number): Promise<T> {\n return Promise.race([\n promise,\n new Promise<T>((resolve, reject) => {\n setTimeout(() => reject(new Error(\"Promise timeout\")), timeout);\n })\n ]);\n}", "export function createSvgElement(tag: string) {\n return document.createElementNS('http://www.w3.org/2000/svg', tag); \n}\n\n/**\n * \u521B\u5EFAsvg\n */\nexport function createSvg(w: string, h: string) {\n const svg = createSvgElement(\"svg\");\n svg.setAttribute(\"width\", w)\n svg.setAttribute(\"height\", h)\n svg.style.cssText = \"position: absolute; left: 0; top: 0; pointer-events: none;\"\n return svg;\n}\n\n/**\n * \u521B\u5EFA\u5706\u70B9\n * @param radius \n */\nexport function createCircle(radius = \"2\", fill: string) {\n const circle = createSvgElement(\"circle\");\n circle.setAttribute(\"r\", radius)\n circle.setAttribute(\"fill\", fill)\n return circle\n}\n\n/**\n * \u521B\u5EFA\u7EBF\n * @param stroke \n */\nexport function createLine(stroke: string) {\n const line = createSvgElement(\"line\")\n line.setAttribute(\"stroke\", stroke)\n return line\n}\n\n/**\n * \u521B\u5EFA\u77E9\u5F62\n * @param stroke \n * @returns \n */\nexport function createRect(stroke: string, fill: string) {\n const rect = createSvgElement(\"rect\")\n rect.setAttribute(\"stroke\", stroke)\n rect.setAttribute(\"fill\", fill)\n return rect\n}\n\nexport function setCirclePosition(circle: SVGElement, x: number, y: number) {\n circle.setAttribute('cx', `${x}`)\n circle.setAttribute('cy', `${y}`)\n}\n\ntype Position = { x: number; y: number }\n\nexport function setLineStartEnd(line: SVGElement, start?: Position, end?: Position) {\n if (start) { \n line.setAttribute(\"x1\", `${start.x}`)\n line.setAttribute(\"y1\", `${start.y}`)\n }\n if (end) {\n line.setAttribute(\"x2\", `${end.x}`)\n line.setAttribute(\"y2\", `${end.y}`)\n }\n}\n\nexport function setRectPosition(rect: SVGElement, x: number, y: number, w: number, h: number) {\n rect.setAttribute('x', `${x}`)\n rect.setAttribute('y', `${y}`)\n rect.setAttribute('width', `${w}`)\n rect.setAttribute('height', `${h}`)\n}", "export function sleepOnePromise() {\n return Promise.resolve()\n}\n\nexport function sleepOneRf() { \n return new Promise(resolve => {\n requestAnimationFrame(resolve)\n })\n}", "export function strToNumber(str: string) {\n return parseInt(str.replace(\"#\", \"0x\"), 16);\n}\n\n/**\n * \u7ED9\u989C\u8272\u52A0\u4E0A\u900F\u660E\u5EA6\n * @param hexColor\n * @param alpha\n * @returns\n */\nexport function addAlphaToHexColor(hexColor: string, alpha: number) {\n // \u5C0616\u8FDB\u5236\u989C\u8272\u503C\u8F6C\u6362\u4E3ARGB\u6570\u503C\n let r = parseInt(hexColor.substring(1, 3), 16);\n let g = parseInt(hexColor.substring(3, 5), 16);\n let b = parseInt(hexColor.substring(5, 7), 16);\n\n // \u8BA1\u7B97\u65B0\u7684RGB\u6570\u503C\n let newR = Math.round(r * alpha);\n let newG = Math.round(g * alpha);\n let newB = Math.round(b * alpha);\n\n // \u5C06\u65B0\u7684RGB\u6570\u503C\u8F6C\u6362\u4E3A16\u8FDB\u5236\u683C\u5F0F\n let newHexColor = `#${(1 << 24 | newR << 16 | newG << 8 | newB).toString(16).slice(1)}`;\n\n return newHexColor;\n}\n\nexport function darkenColor(hexColor: string, factor = 0.85) {\n let r: number;\n let g: number;\n let b: number;\n if (hexColor.startsWith(\"#\")) {\n // \u5C06\u5341\u516D\u8FDB\u5236\u989C\u8272\u8F6C\u6362\u4E3ARGB\n r = parseInt(hexColor.substring(1, 3), 16);\n g = parseInt(hexColor.substring(3, 5), 16);\n b = parseInt(hexColor.substring(5, 7), 16);\n } else { \n // rgb\u683C\u5F0F\u7684\n let numbers = hexColor.slice(4, -1).split(\",\");\n r = parseInt(numbers[0].trim())\n g = parseInt(numbers[1].trim())\n b = parseInt(numbers[2].trim())\n }\n // \u8BA1\u7B97\u6697\u70B9\u989C\u8272\n r = Math.min(Math.floor(r * factor), 255);\n g = Math.min(Math.floor(g * factor), 255);\n b = Math.min(Math.floor(b * factor), 255);\n\n\n // \u5C06RGB\u989C\u8272\u8F6C\u6362\u56DE\u5341\u516D\u8FDB\u5236\n let darkHexColor = \"#\" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\n\n return darkHexColor;\n}\n", "import { Object3D, Scene, Mesh, MeshBasicMaterial } from 'three'\nimport { GLTF, GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'\n\nfunction createLoader() { \n const loader = new GLTFLoader()\n return loader\n}\n\nlet loader: GLTFLoader | null = null\nlet modelMap = new Map<string, Promise<GLTF>>()\n\n/**\n * \u52A0\u8F7D\u6A21\u578B\n * @param url \n * @returns \n */\nexport function loadModel(url: string): Promise<GLTF> { \n if (modelMap.has(url)) {\n const gltf = modelMap.get(url)!.then(gltf => { \n gltf.scene = gltf.scene.clone()\n return gltf\n })\n }\n if (!loader) {\n loader = createLoader()\n }\n const p = new Promise<GLTF>((resolve, reject) => { \n loader!.load(url, gltf => {\n resolve(gltf)\n }, undefined, reject)\n })\n modelMap.set(url, p)\n return p.then(gltf => { \n gltf.scene = gltf.scene.clone()\n return gltf\n })\n}\n\nexport function disposeLoader() { \n loader = null\n modelMap.clear()\n}", "export const isMac = navigator.userAgent.toUpperCase().indexOf('MAC') >= 0;\n", "import { isMac } from \"./os\";\n\nexport function isControl(key: string) { \n if (isMac) {\n return key === \"Meta\"\n }\n return key === \"Control\"\n}", "type DefaultFn = (...args: any[]) => void;\n\ninterface EventI {\n on(type: string, callback: DefaultFn): void;\n once(type: string, callback: DefaultFn): void;\n off(type: string, callback: DefaultFn): void;\n offAll(): void;\n emit(type: string, ...args: any[]): void;\n}\n\nexport type { EventI }\n\nconst oncePrefix = '__once__'\n\nexport class Events implements EventI {\n events = new Map<string, Set<DefaultFn>>()\n\n on(type: string, callback: DefaultFn) {\n if (typeof callback !== 'function') return undefined\n const events = this.events.get(type)\n if (events) {\n return events.add(callback)\n }\n return this.events.set(type, new Set([callback]))\n }\n\n once(type: string, callback: DefaultFn) {\n if (typeof callback !== 'function') return undefined\n const event = `${oncePrefix}${type}`\n const events = this.events.get(event)\n if (events) {\n return events.add(callback)\n }\n return this.events.set(event, new Set([callback]))\n }\n\n off(type: string, callback: DefaultFn) {\n const events = this.events.get(type)\n const onceEvents = this.events.get(`${oncePrefix}${type}`)\n if (!events && !onceEvents) {\n return\n }\n if (callback === undefined) {\n events?.clear()\n onceEvents?.clear()\n }\n if (events?.has(callback)) {\n events.delete(callback)\n }\n if (onceEvents?.has(callback)) {\n onceEvents.delete(callback)\n }\n }\n\n offAll() {\n this.events.clear()\n }\n\n emit(type: string, ...args: any[]) {\n const events = this.events.get(type)\n const onceEvents = this.events.get(`${oncePrefix}${type}`)\n if (!events && !onceEvents) {\n return\n }\n events?.forEach((fn) => {\n if (typeof fn === 'function') {\n fn(...args)\n }\n })\n onceEvents?.forEach((fn) => {\n if (typeof fn === 'function') {\n fn(...args)\n }\n })\n onceEvents?.clear()\n }\n}\n", "export enum HooksName {\n SWITCH_FLOOR_BEFORE = \"switch_floor_before\",\n SWITCH_FLOOR_AFTER = \"switch_floor_after\",\n}\n", "/**\n * \u751F\u6210\u5BF9\u8C61\u7684key\n * @param obj \n * @returns \n */\nexport function generatorKeyByObj(obj: Record<string, any>) {\n return Object.keys(obj).sort().map(key => `${key}=${obj[key]}`).join(\"&\")\n}", "export function xhrGet<T>(url: string, options: RequestInit & { responseType?: 'json' | 'arraybuffer' }): Promise<T> {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n\n Object.keys(options.headers || {}).forEach((key) => { \n xhr.setRequestHeader(key, (options.headers as any)![key]);\n })\n\n if (options.responseType) {\n xhr.responseType = options.responseType;\n }\n\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n if (options.responseType === 'arraybuffer') {\n resolve(xhr.response);\n } else {\n try {\n const response = JSON.parse(xhr.responseText);\n resolve(response);\n } catch (error) {\n reject(error);\n }\n }\n } else {\n reject(xhr.statusText);\n }\n };\n\n xhr.onerror = () => {\n reject(xhr.statusText);\n };\n\n xhr.send();\n });\n}", "export class UniqueKey {\n keySet = new Set<string>()\n\n static createKey() {\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n }\n\n genUniqueKey() { \n let key = UniqueKey.createKey()\n while (this.keySet.has(key)) {\n key = UniqueKey.createKey()\n }\n return key\n }\n\n removeKey(key: string) {\n this.keySet.delete(key)\n }\n\n dispose() {\n this.keySet.clear()\n }\n}", "import { Vector2 } from \"three\";\n// @ts-ignore\nimport smooth from \"chaikin-smooth\";\nimport { calc_angle, getLength } from \"./coordinate\";\n\nfunction getAngle(vec0: Vector2, vec1: Vector2): number {\n const v0 = vec0.clone().normalize();\n const v1 = vec1.clone().normalize();\n return Math.acos(v0.dot(v1));\n}\n\nfunction averageStepLength(path: [number, number][]): number {\n let sum = 0;\n path.reduce(([x0, y0], [x1, y1]) => {\n sum += Math.sqrt((x1 - x0) ** 2 + (y1 - y0) ** 2);\n return [x1, y1];\n });\n return sum / path.length;\n}\n\nexport function smoothPath(\n path: [number, number][],\n threshold = 0.25\n): [number, number][] {\n if (averageStepLength(path) < threshold) return path;\n const result = smooth(path);\n return smoothPath(result, threshold);\n}\n\n/**\n * \u8DEF\u5F84\u7B80\u5316\n * @param path \u8DEF\u5F84\u70B9\u96C6\u6570\u7EC4\n * @param ignoreFirst \u662F\u5426\u5728\u7B80\u5316\u8FC7\u7A0B\u4E2D\u5FFD\u7565\u7B2C\u4E00\u4E2A\u70B9\n * @param smoothingOptimization \u662F\u5426\u9488\u5BF9\u5E73\u6ED1\u5BF9\u8DEF\u5F84\u8FDB\u884C\u63D2\u503C\n * @param simplifyDistanceThreshold \u7B80\u5316\u65F6\u8DEF\u5F84\u6700\u77ED\u4FDD\u7559\u7684\u8DDD\u79BB, \u9ED8\u8BA4\u4E3A5\n * @param maximumTurningDegree \u7B80\u5316\u65F6\u4E09\u70B9\u5939\u89D2\u8BA4\u5B9A\u4E3A\u8F6C\u5F2F\u7684\u6700\u5927\u89D2\u5EA6\uFF0C\u9ED8\u8BA4\u4E3A150\n * @param smoothingDistance \u5E73\u6ED1\u65F6\u4F7F\u7528\u7684\u8F6C\u89D2\u6700\u5927\u8DDD\u79BB\n */\nexport function simplifyPath(\n path: [number, number][],\n ignoreFirst = false,\n smoothingOptimization = true,\n simplifyDistanceThreshold = 5,\n maximumTurningDegree = 150,\n smoothingDistance = 3\n): [number, number][] {\n const joints = [];\n let firstIgnored = !ignoreFirst;\n joints.push(path[0]);\n if (path.length < 2) return joints;\n for (let i = 0; i < path.length - 2; i += 1) {\n const p0 = path[i];\n const p1 = path[i + 1];\n const p2 = path[i + 2];\n const v0 = new Vector2(p0[0] - p1[0], p0[1] - p1[1]);\n const v1 = new Vector2(p2[0] - p1[0], p2[1] - p1[1]);\n const deg = (getAngle(v0, v1) / Math.PI) * 180;\n const dist = v0.length() + v1.length();\n\n if (\n !firstIgnored ||\n (deg < maximumTurningDegree && dist > 0.01) ||\n dist > simplifyDistanceThreshold\n ) {\n joints.push(path[i + 1]);\n firstIgnored = true;\n }\n }\n joints.push(path[path.length - 1]);\n if (!smoothingOptimization) return joints;\n\n const simplifiedPath = [];\n simplifiedPath.push(joints[0]);\n for (let i = 0; i < joints.length - 2; i += 1) {\n const head = new Vector2(joints[i][0], joints[i][1]);\n const mid = new Vector2(joints[i + 1][0], joints[i + 1][1]);\n const tail = new Vector2(joints[i + 2][0], joints[i + 2][1]);\n\n const halfHeadMidDist = head.distanceTo(mid) / 2;\n const halfMidTailDist = tail.distanceTo(mid) / 2;\n\n const curveHead = mid.clone();\n const curveTail = mid.clone();\n\n curveHead.add(\n head\n .clone()\n .sub(mid)\n .normalize()\n .multiplyScalar(\n halfHeadMidDist > smoothingDistance\n ? smoothingDistance / 2\n : halfHeadMidDist\n )\n );\n curveTail.add(\n tail\n .clone()\n .sub(mid)\n .normalize()\n .multiplyScalar(\n halfMidTailDist > smoothingDistance\n ? smoothingDistance / 2\n : halfMidTailDist\n )\n );\n\n const curveToSmooth: [number, number][] = [\n [curveHead.x, curveHead.y],\n [mid.x, mid.y],\n [curveTail.x, curveTail.y],\n ];\n simplifiedPath.push(...smoothPath(curveToSmooth, smoothingDistance / 25));\n }\n simplifiedPath.push(joints[joints.length - 1]);\n\n return removeWeightPath(simplifiedPath);\n}\n\n/**\n * \u5BF9\u8DEF\u5F84\u70B9\u505A\u53BB\u91CD\n * @param points \u8DEF\u5F84\u70B9\n * @returns\n */\nexport function removeWeightPath(points: [number, number][]) {\n if (points.length <= 1) {\n return points;\n }\n const checkedPath: [number, number][] = [];\n let lastCheckedPoint: [number, number];\n points.forEach(([x, y]) => {\n if (!lastCheckedPoint) {\n lastCheckedPoint = [x, y];\n checkedPath.push([x, y]);\n } else if (!(x === lastCheckedPoint[0] && y === lastCheckedPoint[1])) {\n lastCheckedPoint = [x, y];\n checkedPath.push([x, y]);\n }\n });\n return checkedPath;\n}\n\n/**\n * \u8BA1\u7B97\u70B9\u5728\u8DEF\u7EBF\u7684\u6700\u77ED\u8DDD\u79BB\u548C\u6295\u5F71\u4F4D\u7F6E\n * @param point \u70B9\n * @param start \u8DEF\u7EBF\u8D77\u70B9\n * @param end \u8DEF\u7EBF\u7EC8\u70B9\n * @returns \n */\n export function distancePointToSegment(\n point: [number, number],\n start: [number, number],\n end: [number, number]\n ): { distance: number, closestPoint: [number, number] } {\n const segmentLength = Math.sqrt(\n (end[0] - start[0]) ** 2 + (end[1] - start[1]) ** 2\n );\n\n if (segmentLength === 0) {\n return {\n distance: Math.sqrt((point[0] - start[0]) ** 2 + (point[1] - start[1]) ** 2),\n closestPoint: start.slice(0) as [number, number],\n }\n }\n\n const t = Math.max(\n 0,\n Math.min(\n 1,\n ((point[0] - start[0]) * (end[0] - start[0]) +\n (point[1] - start[1]) * (end[1] - start[1])) /\n segmentLength ** 2\n )\n );\n const closestPoint: [number, number] = [\n start[0] + t * (end[0] - start[0]),\n start[1] + t * (end[1] - start[1]),\n ];\n\n const distance = Math.sqrt(\n (point[0] - closestPoint[0]) ** 2 + (point[1] - closestPoint[1]) ** 2\n );\n\n return { distance, closestPoint };\n}\n\n/**\n * \u8BA1\u7B97\u8DEF\u7EBF\u7684\u8D77\u70B9\u5728\u8DEF\u7EBF\u4E0A\u79FB\u52A8\u4E00\u5B9A\u7684\u8DDD\u79BB\u540E\u7684\u70B9\n * @param startPoint \n * @param endPoint \n * @param distance \n * @returns \n */\nexport function moveOnRoute(startPoint: [number, number], endPoint: [number, number], distance: number): [number, number] {\n const [startX, startY] = startPoint;\n const [endX, endY] = endPoint;\n \n // \u8BA1\u7B97\u8DEF\u7EBF\u603B\u957F\u5EA6\n const routeLength = Math.sqrt(Math.pow(endX - startX, 2) + Math.pow(endY - startY, 2));\n \n // \u8BA1\u7B97\u79FB\u52A8\u6BD4\u4F8B\n const ratio = distance / routeLength;\n \n // \u8BA1\u7B97\u65B0\u5750\u6807\n const newX = startX + (endX - startX) * ratio;\n const newY = startY + (endY - startY) * ratio;\n \n return [newX, newY];\n}\n\nexport enum PathDirection {\n START = \"start\",\n END = \"end\",\n FRONT = \"front\",\n RIGHT = \"right\",\n LEFT = \"left\",\n RIGHT_FRONT = \"right_front\",\n LEFT_FRONT = \"left_front\",\n RIGHT_BACK = \"right_back\",\n LEFT_BACK = \"left_back\",\n}\n\nexport function calc_direction(p0: [number, number], p1: [number, number], p2: [number, number]) {\n const angle = calc_angle(p0, p1, p2);\n\n if (180 - Math.abs(angle) < 15) {\n return PathDirection.FRONT;\n } else if (angle > 135) {\n return PathDirection.RIGHT_FRONT;\n } else if (angle < -135) {\n return PathDirection.LEFT_FRONT;\n } else if (angle <= 135 && angle >= 60) {\n return PathDirection.RIGHT;\n } else if (angle >= -135 && angle <= -60) {\n return PathDirection.LEFT;\n } else if (angle < 60 && angle > 0) {\n return PathDirection.RIGHT_BACK;\n } else if (angle > -60 && angle < 0) {\n return PathDirection.LEFT_BACK;\n }\n return PathDirection.FRONT;\n}\n\n/**\n * \u5165\u53C2 Point[]\n * \u8FD4\u56DE\n * [{\n * direction: PathDirection\n * distance: number\n * points: Point[]\n * }]\n */\nexport function getDirectPath(points: [number, number][]) {\n const arr = [\n {\n direction: PathDirection.START,\n distance: getLength(points[0], points[1]),\n points: [points[0], points[1]],\n },\n ];\n for (let i = 2; i < points.length; i++) {\n const direction = calc_direction(points[i - 2], points[i - 1], points[i]);\n // \u5982\u679C\u662F\u524D\u884C\uFF0C\u8981\u4FEE\u6539\u8DDD\u79BB\u548C\u70B9\u4F4D\n if (direction === PathDirection.FRONT) {\n const last = arr[arr.length - 1];\n const distance = getLength(points[i - 1], points[i]);\n last.distance += distance;\n if (i !== 2) {\n last.points.push(points[i - 1]);\n }\n } else {\n arr.push({\n direction: direction,\n distance: getLength(points[i - 1], points[i]),\n points: [points[i - 1], points[i]],\n });\n }\n }\n arr.push({\n direction: PathDirection.END,\n distance: 0,\n points: [points[points.length - 1]],\n });\n return arr;\n}", "// \u8DEF\u7F51\n// \u6839\u636E\u4F20\u5165\u7684\u6570\u636E\u751F\u6210\u8DEF\u7F51\n// \u6700\u77ED\u8DEF\u7EBF\u8DEF\u7F51\n// \u6276\u68AF\u4F18\u5148\u8DEF\u7F51\n// \u76F4\u68AF\u4F18\u5148\u8DEF\u7F51\n\nimport Graph from \"node-dijkstra\";\nimport { getLength, getPathLength } from \"./coordinate\";\nimport { EquipmentData } from \"../plugins\";\n\nexport interface RoadData {\n floor: string;\n lines: Array<{\n id: string; // \u552F\u4E00\u503C\n to: string; // \u8DEF\u7F51\u70B9ID \u7EBF\u7684\u5176\u4E2D\u4E00\u7AEF\n from: string; // \u8DEF\u7F51\u70B9ID \u7EBF\u7684\u53E6\u4E00\u7AEF\n color: string; // \u7F16\u8F91\u5668\u7528\u5C55\u793A\u8DEF\u7F51\u7528 bmap\u4E0D\u4F7F\u7528\n locked: boolean; // \u7F16\u8F91\u5668\u7528\u5C55\u793A\u8DEF\u7F51\u7528 bmap\u4E0D\u4F7F\u7528\n opacity: number; // \u7F16\u8F91\u5668\u7528\u5C55\u793A\u8DEF\u7F51\u7528 bmap\u4E0D\u4F7F\u7528\n visible: boolean; // \u7F16\u8F91\u5668\u7528\u5C55\u793A\u8DEF\u7F51\u7528 bmap\u4E0D\u4F7F\u7528\n userData: Record<string, string>; // \u81EA\u5B9A\u4E49\u5143\u6570\u636E\n direction: \"double\" | \"single\" | \"no\"; // \u901A\u884C\u65B9\u5411\n }>; // \u8DEF\u7F51\u7EBF\n points: Array<{\n id: string; // \u8DEF\u7F51\u70B9ID\n cds: [number, number];\n name: string; // \u7C7B\u578B\u4E3A/\u76F4\u68AF/\u7535\u68AF/\u6276\u68AF\u65F6\u5019\u7684\u8BBE\u5907\u540D\u79F0 \u76F8\u540C\u540D\u79F0\u7684\u8BBE\u65BD\u624D\u80FD\u8FDE\u901A \u6BD4\u5982\u5728L1\u548CL2\u90FD\u5404\u6709\u4E00\u4E2A\u7535\u68AF\uFF0C\u5F53\u4E24\u4E2A\u7535\u68AF\u540D\u79F0\u4E00\u81F4\u7684\u65F6\u5019\uFF0C\u8FD9\u4E2A\u7535\u68AF\u5C31\u662F\u53EF\u4EE5\u5728L1\u548CL2\u4E4B\u95F4\u7684\u901A\u884C\u7684\n type:\n | \"normal\"\n | \"graph\"\n | \"straightLadder\"\n | \"staircase\"\n | \"escalator\"\n | \"facility\"; // \u666E\u901A\u70B9/\u5438\u9644\u56FE\u5143\u70B9/\u76F4\u68AF\u70B9/\u697C\u68AF/\u6276\u68AF/\u8BBE\u5907\u8BBE\u65BD\n floor: string; // \u8DEF\u7F51\u70B9\u865A\u62DF\u697C\u5C42\n locked: boolean; // \u7F16\u8F91\u5668\u7528\u5C55\u793A\u8DEF\u7F51\u7528 bmap\u4E0D\u4F7F\u7528\n nodeId: string; // \u8DEF\u7F51\u70B9\u5438\u9644\u7684\u5757\u513FID\n visible: boolean; // \u7F16\u8F91\u5668\u7528\u5C55\u793A\u8DEF\u7F51\u7528 bmap\u4E0D\u4F7F\u7528\n targetId: string; // \u5438\u9644\u5BF9\u8C61\u7684ID\uFF0C\u5982\u679C\u5438\u9644\u7684\u662F\u8BBE\u65BD\u5C31\u662F\u8BBE\u65BDID\uFF0C\n userData: Record<string, string>; // \u81EA\u5B9A\u4E49\u5143\u6570\u636E\n escalatorType: \"\" | \"single\" | \"double\" | \"jd\"; // \u6276\u68AF\u7C7B\u578B \u5355\u68AF \u53CC\u68AF \u526A\u5200\u68AF\n escalatorDirection: \"\" | \"up\" | \"down\" | \"exit\"; // \u6276\u68AF\u65B9\u5411 \u4E0A\u884C \u4E0B\u884C \u51FA\u53E3\n }>;\n}\n\nexport interface Start {\n floor: string;\n nodeId?: string;\n coord?: [number, number];\n}\n\ntype FacilityEnd = {\n floor?: string; // \u8BBE\u65BD\u6240\u5728\u697C\u5C42\n facility?: string; // \u8BBE\u65BDid \u6709\u8BBE\u65BD\u8981\u6839\u636E\u8D77\u70B9\u627E\u6700\u8FD1\u7684\u8BBE\u65BD\n};\nexport type End = Start & FacilityEnd;\n\nexport type RouteType = \"\" | \"escalator\" | \"straightLadder\"\n\nexport type PathData = {\n floor: string;\n points: [number, number][];\n endType: string;\n destId: string;\n}[];\n\nexport class RoadNetwork {\n roadInfo: RoadData[] = [];\n\n // \u8DEF\u7F51\u70B9 key\u662F${floor}-${point.id}\n pointMap = new Map<string, RoadData[\"points\"][0]>();\n // ${floor}-${nodeId} -> ${floor}-${point.id}\n nodeMap = new Map<string, string>();\n\n // ${targetId} -> RoadData[\"points\"]\n facilityMap = new Map<string, RoadData[\"points\"]>();\n\n // \u76F4\u68AF\n straightLadderMap = new Map<string, RoadData[\"points\"]>();\n // \u6276\u68AF\n escalatorMap = new Map<\n string,\n { start: RoadData[\"points\"][0]; end: RoadData[\"points\"][0] }\n >();\n // \u6B65\u884C\u68AF\n staircaseMap = new Map<string, RoadData[\"points\"]>();\n\n // \u8DEF\u7F51\u7EBF\n lineMap = new Map<string, Map<string, number>>();\n\n // \u6700\u77ED\u8DEF\u7EBF\u8DEF\u7F51\u7B97\u6CD5\n baseRoute = new Graph();\n\n // \u6276\u68AF\u4F18\u5148\u8DEF\u7F51\n escalatorRoute = new Graph();\n\n // \u76F4\u68AF\u4F18\u5148\u8DEF\u7F51\n straightLadderRoute = new Graph();\n\n constructor(\n private lift_priority = 3\n ) {}\n\n initRoute(roadInfo: RoadData[]) {\n this.clear();\n this.roadInfo = roadInfo;\n if (roadInfo.length) {\n roadInfo.forEach((floorRoadInfo) => {\n floorRoadInfo.points.forEach((point) => {\n const pointKey = `${floorRoadInfo.floor}-${point.id}`;\n this.pointMap.set(pointKey, point);\n this.nodeMap.set(`${point.floor}-${point.nodeId}`, pointKey);\n // \u76F4\u68AF\n if (point.type === \"straightLadder\") {\n const arr = this.straightLadderMap.get(point.name) || [];\n arr.push({ ...point });\n this.straightLadderMap.set(point.name, arr);\n }\n // \u6B65\u884C\u68AF\n if (point.type === \"staircase\") {\n const arr = this.staircaseMap.get(point.name) || [];\n arr.push({ ...point });\n this.staircaseMap.set(point.name, arr);\n }\n // \u6276\u68AF\n if (point.type === \"escalator\") {\n const obj = this.escalatorMap.get(point.name) || ({} as any);\n if (point.escalatorDirection === \"exit\") {\n // \u6276\u68AF\u51FA\u53E3\n obj.end = { floor: point.floor, id: point.id };\n } else {\n obj.start = { floor: point.floor, id: point.id };\n }\n this.escalatorMap.set(point.name, obj);\n }\n // \u8BBE\u5907\u8BBE\u65BD\n if (point.type === \"facility\") {\n const arr = this.facilityMap.get(point.targetId) || [];\n arr.push({ ...point });\n this.facilityMap.set(point.targetId, arr);\n }\n });\n floorRoadInfo.lines\n .filter((item) => item.direction !== \"no\")\n .forEach((item) => {\n const fromKey = `${floorRoadInfo.floor}-${item.from}`;\n const toKey = `${floorRoadInfo.floor}-${item.to}`;\n const fromCds = this.pointMap.get(fromKey)?.cds;\n const toCds = this.pointMap.get(toKey)?.cds;\n if (fromCds?.length && toCds?.length) {\n const distance = getLength(fromCds, toCds);\n this.addLineItem(fromKey, toKey, distance);\n if (item.direction === \"double\") {\n this.addLineItem(toKey, fromKey, distance);\n }\n }\n });\n });\n this.initBaseRoute();\n this.initEscalatorRoute();\n this.initStraightLadderRoute();\n }\n }\n\n addLineItem(\n start: string,\n end: string,\n distance: number,\n lineMap = this.lineMap\n ) {\n const map = lineMap.get(start) || new Map();\n map.set(end, distance);\n lineMap.set(start, map);\n }\n\n /**\n * \u628A\u8BBE\u65BD\u6DFB\u52A0\u7684\u8DEF\u7F51\u56FE\u4E2D\n * @param escalatorPriority \u6276\u68AF\u6743\u91CD\n * @param straightLadderPriority \u76F4\u68AF\u6743\u91CD\n * @param staircasePriority \u6B65\u884C\u68AF\u6743\u91CD\n * @param lineMap \u8DEF\u7F51\n */\n addFacilityToLineMap(\n escalatorPriority: number,\n straightLadderPriority: number,\n staircasePriority: number,\n lineMap: Map<string, Map<string, number>>\n ) {\n // \u8BBE\u7F6E\u7535\u68AF / \u6B65\u884C\u68AF\n [...this.straightLadderMap, ...this.staircaseMap].forEach(([_, value]) => {\n if (value.length < 2) {\n return;\n }\n for (let i = 0; i < value.length; i++) {\n const fromKey = `${value[i].floor}-${value[i].id}`;\n for (let j = 0; j < value.length; j++) {\n if (i !== j) {\n const toKey = `${value[j].floor}-${value[j].id}`;\n const fromCds = this.pointMap.get(fromKey)?.cds;\n const toCds = this.pointMap.get(toKey)?.cds;\n if (fromCds?.length && toCds?.length) {\n if (value[i].type === \"straightLadder\") {\n // \u7535\u68AF\n const distance = straightLadderPriority;\n this.addLineItem(fromKey, toKey, distance, lineMap);\n } else {\n // \u6B65\u884C\u68AF\n const distance = staircasePriority;\n this.addLineItem(fromKey, toKey, distance, lineMap);\n }\n }\n }\n }\n }\n });\n // \u6276\u68AF\n this.escalatorMap.forEach((value, _) => {\n if (value.start && value.end) {\n const fromKey = `${value.start.floor}-${value.start.id}`;\n const toKey = `${value.end.floor}-${value.end.id}`;\n const fromCds = this.pointMap.get(fromKey)?.cds;\n const toCds = this.pointMap.get(toKey)?.cds;\n if (fromCds?.length && toCds?.length) {\n // \u6276\u68AF\u7684\u4F18\u5148\u7EA7\n const distance = escalatorPriority;\n this.addLineItem(fromKey, toKey, distance, lineMap);\n }\n }\n });\n }\n\n // \u6700\u77ED\u8DEF\u5F84\n initBaseRoute() {\n // \u6700\u77ED\u8DEF\u5F84 \u8981\u628A\u901A\u884C\u8BBE\u65BD\u7684\u6743\u91CD\u653E\u5230\u5F88\u4F4E\n const lineMap = new Map([...this.lineMap]);\n this.addFacilityToLineMap(1, this.lift_priority, 30000, lineMap);\n this.baseRoute = new Graph(lineMap);\n }\n\n // \u6276\u68AF\u4F18\u5148\n initEscalatorRoute() {\n // \u6276\u68AF\u4F18\u5148 \u8981\u628A\u901A\u884C\u8BBE\u65BD\u7684\u6743\u91CD\u653E\u5230\u5F88\u9AD8\uFF0C\u53EF\u4EE5\u5FFD\u7565\u8DEF\u7EBF\u7684\u6743\u91CD\n const lineMap = new Map([...this.lineMap]);\n const step = 10000;\n this.addFacilityToLineMap(\n 1 * step,\n this.lift_priority * step,\n 30000 * step,\n lineMap\n );\n this.escalatorRoute = new Graph(lineMap);\n }\n\n // \u76F4\u68AF\u4F18\u5148\n initStraightLadderRoute() {\n // \u76F4\u68AF\u4F18\u5148 \u8981\u628A\u901A\u884C\u8BBE\u65BD\u7684\u6743\u91CD\u653E\u5230\u5F88\u9AD8\uFF0C\u53EF\u4EE5\u5FFD\u7565\u8DEF\u7EBF\u7684\u6743\u91CD\n const lineMap = new Map([...this.lineMap]);\n const step = 10000;\n this.addFacilityToLineMap(3 * step, 1 * step, 30000 * step, lineMap);\n this.straightLadderRoute = new Graph(lineMap);\n }\n\n checkStart(start: Start) {\n if (!start.floor) {\n return false;\n }\n if (!start.nodeId && (!start.coord || start.coord.length < 2)) {\n return false;\n }\n return true;\n }\n\n checkEnd(end: End) {\n if (end.facility) { return true }\n return this.checkStart(end)\n }\n\n transformStart(start: Start): { floor: string; id: string } | null {\n if (start.nodeId) {\n const pointKey = this.nodeMap.get(`${start.floor}-${start.nodeId}`);\n if (pointKey) {\n const [floor, id] = pointKey.split(\"-\");\n return {\n floor,\n id,\n };\n }\n }\n if (start.coord?.length) {\n // \u5438\u9644\u5230\u6700\u8FD1\u7684\u70B9\n const floorRoadInfo = this.roadInfo.find(\n (item) => item.floor === start.floor\n );\n if (!floorRoadInfo) {\n return null;\n }\n const point = floorRoadInfo.points.reduce(\n (obj, cur) => {\n const distance = getLength(start.coord!, cur.cds);\n if (distance < obj.min) {\n obj.min = distance;\n obj.point = cur;\n }\n return obj;\n },\n { min: Infinity, point: floorRoadInfo.points[0] }\n );\n return {\n floor: point.point.floor,\n id: point.point.id,\n };\n }\n return null;\n }\n\n transformEnd(\n end: End\n ): { floor: string; id: string } | { facility: string } | null {\n if (end.floor) {\n const data = this.transformStart(end);\n if (data) {\n return data;\n }\n }\n if (end.facility) {\n const facilityPoints = this.facilityMap.get(end.facility);\n if (facilityPoints?.length) {\n return {\n floor: end.floor,\n facility: end.facility,\n };\n }\n }\n return null;\n }\n\n /**\n *\n * @param start \u8D77\u70B9\n * @param end \u7EC8\u70B9\n * @param type '' \u6700\u77ED\u8DEF\u5F84 escalator \u6276\u68AF\u4F18\u5148 straightLadder \u76F4\u68AF\u4F18\u5148\n * @returns\n */\n getPath(start: Start, end: End, type: RouteType = \"\") {\n if (!this.checkStart(start)) {\n return \"start-error\";\n }\n if (!this.checkEnd(end)) {\n return \"end-error\";\n }\n const transformedStart = this.transformStart(start);\n if (!transformedStart) {\n return \"no-start\";\n }\n const transformedEnd = this.transformEnd(end);\n if (!transformedEnd) {\n return \"no-end\";\n }\n let getPathFn = this.getBasePath.bind(this);\n switch (type) {\n case \"escalator\":\n getPathFn = this.getEscalatorPath.bind(this);\n case \"straightLadder\":\n getPathFn = this.getStraightLadderPath.bind(this);\n default:\n getPathFn = this.getBasePath.bind(this);\n }\n if ((transformedEnd as any).id) {\n // \u6709\u660E\u786E\u7684\u76EE\u7684\u5730\u4E86 \u76F4\u63A5\u89C4\u5212\u8DEF\u7EBF\n return getPathFn(\n transformedStart,\n transformedEnd as { floor: string; id: string }\n );\n } else if ((transformedEnd as any).facility) {\n // \u5BFB\u627E\u6700\u8FD1\u7684\u8BBE\u65BD \u5982\u679C\u4F20\u5165\u4E86\u76EE\u7684\u5730\u697C\u5C42\uFF0C\u53EA\u627E\u5BF9\u5E94\u697C\u5C42\u7684\u8BBE\u65BD\n const facilityPoints = this.facilityMap\n .get((transformedEnd as any).facility)!\n .filter((item) => {\n if ((transformedEnd as any).floor) {\n return item.floor === (transformedEnd as any).floor;\n } else {\n return true;\n }\n });\n if (!facilityPoints.length) {\n return null;\n }\n const paths: PathData[] = facilityPoints\n .map((item) =>\n getPathFn(transformedStart, { floor: item.floor, id: item.id })\n )\n .filter((item) => !!item) as PathData[];\n // \u5BFB\u627E\u6700\u8FD1\u7684\u8DEF\u7EBF\n return paths.reduce(\n (obj, cur) => {\n const distance = cur.reduce((sum, cur) => sum + getPathLength(cur.points), 0)\n if (distance < obj.distance) {\n obj.distance = distance;\n obj.path = cur;\n }\n return obj;\n },\n { distance: Infinity, path: paths[0] }\n ).path;\n }\n }\n\n // \u4ECE\u8DEF\u7F51\u4E2D\u89C4\u5212\u8DEF\u7EBF\n private getRoutePath(\n start: { floor: string; id: string },\n end: { floor: string; id: string },\n route: Graph\n ) {\n const startPointId = `${start.floor}-${start.id}`;\n const endPointId = `${end.floor}-${end.id}`;\n const paths = route.path(startPointId, endPointId) as string[] | null;\n if (!paths) {\n return null;\n }\n const arr: PathData = [];\n paths.map((item) => {\n const point = this.pointMap.get(item);\n if (point) {\n const { floor } = point;\n if (arr[arr.length - 1]?.floor === floor) {\n const pathData = arr[arr.length - 1];\n pathData.points.push(point.cds);\n // type: normal | graph | escalator(\u6276\u68AF) | straightLadder(\u76F4\u68AF) | staircase(\u697C\u68AF) | facility(\u8BBE\u5907)\n pathData.endType = point.type;\n pathData.destId = point.nodeId;\n } else {\n arr.push({\n floor,\n points: [point.cds],\n endType: point.type,\n destId: point.nodeId,\n });\n }\n }\n });\n return arr;\n }\n\n // \u89C4\u5212\u6700\u77ED\u8DEF\u7EBF\n private getBasePath(\n start: { floor: string; id: string },\n end: { floor: string; id: string }\n ) {\n return this.getRoutePath(start, end, this.baseRoute);\n }\n\n // \u89C4\u5212\u6276\u68AF\u4F18\u5148\u8DEF\u7EBF\n private getEscalatorPath(\n start: { floor: string; id: string },\n end: { floor: string; id: string }\n ) {\n return this.getRoutePath(start, end, this.escalatorRoute);\n }\n\n // \u89C4\u5212\u76F4\u68AF\u4F18\u5148\u8DEF\u7EBF\n private getStraightLadderPath(\n start: { floor: string; id: string },\n end: { floor: string; id: string }\n ) {\n return this.getRoutePath(start, end, this.straightLadderRoute);\n }\n\n clear() {\n this.roadInfo = [];\n // \u8DEF\u7F51\u70B9 key\u662F${floor}-${point.id}\n this.pointMap.clear()\n // ${floor}-${nodeId} -> ${floor}-${point.id}\n this.nodeMap.clear()\n // ${targetId} -> RoadData[\"points\"]\n this.facilityMap.clear()\n // \u76F4\u68AF\n this.straightLadderMap.clear()\n // \u6276\u68AF\n this.escalatorMap.clear()\n // \u6B65\u884C\u68AF\n this.staircaseMap.clear()\n // \u8DEF\u7F51\u7EBF\n this.lineMap.clear()\n // \u6700\u77ED\u8DEF\u7EBF\u8DEF\u7F51\u7B97\u6CD5\n this.baseRoute = new Graph();\n // \u6276\u68AF\u4F18\u5148\u8DEF\u7F51\n this.escalatorRoute = new Graph();\n // \u76F4\u68AF\u4F18\u5148\u8DEF\u7F51\n this.straightLadderRoute = new Graph();\n }\n}\n", "/**\n * \u9A7C\u5CF0\u8F6C\u4E0B\u5212\u7EBF\n * @param str \n * @returns \n */\nexport function convertToSnakeCase(str: string) {\n return str.replace(/[A-Z]/g, (match) => '_' + match.toLowerCase()).replace(/^_/, '');\n}", "import { convertToSnakeCase } from \"./string\";\nimport { UniqueKey } from \"./unique-key\";\n\nconst uniqueKey = new UniqueKey();\n\n/**\n * \u8C03\u7528webworker\u7684\u65B9\u6CD5\n * @param type \n * @param data \n * @returns Promise<any>\n */\nexport function triggerWorker<T = any, R = any>(worker: Worker, type: string, data: T): Promise<R> { \n return new Promise((resolve, reject) => { \n const key = uniqueKey.genUniqueKey();\n const onMessage = ({ data }: MessageEvent) => { \n if (data.type === `${type}_result` && data.key === key) {\n uniqueKey.removeKey(key)\n self.removeEventListener(\"message\", onMessage)\n if (data.error) {\n reject(data.error)\n } else {\n resolve(data.data)\n }\n }\n }\n\n worker.addEventListener(\"message\", onMessage)\n worker.postMessage({ type, key, data })\n })\n}\n\nexport function toWebWorker(obj: Record<string, (...args: any[]) => any>) {\n const events: any = {};\n for (const key in obj) {\n if (key.startsWith(\"on\")) {\n events[convertToSnakeCase(key.slice(2))] = obj[key];\n }\n }\n const onMessage = async ({ data }: MessageEvent) => { \n if (events[data.type]) {\n try {\n const result = await events[data.type](data.data);\n self.postMessage({ type: `${data.type}_result`, key: data.key, data: result })\n } catch (e) {\n self.postMessage({ type: `${data.type}_result`, key: data.key, error: e }) \n }\n } else {\n self.postMessage({ type: `${data.type}_result`, key: data.key, error: \"no_event\" })\n }\n }\n self.addEventListener(\"message\", onMessage)\n\n return () => {\n self.removeEventListener(\"message\", onMessage)\n }\n}", "import { MapControls } from \"three/examples/jsm/controls/MapControls\";\nimport {\n Timer,\n initCamera,\n initRenderer,\n initScene,\n initLight,\n initControl,\n dispose,\n vector3ToDevice,\n timeoutPromise,\n} from \"./utils\";\nimport {\n EventDispatcher,\n OrthographicCamera,\n Light,\n Box2,\n Vector3,\n Vector2,\n Raycaster,\n Object3D,\n Box3,\n Color,\n AmbientLight,\n} from \"three\";\nimport { Graphic, Poi, Floor } from \"./elements\";\nimport { Group as TweenGroup, Tween } from \"@tweenjs/tween.js\";\nimport { Config } from \"./config\";\nimport { Selection } from \"./operations/selection/selection\";\nimport { HoverHelper } from \"./operations\";\nimport { MaterialFactory } from \"./factory\";\nimport { CameraBound } from \"./utils/camera-bound\";\nimport { TextureFactory } from \"./factory/texture\";\n\nexport interface ContextEventMap {\n update: {};\n \"graphic-click\": {\n graphics: Graphic[];\n position: Vector3 | null\n };\n \"poi-click\": {\n pois: Poi[];\n };\n 'pointer-level': {};\n 'pointer-over': {\n e: PointerEvent;\n graphics: Graphic[];\n pois: Poi[];\n position: Vector3 | null;\n };\n 'pointer-move': {\n e: PointerEvent;\n graphics: Graphic[];\n pois: Poi[];\n position: Vector3 | null;\n },\n 'change-ratio': {\n px: number;\n },\n \"select-graphic\": {\n graphics: Graphic[],\n isMultipleSelect: boolean,\n },\n \"hover\": {\n graphics: Graphic[];\n },\n \"control-change\": {},\n \"resize\": {\n width: number;\n height: number;\n }\n}\n\nexport class Context extends EventDispatcher<ContextEventMap> {\n scene = initScene();\n\n renderer = initRenderer();\n\n camera!: OrthographicCamera;\n\n control!: MapControls;\n\n lights = initLight();\n\n // \u7BA1\u7406\u4EFB\u52A1\uFF0C\u9632\u6B62\u5185\u5B58\u6CC4\u6F0F\n timer = new Timer();\n \n tweenGroup = new TweenGroup();\n \n currentFloor?: Floor;\n\n selection: Selection;\n\n hoverHelper: HoverHelper;\n \n private basicRatio?: number; // zoom=1\u7684\u65F6\u5019\uFF0C100M\u5BF9\u5E94\u7684\u50CF\u7D20\u4E2A\u6570\n\n public materialFactory!: MaterialFactory;\n\n public textureFactory!: TextureFactory;\n\n cameraBound!: CameraBound;\n\n clientSize = {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n }\n\n renderRf: number = 0\n\n constructor(public container: HTMLElement, public config: Config) {\n super();\n this.container.style.position = \"relative\";\n this.container.style.overflow = \"hidden\";\n this.init();\n this.selection = new Selection(this);\n this.hoverHelper = new HoverHelper(this);\n this.materialFactory = new MaterialFactory(this);\n this.textureFactory = new TextureFactory(this);\n this.resizeClientSize()\n this.registryEvent();\n }\n\n resizeClientSize() { \n const { x, y, width, height } = this.container.getBoundingClientRect()\n this.clientSize = {\n width: width || this.container.clientWidth,\n height: height || this.container.clientHeight,\n x,\n y\n }\n }\n\n init() {\n const { clientWidth: w, clientHeight: h } = this.container;\n this.camera = initCamera(w, h);\n this.renderer.setSize(w, h);\n this.control = initControl(this.camera, this.renderer.domElement);\n this.control.maxPolarAngle = this.config.control.maxPolar;\n this.container.appendChild(this.renderer.domElement);\n this.scene.add(this.lights);\n this.basicRatio = this.getRatio()\n // \u65CB\u8F6C\u89C6\u89D2\u7684\u65F6\u5019\uFF0C\u9690\u85CF\u548C\u663E\u793A\u9634\u5F71\n this.control.addEventListener(\"change\", () => {\n const polarAngle = this.control.getPolarAngle();\n this.currentFloor?.setShadowOpacity(polarAngle / this.config.control.maxPolar)\n this.dispatchEvent({ type: 'change-ratio', px: (this.basicRatio || 0) * this.camera.zoom })\n this.dispatchEvent({ type: 'control-change' })\n });\n this.cameraBound = new CameraBound(this);\n }\n\n /**\n * \u83B7\u53D6\u4E24\u4E2A\u70B9\u4E4B\u95F4\u7684\u50CF\u7D20\u6570\n */\n getRatio(point1 = new Vector3(0, 0, 0), point2 = new Vector3(100, 0, 0)) {\n const { clientWidth, clientHeight } = this.container\n const device1 = vector3ToDevice(point1, this.camera, clientWidth, clientHeight)\n const device2 = vector3ToDevice(point2, this.camera, clientWidth, clientHeight)\n return Math.ceil(Math.sqrt((device2.x - device1.x) ** 2 + (device2.y - device1.y) ** 2))\n }\n\n changeAmbientLightColor(color: string | number) {\n this.lights.children.forEach((item) => {\n if (item instanceof AmbientLight) {\n item.color = new Color(color);\n }\n });\n }\n\n switchFloor(floor: Floor) {\n if (this.currentFloor) {\n this.scene.remove(this.currentFloor)\n this.currentFloor.dispose()\n }\n this.currentFloor = floor\n this.scene.add(floor)\n // \u4FEE\u6539\u706F\u5149\u7684\u4F4D\u7F6E\n const position = floor.getCenter()\n if (position) {\n this.lights.position.x = position.x\n this.lights.position.y = position.y\n }\n }\n\n onWindowResize = () => {\n const { container, camera, renderer } = this;\n let { clientWidth: w, clientHeight: h } = container;\n w = Math.max(1, w);\n h = Math.max(1, h);\n camera.left = -w / 2;\n camera.right = w / 2;\n camera.top = h / 2;\n camera.bottom = -h / 2;\n camera.updateProjectionMatrix();\n renderer.setSize(w, h);\n this.resizeClientSize()\n this.dispatchEvent({ type:'resize', width: w, height: h })\n };\n\n onClick = (e: MouseEvent) => {\n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY);\n if (graphics.length) {\n this.dispatchEvent({\n type: \"graphic-click\",\n graphics: graphics,\n position\n });\n }\n const pois = this.getPoisByDeviceXy(e.offsetX, e.offsetY);\n if (pois.length) {\n this.dispatchEvent({ type: \"poi-click\", pois: pois as Poi[] });\n }\n };\n\n /**\n * \u83B7\u53D6\u5C4F\u5E55\u5750\u6807\u5BF9\u5E94\u7684graphic\n * @param x\n * @param y\n * @returns\n */\n getGraphicsByDeviceXy(x: number, y: number): { graphics: Graphic[], position: Vector3 | null } {\n const point = new Vector2();\n point.x = (x / this.clientSize.width) * 2 - 1;\n point.y = (y / this.clientSize.height) * -2 + 1;\n const raycaster = new Raycaster();\n raycaster.setFromCamera(point, this.camera);\n // fix: \u90E8\u5206\u56FE\u5143\u5728\u9F20\u6807\u60AC\u505C\u7684\u65F6\u5019\uFF0C\u6CA1\u6709\u88AB\u9009\u4E2D\n raycaster.ray.origin.sub(raycaster.ray.direction.clone().multiplyScalar(100))\n const res = this.currentFloor?.graphicLayer.getGraphicByRaycaster(raycaster)\n return res || { graphics: [], position: null }\n }\n\n /**\n * \u83B7\u53D6\u5C4F\u5E55\u5750\u6807\u5BF9\u5E94\u7684poi\n * @param x\n * @param y\n * @returns\n */\n getPoisByDeviceXy(x: number, y: number) {\n const pois = this.currentFloor?.poiLayer.getPoiByDeviceXy(x, y)\n return pois || [];\n }\n\n onPointerover = (e: PointerEvent) => { \n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY);\n const pois = this.getPoisByDeviceXy(e.offsetX, e.offsetY) as Poi[];\n this.dispatchEvent({ type: 'pointer-over', e, graphics, pois, position })\n }\n\n onPointermove = (e: PointerEvent) => { \n const { graphics, position } = this.getGraphicsByDeviceXy(e.offsetX, e.offsetY)\n const pois = this.getPoisByDeviceXy(e.offsetX, e.offsetY) as Poi[];\n this.dispatchEvent({ type: 'pointer-move', e, graphics, pois, position })\n }\n\n onPointerleave = (e: PointerEvent) => { \n this.dispatchEvent({ type: \"pointer-level\" })\n }\n\n onSelectionSelect = ({ graphics, isMultipleSelect }: {graphics: Graphic[], isMultipleSelect: boolean}) => { \n this.dispatchEvent({ type: \"select-graphic\", graphics, isMultipleSelect })\n }\n\n onHoverChange = ({ graphics }: { graphics: Graphic[] }) => { \n this.dispatchEvent({ type: \"hover\", graphics })\n }\n\n registryEvent() {\n window.addEventListener(\"resize\", this.onWindowResize);\n this.container.addEventListener(\"click\", this.onClick);\n this.container.addEventListener(\"pointerover\", this.onPointerover)\n this.container.addEventListener(\"pointermove\", this.onPointermove)\n this.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.container.addEventListener(\"pointercancel\", this.onPointerleave)\n this.container.addEventListener(\"pointerout\", this.onPointerleave)\n this.selection.addEventListener(\"select\", this.onSelectionSelect)\n this.hoverHelper.addEventListener(\"hover-change\", this.onHoverChange)\n }\n\n unRegistryEvent() {\n window.removeEventListener(\"resize\", this.onWindowResize);\n this.container.removeEventListener(\"click\", this.onClick);\n this.container.removeEventListener(\"pointerover\", this.onPointerover)\n this.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.container.removeEventListener(\"pointercancel\", this.onPointerleave)\n this.container.removeEventListener(\"pointerout\", this.onPointerleave)\n this.selection.removeEventListener(\"select\", this.onSelectionSelect)\n this.hoverHelper.removeEventListener(\"hover-change\", this.onHoverChange)\n }\n\n /**\n * \u8BBE\u7F6E\u7EB5\u5411\u65CB\u8F6C\u89D2\u5EA6\n * @param polar \u5F27\u5EA6\n */\n public setPolarAngle(polar: number, duration = 500) {\n if (duration === 0) {\n this.control.maxPolarAngle = polar;\n this.control.minPolarAngle = polar;\n this.control.update();\n this.control.maxPolarAngle = this.config.control.maxPolar;\n this.control.minPolarAngle = 0;\n return Promise.resolve();\n }\n return timeoutPromise(\n new Promise((resolve) => {\n const start = { polar: this.control.getPolarAngle() };\n const end = { polar };\n const tween = new Tween(start, this.tweenGroup)\n .to(end, duration)\n .onUpdate(() => {\n this.control.maxPolarAngle = start.polar;\n this.control.minPolarAngle = start.polar;\n this.control.update();\n })\n .onComplete(() => {\n this.control.enabled = true;\n this.control.maxPolarAngle = this.config.control.maxPolar;\n this.control.minPolarAngle = 0;\n this.tweenGroup.remove(tween);\n resolve(true);\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n /**\n * \u8BBE\u7F6E\u6A2A\u5411\u65CB\u8F6C\u89D2\u5EA6\n * @param azimuthal \u5F27\u5EA6\n */\n public setAzimuthalAngle(azimuthal: number, duration = 500) {\n const { maxAzimuthAngle, minAzimuthAngle } = this.control\n const disable = maxAzimuthAngle === minAzimuthAngle\n if (!disable) {\n if (azimuthal > maxAzimuthAngle && azimuthal < minAzimuthAngle) { return }\n }\n if (duration === 0) {\n this.control.maxAzimuthAngle = azimuthal;\n this.control.minAzimuthAngle = azimuthal;\n this.control.update();\n if (!disable) {\n this.control.maxAzimuthAngle = maxAzimuthAngle;\n this.control.minAzimuthAngle = minAzimuthAngle;\n }\n return\n }\n return timeoutPromise(\n new Promise((resolve) => {\n const start = { azimuthal: this.control.getAzimuthalAngle() };\n const end = { azimuthal };\n const tween = new Tween(start, this.tweenGroup)\n .to(end, duration)\n .onUpdate(() => {\n this.control.maxAzimuthAngle = start.azimuthal;\n this.control.minAzimuthAngle = start.azimuthal;\n this.control.update();\n })\n .onComplete(() => {\n this.control.enabled = true;\n if (!disable) {\n this.control.maxAzimuthAngle = maxAzimuthAngle;\n this.control.minAzimuthAngle = minAzimuthAngle;\n }\n this.tweenGroup.remove(tween);\n resolve(true);\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n getCameraLookAt() {\n return new Vector3().subVectors(this.control.target, this.camera.position);\n }\n\n /**\n * \u6309\u7167\u4E00\u4E2A\u4E2D\u5FC3\u70B9\u8BBE\u7F6E\u76F8\u673A\u7684\u653E\u5927\u7F29\u5C0F\n * @param zoom\n * @param center\n * @returns\n */\n public setZoom(zoom: number, center: Vector3, duration = 500) {\n const lookAtVector = this.getCameraLookAt();\n const start = {\n zoom: this.camera.zoom,\n target: this.control.target.clone(),\n };\n if (!duration) { \n this.camera.position.copy(center.clone().sub(lookAtVector));\n this.control.target.copy(center);\n this.camera.zoom = zoom;\n this.control.update()\n return\n }\n return timeoutPromise(\n new Promise((resolve) => {\n const tween = new Tween(start, this.tweenGroup)\n .to(\n {\n zoom,\n target: center,\n },\n duration\n )\n .onUpdate(() => {\n this.camera.position.copy(start.target.clone().sub(lookAtVector));\n this.control.target.copy(start.target);\n this.camera.zoom = start.zoom;\n this.control.update();\n })\n .onComplete(() => {\n this.tweenGroup.remove(tween);\n this.control.enabled = true;\n resolve(true)\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n getFitCameraToObjectZoom(\n object: Object3D,\n padding: [number, number, number, number] = [20, 20, 20, 20],\n duration = 500,\n force2DView = true, // \u5F3A\u5236\u8BA1\u7B972d\u89C6\u89D2\u7684\u5927\u5C0F\n ) { \n const [top, right, bottom, left] = padding;\n const { clientSize: { width, height } } = this;\n const polar = this.control.getPolarAngle()\n if (force2DView) {\n // \u83B7\u53D6\u57282D\u89C6\u56FE\u4E0B\u7684\u5927\u5C0F\n this.setPolarAngle(0, 0)\n }\n // \u83B7\u53D6\u7269\u4F53\u7684\u4E09\u7EF4\u76D2\u5B50\u5750\u6807\n const boundingBox = new Box3().setFromObject(object);\n this.setPolarAngle(polar, 0)\n const { max, min } = boundingBox;\n // \u9700\u8981\u83B7\u53D6\u5230box\u76844\u4E2A\u70B9\u7684\u5750\u6807\n const leftTop = new Vector3(min.x, max.y, max.z);\n const rightTop = new Vector3(max.x, max.y, max.z);\n const rightBottom = new Vector3(max.x, min.y, min.z);\n const leftBottom = new Vector3(min.x, min.y, min.z);\n // \u5750\u6807\u8F6C\u6210\u5C4F\u5E55\u5750\u6807\u5E76\u8BA1\u7B97\u51FA\u5360\u7528\u5C4F\u5E55\u5750\u6807\u7684\u5927\u5C0F\n const leftTop2d = vector3ToDevice(leftTop, this.camera, width, height);\n const rightTop2d = vector3ToDevice(rightTop, this.camera, width, height);\n const leftBottom2d = vector3ToDevice(leftBottom, this.camera, width, height);\n const rightBottom2d = vector3ToDevice(rightBottom, this.camera, width, height);\n const boundingBox2d = new Box2().setFromPoints([\n new Vector2(leftTop2d.x, leftTop2d.y),\n new Vector2(rightTop2d.x, rightTop2d.y),\n new Vector2(leftBottom2d.x, leftBottom2d.y),\n new Vector2(rightBottom2d.x, rightBottom2d.y),\n ]);\n const size = boundingBox2d.getSize(new Vector2());\n\n // \u8BA1\u7B97\u5728\u5C4F\u5E55\u4E0Ax,y\u65B9\u5411\u4E0A\u9700\u8981\u8C03\u6574\u7684\u500D\u6570\n const xScale = (width - right - left) / size.x;\n const yScale = (height - top - bottom) / size.y;\n const scale = Math.min(xScale, yScale);\n const center = new Vector3((max.x + min.x) / 2, (max.y + min.y) / 2, (max.z + min.z) / 2);\n return { zoom: scale * this.camera.zoom, center };\n }\n\n /**\n * \u653E\u5927\u76F8\u673A\u5230\u7269\u4F53\u5360\u5168\u5C4F\n * @param object\n * @param padding\n * @param duration\n * @returns\n */\n fitCameraToObject(\n object: Object3D,\n padding: [number, number, number, number] = [20, 20, 20, 20],\n duration = 500,\n force2DView = true, // \u5F3A\u5236\u8BA1\u7B972d\u89C6\u89D2\u7684\u5927\u5C0F\n ) {\n const { zoom, center } = this.getFitCameraToObjectZoom(object, padding, duration, force2DView)\n return this.setZoom(zoom, center, duration);\n }\n\n getFitCameraToGroundZoom(padding: [number, number, number, number] = [20, 20, 20, 20], duration = 500, force2DView = true) {\n if (this.currentFloor && this.currentFloor.hasElement) {\n return this.getFitCameraToObjectZoom(this.currentFloor.groundUpper, padding, duration, force2DView).zoom;\n }\n }\n\n fitCameraToGround(padding: [number, number, number, number] = [20, 20, 20, 20], duration = 500, force2DView = true) { \n if (this.currentFloor && this.currentFloor.hasElement) {\n return this.fitCameraToObject(this.currentFloor.groundUpper, padding, duration, force2DView);\n } else {\n return Promise.resolve(false);\n }\n }\n\n /**\n * \u4FEE\u6539\u76F8\u673A\u4F4D\u7F6E\n * @param position \u4FEE\u6539\u540E\u7684\u76F8\u673A\u7684\u4F4D\u7F6E\n * @param duration \u52A8\u753B\u6301\u7EED\u65F6\u95F4\n */\n public setCameraPosition(position: Vector3, duration: number) {\n return timeoutPromise(\n new Promise((resolve) => {\n const start = this.camera.position.clone();\n const lookAtVector = this.getCameraLookAt();\n const tween = new Tween(start, this.tweenGroup)\n .to(position, duration)\n .onUpdate(() => {\n this.camera.position.copy(start.clone().sub(lookAtVector));\n this.control.target.copy(start.clone());\n this.control.update();\n })\n .onComplete(() => {\n this.tweenGroup.remove(tween);\n this.camera.position.copy(start.clone().sub(lookAtVector));\n this.control.target.copy(position.clone());\n this.control.update();\n this.control.enabled = true;\n resolve(true);\n })\n .onStart(() => {\n this.control.enabled = false;\n })\n .start();\n }),\n duration + 500\n );\n }\n\n render() {\n // console.log(\"render\")\n this.renderer.render(this.scene, this.camera);\n this.dispatchEvent({ type: \"update\" });\n this.renderRf = this.timer.requestAnimationFrame(() => {\n this.render();\n });\n this.tweenGroup.update();\n }\n\n pauseRender() { \n this.timer.cancelAnimationFrame(this.renderRf)\n }\n\n continueRender() {\n this.render()\n }\n\n dispose() {\n this.cameraBound.dispose()\n this.selection.dispose()\n this.hoverHelper.dispose()\n this.tweenGroup.getAll().forEach((item) => item.stop());\n this.tweenGroup.removeAll();\n this.unRegistryEvent();\n this.renderer.domElement.remove()\n this.timer.dispose();\n this.renderer.dispose();\n (this.lights.children as Light[]).forEach((light: Light) =>\n light.dispose()\n );\n this.materialFactory.dispose();\n this.textureFactory.dispose();\n dispose(this.scene);\n }\n}\n", "import { EventDispatcher } from \"three\";\nimport { Context } from \"../../context\";\nimport { Graphic, Poi } from \"../../elements\";\nimport { BoxSelection } from \"./box-selection\";\nimport { isControl, isMac } from \"../../utils\";\n\ninterface SelectionEventMap {\n \"select\": {\n graphics: Graphic[],\n isMultipleSelect: boolean,\n }\n}\n\nexport class Selection extends EventDispatcher<SelectionEventMap> {\n public _list = new Set<Graphic>()\n\n public boxSelection: BoxSelection;\n public prevPanStatus?: boolean;\n public prevRotateStatus?: boolean;\n public downPoint: { x: number, y: number } | null = null\n\n public isMultipleSelect = false;\n\n constructor(public context: Context) {\n super()\n this.boxSelection = new BoxSelection(context)\n this.boxSelection.setEnable(false)\n this.registryEvent()\n }\n\n get list() {\n return this._list\n }\n\n enableBoxSelection() { \n if (this.isMultipleSelect) { return }\n this.isMultipleSelect = true;\n this.boxSelection.setEnable(true)\n this.prevPanStatus = this.context.control.enablePan\n this.prevRotateStatus = this.context.control.enableRotate\n this.context.control.enablePan = false\n this.context.control.enableRotate = false\n }\n\n disableBoxSelection() { \n if (this.isMultipleSelect) { \n this.isMultipleSelect = false;\n this.boxSelection.setEnable(false)\n this.context.control.enablePan = !!this.prevPanStatus\n this.context.control.enableRotate = !!this.prevRotateStatus\n }\n }\n\n onPointerDown = (e: PointerEvent) => {\n this.downPoint = { x: e.offsetX, y: e.offsetY }\n }\n\n onPointerUp = (e: PointerEvent) => {\n if (!this.downPoint) { return }\n const { offsetX, offsetY } = e\n const { x, y } = this.downPoint\n if (Math.sqrt((x - offsetX) ** 2 + (y - offsetY) ** 2) > 3) {\n return\n }\n const { graphics } = this.context.getGraphicsByDeviceXy(offsetX, offsetY)\n const graphicIdSet = new Set(graphics.map(item => item.options.id))\n const pois = this.context.getPoisByDeviceXy(offsetX, offsetY) as Poi[];\n pois.forEach(item => { \n if (!graphicIdSet.has(item.options.id)) {\n const graphic = this.context.currentFloor?.graphicLayer.graphicMap.get(item.options.id) || null\n if (graphic && graphic.options.geometry.type === 'point') { \n graphics.push(graphic)\n graphicIdSet.add(item.options.id)\n }\n }\n })\n if (!(isMac ? e.metaKey : e.ctrlKey)) {\n this._list.clear()\n }\n graphics.forEach(item => this._list.add(item))\n this.selectEnd()\n this.downPoint = null\n }\n\n onPointerOut = (e: PointerEvent) => { \n this.disableBoxSelection()\n }\n\n onKeyDown = (e: KeyboardEvent) => {\n if (isControl(e.key)) {\n this.enableBoxSelection()\n }\n }\n\n onKeyUp = (e: KeyboardEvent) => {\n if (isControl(e.key)) {\n this.disableBoxSelection()\n }\n }\n\n onBoxSelected = ({ list }: { list: Graphic[] }) => { \n this._list.clear()\n list.forEach(item => {\n this._list.add(item)\n })\n this.selectEnd()\n }\n\n selectEnd() {\n this.dispatchEvent({type: \"select\", graphics: [...this._list], isMultipleSelect: this.isMultipleSelect})\n }\n\n registryEvent() {\n this.context.container.addEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.addEventListener(\"pointerup\", this.onPointerUp)\n this.context.container.addEventListener(\"pointerout\", this.onPointerOut)\n this.context.container.addEventListener(\"pointercancel\", this.onPointerOut)\n window.addEventListener(\"keydown\", this.onKeyDown)\n window.addEventListener(\"keyup\", this.onKeyUp)\n this.boxSelection.addEventListener(\"selected\", this.onBoxSelected)\n }\n\n unRegistryEvent() {\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.removeEventListener(\"pointerup\", this.onPointerUp)\n this.context.container.removeEventListener(\"pointerout\", this.onPointerOut)\n this.context.container.removeEventListener(\"pointercancel\", this.onPointerOut)\n window.removeEventListener(\"keydown\", this.onKeyDown)\n window.removeEventListener(\"keyup\", this.onKeyUp)\n this.boxSelection.removeEventListener(\"selected\", this.onBoxSelected)\n }\n\n clear() {\n this._list.clear()\n }\n\n remove(graphic: Graphic) { \n this._list.delete(graphic)\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}", "import {\n Object3D,\n ExtrudeGeometry,\n Mesh,\n Box3,\n MeshBasicMaterial,\n Raycaster,\n Object3DEventMap,\n Vector3,\n BufferGeometry,\n LineBasicMaterial,\n LineSegments,\n ShaderMaterial,\n Ray,\n} from \"three\";\nimport { initShape, proxyOptions, darkenColor } from \"../utils\";\nimport { GraphicOptions, PolygonGeometry } from \"src/types\";\nimport { Context } from \"../context\";\n\n// \u95E8\u7684\u7C7B\u578B\nconst DoorType = {\n single: \"\u5355\u5F00\u95E8\",\n double: \"\u53CC\u5F00\u95E8\",\n move: \"\u79FB\u52A8\u95E8\",\n};\n\n// \u95E8\u7684\u6750\u8D28\nconst DoorMaterial = {\n wood: \"\u6728\u95E8\",\n glass: \"\u73BB\u7483\u95E8\",\n aluminum: \"\u94DD\u5408\u91D1\u95E8\",\n};\n\n// \u5355\u4E2A\u95E8\u7684\u914D\u7F6E\nexport interface Door {\n // \u540D\u79F0\n name: string;\n id: string;\n width: number;\n // \u5185\u5F00/\u5916\u5F00\n open: boolean;\n // \u7C7B\u578B \u5355\u5F00\u95E8 \u53CC\u5F00\u95E8 \u79FB\u52A8\u95E8\n type: keyof typeof DoorType;\n // \u6750\u8D28\n material: keyof typeof DoorMaterial;\n}\n\nexport type GraphicOptionsParam = Partial<GraphicOptions>;\n\nexport type GraphicEventMap = {\n [K in keyof GraphicOptions as `change-${K}`]: { value: GraphicOptions[K] };\n} & Object3DEventMap;\n\nexport const defaultGraphicOptions: GraphicOptions = {\n id: \"\", // \u56FE\u5F62id\n height: 0.1, // \u56FE\u5F62\u9AD8\u5EA6\n airHeight: 0, // \u60AC\u7A7A\u9AD8\u5EA6\n area: 0, // \u9762\u79EF\n group: \"\", // \u5206\u7EC4\n fillColor: \"#EFF4FB\", // \u989C\u8272\n strokeColor: \"#ffffff\", // \u8FB9\u6846\n fillOpacity: 1, // \u900F\u660E\u5EA6\n strokeOpacity: 1, // \u63CF\u8FB9\u900F\u660E\u5EA6\n strokeWidth: 1, // \u63CF\u8FB9\u5BBD\u5EA6\n doors: [], // \u95E8\u914D\u7F6E\n locked: false,\n visible: true,\n geometry: {\n type: \"polygon\",\n cds: [],\n coords: [],\n curveCpt: [],\n curveIndex: [],\n },\n layerType: \"\",\n zIndex: 0,\n stroke: true,\n deltaHeight: 0,\n userData: {},\n gradualColor: [],\n renderType: \"single\",\n colorFactor: 0.9\n};\n\nexport class Graphic extends Object3D<GraphicEventMap> {\n public geometry!: ExtrudeGeometry;\n\n public material!: MeshBasicMaterial | MeshBasicMaterial[] | ShaderMaterial[] | ShaderMaterial;\n\n public mesh!: Mesh;\n\n public line!: LineSegments;\n\n public lineMaterial?: LineBasicMaterial;\n\n public lineGeometry?: BufferGeometry;\n\n public options: GraphicOptions;\n\n constructor(\n private context: Context,\n options: GraphicOptionsParam\n ) {\n super();\n this.options = proxyOptions<GraphicOptions, GraphicEventMap>(\n { ...defaultGraphicOptions, ...options },\n this\n );\n if (this.options.geometry.type === \"point\") {\n const [x, y] = this.options.geometry.coords;\n this.position.set(x, y, this.options.height + this.options.airHeight);\n return this;\n }\n this.init();\n this.visible = this.options.visible;\n this.addEventListener(\"change-fillColor\", ({ value }) => {\n this.initMaterial();\n this.initMesh();\n });\n this.addEventListener(\"change-fillOpacity\", ({ value }) => {\n this.initMaterial();\n this.initMesh();\n });\n this.addEventListener(\"change-height\", ({ value }) => {\n this.dispose();\n this.init();\n });\n this.addEventListener(\"change-strokeColor\", ({ value }) => {\n if (!this.options.stroke) {\n return;\n }\n this.initLineMaterial();\n this.createBorder();\n });\n this.addEventListener(\"change-strokeOpacity\", ({ value }) => {\n if (!this.options.stroke) {\n return;\n }\n this.initLineMaterial();\n this.createBorder();\n });\n // this.addEventListener('change-strokeWidth', ({ value }) => {\n // this.initLineMaterial();\n // this.createBorder();\n // })\n this.addEventListener(\"change-airHeight\", ({ value }) => {\n this.position.z = value;\n });\n this.addEventListener(\"change-visible\", ({ value }) => {\n this.visible = value;\n });\n this.addEventListener(\"change-stroke\", ({ value }) => {\n if (value) {\n if (this.line) {\n return;\n }\n this.initLineGeometry();\n this.initLineMaterial();\n this.createBorder();\n } else if (this.line) {\n this.remove(this.line);\n this.lineGeometry?.dispose();\n }\n });\n this.addEventListener(\"change-renderType\", () => {\n this.initMaterial();\n this.initMesh();\n })\n this.addEventListener(\"change-gradualColor\", () => {\n this.initMaterial();\n this.initMesh();\n })\n }\n\n getCenter() {\n if (this.options.geometry.type === \"point\") {\n return this.position.clone();\n }\n const center = new Vector3();\n const box = new Box3();\n box.setFromObject(this);\n box.getCenter(center);\n return center;\n }\n\n getSize() {\n if (this.options.geometry.type === \"point\") {\n return new Vector3(0, 0, 0);\n }\n const box = new Box3();\n const size = new Vector3();\n box.setFromObject(this);\n box.getSize(size);\n return size;\n }\n\n getPosition() {\n const center = this.getCenter();\n center.setZ(center.z + this.options.height / 2);\n return center;\n }\n\n init() {\n this.geometry = this.initGeometry();\n this.initMaterial();\n this.initMesh();\n this.mesh.position.z = this.options.airHeight + this.options.deltaHeight;\n if (this.options.stroke) {\n // \u521B\u5EFA\u8FB9\u6846\n this.initLineMaterial();\n this.initLineGeometry();\n this.createBorder();\n }\n }\n\n initGeometry() {\n const shape = initShape(\n (this.options.geometry as PolygonGeometry).coords[0],\n (this.options.geometry as PolygonGeometry).coords.slice(1)\n );\n const geometry = new ExtrudeGeometry(shape, {\n steps: 1,\n bevelEnabled: false,\n depth: this.options.height,\n curveSegments: 4,\n });\n return geometry;\n }\n\n initSingleMaterial() {\n const material = this.context.materialFactory.createMeshBasicMaterial({\n color: this.options.fillColor,\n opacity: this.options.fillOpacity,\n });\n if (this.options.height <= 0.1) {\n this.material = material;\n return material;\n }\n const material1 = this.context.materialFactory.createMeshBasicMaterial({\n color: darkenColor(this.options.fillColor),\n opacity: this.options.fillOpacity,\n });\n this.material = [material, material1];\n return [material, material1];\n }\n\n // createMesh(pos: Vector3, color = 0xff0000) { \n // const geometry = new BoxGeometry(1, 1, 1)\n // const material = new MeshBasicMaterial({ color })\n // const mesh = new Mesh(geometry, material)\n // mesh.position.copy(pos)\n // this.context.scene.add(mesh)\n // }\n\n // createLine(points: Vector3[], color = 0xff0000) {\n // const material = new LineBasicMaterial({\n // color: color\n // });\n // const geometry = new BufferGeometry().setFromPoints(points);\n // const line = new Line( geometry, material );\n // this.context.scene.add(line)\n // }\n\n getMaxAndMin(pos: Vector3, dir: Vector3) {\n const box = new Box3().setFromObject(this)\n const minOrigin = pos.clone().add(dir.clone().multiplyScalar(1000))\n const raycaster = new Ray(minOrigin, dir.clone().multiplyScalar(-1));\n const min = new Vector3()\n raycaster.intersectBox(box, min);\n const maxOrigin = pos.clone().add(dir.clone().multiplyScalar(-1000))\n const raycaster2 = new Ray(maxOrigin, dir.clone());\n const max = new Vector3()\n raycaster2.intersectBox(box, max);\n return {\n max, min\n }\n }\n\n initGradualMaterial() { \n const { max, min } = new Box3().setFromObject(this)\n const _max = max.clone().sub(min)\n const maxValue = Math.max(_max.x, _max.y, _max.z) / 2\n const pos = this.getPosition();\n const dir = new Vector3(-1.0, 0.2, 0.0).normalize()\n const { max: __max, min: _min } = this.getMaxAndMin(pos, dir)\n\n const material = this.context.materialFactory.createShaderMaterial({\n gradualColor: this.options.gradualColor,\n center: this.getPosition(),\n maxValue,\n opacity: this.options.fillOpacity,\n direction: new Vector3(-1.0, 0.2, 0.0),\n max: __max,\n min: _min\n })\n if (this.options.height <= 0.1) {\n this.material = material;\n return material;\n }\n\n const center = this.getCenter();\n const dir2 = new Vector3(-1.0, 0.2, 1.0).normalize()\n const { max: ___max, min: __min } = this.getMaxAndMin(center, dir2)\n const material1 = this.context.materialFactory.createShaderMaterial({\n gradualColor: [darkenColor(this.options.gradualColor[0], this.options.colorFactor), darkenColor(this.options.gradualColor[1], this.options.colorFactor)],\n center: this.getCenter(),\n maxValue,\n opacity: this.options.fillOpacity,\n direction: new Vector3(-1.0, 0.2, 1.0),\n max: ___max,\n min: __min\n })\n\n this.material = [material, material1];\n return [material, material1];\n }\n\n initMaterial() {\n if (this.options.renderType === 'gradual') { \n return this.initGradualMaterial()\n } else {\n return this.initSingleMaterial()\n }\n }\n\n initLineMaterial() {\n const lineMaterial = this.context.materialFactory.createLineMaterial({\n color: this.options.strokeColor,\n opacity: this.options.strokeOpacity,\n });\n this.lineMaterial = lineMaterial;\n return lineMaterial;\n }\n\n initMesh() {\n if (this.mesh) {\n this.remove(this.mesh);\n }\n this.mesh = new Mesh(this.geometry, this.material);\n this.add(this.mesh);\n }\n\n getBorderPoints() {\n const points = [];\n const height = this.options.height + this.options.deltaHeight;\n // \u70B9\u7684\u5750\u6807\u8981\u81EA\u5DF1\u7B97\uFF0C\u53EA\u753B\u5173\u952E\u8282\u70B9\u7684\u5782\u76F4\u7EBFcurveIndex\u662F\u5173\u952E\u8282\u70B9,\u5982\u679C\u662F\u66F2\u7EBF\u6709\u8FD9\u4E2A\u503C\uFF0C\u4E0D\u662F\u66F2\u7EBF\u4E0D\u4E00\u5B9A\u6709\n const { coords } = this.options.geometry as PolygonGeometry;\n for (let j = 0; j < coords.length; j++) {\n const curCds = coords[j];\n for (let i = 0; i < curCds.length; i++) {\n const cur = curCds[i];\n const next = i + 1 === curCds.length ? curCds[0] : curCds[i + 1];\n // \u628A\u62C9\u5347\u4E0A\u53BB\u7684\u70B9\u653E\u8FDB\u53BB\n points.push(new Vector3(cur[0], cur[1], height));\n points.push(new Vector3(next[0], next[1], height));\n }\n }\n return points;\n }\n\n initLineGeometry() {\n if (this.lineGeometry) {\n this.lineGeometry.dispose();\n }\n const points = this.getBorderPoints();\n const lineGeometry = new BufferGeometry().setFromPoints(points);\n this.lineGeometry = lineGeometry;\n }\n\n createBorder() {\n if (this.line) {\n this.remove(this.line);\n }\n const line = new LineSegments(this.lineGeometry, this.lineMaterial);\n line.position.z = this.options.airHeight + 0.01;\n this.line = line;\n this.add(line);\n return line;\n }\n\n raycast(raycaster: Raycaster) {\n if (!this.visible) {\n return false;\n }\n if (this.options.geometry.type === \"point\") {\n return false;\n }\n this.mesh.updateMatrixWorld(true)\n const intersects = raycaster.intersectObject(this.mesh);\n if (intersects[0]) {\n const { point: position, distance } = intersects[0];\n return { position, distance };\n }\n return false;\n }\n\n dispose() {\n this.geometry?.dispose();\n this.line?.geometry.dispose();\n this.clear();\n }\n}\n", "import {\n Object3D, PlaneGeometry, DirectionalLight,\n Mesh, MeshStandardMaterial, ShadowMaterial, Color, Vector3, DoubleSide\n} from 'three';\nimport { dispose, initDirectionalLight } from '../utils'\n\nexport class Shadow extends Object3D {\n\n public directionalLight: DirectionalLight\n\n public plane!: Mesh\n\n public basicOpacity = 0.07\n\n constructor() {\n super()\n this.directionalLight = this.initLight()\n this.initPlane()\n }\n\n // \u521B\u5EFA\u5149\u6E90\n initLight() { \n const directionalLight = initDirectionalLight(0xffffff, 0.5)\n directionalLight.position.set(0, 0, 100);\n this.add(directionalLight);\n return directionalLight\n }\n \n changeLightCamera(size: Vector3) {\n const x = size.x\n const y = size.y\n this.directionalLight.shadow.camera.left = -x;\n this.directionalLight.shadow.camera.right = x;\n this.directionalLight.shadow.camera.top = y;\n this.directionalLight.shadow.camera.bottom = -y;\n this.directionalLight.shadow.camera.near = 0.5;\n this.directionalLight.shadow.camera.far = Math.max(x, y);\n }\n\n changeLightColor(color: number | string) {\n this.directionalLight.color = new Color(color)\n }\n\n setPosition(position: Vector3) {\n this.position.copy(position)\n this.directionalLight.position.set(-position.x / 2, -position.y / 2, 100)\n }\n\n // \u521B\u5EFA\u5E73\u9762\u767D\u8272\n initPlane(width = 1000, height = 1000) { \n const geometry = new PlaneGeometry(width, height)\n const material = new ShadowMaterial({\n transparent: true,\n opacity: 0,\n side: DoubleSide\n })\n const mesh = new Mesh(geometry, material)\n mesh.receiveShadow = true\n mesh.position.z = -10\n this.add(mesh)\n this.plane = mesh\n return mesh\n }\n\n setTarget(target: Object3D) {\n this.directionalLight.target = target\n }\n\n transformOpacity(opacity: number): number {\n return opacity * this.basicOpacity\n }\n\n setOpacity(opacity: number) { \n (this.plane.material as MeshStandardMaterial).opacity = this.transformOpacity(opacity);\n }\n \n dispose() {\n dispose(this, true)\n }\n\n}", "import { proxyOptions, sleepOnePromise } from '../utils';\nimport { EventDispatcher, Object3D, Object3DEventMap, Vector3 } from 'three';\nimport { Context } from '../context'\nimport { Overlay } from './overlay';\n\nexport interface PoiOptions {\n texts: { text: string, styles?: { [key: string]: string }; }[];\n icon?: string;\n icon_size?: [number, number]; // \u5BBD \u9AD8\n icon_position?: 'top' | 'bottom' | 'center';\n level: number; // \u6E32\u67D3\u4F18\u5148\u7EA7\n collision_enable: boolean; // \u662F\u5426\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\n opacity: number;\n id: string; // poi\u7684key\n position: { x: number; y: number; z: number };\n icon_opacity: number;\n icon_border: { color: string, width: number };\n background: string;\n collision_hide_icon: boolean;\n built_in: boolean; // \u662F\u5426\u662F\u5185\u7F6E\u7684poi\n box_only_icon: boolean; // \u5305\u56F4\u76D2\u662F\u4E0D\u662F\u53EA\u5305\u542B\u56FE\u6807\n}\n\ntype PoiEventMap = {\n [K in keyof PoiOptions as `change-${K}`]: { value: PoiOptions[K] };\n} & Object3DEventMap;\n\nconst defaultOptions: PoiOptions = {\n texts: [{ text: \"\" }],\n level: 1,\n icon_position: 'bottom',\n collision_enable: true,\n opacity: 1,\n id: \"\",\n position: { x: 0, y: 0, z: 0 },\n icon_opacity: 1,\n icon_border: { color: \"#586EE0\", width: 0 },\n background: \"\",\n collision_hide_icon: true,\n built_in: false,\n box_only_icon: false\n}\n\nexport type PoiOptionsParam = Partial<PoiOptions>\n\nexport class Poi extends EventDispatcher<PoiEventMap> {\n\n public div!: HTMLDivElement\n\n public textDiv!: HTMLDivElement\n\n public img?: HTMLImageElement\n\n public overlay: Overlay\n\n public options: PoiOptions\n\n public visible = true\n\n size = { width: 0, height: 0 }\n\n position = new Vector3()\n\n userData: any = {};\n\n showTextStatus = true\n\n disposed = false\n\n constructor(private context: Context, options: PoiOptionsParam) {\n super()\n this.options = proxyOptions<PoiOptions, PoiEventMap>({...defaultOptions, ...options}, this)\n this.position.set(options.position?.x || 0, options.position?.y || 0, options.position?.z || 0)\n this.overlay = new Overlay(this.context, { autoUpdate: false })\n this.overlay.addEventListener(\"update-position\", ({ x, y, height }) => { \n this.overlay.div.style.transform = `translate3d(calc(${x}px - 50%), calc(${-height + y}px - ${this.options.icon && this.options.icon_position !== 'center' ? '100%' : '50%'}), 0)`;\n })\n this.overlay.bindElement(this as unknown as Object3D)\n this.registryEvent()\n this.initDiv()\n this.addEventListener(\"change-icon\", ({ value }) => {\n if (value) {\n if (!this.img) {\n this.addIcon()\n this._changePosition()\n } else {\n this.img.setAttribute('src', value)\n }\n } else {\n this.img && this.div.removeChild(this.img)\n this.img = undefined\n this._changePosition()\n this.resetSize()\n }\n })\n this.addEventListener(\"change-texts\", ({ value }) => {\n const div = this.textDiv\n if (div) {\n const text = this.initText()\n this.div.replaceChild(text, div)\n } else {\n this.addText()\n }\n this.resetSize()\n })\n this.addEventListener(\"change-opacity\", ({ value }) => {\n this.overlay.setOpacity(value)\n })\n this.addEventListener(\"change-icon_size\", ({ value }) => {\n if (this.img) {\n this.img.style.width = `${value?.[0] || 32}px`\n this.img.style.height = `${value?.[1] || 32}px`\n this.resetSize()\n }\n })\n this.addEventListener(\"change-icon_opacity\", ({ value }) => {\n if (this.img) {\n this.img.style.opacity = `${value}`\n }\n })\n this.addEventListener(\"change-icon_border\", ({ value }) => {\n if (this.img) {\n this.img.style.border = `${value.width}px solid ${value.color}`\n }\n })\n this.addEventListener(\"change-background\", ({ value }) => {\n this.div.style.background = value;\n })\n }\n\n get withinDisplayRange() {\n return this.overlay.withinDisplayRange\n }\n\n async resetSize() {\n await sleepOnePromise()\n if (this.disposed) { return }\n if (this.options.box_only_icon) {\n if (!this.img) { return }\n const { width, height } = this.img.getBoundingClientRect()\n this.size = {\n width: width + 2, \n height: height + 2\n }\n } else {\n const { width, height } = this.div.getBoundingClientRect()\n this.size = {\n width: width + 2, \n height: height + 2\n }\n }\n }\n\n renderHelperBox() {\n // let div = this.helperDiv\n // if (!div) {\n // div = document.createElement('div')\n // this.context.container.appendChild(div)\n // }\n // const box = this.getBox()\n // div.style.cssText = `position: absolute; top: ${box.top}px;left: ${box.left}px;width: ${box.right - box.left}px;height: ${box.bottom - box.top}px;border: 1px solid red;`\n // this.helperDiv = div;\n }\n\n get clientPos() {\n return this.overlay.clientPos\n }\n\n initDiv() {\n const div = document.createElement(\"div\");\n this.div = div;\n this.addText()\n if (this.options.icon) { \n this.addIcon()\n }\n div.style.fontSize = `12px`;\n div.style.textShadow = `#fff 1px 0 0, #fff 0 1px 0, #fff -1px 0 0, #fff 0 -1px 0`;\n div.style.display = `flex`;\n div.style.flexDirection = `column`;\n div.style.justifyContent = `center`;\n div.style.alignItems = `center`;\n div.style.padding = \"4px\";\n this.overlay.setOpacity(this.options.opacity);\n this.overlay.div.style.pointerEvents = `none`;\n this.overlay.div.style.userSelect = `none`;\n this.overlay.div.appendChild(div)\n // this._changePosition()\n this.resetSize()\n return div\n }\n\n addIcon() { \n if (!this.img) {\n const icon = this.initIcon()\n if (this.options.icon_position === \"top\") {\n if (this.div.firstChild) {\n this.div.insertBefore(icon, this.div.firstChild)\n } else {\n this.div.appendChild(icon)\n }\n } else {\n this.div.appendChild(icon)\n }\n }\n }\n\n addText() { \n const text = this.initText()\n if (this.options.icon_position === \"top\") {\n this.div.appendChild(text)\n } else {\n if (this.div.firstChild) {\n this.div.insertBefore(text, this.div.firstChild)\n } else {\n this.div.appendChild(text)\n }\n }\n }\n\n getPosition() {\n return this.position\n }\n\n initText() {\n const textDiv = document.createElement(\"div\")\n textDiv.appendChild(this.createTextFragment())\n textDiv.style.textAlign = \"center\"\n this.textDiv = textDiv\n return textDiv\n }\n\n createTextFragment() { \n const f = document.createDocumentFragment()\n this.options.texts.forEach(item => { \n const div = document.createElement(\"div\")\n div.style.whiteSpace = 'nowrap';\n if (item.styles) { \n for (let [key, value] of Object.entries(item.styles)) { \n div.style[key as any] = value;\n }\n }\n div.textContent = item.text;\n f.appendChild(div)\n })\n return f\n }\n\n initIcon() {\n const img = document.createElement(\"img\")\n img.setAttribute(\"src\", this.options.icon!)\n img.style.width = `${this.options.icon_size?.[0] || 32}px`\n img.style.height = `${this.options.icon_size?.[1] || 32}px`\n img.style.opacity = `${this.options.icon_opacity}px`\n img.style.borderRadius = '50%';\n if (this.options.icon_border.width) {\n img.style.border = `${this.options.icon_border.width}px solid ${this.options.icon_border.color}`\n }\n img.onload = () => {\n // this._changePosition()\n this.resetSize()\n }\n this.img = img\n return img\n }\n\n private _changePosition = () => {\n this.overlay.updatePosition(true)\n }\n\n registryEvent() {\n // this.context.addEventListener('update', this._changePosition)\n }\n\n unRegistryEvent() {\n // this.context.removeEventListener('update', this._changePosition)\n }\n\n setVisible(visible: boolean) {\n if (visible === this.visible) { return }\n this.visible = visible\n this.changeOverlayVisible(visible)\n }\n\n changeOverlayVisible(visible: boolean) {\n if (visible === this.overlay.visible && this.options.collision_hide_icon) { return }\n if (this.options.collision_hide_icon) {\n this.overlay.visible = visible;\n this.overlay.div.style.visibility = visible ? \"visible\" : \"hidden\"\n } else {\n if (this.showTextStatus === visible) { return }\n this.textDiv.style.visibility = visible ? \"visible\" : \"hidden\"\n this.showTextStatus = visible\n }\n }\n\n parentSetVisible(visible: boolean) { \n if (!this.visible) { \n return\n }\n this.changeOverlayVisible(visible)\n // if (visible) {\n // this.renderHelperBox()\n // } else {\n // this.helperDiv?.remove()\n // this.helperDiv = null\n // }\n }\n\n getBox(boxScale = this.context.config.poi.boxScale) {\n const { width, height } = this.size\n const w = width * boxScale;\n const h = height * boxScale;\n const { x, y } = this.overlay.clientPos\n return {\n left: x - w / 2,\n right: x + w / 2,\n top: this.options.icon ? y - h : y - h / 2,\n bottom: this.options.icon ? y : y + h / 2,\n }\n }\n\n getOriginBox() { \n return this.getBox(1)\n }\n\n isContain(x: number, y: number) {\n if (!this.overlay.visible) { return false }\n if (!this.visible) {return false}\n const box = this.getOriginBox()\n return x >= box.left && x <= box.right && y >= box.top && y <= box.bottom\n }\n\n dispose() {\n this.unRegistryEvent();\n this.div = null as unknown as HTMLDivElement;\n this.textDiv = null as unknown as HTMLDivElement;\n this.img = undefined\n this.overlay.dispose();\n this.disposed = true\n }\n}", "import { Context } from \"../context\";\nimport { Box3, EventDispatcher, Object3D, Vector3 } from \"three\";\nimport { vector3ToDevice } from \"../utils\";\nimport { debounce } from \"lodash\";\nimport { Graphic } from \"./graphic\";\n\ninterface OverlayOptions {\n autoUpdate: boolean;\n appendToBody: boolean;\n autoChangePlacement: boolean;\n}\n\nconst defaultOptions: OverlayOptions = {\n autoUpdate: true,\n appendToBody: false,\n autoChangePlacement: false,\n};\n\ninterface OverlayEventMap {\n \"update-position\": {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n}\n\ntype Placement =\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"leftTop\"\n | \"rightTop\"\n | \"leftBottom\"\n | \"rightBottom\"\n | \"center\";\n\nexport class Overlay extends EventDispatcher<OverlayEventMap> {\n public div: HTMLDivElement;\n\n private element?: Object3D & { getPosition?: () => Vector3 };\n\n public position = new Vector3();\n\n clientPos = { x: 0, y: 0 };\n\n visible = true;\n\n public options: OverlayOptions;\n\n placement: Placement = \"top\";\n\n observer: MutationObserver | null = null;\n\n constructor(\n private context: Context,\n options: Partial<OverlayOptions> = {}\n ) {\n super();\n this.options = { ...defaultOptions, ...options };\n this.registryEvent();\n this.div = this.initDiv();\n if (this.options.appendToBody) {\n document.body.appendChild(this.div);\n } else {\n this.context.container.appendChild(this.div);\n }\n }\n\n initObserver() {\n const observer = new MutationObserver(\n debounce(() => {\n if (this.div) {\n this.usePlacement();\n }\n }, 100)\n );\n observer.observe(this.div, {\n childList: true,\n subtree: true,\n attributes: true,\n });\n this.observer = observer;\n }\n\n getPlacementPosition(): Record<Placement, Vector3> {\n if (this.element instanceof Graphic && this.element.options.geometry.type === \"polygon\") {\n const { max, min } = new Box3().setFromObject(this.element!);\n const centerX = (max.x + min.x) / 2;\n const centerY = (max.y + min.y) / 2;\n return {\n left: new Vector3(min.x, centerY, max.z),\n leftTop: new Vector3(min.x, max.y, max.z),\n top: new Vector3(centerX, max.y, max.z),\n rightTop: new Vector3(max.x, max.y, max.z),\n right: new Vector3(max.x, centerY, max.z),\n rightBottom: new Vector3(max.x, min.y, max.z),\n bottom: new Vector3(centerX, min.y, max.z),\n leftBottom: new Vector3(min.x, min.y, max.z),\n center: new Vector3(centerX, centerY, max.z),\n };\n }\n const {x, y, z} = this.element?.getPosition?.() || this.position\n return {\n left: new Vector3(x, y, z),\n leftTop: new Vector3(x, y, z),\n top: new Vector3(x, y, z),\n rightTop: new Vector3(x, y, z),\n right: new Vector3(x, y, z),\n rightBottom: new Vector3(x, y, z),\n bottom: new Vector3(x, y, z),\n leftBottom: new Vector3(x, y, z),\n center: new Vector3(x, y, z),\n };\n }\n\n getPlacementScreenPosition(): Record<Placement, { x: number; y: number }> {\n const { width, height } = this.context.clientSize;\n const positions = this.getPlacementPosition();\n return Object.keys(positions).reduce((obj, key) => {\n const { x, y } = vector3ToDevice(\n (positions as any)[key],\n this.context.camera,\n width,\n height\n );\n (obj as any)[key] = { x, y };\n return obj;\n }, {}) as Record<Placement, { x: number; y: number }>;\n }\n\n // \u68C0\u67E5\u662F\u4E0D\u662F\u6EA2\u51FA\u4E86context.container\n // @return true \u8868\u793A\u6CA1\u6709\u6EA2\u51FA\n checkOverflow(\n max: { x: number; y: number },\n min: { x: number; y: number }\n ): boolean {\n const { width, height } = this.context.clientSize;\n return min.x > 0 && max.x < width && min.y < height && max.y > 0;\n }\n\n // \u8BA1\u7B97\u9002\u7528\u7684placement\n getPlacement(): { type: Placement, position: { x: number, y: number } } {\n const { clientWidth, clientHeight } = this.div;\n const positions = this.getPlacementScreenPosition();\n const halfWidth = clientWidth / 2;\n const halfHeight = clientHeight / 2;\n const placements: {\n type: Placement;\n getBox: (\n x: number,\n y: number\n ) => {\n max: { x: number; y: number };\n min: { x: number; y: number };\n };\n }[] = [\n {\n type: \"center\",\n getBox(x: number, y: number) {\n return {\n max: { x: halfWidth + x, y: y - clientHeight },\n min: { x: x - halfWidth, y: y },\n };\n },\n },\n {\n type: \"left\",\n getBox(x, y) {\n return {\n max: { x: x, y: y - halfHeight },\n min: { x: x - clientWidth, y: y + halfHeight },\n };\n },\n },\n {\n type: \"leftTop\",\n getBox(x, y) {\n return {\n max: { x: x, y: y - clientHeight },\n min: { x: x - clientWidth, y: y },\n };\n },\n },\n {\n type: \"top\",\n getBox(x, y) {\n return {\n max: { x: x + halfWidth, y: y - clientHeight },\n min: { x: x - halfWidth, y: y },\n };\n },\n },\n {\n type: \"rightTop\",\n getBox(x, y) {\n return {\n max: { x: x + clientWidth, y: y - clientHeight },\n min: { x: x, y: y },\n };\n },\n },\n {\n type: \"right\",\n getBox(x, y) {\n return {\n max: { x: x + clientWidth, y: y - halfHeight },\n min: { x: x, y: y + halfHeight },\n };\n },\n },\n {\n type: \"rightBottom\",\n getBox(x, y) {\n return {\n max: { x: x + clientWidth, y: y },\n min: { x: x, y: y + clientHeight },\n };\n },\n },\n {\n type: \"bottom\",\n getBox(x, y) {\n return {\n max: { x: x + halfWidth, y: y },\n min: { x: x - halfWidth, y: y + clientHeight },\n };\n },\n },\n {\n type: \"leftBottom\",\n getBox(x, y) {\n return {\n max: { x: x, y: y },\n min: { x: x - clientWidth, y: y + halfHeight },\n };\n },\n },\n ];\n for (let i = 0; i < placements.length; i++) {\n const placement = placements[i];\n const position = positions[placement.type];\n const { max, min } = placement.getBox(position.x, position.y);\n if (this.checkOverflow(max, min)) {\n return {\n type: placement.type,\n position,\n };\n }\n }\n return {\n type: \"center\",\n position: positions.center\n };\n }\n\n initDiv() {\n const div = document.createElement(\"div\");\n div.style.position = \"absolute\";\n return div;\n }\n\n usePlacement() {\n const placement = this.getPlacement();\n this.div.className = `overlay_${placement.type}`;\n this._updatePosition(placement.position.x, placement.position.y)\n }\n\n bindElement(element: Object3D) {\n this.element = element;\n if (this.options.autoChangePlacement) {\n this.initObserver();\n // TODO\n // this.usePlacement();\n }\n this.onUpdate();\n }\n\n unBindElement() {\n this.element = undefined;\n }\n\n setVisible(visible: boolean, display = \"block\") {\n if (visible === this.visible) {\n return;\n }\n this.div.style.display = visible ? display : \"none\";\n this.visible = visible;\n }\n\n setOpacity(opacity: number) {\n this.div.style.opacity = `${opacity}`;\n }\n\n getPosition() {\n if (this.element) {\n if (typeof this.element.getPosition === \"function\") {\n return this.element.getPosition();\n }\n const box = new Box3().setFromObject(this.element);\n const center = box.getCenter(new Vector3());\n return center;\n } else {\n return this.position;\n }\n }\n\n get withinDisplayRange() {\n const { x, y } = this.clientPos;\n const { width, height } = this.context.clientSize;\n return x >= 0 && x <= width && y >= 0 && y <= height;\n }\n\n _updatePosition(x: number, y: number) { \n this.clientPos = { x, y };\n const { width, height, x: clientX, y: clientY } = this.context.clientSize;\n if (this.options.appendToBody) {\n this.div.style.left = `${clientX}px`;\n this.div.style.top = `${clientY + height}px`;\n }\n if (this.options.autoUpdate) {\n this.div.style.transform = `translate3d(${x}px, ${-height + y}px, 0)`;\n } else {\n this.dispatchEvent({ type: \"update-position\", x, y, width, height });\n }\n }\n\n updatePosition(force = false) {\n const vector = this.getPosition();\n const { width, height } = this.context.clientSize;\n const { x, y } = vector3ToDevice(\n vector,\n this.context.camera,\n width,\n height\n );\n if (this.clientPos.x === x && this.clientPos.y === y && !force) {\n return;\n }\n this._updatePosition(x, y)\n }\n\n onUpdate = () => {\n if (this.options.autoChangePlacement) { \n this.usePlacement();\n } else {\n this.updatePosition();\n }\n };\n\n registryEvent() {\n this.context.addEventListener(\"update\", this.onUpdate);\n }\n\n unRegistryEvent() {\n this.context.removeEventListener(\"update\", this.onUpdate);\n }\n\n dispose() {\n this.unRegistryEvent();\n this.unBindElement();\n this.observer?.disconnect();\n this.div?.remove();\n this.div = null as unknown as HTMLDivElement;\n }\n}\n", "import { Context } from \"../context\";\nimport { Box3, Group, Object3D, Vector3 } from \"three\";\nimport { Graphic, GraphicOptionsParam } from \"./graphic\";\nimport { Shadow } from \"./shadow\";\nimport { PoiOptionsParam } from \"./poi\";\nimport { HeatmapDataParam, HeatmapElement } from './heatmap'\nimport { Model, ModelOptions } from \"./model\";\nimport { Layer, GraphicLayer, PoiLayer } from \"../layer\";\n\nexport class Floor extends Object3D {\n \n graphicLayer: GraphicLayer;\n\n poiLayer: PoiLayer;\n\n wallLayer: Layer;\n\n textureLayer: Layer;\n \n glbModelLayer: Layer;\n\n laneLayer: Layer;\n \n mergeGraphicLayer: Layer;\n\n grounds: Set<Graphic> = new Set();\n \n groundLayer: Layer;\n\n shadow = new Shadow();\n\n heatmap?: HeatmapElement;\n\n groundUpper = new Object3D();\n\n models = new Object3D()\n\n modelMap = new Map()\n\n groundMaxHeight = 0;\n\n name: string = \"\";\n\n key: string = \"\";\n\n constructor(public context: Context) {\n super()\n this.groundLayer = new Layer(this.context)\n this.graphicLayer = new GraphicLayer(this.context);\n this.poiLayer = new PoiLayer(this.context);\n this.wallLayer = new Layer(this.context);\n this.textureLayer = new Layer(this.context);\n this.glbModelLayer = new Layer(this.context);\n this.laneLayer = new Layer(this.context);\n this.mergeGraphicLayer = new Layer(this.context);\n this.groundUpper.add(this.graphicLayer)\n this.groundUpper.add(this.poiLayer)\n this.groundUpper.add(this.wallLayer)\n this.groundUpper.add(this.textureLayer)\n this.groundUpper.add(this.glbModelLayer)\n this.groundUpper.add(this.laneLayer)\n this.groundUpper.add(this.mergeGraphicLayer)\n this.add(this.groundUpper)\n this.add(this.groundLayer)\n this.add(this.models)\n }\n\n getPosition() { \n const box = new Box3().setFromObject(this)\n return box.getCenter(new Vector3())\n }\n\n createGround(options: GraphicOptionsParam) {\n // options.deltaHeight = 0.00001 * this.grounds.size\n const ground = new Graphic(this.context, options)\n this.addGrounds([ground])\n }\n\n addGrounds(grounds: Graphic[]) {\n grounds.forEach(ground => { \n if (!this.grounds.has(ground)) {\n ground.mesh.castShadow = true;\n this.grounds.add(ground)\n this.groundLayer.add(ground)\n }\n })\n this.changeGroundMaxHeight()\n }\n\n changeGroundMaxHeight() { \n const grounds = Array.from(this.grounds)\n this.groundMaxHeight = this.grounds.size > 0 ? Math.max(...grounds.map(ground => ground.options.height + ground.options.airHeight + ground.options.deltaHeight)) : 0\n this.groundUpper.position.z = this.groundMaxHeight\n }\n\n get hasElement() { \n return !!(this.grounds.size || this.graphicLayer.children.length)\n }\n\n getCenter() { \n return new Box3().setFromObject(this).getCenter(new Vector3())\n }\n \n addModel(options: ModelOptions) { \n const model = new Model(this.context, options)\n this.models.add(model)\n this.modelMap.set(options.id, model)\n return model\n }\n\n addShadow() { \n const box = new Box3().setFromObject(this.groundUpper)\n const center = box.getCenter(new Vector3())\n const size = box.getSize(new Vector3())\n this.shadow.setPosition(center)\n this.shadow.changeLightCamera(size)\n // this.add(this.shadow)\n }\n\n addGraphic(graphicOptions: GraphicOptionsParam) {\n return this.graphicLayer.createGraphic(graphicOptions)\n }\n\n addPoi(poiOptions: PoiOptionsParam) {\n return this.poiLayer.createPoi(poiOptions)\n }\n\n addHeatmap(data: HeatmapDataParam) {\n if (!this.heatmap) {\n this.heatmap = new HeatmapElement(this.context)\n this.add(this.heatmap)\n }\n this.heatmap.loadData(data)\n const box = new Box3().setFromObject(this.graphicLayer)\n this.heatmap.position.setZ(box.max.z)\n return this.heatmap\n }\n\n removeHeatMap() {\n if (this.heatmap) {\n this.remove(this.heatmap)\n this.heatmap.dispose()\n this.heatmap = undefined\n }\n }\n\n setShadowOpacity(opacity: number) {\n this.shadow.setOpacity(opacity)\n }\n\n setShadowVisible(visible: boolean) {\n this.shadow.visible = visible;\n }\n\n dispose() {\n this.shadow.dispose();\n this.groundLayer.dispose()\n this.graphicLayer.dispose()\n this.poiLayer.dispose()\n this.wallLayer.dispose()\n this.textureLayer.dispose();\n this.glbModelLayer.dispose();\n this.laneLayer.dispose();\n this.mergeGraphicLayer.dispose();\n this.grounds.forEach(ground => ground.dispose())\n this.heatmap?.dispose()\n this.groundUpper.clear()\n this.models.children.forEach((model) => (model as unknown as Model).dispose())\n this.models.clear()\n this.modelMap.clear()\n this.clear()\n }\n\n}", "import { Context } from \"../context\";\nimport {\n MeshBasicMaterial, Object3D, PlaneGeometry,\n Texture, DoubleSide, Mesh, Matrix3, Vector2\n} from \"three\";\nimport { create, Heatmap, HeatmapData, DataPoint } from '@mars3d/heatmap.js'\nimport { featureCollection, point, bbox, center as getCenter } from '@turf/turf'\n\ntype V = 'value'\ntype X = 'x'\ntype Y = 'y'\n\nexport type HeatmapDataParam = HeatmapData<DataPoint<V, X, Y>>\n\nexport class HeatmapElement extends Object3D {\n\n public heatmap?: Heatmap<V, X, Y>;\n\n public div: HTMLDivElement\n\n public plane?: Mesh;\n\n constructor(public context: Context) {\n super()\n this.div = document.createElement(\"div\")\n }\n\n clearHeatmap() {\n if (this.div.firstChild) {\n this.div.removeChild(this.div.firstChild)\n }\n this.heatmap = undefined;\n }\n\n loadData(data: HeatmapDataParam) {\n this.clearHeatmap()\n const { width, height, leftTop, center } = this.getBox(data)\n this.heatmap = create({\n width: width,\n height: height,\n container: this.div,\n ...this.context.config.heatMap,\n } as any);\n this.heatmap.setData(this.transformData(data, leftTop))\n this.initPlane(width, height)\n this.position.set(center[0], center[1], this.position.z)\n }\n\n initPlane(width: number, height: number) {\n if (this.plane) { this.remove(this.plane) }\n const geometry = new PlaneGeometry(width, height)\n const texture = new Texture(this.div.firstChild as HTMLCanvasElement);\n texture.needsUpdate = true;\n const material = new MeshBasicMaterial({\n transparent: true,\n side: DoubleSide,\n map: texture,\n });\n material.needsUpdate = true;\n this.plane = new Mesh(geometry, material)\n this.add(this.plane)\n }\n\n getTransMatrix({ x, y }: { x: number, y: number }) {\n // \u5148\u628A\u5DE6\u4E0A\u89D2\u5E73\u79FB\u523000\u70B9\uFF0C\u7136\u540E\u5BF9y\u8F74\u53D6\u53CD\n return new Matrix3().makeScale(1, -1).multiply(new Matrix3().makeTranslation(0 - x, 0 - y))\n }\n\n /**\n * \u6240\u6709\u70B9\u7684\u5750\u6807\u51CF\u53BB\u5DE6\u4E0A\u89D2\u4ECE00\u70B9\u5F00\u59CB\u753Bcanvas\n * @param data \n * @param leftTop \n * @returns \n */\n transformData(data: HeatmapDataParam, leftTop: { x: number, y: number }): HeatmapDataParam {\n const matrix = this.getTransMatrix(leftTop)\n const $data = data.data.map(item => { \n const vector = new Vector2(item.x, item.y).applyMatrix3(matrix)\n return {\n x: vector.x,\n y: vector.y,\n value: item.value\n }\n })\n return {\n data: $data,\n max: data.max,\n min: data.min\n }\n }\n\n getBox(data: HeatmapDataParam) {\n const features = featureCollection(data.data.map(item => point([item.x, item.y])))\n // \u8FD4\u56DE\u4E00\u4E2A\u77E9\u5F62\u8FB9\u6846\u5750\u6807\n const box = bbox(features);\n const width = box[2] - box[0]\n const height = box[3] - box[1]\n const leftTop = { x: box[0], y: box[3] }\n const center = getCenter(features)\n return { width, height, leftTop, center: center.geometry.coordinates }\n }\n\n dispose() {\n this.div = null as unknown as HTMLDivElement\n this.heatmap = undefined\n }\n}", "import { Box3, Object3D, Vector3 } from \"three\";\nimport { Context } from \"../context\";\nimport { loadModel, dispose } from \"../utils\";\nimport { Poi } from \"./poi\";\nimport { GLTF } from \"three/examples/jsm/loaders/GLTFLoader\";\n\nexport interface ModelOptions {\n modelUrl: string;\n position?: Vector3;\n id: string;\n}\n\nexport class Model extends Object3D {\n\n model: GLTF | null = null\n\n constructor(public context: Context, private options: ModelOptions) {\n super()\n this.position.copy(options.position || new Vector3(0, 0, 0))\n this.loadModel()\n }\n \n async loadModel() { \n const object = await loadModel(this.options.modelUrl);\n object.scene.rotation.set(Math.PI / 2, Math.PI / 2, 0)\n this.add(object.scene)\n this.model = object\n }\n\n dispose() {\n dispose(this)\n this.model = null\n }\n}", "import { Graphic, GraphicOptionsParam } from \"../elements\";\nimport { Box3, Raycaster, Vector3 } from \"three\";\nimport { Layer } from \"./layer\";\nimport { Context } from \"../context\";\n\nexport class GraphicLayer extends Layer {\n\n graphicMap = new Map<string, Graphic>()\n\n constructor(context: Context) {\n super(context)\n }\n\n getCenter(): Vector3 { \n const box = new Box3().setFromObject(this)\n return box.getCenter(new Vector3())\n }\n\n createGraphic(options: GraphicOptionsParam) {\n // options.deltaHeight = 0.00001 * this.graphicMap.size;\n const graphic = new Graphic(this.context, options)\n this.add(graphic)\n this.graphicMap.set(options.id!, graphic)\n return graphic\n }\n\n removeGraphic(graphic: Graphic) { \n this.remove(graphic)\n this.graphicMap.delete(graphic.options.id!)\n graphic.dispose()\n }\n\n removeGraphicById(id: string) {\n if (this.graphicMap.has(id)) {\n this.removeGraphic(this.graphicMap.get(id)!)\n }\n }\n\n getGraphicByNodeId(id: string) {\n return this.graphicMap.get(id) || null\n }\n\n /**\n * \u83B7\u53D6\u5C04\u7EBF\u76F8\u4EA4\u7684\u5143\u7D20\n * @param raycaster \n */\n getGraphicByRaycaster(raycaster: Raycaster): { graphics: Graphic[], position: Vector3 | null } {\n const initData: {\n position: Vector3 | null,\n graphic: Graphic | null,\n distance: number\n } = { distance: 10000, graphic: null, position: null }\n const data = this.children.reduce((res, item) => {\n if (item instanceof Graphic) {\n const pos = item.raycast(raycaster)\n if (pos) {\n const { distance } = pos\n if (distance < res.distance) {\n return {\n distance: pos.distance,\n position: pos.position,\n graphic: item\n }\n }\n }\n return res\n } else {\n return res\n }\n }, initData)\n if (data === initData) {\n return { graphics: [], position: null }\n }\n return { graphics: [data.graphic!], position: data.position }\n }\n}", "import { Context } from \"../context\";\nimport { Object3D } from \"three\";\nimport { dispose } from '../utils'\n\nexport class Layer extends Object3D {\n constructor(public context: Context) {\n super();\n }\n\n dispose() {\n dispose(this)\n this.children.forEach(item => (item as any).dispose?.())\n this.clear()\n }\n}", "import { Poi, PoiOptionsParam } from \"../elements\";\nimport { Layer } from \"./layer\";\nimport { Context } from '../context'\nimport { debounce } from 'lodash'\nimport { Timer } from \"../utils\";\n\nexport class PoiLayer extends Layer {\n pois: Poi[] = []\n debounceCollisionDetection: () => void\n\n timer = new Timer()\n \n constructor(context: Context) {\n super(context)\n this.registryEvent()\n this.debounceCollisionDetection = debounce(this.collisionDetection, 10)\n }\n\n clear(force = false) {\n this.pois.forEach(item => {\n if (item.options.built_in && !force) { \n return\n }\n item.dispose()\n })\n this.pois = force ? [] : this.pois.filter(item => item.options.built_in)\n return this\n }\n\n createPoi(options: PoiOptionsParam) {\n const poi = new Poi(this.context, options)\n this.pushPoi(poi)\n poi.addEventListener(\"change-level\", () => this.changePoiLevelOrCollisionEnable(poi))\n poi.addEventListener(\"change-collision_enable\", () => this.changePoiLevelOrCollisionEnable(poi))\n Promise.resolve().then(() => { \n this.debounceCollisionDetection()\n })\n return poi\n }\n\n changePoiLevelOrCollisionEnable(poi: Poi) {\n const index = this.pois.findIndex(item => item === poi)\n if (index === -1) { return }\n this.pois.splice(index, 1)\n this.pushPoi(poi)\n }\n\n removePoi(poi: Poi) {\n const index = this.pois.findIndex(item => item === poi)\n if (index === -1) { return }\n this.pois.splice(index, 1)\n poi.dispose()\n }\n\n removePoiById(id: string) {\n const poi = this.pois.find(item => item.options.id === id)\n if (poi) {\n this.removePoi(poi)\n }\n }\n\n getPoiById(id: string) { \n const poi = this.pois.find(item => item.options.id === id)\n return poi || null\n }\n\n /**\n * \u4FDD\u5B58poi\u6309\u7167level\u6392\u5E8F\n * @param poi \n */\n pushPoi(poi: Poi) {\n // \u4E0D\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\u7684\u5728\u6700\u524D\u9762\n if (!poi.options.collision_enable) {\n this.pois.unshift(poi)\n return\n }\n // level\u6700\u5C0F\u7684\u5728\u6700\u540E\u9762\n if (poi.options.level === 0) {\n this.pois.push(poi)\n return\n }\n for (let i = 0; i < this.pois.length; i++) {\n const item = this.pois[i]\n // \u4E0D\u53C2\u4E0E\u78B0\u649E\u68C0\u6D4B\u7684\u5728\u524D\u9762\n if (!item.options.collision_enable) { \n continue\n }\n if (item.options.level <= poi.options.level) {\n this.pois.splice(i, 0, poi)\n return\n }\n }\n // \u63D2\u5165\u5230\u6700\u540E\n this.pois.push(poi) \n }\n\n getPoiByDeviceXy(x: number, y: number) {\n const pois = this.pois.filter(item => {\n return (item instanceof Poi) && item.isContain(x, y)\n })\n return pois\n }\n\n onUpdate = () => { \n this.timer.requestAnimationFrame(() => { \n this.collisionDetection()\n })\n }\n\n /**\n * \u78B0\u649E\u68C0\u6D4B\n */\n collisionDetection() {\n const range: { left: number; right: number; top: number; bottom: number; }[] = []\n // \u6392\u9664\u5728\u5C4F\u5E55\u5916\u7684poi\n const pois = this.pois.filter(item => item.visible && item.withinDisplayRange)\n pois.forEach((item, index) => {\n const { left, right, top, bottom } = item.getBox()\n if (index === 0 || !item.options.collision_enable) {\n range.push({ left, right, top, bottom })\n item.parentSetVisible(true)\n return\n }\n // valid boolean \u8868\u793A\u53D1\u751F\u4E86\u78B0\u649E\n const valid = range.some((box) => { \n // \u5224\u65AD\u56DB\u4E2A\u70B9\u662F\u4E0D\u662F\u90FD\u4E0D\u5728box\u7684\u8303\u56F4\u5185\n return box.left < right && box.right > left && box.top < bottom && box.bottom > top;\n })\n item.parentSetVisible(!valid)\n if (!valid) { \n range.push({ left, right, top, bottom })\n }\n })\n }\n\n registryEvent() {\n this.context.addEventListener('update', this.onUpdate)\n }\n\n unRegistryEvent() { \n this.context.removeEventListener('update', this.onUpdate)\n }\n \n dispose() {\n this.timer.dispose()\n this.pois.forEach(item => item.dispose())\n this.pois.length = 0;\n this.debounceCollisionDetection = () => { }\n super.dispose()\n this.unRegistryEvent()\n }\n}", "import { Context } from \"../context\";\nimport { EventDispatcher, Vector3 } from \"three\";\nimport { createSvg, vector3ToDevice } from '../utils'\n\nexport class BaseSvg<T extends {} = {}> extends EventDispatcher<T> {\n protected points: Vector3[] = [];\n\n protected svg: SVGElement;\n\n protected enable = true;\n\n constructor(public context: Context) {\n super()\n this.svg = createSvg(`${context.container.clientWidth}`, `${context.container.clientHeight}`)\n context.container.appendChild(this.svg)\n this._registryEvent()\n }\n\n private _onResize = ({ width, height }: { width: number; height: number }) => {\n if (this.svg) {\n this.svg.setAttribute(\"width\", `${width}`)\n this.svg.setAttribute(\"height\", `${height}`)\n }\n }\n\n private _registryEvent() {\n this.context.addEventListener(\"resize\", this._onResize)\n }\n\n private _unRegistryEvent() { \n this.context.removeEventListener(\"resize\", this._onResize)\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n if (enable) {\n this.svg.style.display = 'block';\n } else {\n this.svg.style.display = 'none';\n }\n }\n\n getIntersectByPointerEvent(e: PointerEvent) {\n const { camera, renderer } = this.context\n const { offsetX: x, offsetY: y } = e\n const { clientWidth, clientHeight } = renderer.domElement;\n const nx = x / clientWidth * 2 - 1;\n const ny = 1 - y / clientHeight * 2;\n\n const v = new Vector3(nx, ny, 0);\n\n return v.unproject(camera);\n }\n\n getSvgCoordinate(vector: Vector3) {\n const { camera, container } = this.context\n const coord = vector3ToDevice(vector, camera, container.clientWidth, container.clientHeight)\n return coord\n }\n \n dispose() {\n this._unRegistryEvent()\n this.context.container.removeChild(this.svg)\n this.svg = null as unknown as SVGElement\n }\n}", "import { Context } from \"../context\";\nimport { Vector3 } from \"three\";\nimport { setCirclePosition, createCircle, createLine, setLineStartEnd } from '../utils'\nimport { BaseSvg } from './base-svg'\n\ninterface SvgLineEventMap {\n 'distance': { distance: number }\n}\n\nexport class SvgLine extends BaseSvg<SvgLineEventMap> {\n\n public circles: SVGElement[] \n \n public line: SVGElement\n\n constructor(public context: Context) {\n super(context)\n const { config: { svg: { circle, line } } } = context\n this.circles = [createCircle(circle.radius, circle.fill), createCircle(circle.radius, circle.fill)]\n this.line = createLine(line.stroke)\n this.svg.appendChild(this.circles[0]);\n this.svg.appendChild(this.circles[1]);\n this.svg.appendChild(this.line);\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.addEventListener(\"pointermove\", this.onPointermove)\n this.context.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.addEventListener(\"pointerdown\", this.onPointerdown)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.context.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerdown)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (this.points[0]) {\n const point1 = this.getSvgCoordinate(this.points[0])\n setCirclePosition(this.circles[0], point1.x, point1.y)\n setLineStartEnd(this.line, point1)\n }\n if (this.points[1]) {\n const point2 = this.getSvgCoordinate(this.points[1])\n setCirclePosition(this.circles[1], point2.x, point2.y)\n setLineStartEnd(this.line, undefined, point2)\n }\n }\n \n \n onPointermove = (e: PointerEvent) => { \n // \u53EA\u5728\u6709\u7B2C\u4E00\u4E2A\u70B9\u7684\u65F6\u5019\u9700\u8981\n if (this.points.length !== 1) { return }\n this.line.style.display = \"block\";\n setLineStartEnd(this.line, undefined, { x: e.offsetX, y: e.offsetY })\n }\n \n onPointerleave = () => { \n if (this.points[1]) { return } // \u5982\u679C\u5DF2\u7ECF\u6709\u4E24\u4E2A\u70B9\u4E86\u5C31\u4E0D\u505A\u5904\u7406\n this.line.style.display = \"none\";\n }\n \n onPointerdown = (e: PointerEvent) => {\n if (this.points[1]) { return } // \u5982\u679C\u5DF2\u7ECF\u6709\u4E24\u4E2A\u70B9\u4E86\u5C31\u4E0D\u505A\u5904\u7406\n const point = this.getIntersectByPointerEvent(e)\n if (point) {\n const { offsetX: x, offsetY: y } = e\n // \u4FEE\u6539\u70B9\n const circle = this.circles[this.points.length]\n setCirclePosition(circle, x, y)\n if (!this.points.length) { \n // \u8BBE\u7F6E\u7EBF\u7684\u8D77\u59CB\u70B9\n setLineStartEnd(this.line, { x, y }, { x, y })\n }\n this.addPoint(point)\n }\n }\n\n addPoint(vector: Vector3) {\n this.points.push(vector)\n if (this.points.length >= 2) {\n const distance = this.calculatedDistance()\n this.dispatchEvent({ type: 'distance', distance })\n }\n }\n\n /**\n * \u8BA1\u7B97\u4E24\u4E2A\u70B9\u4E4B\u95F4\u7684\u8DDD\u79BB\n */\n calculatedDistance() { \n const [{ x: x1, y: y1 }, { x: x2, y: y2 }] = this.points\n return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)\n }\n \n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.line = null as unknown as SVGElement\n this.circles = []\n }\n}", "import { Context } from \"../context\";\nimport { BaseSvg } from \"./base-svg\";\nimport { setCirclePosition, setLineStartEnd, createLine, createCircle } from '../utils'\nimport { Vector3 } from \"three\";\n\ninterface SvgPolygonEventMap {\n 'area': { area: number }\n}\n\nexport class SvgPolygon extends BaseSvg<SvgPolygonEventMap> {\n\n public circles: SVGElement[] = []\n\n public lines: SVGElement[] = []\n\n public isClose = false\n\n constructor(context: Context) {\n super(context)\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n public get lastLine() {\n return this.lines.slice(-1)[0]\n }\n\n public addCircle(circle: SVGElement) {\n this.circles.push(circle)\n this.svg.appendChild(circle)\n }\n\n public addLine(line: SVGElement) {\n this.lines.push(line)\n this.svg.appendChild(line)\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.addEventListener(\"pointermove\", this.onPointermove)\n this.context.container.addEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.addEventListener(\"pointerdown\", this.onPointerdown)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerenter\", this.onPointermove)\n this.context.container.removeEventListener(\"pointermove\", this.onPointermove)\n this.context.container.removeEventListener(\"pointerleave\", this.onPointerleave)\n this.context.container.removeEventListener(\"pointerdown\", this.onPointerdown)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (this.points.length) {\n this.points.forEach((point, index) => {\n const devicePoint = this.getSvgCoordinate(point)\n if (this.circles[index]) {\n setCirclePosition(this.circles[index], devicePoint.x, devicePoint.y)\n }\n if (index !== 0) {\n setLineStartEnd(this.lines[index - 1], undefined, devicePoint)\n }\n if (this.lines[index]) {\n setLineStartEnd(this.lines[index], devicePoint)\n }\n }) \n }\n }\n \n \n onPointermove = (e: PointerEvent) => { \n // \u5FC5\u987B\u8981\u6709\u4E00\u4E2A\u70B9\u5E76\u4E14\u8FD8\u6CA1\u6709\u95ED\u5408\u624D\u9700\u8981\u5904\u7406\n if (!this.lastLine || this.isClose) { return }\n this.lastLine.style.display = \"block\";\n setLineStartEnd(this.lastLine, undefined, { x: e.offsetX, y: e.offsetY })\n }\n \n onPointerleave = () => { \n // \u5982\u679C\u5DF2\u7ECF\u95ED\u5408\u4E86\u5C31\u4E0D\u9700\u8981\u5904\u7406\u4E86\n if (this.isClose) { return } \n this.lastLine.style.display = \"none\";\n }\n \n onPointerdown = (e: PointerEvent) => {\n // \u5982\u679C\u5DF2\u7ECF\u95ED\u5408\u4E86\n if (this.isClose) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) {\n const { offsetX: x, offsetY: y } = e\n if (this.checkAdsorb(x, y)) {\n this.isClose = true\n this.addPoint(this.points[0])\n } else {\n this.addPoint(point)\n }\n const { circle: { fill, radius }, line: { stroke } } = this.context.config.svg\n if (!this.isClose) {\n // \u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u70B9\n const circle = createCircle(radius, fill)\n setCirclePosition(circle, x, y)\n this.addCircle(circle)\n }\n if (this.lines.length) {\n // \u5982\u679C\u5DF2\u7ECF\u6709\u4E00\u6761\u7EBF\u4E86 \u8981\u95ED\u5408\u8FD9\u6761\u7EBF\n setLineStartEnd(this.lastLine, undefined, { x, y })\n }\n // \u5982\u679C\u8FD9\u4E2A\u591A\u8FB9\u5F62\u8FD8\u6CA1\u6709\u95ED\u5408 \u5C31\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u7EBF \u5305\u62EC\u521B\u5EFA\u7B2C\u4E00\u6761\u7EBF\n if (!this.isClose) {\n const line = createLine(stroke)\n // \u8BBE\u7F6E\u7EBF\u7684\u8D77\u59CB\u70B9\n setLineStartEnd(line, { x, y }, { x, y })\n this.addLine(line)\n }\n }\n }\n\n /**\n * \u68C0\u6D4B\u662F\u5426\u53EF\u4EE5\u5438\u9644\n * \u5750\u6807\u70B9\u6700\u5C113\u4E2A \u4F20\u5165\u7684\u5750\u6807\u70B9\u548C\u7B2C\u4E00\u4E2A\u5750\u6807\u7684\u50CF\u7D20\u76F8\u5DEE\u4E0D\u8D85\u8FC75\u4E2A\u50CF\u7D20\n */\n checkAdsorb(x: number, y: number) {\n if (this.points.length < 3) { return false }\n const circle = this.circles[0]\n const cx = +circle.getAttribute(\"cx\")!\n const cy = +circle.getAttribute(\"cy\")!\n return Math.sqrt((x - cx) ** 2 + (y - cy) ** 2) <= 5\n }\n\n addPoint(vector: Vector3) {\n this.points.push(vector)\n if (this.isClose) {\n const area = this.calculatedArea()\n this.dispatchEvent({ type: 'area', area })\n }\n }\n // \u8BA1\u7B97\u9762\u79EF\n calculatedArea() {\n const cds = this.points.map(item => [item.x, item.y])\n let area = 0\n const numPoints = cds.length\n for (let i = 0; i < numPoints; i++) {\n const j = (i + 1) % numPoints\n area += (cds[i][0] * cds[j][1] - cds[j][0] * cds[i][1])\n }\n return Math.abs(area / 2)\n }\n\n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.lines = []\n this.circles = []\n }\n}", "import { Context } from \"../context\";\nimport { Box3 } from \"three\";\nimport { vector3ToDevice, createRect, setRectPosition } from '../utils'\nimport { BaseSvg } from './base-svg'\nimport { Graphic } from \"./graphic\";\n\ninterface SvgLineEventMap {\n 'distance': { distance: number }\n}\n\nexport class SelectBox extends BaseSvg<SvgLineEventMap> {\n\n public rect!: SVGElement\n\n public cornerRect: SVGElement[] = [] // \u56DB\u4E2A\u89D2\u4E0A\u7684\u65B9\u5757\n\n public centerRect: SVGElement[] = [] // \u56DB\u4E2A\u7EBF\u4E2D\u95F4\u7684\u65B9\u5757\n\n public graphic?: Graphic\n\n constructor(public context: Context) {\n super(context)\n const { config: { svg: { line } } } = context\n this.rect = createRect(line.stroke, \"transparent\")\n this.svg.appendChild(this.rect)\n for (let i = 0; i < 4; i++) {\n this.cornerRect[i] = createRect(line.stroke, \"#ffffff\")\n this.centerRect[i] = createRect(line.stroke, \"#ffffff\")\n this.svg.appendChild(this.cornerRect[i])\n this.svg.appendChild(this.centerRect[i])\n }\n this.registryEvent()\n }\n\n setEnable(enable: boolean) {\n super.setEnable(enable)\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n registryEvent() { \n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onUpdate = () => {\n if (!this.graphic) {\n setRectPosition(this.rect, 0, 0, 0, 0)\n for (let i = 0; i < this.cornerRect.length; i++) {\n setRectPosition(this.cornerRect[i], 0, 0, 0, 0)\n setRectPosition(this.centerRect[i], 0, 0, 0, 0)\n }\n } else {\n const box = new Box3().setFromObject(this.graphic)\n const { camera, container: { clientWidth: w, clientHeight: h } } = this.context\n const { min, max } = box\n const leftBottom = vector3ToDevice(min, camera, w, h)\n const rightTop = vector3ToDevice(max, camera, w, h)\n // \u753B\u51FA\u4E00\u4E2A\u6846\u6765\n setRectPosition(this.rect, leftBottom.x, rightTop.y, Math.abs(rightTop.x - leftBottom.x), Math.abs(rightTop.y - leftBottom.y))\n // \u56DB\u4E2A\u89D2\u7684\u4F4D\u7F6E\n const { x: left, y: bottom } = leftBottom\n const { x: right, y: top } = rightTop\n const halfWidth = 5;\n const corners = [\n { x: left - halfWidth, y: top - halfWidth }, // \u5DE6\u4E0A\u89D2\n { x: right - halfWidth, y: top - halfWidth }, // \u53F3\u4E0A\u89D2\n { x: left - halfWidth, y: bottom - halfWidth }, // \u5DE6\u4E0B\u89D2\n { x: right - halfWidth, y: bottom - halfWidth }, // \u53F3\u4E0B\u89D2 \n ]\n for (let i = 0; i < corners.length; i++) {\n setRectPosition(this.cornerRect[i], corners[i].x, corners[i].y, halfWidth * 2, halfWidth * 2)\n }\n // \u56DB\u4E2A\u4E2D\u95F4\u7684\u4F4D\u7F6E\n const centerHalfWidth = 4;\n const centerX = (left + right) / 2\n const centerY = (bottom + top) / 2\n const centers = [\n { x: centerX - centerHalfWidth, y: top - centerHalfWidth }, // \u4E0A\n { x: left - centerHalfWidth, y: centerY - centerHalfWidth }, // \u5DE6\n { x: right - centerHalfWidth, y: centerY - centerHalfWidth }, // \u53F3\n { x: centerX - centerHalfWidth, y: bottom - centerHalfWidth }, // \u4E0B\n ]\n for (let i = 0; i < centers.length; i++) {\n setRectPosition(this.centerRect[i], centers[i].x, centers[i].y, centerHalfWidth * 2, centerHalfWidth * 2)\n }\n }\n }\n \n selectGraphic(graphic: Graphic) { \n this.graphic = graphic\n }\n\n dispose() {\n super.dispose()\n this.unRegistryEvent()\n this.rect = null as unknown as SVGElement\n this.cornerRect = []\n this.centerRect = []\n }\n}", "import { PolygonGeometry } from \"../types\";\nimport { Context } from \"../context\";\nimport {\n BufferGeometry,\n Color,\n ExtrudeGeometry,\n LineBasicMaterial,\n LineSegments,\n Mesh,\n Object3D,\n ShaderMaterial,\n Vector3,\n} from \"three\";\nimport { darkenColor, initShape } from \"../utils\";\nimport { mergeGeometries } from \"three/examples/jsm/utils/BufferGeometryUtils\";\n\nexport interface WallOptions {\n id: string;\n height: number;\n fillColor: string;\n fillOpacity: number;\n strokeColor: string;\n strokeOpacity: number;\n geometry: PolygonGeometry;\n deltaHeight?: number;\n userData: Record<string, any>;\n}\n\nexport class Wall extends Object3D {\n public geometry?: BufferGeometry;\n\n public material?: ShaderMaterial;\n\n public lineMaterial?: LineBasicMaterial;\n\n public lineGeometry?: BufferGeometry;\n\n public Mesh?: Mesh;\n\n public LineMesh?: LineSegments;\n constructor(\n private context: Context,\n public options: WallOptions[]\n ) {\n super();\n if (!options.length) {\n return;\n }\n this.init();\n }\n\n initGeometry() {\n const geometries = this.options.map((option) => {\n const shape = initShape(\n option.geometry.coords[0],\n option.geometry.coords.slice(1)\n );\n const geometry = new ExtrudeGeometry(shape, {\n steps: 1,\n bevelEnabled: false,\n depth: option.height,\n curveSegments: 4,\n });\n return geometry;\n });\n // \u5408\u5E76geometry\n this.geometry = mergeGeometries(geometries);\n geometries.forEach((item) => item.dispose());\n }\n\n initMaterial() {\n // \u81EA\u5B9A\u4E49\u7684 ShaderMaterial\n const vertexShader = ` \n varying vec3 vPosition; // \u7528\u4E8E\u4F20\u9012\u9876\u70B9\u7684\u4F4D\u7F6E\u7ED9\u7247\u6BB5\u7740\u8272\u5668\n uniform float maxZ; // \u58F0\u660E\u4E00\u4E2Auniform\u53D8\u91CF\n uniform vec3 uColor;\n uniform vec3 uColor2; \n uniform float uOpacity; \n\n void main() { \n vPosition = position; // \u5411\u7247\u6BB5\u7740\u8272\u5668\u4F20\u9012\u4F4D\u7F6E \n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); \n } \n `;\n\n const fragmentShader = ` \n varying vec3 vPosition; // \u63A5\u6536\u9876\u70B9\u4F4D\u7F6E\n uniform float maxZ;\n uniform vec3 uColor;\n uniform vec3 uColor2;\n uniform float uOpacity; \n\n void main() { \n // \u5224\u65AD\u5F53\u524D\u9876\u70B9\u662F\u5426\u4E3A\u9876\u9762 \n if (vPosition.z >= maxZ) { \n gl_FragColor = vec4(uColor, uOpacity); //\uFF08\u9876\u9762\u989C\u8272\uFF09 \n } else { \n gl_FragColor = vec4(uColor2, uOpacity); // \u5176\u4ED6\u9762\u989C\u8272\uFF09 \n } \n } \n `;\n let maxZ = -Infinity; // \u521D\u59CB\u5316\u4E3A\u8D1F\u65E0\u7A77\n const positionAttribute = this.geometry!.getAttribute(\"position\");\n\n // \u904D\u5386\u6240\u6709\u9876\u70B9\n if (positionAttribute) {\n for (let i = 0; i < positionAttribute.count; i++) {\n const z = positionAttribute.getZ(i); // \u83B7\u53D6\u7B2C i \u4E2A\u9876\u70B9\u7684 z \u503C\n if (z > maxZ) {\n maxZ = z; // \u66F4\u65B0\u6700\u5927\u503C\n }\n }\n }\n\n // \u521B\u5EFA ShaderMaterial\n const shaderMaterial = new ShaderMaterial({\n uniforms: {\n maxZ: { value: maxZ }, // \u521D\u59CB\u5316maxZ\u7684\u503C\n uColor: { value: new Color(this.options[0].fillColor) }, // \u9876\u9762\u989C\u8272\n uColor2: { value: new Color(darkenColor(this.options[0].fillColor)) }, // \u4FA7\u9762\u989C\u8272\n uOpacity: { value: this.options[0].fillOpacity }, // \u900F\u660E\u5EA6\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n });\n this.material = shaderMaterial;\n }\n\n initLineMaterial() {\n const { strokeColor, strokeOpacity } = this.options[0];\n const lineMaterial = this.context.materialFactory.createLineMaterial({\n color: strokeColor,\n opacity: strokeOpacity,\n });\n this.lineMaterial = lineMaterial;\n return lineMaterial;\n }\n\n getBorderPoints(option: WallOptions) {\n const { height, deltaHeight, geometry } = option;\n const points = [];\n const _height = height + (deltaHeight || 0);\n // \u70B9\u7684\u5750\u6807\u8981\u81EA\u5DF1\u7B97\uFF0C\u53EA\u753B\u5173\u952E\u8282\u70B9\u7684\u5782\u76F4\u7EBFcurveIndex\u662F\u5173\u952E\u8282\u70B9,\u5982\u679C\u662F\u66F2\u7EBF\u6709\u8FD9\u4E2A\u503C\uFF0C\u4E0D\u662F\u66F2\u7EBF\u4E0D\u4E00\u5B9A\u6709\n const { coords } = geometry;\n for (let j = 0; j < coords.length; j++) {\n const curCds = coords[j];\n for (let i = 0; i < curCds.length; i++) {\n const cur = curCds[i];\n const next = i + 1 === curCds.length ? curCds[0] : curCds[i + 1];\n // \u628A\u62C9\u5347\u4E0A\u53BB\u7684\u70B9\u653E\u8FDB\u53BB\n points.push(new Vector3(cur[0], cur[1], _height));\n points.push(new Vector3(next[0], next[1], _height));\n }\n }\n return points;\n }\n\n initLineGeometry() {\n const geometries = this.options.map((option) => {\n const points = this.getBorderPoints(option);\n return new BufferGeometry().setFromPoints(points);\n });\n this.lineGeometry = mergeGeometries(geometries);\n }\n\n createBorder() {\n const line = new LineSegments(this.lineGeometry, this.lineMaterial);\n this.LineMesh = line;\n this.add(line);\n return line;\n }\n\n init() {\n this.initGeometry();\n this.initMaterial();\n const mesh = new Mesh(this.geometry, this.material);\n this.add(mesh);\n this.initLineMaterial();\n this.initLineGeometry();\n this.createBorder();\n }\n\n dispose() {\n this.geometry?.dispose();\n this.material?.dispose();\n this.lineGeometry?.dispose();\n this.clear();\n }\n}\n", "// \u8D34\u56FE\n\nimport { initShape, proxyOptions } from \"../utils\";\nimport { Context } from \"../context\";\nimport { Euler, ExtrudeGeometry, Mesh, MeshBasicMaterial, Object3D, Object3DEventMap, PlaneGeometry, Vector3 } from \"three\";\nimport { PolygonGeometry } from \"../types\";\n\nexport interface GroundTextureOptions {\n uuid: string;\n iconUrl: string;\n name: string;\n secondRotate: number;\n deltaHeight: number,\n airHeight: number;\n height: number;\n geometry: PolygonGeometry;\n opacity: number;\n visible: boolean;\n}\n\nexport const defaultOptions: GroundTextureOptions = {\n uuid: \"\",\n iconUrl: \"\",\n name: \"\",\n secondRotate: 0,\n airHeight: 0,\n deltaHeight: 0,\n height: 0,\n geometry: { cds: [], type: \"polygon\", coords: [], curveCpt: [], curveIndex: [] },\n opacity: 1,\n visible: true,\n};\n\ntype TextureEventMap = {\n [K in keyof GroundTextureOptions as `change-${K}`]: { value: GroundTextureOptions[K] };\n} & Object3DEventMap;\n\nexport type GroundTextureOptionsParam = Partial<GroundTextureOptions>;\n\nexport class GroundTexture extends Object3D {\n options: GroundTextureOptions;\n\n mesh?: Mesh;\n\n constructor(\n private context: Context,\n options: GroundTextureOptionsParam\n ) {\n super();\n this.options = proxyOptions<GroundTextureOptions, TextureEventMap>(\n { ...defaultOptions, ...options },\n this\n );\n this.init();\n }\n\n async init() { \n const { deltaHeight, airHeight, geometry, iconUrl, opacity } = this.options\n // \u521B\u5EFA\u4E00\u4E2A\u77E9\u5F62\u5E73\u9762\n const shape = initShape(\n geometry.coords[0],\n geometry.coords.slice(1)\n );\n const extrudeGeometry = new ExtrudeGeometry(shape, {\n steps: 1,\n bevelEnabled: false,\n depth: 0,\n curveSegments: 4,\n });\n const planeMaterial = await this.context.materialFactory.createGroundTextureMaterial({\n url: iconUrl,\n opacity: opacity,\n })\n const mesh = new Mesh(extrudeGeometry, planeMaterial)\n this.mesh = mesh\n this.mesh.position.z = airHeight + deltaHeight;\n this.add(mesh)\n }\n\n dispose() {\n this.mesh?.geometry.dispose()\n this.clear()\n }\n}\n", "import { Box3, Object3D, Vector3 } from \"three\";\nimport { Context } from \"../context\";\nimport { loadModel, dispose } from \"../utils\";\nimport { GLTF } from \"three/examples/jsm/loaders/GLTFLoader\";\nimport { PolygonGeometry } from \"src/types\";\n\nexport interface GlbModelOptions {\n url: string;\n geometry: PolygonGeometry;\n id: string;\n width: number;\n rotate: number;\n airHeight: number;\n deltaHeight: number;\n}\n\nconst defaultGlbOptions: GlbModelOptions = {\n url: \"\",\n geometry: { type: \"polygon\", cds: [], coords: [], curveCpt: [], curveIndex: [] },\n id: \"\",\n width: 0,\n rotate: 1,\n airHeight: 1,\n deltaHeight: 0\n}\n\nexport class GlbModel extends Object3D {\n\n model: GLTF | null = null\n\n options: GlbModelOptions;\n\n constructor(public context: Context, options: Partial<GlbModelOptions>) {\n super()\n this.options = Object.assign({}, defaultGlbOptions, options)\n this.loadModel()\n }\n \n async loadModel() { \n const object = await loadModel(this.options.url);\n object.scene.rotation.set(Math.PI / 2, Math.PI / 2, 0)\n const box = new Box3().setFromObject(object.scene);\n const size = box.getSize(new Vector3())\n const max = Math.max(size.x, size.y)\n const scale = this.options.width / max\n this.scale.set(scale, scale, scale)\n this.add(object.scene)\n this.position.copy(box.getCenter(new Vector3()))\n this.position.z += this.options.airHeight + this.options.deltaHeight\n this.model = object\n }\n\n dispose() {\n dispose(this)\n this.model = null\n }\n}", "import { PolygonGeometry } from \"../types\";\nimport { Context } from \"../context\";\nimport { BufferGeometry, ExtrudeGeometry, LineBasicMaterial, LineSegments, Mesh, MeshBasicMaterial, Object3D, Vector3 } from \"three\";\nimport { initShape } from \"../utils\";\nimport { mergeGeometries } from 'three/examples/jsm/utils/BufferGeometryUtils'\nimport { Line2 } from 'three/examples/jsm/lines/Line2'\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry'\n\nexport interface LaneOptions {\n id: string;\n airHeight: number;\n fillColor: string;\n fillOpacity: number;\n secondColor: string;\n secondWidth: number;\n strokeColor: string;\n strokeOpacity: number;\n geometry: PolygonGeometry;\n double: boolean;\n dashed: boolean;\n deltaHeight?: number;\n userData: Record<string, any>;\n}\n\nexport class Lane extends Object3D {\n\n public geometry?: BufferGeometry;\n\n public material?: MeshBasicMaterial;\n\n public lineMaterial?: LineBasicMaterial;\n\n public lineGeometry?: BufferGeometry;\n\n public Mesh?: Mesh;\n\n public LineMesh?: LineSegments;\n constructor(private context: Context, public options: LaneOptions[]) {\n super();\n if (!options.length) { return }\n this.init() \n }\n\n initGeometry() {\n const geometries = this.options.map(option => { \n const shape = initShape(\n option.geometry.coords[0],\n option.geometry.coords.slice(1)\n );\n const geometry = new ExtrudeGeometry(shape, {\n steps: 1,\n bevelEnabled: false,\n depth: 0,\n curveSegments: 4,\n });\n return geometry;\n })\n // \u5408\u5E76geometry\n this.geometry = mergeGeometries(geometries); \n geometries.forEach(item => item.dispose())\n }\n\n initMaterial() { \n const { fillColor, fillOpacity } = this.options[0]\n const material = this.context.materialFactory.createMeshBasicMaterial({\n color: fillColor,\n opacity: fillOpacity,\n });\n this.material = material;\n return material\n }\n\n initLineMaterial() {\n const { strokeColor, strokeOpacity } = this.options[0]\n const lineMaterial = this.context.materialFactory.createLineMaterial({\n color: strokeColor,\n opacity: strokeOpacity,\n });\n this.lineMaterial = lineMaterial;\n return lineMaterial;\n }\n\n getBorderPoints(option: LaneOptions) {\n const { deltaHeight, geometry } = option;\n const points = [];\n const _height = (deltaHeight || 0);\n // \u70B9\u7684\u5750\u6807\u8981\u81EA\u5DF1\u7B97\uFF0C\u53EA\u753B\u5173\u952E\u8282\u70B9\u7684\u5782\u76F4\u7EBFcurveIndex\u662F\u5173\u952E\u8282\u70B9,\u5982\u679C\u662F\u66F2\u7EBF\u6709\u8FD9\u4E2A\u503C\uFF0C\u4E0D\u662F\u66F2\u7EBF\u4E0D\u4E00\u5B9A\u6709\n const { coords } = geometry;\n for (let j = 0; j < coords.length; j++) {\n const curCds = coords[j];\n for (let i = 0; i < curCds.length; i++) {\n const cur = curCds[i];\n const next = i + 1 === curCds.length ? curCds[0] : curCds[i + 1];\n // \u628A\u62C9\u5347\u4E0A\u53BB\u7684\u70B9\u653E\u8FDB\u53BB\n points.push(new Vector3(cur[0], cur[1], _height));\n points.push(new Vector3(next[0], next[1], _height));\n }\n }\n return points;\n }\n\n initDoubleLine() { \n const options = this.options.filter(option => option.double && option.geometry.otherCoords?.[1]?.length);\n if (!options.length) { return }\n // \u5148\u6309\u7167\u8F66\u9053\u4E2D\u95F4\u7EBF\u7684\u989C\u8272\u505A\u4E2A\u5206\u7EC4\n const group = options.reduce((obj, cur) => { \n const key = `${cur.secondColor}-${cur.dashed}`\n if (obj[key]) {\n obj[key].push(cur)\n }\n if (!obj[key]) {\n obj[key] = [cur]\n }\n return obj\n }, {} as Record<string, LaneOptions[]>)\n Object.values(group).map(options => {\n const material = this.context.materialFactory.createLine2MaterialMap({\n color: options[0].secondColor,\n width: 0.2,\n dashed: options[0].dashed,\n })\n options.map(option => { \n const geometry = new LineGeometry()\n const vec = option.geometry.otherCoords![1].map(item => [...item, 0]).flat(2)\n geometry.setPositions(vec);\n const line = new Line2(geometry, material);\n line.computeLineDistances()\n line.position.z += 0.001;\n this.add(line)\n })\n })\n }\n\n initLineGeometry() {\n const geometries = this.options.map(option => { \n const points = this.getBorderPoints(option);\n return new BufferGeometry().setFromPoints(points);\n })\n this.lineGeometry = mergeGeometries(geometries);\n }\n\n createBorder() {\n const line = new LineSegments(this.lineGeometry, this.lineMaterial);\n this.LineMesh = line;\n this.add(line);\n return line;\n }\n\n init() { \n this.initGeometry();\n this.initMaterial();\n const mesh = new Mesh(this.geometry, this.material);\n this.add(mesh)\n this.initLineMaterial();\n this.initLineGeometry();\n this.createBorder();\n this.initDoubleLine();\n this.position.z += 0.002 + (this.options[0].deltaHeight || 0);\n }\n\n dispose() {\n this.geometry?.dispose();\n this.lineGeometry?.dispose();\n this.clear();\n }\n \n}", "import {\n Object3D,\n ExtrudeGeometry,\n Mesh,\n Vector3,\n BufferGeometry,\n LineBasicMaterial,\n LineSegments,\n ShaderMaterial,\n Color,\n } from \"three\";\nimport { initShape, darkenColor } from \"../utils\";\nimport { GraphicOptions, PolygonGeometry } from \"src/types\";\nimport { Context } from \"../context\";\nimport { GraphicEventMap, GraphicOptionsParam, defaultGraphicOptions } from \"./graphic\";\nimport { mergeGeometries } from \"three/examples/jsm/utils/BufferGeometryUtils\";\n\nexport class MergeGraphic extends Object3D<GraphicEventMap> {\n public geometry!: BufferGeometry;\n\n public material!: ShaderMaterial;\n\n public mesh!: Mesh;\n\n public line!: LineSegments;\n\n public lineMaterial?: LineBasicMaterial;\n\n public lineGeometry?: BufferGeometry;\n\n public options: GraphicOptions[];\n\n constructor(\n private context: Context,\n options: GraphicOptionsParam[]\n ) {\n super();\n this.options = options.map(option => ({ ...defaultGraphicOptions, ...option }))\n this.init();\n }\n\n init() {\n this.geometry = this.initGeometry();\n this.initMaterial();\n this.initMesh();\n this.mesh.position.z = this.options[0].deltaHeight;\n // \u521B\u5EFA\u8FB9\u6846\n this.initLineMaterial();\n this.initLineGeometry();\n this.createBorder();\n }\n\n initGeometry() {\n const geometries = this.options.map(option => { \n const shape = initShape(\n (option.geometry as PolygonGeometry).coords[0],\n (option.geometry as PolygonGeometry).coords.slice(1)\n );\n const geometry = new ExtrudeGeometry(shape, {\n steps: 1,\n bevelEnabled: false,\n depth: option.height,\n curveSegments: 4,\n });\n return geometry;\n })\n const geometry = mergeGeometries(geometries);\n geometries.forEach(geometry => geometry.dispose())\n return geometry\n }\n\n initMaterial() {\n // \u81EA\u5B9A\u4E49\u7684 ShaderMaterial\n const vertexShader = ` \n varying vec3 vPosition; // \u7528\u4E8E\u4F20\u9012\u9876\u70B9\u7684\u4F4D\u7F6E\u7ED9\u7247\u6BB5\u7740\u8272\u5668\n uniform float maxZ; // \u58F0\u660E\u4E00\u4E2Auniform\u53D8\u91CF\n uniform vec3 uColor;\n uniform vec3 uColor2; \n uniform float uOpacity; \n\n void main() { \n vPosition = position; // \u5411\u7247\u6BB5\u7740\u8272\u5668\u4F20\u9012\u4F4D\u7F6E \n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); \n } \n `;\n\n const fragmentShader = ` \n varying vec3 vPosition; // \u63A5\u6536\u9876\u70B9\u4F4D\u7F6E\n uniform float maxZ;\n uniform vec3 uColor;\n uniform vec3 uColor2;\n uniform float uOpacity;\n\n void main() { \n // \u5224\u65AD\u5F53\u524D\u9876\u70B9\u662F\u5426\u4E3A\u9876\u9762 \n if (vPosition.z >= maxZ) { \n gl_FragColor = vec4(uColor, uOpacity); //\uFF08\u9876\u9762\u989C\u8272\uFF09 \n } else { \n gl_FragColor = vec4(uColor2, uOpacity); // \u5176\u4ED6\u9762\u989C\u8272\uFF09 \n } \n } \n `;\n let maxZ = -Infinity; // \u521D\u59CB\u5316\u4E3A\u8D1F\u65E0\u7A77\n const positionAttribute = this.geometry!.getAttribute(\"position\");\n\n // \u904D\u5386\u6240\u6709\u9876\u70B9\n if (positionAttribute) {\n for (let i = 0; i < positionAttribute.count; i++) {\n const z = positionAttribute.getZ(i); // \u83B7\u53D6\u7B2C i \u4E2A\u9876\u70B9\u7684 z \u503C\n if (z > maxZ) {\n maxZ = z; // \u66F4\u65B0\u6700\u5927\u503C\n }\n }\n }\n\n // \u521B\u5EFA ShaderMaterial\n const shaderMaterial = new ShaderMaterial({\n uniforms: {\n maxZ: { value: maxZ }, // \u521D\u59CB\u5316maxZ\u7684\u503C\n uColor: { value: new Color(this.options[0].fillColor).convertLinearToSRGB() }, // \u9876\u9762\u989C\u8272\n uColor2: { value: new Color(darkenColor(this.options[0].fillColor)).convertLinearToSRGB() }, // \u4FA7\u9762\u989C\u8272\n uOpacity: { value: this.options[0].fillOpacity }, // \u900F\u660E\u5EA6\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n });\n this.material = shaderMaterial;\n }\n\n initLineMaterial() {\n const lineMaterial = this.context.materialFactory.createLineMaterial({\n color: this.options[0].strokeColor,\n opacity: this.options[0].strokeOpacity,\n });\n this.lineMaterial = lineMaterial;\n return lineMaterial;\n }\n\n initMesh() {\n if (this.mesh) {\n this.remove(this.mesh);\n }\n this.mesh = new Mesh(this.geometry, this.material);\n this.add(this.mesh);\n }\n\n getBorderPoints() {\n const points: Vector3[] = [];\n const height = this.options[0].height + this.options[0].deltaHeight;\n // \u70B9\u7684\u5750\u6807\u8981\u81EA\u5DF1\u7B97\uFF0C\u53EA\u753B\u5173\u952E\u8282\u70B9\u7684\u5782\u76F4\u7EBFcurveIndex\u662F\u5173\u952E\u8282\u70B9,\u5982\u679C\u662F\u66F2\u7EBF\u6709\u8FD9\u4E2A\u503C\uFF0C\u4E0D\u662F\u66F2\u7EBF\u4E0D\u4E00\u5B9A\u6709\n this.options.map(option => { \n const { coords } = option.geometry as PolygonGeometry;\n for (let j = 0; j < coords.length; j++) {\n const curCds = coords[j];\n for (let i = 0; i < curCds.length; i++) {\n const cur = curCds[i];\n const next = i + 1 === curCds.length ? curCds[0] : curCds[i + 1];\n // \u628A\u62C9\u5347\u4E0A\u53BB\u7684\u70B9\u653E\u8FDB\u53BB\n points.push(new Vector3(cur[0], cur[1], height));\n points.push(new Vector3(next[0], next[1], height));\n }\n }\n })\n return points;\n }\n\n initLineGeometry() {\n if (this.lineGeometry) {\n this.lineGeometry.dispose();\n }\n const points = this.getBorderPoints();\n const lineGeometry = new BufferGeometry().setFromPoints(points);\n this.lineGeometry = lineGeometry;\n }\n\n createBorder() {\n if (this.line) {\n this.remove(this.line);\n }\n const line = new LineSegments(this.lineGeometry, this.lineMaterial);\n line.position.z = 0.01;\n this.line = line;\n this.add(line);\n return line;\n }\n\n dispose() {\n this.geometry.dispose();\n this.material.dispose();\n this.line?.geometry.dispose();\n this.clear();\n }\n}\n", "import { createRect, isContain, setRectPosition, vector3ToDevice } from \"../../utils\";\nimport { Context } from \"../../context\";\nimport { BaseSvg, Graphic } from \"../../elements\";\nimport { Frustum, Vector3 } from \"three\";\n\ninterface BoxSelectionEventMap { \n \"selected\": {\n list: Graphic[]\n }\n}\n\nexport class BoxSelection extends BaseSvg<BoxSelectionEventMap> {\n\n public startPoint?: Vector3;\n\n public endPoint?: Vector3;\n\n rect: SVGElement;\n\n frustum = new Frustum();\n\n constructor(context: Context) { \n super(context);\n const { config: { selectBox: { fill, stroke } } } = context\n this.rect = createRect(stroke, fill)\n this.svg.appendChild(this.rect)\n this.registryEvent()\n }\n\n setEnable(enable: boolean): void {\n super.setEnable(enable)\n setRectPosition(this.rect, 0, 0, 0, 0)\n if (enable) {\n this.registryEvent()\n } else {\n this.startPoint = undefined\n this.unRegistryEvent()\n }\n }\n\n onPointerDown = (e: PointerEvent) => { \n if (!this.enable) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.startPoint = point\n }\n this.endPoint = undefined;\n }\n\n onPointerMove = (e: PointerEvent) => { \n if (!this.enable || !this.startPoint) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.endPoint = point\n }\n }\n\n onPointerUp = (e: PointerEvent) => { \n if (!this.enable) { return }\n const point = this.getIntersectByPointerEvent(e)\n if (point) { \n this.endPoint = point\n }\n this.doSelect()\n this.startPoint = undefined\n }\n\n onUpdate = () => {\n if (this.startPoint) {\n const startPoint = this.getSvgCoordinate(this.startPoint)\n let endPoint = { ...startPoint }\n if (this.endPoint) {\n endPoint = this.getSvgCoordinate(this.endPoint)\n }\n const leftTop = { x: Math.min(startPoint.x, endPoint.x), y: Math.min(startPoint.y, endPoint.y) }\n const width = Math.abs(endPoint.x - startPoint.x)\n const height = Math.abs(endPoint.y - startPoint.y)\n setRectPosition(this.rect, leftTop.x, leftTop.y, width, height)\n } else {\n setRectPosition(this.rect, 0, 0, 0, 0)\n }\n }\n\n registryEvent() { \n this.context.container.addEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.addEventListener(\"pointermove\", this.onPointerMove)\n this.context.container.addEventListener(\"pointerup\", this.onPointerUp)\n this.context.addEventListener(\"update\", this.onUpdate)\n }\n \n unRegistryEvent() { \n this.context.container.removeEventListener(\"pointerdown\", this.onPointerDown)\n this.context.container.removeEventListener(\"pointermove\", this.onPointerMove)\n this.context.container.removeEventListener(\"pointerup\", this.onPointerUp)\n this.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n doSelect() { \n if (this.startPoint && this.endPoint) {\n const dis = this.startPoint.distanceTo(this.endPoint);\n if (dis < 0.1) { return }\n const { context: { camera, container: { clientWidth: w, clientHeight: h } } } = this\n const startDevice = vector3ToDevice(this.startPoint!, camera, w, h)\n const endDevice = vector3ToDevice(this.endPoint!, camera, w, h)\n const leftTop = { x: Math.min(startDevice.x, endDevice.x), y: Math.min(startDevice.y, endDevice.y) }\n const rightBottom = { x: Math.max(startDevice.x, endDevice.x), y: Math.max(startDevice.y, endDevice.y) }\n const list = this.searchMapInFrustum(leftTop, rightBottom);\n this.dispatchEvent({ type: \"selected\", list })\n }\n }\n\n searchMapInFrustum(leftTop: { x: number, y: number }, rightBottom: { x: number, y: number }): Graphic[] {\n const { context } = this\n return context.currentFloor?.graphicLayer.children.filter(item => {\n return item instanceof Graphic && this.searchChildInFrustum(item, leftTop, rightBottom)\n }) as Graphic[] || []\n }\n\n searchChildInFrustum(object: Graphic, leftTop: { x: number, y: number }, rightBottom: { x: number, y: number }): boolean {\n const { context: { camera, container: { clientWidth: w, clientHeight: h } } } = this\n if (!object) return false;\n if (!object.mesh) { \n // \u70B9\n const position = object.getPosition()\n if (position) {\n const position2d = vector3ToDevice(position, camera, w, h)\n return isContain(position2d, leftTop, rightBottom)\n }\n return false\n }\n if (!object.mesh.geometry.boundingBox) {\n object.mesh.geometry.computeBoundingBox();\n }\n const box = object.mesh.geometry.boundingBox;\n if (!box) { return false }\n const { min, max } = box\n const minDevice = vector3ToDevice(min, camera, w, h)\n const maxDevice = vector3ToDevice(max, camera, w, h)\n \n if (!isContain(minDevice, leftTop, rightBottom)) { return false }\n if (!isContain(maxDevice, leftTop, rightBottom)) { return false; }\n return true;\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}\n\n", "import { Graphic, Poi } from \"../../elements\";\nimport { Context } from \"../../context\";\nimport { EventDispatcher } from \"three\";\nimport { Timer } from \"../../utils\";\nimport { debounce } from \"lodash\";\n\ninterface HoverHelperEventMap {\n \"hover-change\": {\n graphics: Graphic[]\n },\n}\n\nexport class HoverHelper extends EventDispatcher<HoverHelperEventMap> { \n\n curGraphics = new Set<Graphic>()\n\n timer = new Timer()\n\n graphicTimerMap = new Map<Graphic, number>()\n \n constructor(private context: Context) {\n super()\n this.registryEvent()\n }\n\n onPointerMove = ({ graphics, pois, e }: { graphics: Graphic[], pois: Poi[], e: PointerEvent }) => {\n const poiGraphics = pois\n .map(item => this.context.currentFloor?.graphicLayer.graphicMap.get(item.options.id))\n .filter(graphic => graphic && graphic.options.geometry.type === \"point\") as Graphic[]\n if (!graphics.length && !poiGraphics.length && this.curGraphics.size) {\n this.curGraphics.clear()\n this.handleHoverGraphicsChange()\n return\n }\n const { time } = this.context.config.hover\n const allGraphics = new Set<Graphic>()\n if (poiGraphics.length) { \n // \u627E\u79BB\u4E2D\u5FC3\u70B9\u6700\u65B0\u7684\u90A3\u4E2A\n let resGraphic: Graphic;\n let distance = 10000;\n poiGraphics.forEach(graphic => { \n const poi = pois.find(poi => poi.options.id === graphic.options.id)!\n const { x, y } = poi.clientPos\n let curDistance = Math.sqrt((x - e.offsetX) ** 2 + (y - e.offsetY) ** 2)\n if (curDistance < distance) {\n distance = curDistance\n resGraphic = graphic\n }\n })\n allGraphics.add(resGraphic!)\n }\n if (!allGraphics.size) { \n graphics.forEach(graphic => allGraphics.add(graphic))\n }\n allGraphics.forEach((graphic) => {\n // \u5982\u679C\u5DF2\u7ECF\u6709hover\u7684\u5B9A\u65F6\u5668\u5728\u6267\u884C\u4E86\u5C31\u8FD4\u56DE\n if (this.graphicTimerMap.get(graphic)) { \n return\n }\n // \u5982\u679C\u8FD9\u4E2A\u5143\u7D20\u7684hover\u5DF2\u7ECF\u89E6\u53D1\u8FC7\u4E86\u5C31\u8FD4\u56DE\n if (this.curGraphics.has(graphic)) { \n return\n }\n // \u8FD9\u4E2A\u5143\u7D20\u6CA1\u6709\u89E6\u53D1\u8FC7\u4E5F\u6CA1\u6709\u5B9A\u65F6\u5668\u5C31\u6DFB\u52A0\u4E00\u4E2A\u5B9A\u65F6\u5668\n const timer = this.timer.setTimeout(() => {\n this.curGraphics.add(graphic)\n this.graphicTimerMap.delete(graphic)\n this.timer.clearTimeout(timer)\n this.handleHoverGraphicsChange()\n }, time)\n this.graphicTimerMap.set(graphic, timer)\n })\n // \u5982\u679C\u5B9A\u65F6\u5668\u7684\u5143\u7D20\u4E0D\u5B58\u5728\u5728\u5F53\u524Dgraphics\u4E2D\u4E86\u5C31\u5220\u9664\n this.graphicTimerMap.forEach((timer, graphic) => { \n if (!allGraphics.has(graphic)) { \n this.timer.clearTimeout(timer)\n this.graphicTimerMap.delete(graphic)\n }\n })\n // \u5982\u679C\u5DF2\u7ECFhover\u7684\u5143\u7D20\u4E0D\u5B58\u5728\u5728\u5F53\u524D\u7684graphics\u4E86\u5C31\u5220\u9664\n const size = this.curGraphics.size\n this.curGraphics.forEach((graphic) => { \n if (!allGraphics.has(graphic)) { \n this.curGraphics.delete(graphic)\n }\n })\n // \u5982\u679C\u6709\u5220\u9664\u5C31\u89E6\u53D1\u4E8B\u4EF6\n if (size !== this.curGraphics.size) {\n this.handleHoverGraphicsChange()\n }\n }\n\n onPointerLevel = () => {\n this.curGraphics.clear()\n this.handleHoverGraphicsChange()\n }\n\n onBodyPointerMove = (e: PointerEvent) => { \n if (this.curGraphics.size) {\n // \u5224\u65AD\u9F20\u6807\u662F\u4E0D\u662F\u4E0D\u5728container\u8303\u56F4\u4E86\n const rect = this.context.container.getBoundingClientRect()\n if (e.clientX < rect.left || e.clientX > rect.right || e.clientY < rect.top || e.clientY > rect.bottom) {\n this.onPointerLevel()\n }\n }\n }\n\n handleHoverGraphicsChange(graphics = this.curGraphics) { \n this.dispatchEvent({ type: 'hover-change', graphics: Array.from(graphics) })\n }\n\n registryEvent() {\n this.context.addEventListener(\"pointer-over\", this.onPointerMove)\n this.context.addEventListener(\"pointer-move\", this.onPointerMove)\n this.context.addEventListener(\"pointer-level\", this.onPointerLevel)\n document.body.addEventListener(\"pointermove\", this.onBodyPointerMove)\n }\n\n unRegistryEvent() {\n this.context.removeEventListener(\"pointer-over\", this.onPointerMove)\n this.context.removeEventListener(\"pointer-move\", this.onPointerMove)\n this.context.removeEventListener(\"pointer-level\", this.onPointerLevel)\n document.body.removeEventListener(\"pointermove\", this.onBodyPointerMove)\n }\n\n dispose() {\n this.unRegistryEvent()\n this.timer.dispose()\n }\n}", "import { LineMaterial } from \"three/examples/jsm/lines/LineMaterial\";\nimport { Context } from \"../context\";\nimport {\n Color,\n LineBasicMaterial,\n MeshStandardMaterial,\n MeshBasicMaterial,\n ShaderMaterial,\n Vector3,\n DoubleSide,\n Vector2\n} from \"three\";\n\nfunction vectorToString(vector: Vector3) {\n return `${vector.x}-${vector.y}-${vector.z}`;\n}\n\ninterface LineMaterialOptions {\n color: string;\n opacity: number;\n}\n\ninterface MeshStandardMaterialOptions {\n color: string;\n opacity: number;\n}\n\ninterface MeshBasicMaterialOptions {\n color: string;\n opacity: number;\n}\n\ninterface ShaderMaterialOptions {\n gradualColor: string[];\n center: Vector3;\n maxValue: number;\n opacity: number;\n direction: Vector3;\n max: Vector3;\n min: Vector3;\n}\n\ninterface GroundTextureMaterialOptions {\n url: string;\n opacity: number;\n}\n\ninterface Line2MaterialMapOptions {\n color: string;\n width: number;\n dashed: boolean;\n}\n\n\nexport class MaterialFactory {\n private lineMaterialMap = new Map<string, LineBasicMaterial>();\n\n private meshStandardMaterialMap = new Map<string, MeshStandardMaterial>();\n\n private meshBasicMaterialMap = new Map<string, MeshBasicMaterial>();\n\n private shaderMaterialMap = new Map<string, ShaderMaterial>();\n\n private groundTextureMaterialMap = new Map<string, MeshBasicMaterial>();\n\n private line2MaterialMap = new Map<string, LineMaterial>();\n\n constructor(private context: Context) {}\n\n generateLineMaterialKey({ color, opacity }: LineMaterialOptions) {\n return `${color}-${opacity}`;\n }\n\n createLineMaterial({ color, opacity }: LineMaterialOptions) {\n const key = this.generateLineMaterialKey({ color, opacity });\n if (this.lineMaterialMap.has(key)) {\n return this.lineMaterialMap.get(key)!;\n }\n const lineMaterial = new LineBasicMaterial({\n color: new Color(color).convertLinearToSRGB(),\n transparent: true,\n opacity: opacity,\n });\n this.lineMaterialMap.set(key, lineMaterial);\n return lineMaterial;\n }\n\n createMeshStandardMaterial({ color, opacity }: MeshStandardMaterialOptions) {\n const key = `${color}-${opacity}`;\n if (this.meshStandardMaterialMap.has(key)) {\n return this.meshStandardMaterialMap.get(key)!;\n }\n const material = new MeshStandardMaterial({\n color: new Color(color).convertLinearToSRGB(),\n roughness: 1,\n transparent: true,\n opacity: opacity,\n depthWrite: true,\n });\n this.meshStandardMaterialMap.set(key, material);\n return material;\n }\n\n createMeshBasicMaterial({ color, opacity }: MeshBasicMaterialOptions) {\n const key = `${color}-${opacity}`;\n if (this.meshBasicMaterialMap.has(key)) {\n return this.meshBasicMaterialMap.get(key)!;\n }\n const material = new MeshBasicMaterial({\n color: color,\n transparent: true,\n opacity: opacity,\n depthWrite: true,\n });\n this.meshBasicMaterialMap.set(key, material);\n return material;\n }\n\n createShaderMaterial({\n gradualColor,\n center,\n maxValue,\n opacity,\n direction,\n max,\n min,\n }: ShaderMaterialOptions) {\n const key = `${gradualColor.toString()}-${vectorToString(\n center\n )}-${maxValue}-${opacity}-${vectorToString(direction)}`;\n if (this.shaderMaterialMap.has(key)) {\n return this.shaderMaterialMap.get(key)!;\n }\n // \u81EA\u5B9A\u4E49\u7740\u8272\u5668\u4EE3\u7801\n const vertexShader = `\n uniform vec3 uColor;\n uniform vec3 uGradualColor;\n uniform vec3 center;\n uniform vec3 uDirection;\n uniform vec3 uMax;\n uniform vec3 uMin;\n uniform float maxValue;\n varying vec3 vColor; \n\n void main() {\n vec3 lineVec = uMax - uMin; // \u7EBF\u6BB5AB\u7684\u65B9\u5411\u5411\u91CF\n vec3 AP = position - uMin; // \u5411\u91CFAP\n float t = dot(AP, lineVec) / dot(lineVec, lineVec); // \u53C2\u6570t\n t = clamp(t, 0.0, 1.0); // \u9650\u5236t\u5728[0, 1]\u8303\u56F4\u5185\uFF0C\u786E\u4FDD\u6700\u77ED\u8DDD\u79BB\u5728\u7EBF\u6BB5AB\u4E0A\n \n vec3 closestPoint = uMin + t * lineVec; // \u6700\u77ED\u8DDD\u79BB\u70B9\u7684\u4F4D\u7F6E\n vec3 vecAP = closestPoint - uMin; // \u5411\u91CFAP'\n float distance = length(vecAP);\n float maxLen = length(lineVec);\n\n vec3 direction = normalize(uDirection);\n float gradient = dot(normalize(normal), normalize(uDirection));\n vec3 currentPosition = position - center;\n // float colorFactor = (dot(direction, currentPosition) / maxValue) * 0.5 + 0.5;\n float colorFactor = distance / maxLen;\n\n vColor = mix(uColor, uGradualColor, 1.0 - t);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `;\n\n const fragmentShader = `\n varying vec3 vColor;\n uniform float opacity;\n\n void main() {\n gl_FragColor = vec4(vColor.x, vColor.y, vColor.z, opacity);\n }\n `;\n\n // \u521B\u5EFA\u81EA\u5B9A\u4E49ShaderMaterial\n const material = new ShaderMaterial({\n uniforms: {\n uColor: {\n value: new Color(gradualColor[0]).convertLinearToSRGB(),\n },\n uGradualColor: {\n value: new Color(gradualColor[1]).convertLinearToSRGB(),\n },\n center: {\n value: center,\n },\n maxValue: {\n value: maxValue,\n },\n opacity: {\n value: opacity,\n },\n uDirection: {\n value: direction,\n },\n uMax: {\n value: max,\n },\n uMin: {\n value: min,\n },\n },\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n side: DoubleSide,\n });\n this.shaderMaterialMap.set(key, material);\n return material;\n }\n\n async createGroundTextureMaterial({ url, opacity }: GroundTextureMaterialOptions) {\n const key = `${url}-${opacity}`\n if (this.groundTextureMaterialMap.has(key)) {\n return this.groundTextureMaterialMap.get(key)!\n }\n const texture = await this.context.textureFactory.getTexture(url)\n const material = new MeshBasicMaterial({\n map: texture,\n transparent: true,\n opacity,\n })\n this.groundTextureMaterialMap.set(key, material)\n return material\n }\n\n createLine2MaterialMap({ color, width, dashed }: Line2MaterialMapOptions) {\n const key = `${color}-${width}-${dashed}`\n if (this.line2MaterialMap.has(key)) {\n return this.line2MaterialMap.get(key)!\n }\n const material = new LineMaterial({\n color: parseInt(color.slice(1), 16),\n dashed,\n linewidth: width,\n worldUnits: true,\n dashSize: 1,\n gapSize: 3,\n dashScale: 1,\n resolution: new Vector2(this.context.clientSize.width, this.context.clientSize.height)\n })\n this.line2MaterialMap.set(key, material)\n return material\n }\n\n dispose() {\n this.lineMaterialMap.forEach((val, _) => {\n val.dispose();\n });\n this.lineMaterialMap.clear();\n\n this.meshStandardMaterialMap.forEach((val, _) => {\n val.dispose();\n });\n this.meshStandardMaterialMap.clear();\n\n this.meshBasicMaterialMap.forEach((val, _) => {\n val.dispose();\n });\n this.meshBasicMaterialMap.clear();\n\n this.shaderMaterialMap.forEach((val, _) => {\n val.dispose();\n });\n this.shaderMaterialMap.clear();\n\n this.groundTextureMaterialMap.forEach((val, _) => { \n val.dispose()\n val.map?.dispose()\n })\n this.groundTextureMaterialMap.clear()\n\n this.line2MaterialMap.forEach((val, _) => { \n val.dispose()\n })\n this.line2MaterialMap.clear()\n }\n}\n", "import { Box3, Group, Vector3 } from \"three\";\nimport { Context } from \"../context\";\nimport { vector3ToDevice } from \"./coordinate\";\nimport { Floor } from \"../elements\";\n\nexport class CameraBound {\n private prevCamera = {\n position: new Vector3(),\n zoom: 1,\n target: new Vector3()\n }\n\n private enable = true;\n\n constructor(private context: Context) {\n this.registryEvent()\n this.changePrevCamera()\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n if (enable) {\n this.registryEvent()\n } else {\n this.unRegistryEvent()\n }\n }\n\n changePrevCamera() {\n this.prevCamera = {\n position: this.context.camera.position.clone(),\n zoom: this.context.camera.zoom,\n target: this.context.control.target.clone()\n }\n }\n\n backToPrevCamera() {\n this.setEnable(false)\n this.context.camera.position.copy(this.prevCamera.position)\n this.context.camera.zoom = this.prevCamera.zoom;\n this.context.control.target.copy(this.prevCamera.target)\n this.context.control.update()\n this.setEnable(true)\n }\n\n registryEvent() { \n this.context.addEventListener(\"control-change\", this.onCameraChange)\n }\n\n unRegistryEvent() {\n this.context.removeEventListener(\"control-change\", this.onCameraChange)\n }\n\n getCurFloorScreenPosition() {\n const floors = this.context.scene.children.filter(el => el instanceof Floor)\n if (!floors.length) {\n return null\n }\n const box = new Box3().setFromObject(this.context.scene);\n const { camera, clientSize: { width: w, height: h } } = this.context\n const { min, max } = box\n const lb = vector3ToDevice(min, camera, w, h)\n const rt = vector3ToDevice(max, camera, w, h)\n const lt = vector3ToDevice(new Vector3(min.x, max.y, max.z), camera, w, h)\n const rb = vector3ToDevice(new Vector3(max.x, min.y, min.z), camera, w, h)\n const left = Math.min(lb.x, rt.x, lt.x, rb.x)\n const right = Math.max(lb.x, rt.x, lt.x, rb.x)\n const top = Math.min(lb.y, rt.y, lt.y, rb.y)\n const bottom = Math.max(lb.y, rt.y, lt.y, rb.y)\n return { left, right, top, bottom }\n }\n\n /**\n * \u68C0\u6D4B\u5730\u56FE\u662F\u4E0D\u662F\u5728\u663E\u793A\u8303\u56F4\n * @param param0 \n * @returns \n */\n checkDistanceToScreenEdge({ left, right, top, bottom }: { left: number, right: number, top: number, bottom: number }) { \n const { width, height } = this.context.clientSize\n const [pt, pr, pb, pl] = this.context.config.cameraBound.padding\n // \u5224\u65AD\u53F3\u8FB9\u662F\u4E0D\u662F\u8D85\u51FA true \u6CA1\u6709\u8D85\u51FA\n const checkedRight = right >= pl;\n const checkedLeft = (width - left) >= pr;\n const checkedTop = (height - top) >= pb;\n const checkedBottom = bottom >= pt;\n return checkedRight && checkedLeft && checkedTop && checkedBottom\n }\n\n onCameraChange = () => {\n // \u5224\u65AD\u5982\u679C\u8D85\u51FA\u5C31\u7528\u4E4B\u524D\u7684prevCamera\n // \u83B7\u53D6\u5730\u56FE\u7684\u5C4F\u5E55\u4F4D\u7F6E\n // \u5148\u4E0D\u505A\u8FB9\u754C\u5224\u65AD\n const bound = this.getCurFloorScreenPosition();\n if (bound) {\n const { left, right, top, bottom } = bound\n const isInBound = this.checkDistanceToScreenEdge({ left, right, top, bottom });\n if (isInBound) {\n this.changePrevCamera()\n } else {\n this.backToPrevCamera()\n }\n }\n }\n\n dispose() {\n this.unRegistryEvent()\n }\n}", "import { Texture, TextureLoader } from \"three\";\nimport { Context } from \"../context\";\n\nexport class TextureFactory {\n \n textureMap: Map<string, Texture> = new Map()\n\n loader = new TextureLoader()\n \n constructor(private context: Context) { }\n \n async getTexture(url: string): Promise<Texture> {\n if (this.textureMap.has(url)) {\n return this.textureMap.get(url)!\n }\n const texture = await this.loader.loadAsync(url)\n this.textureMap.set(url, texture)\n return texture\n }\n\n dispose() {\n this.textureMap.forEach(texture => {\n texture.dispose()\n })\n this.textureMap.clear()\n }\n}", "import { merge } from 'lodash'\nimport { HeatmapConfiguration } from '@mars3d/heatmap.js'\n\nexport interface Config {\n apiDomain: string,\n apiInfo: RequestInit,\n apiPath: {\n floorGraphic: string,\n floorRange: string,\n equipmentList: string,\n roadNetwork: string,\n },\n resizeObserver: boolean;\n heatMap: Partial<HeatmapConfiguration>,\n useFloorCache: boolean;\n control: {\n maxPolar: number;\n defaultPolar: number;\n defaultAzimuthal: number;\n },\n defaultPadding: [number, number, number, number];\n initTransToMark: boolean;\n svg: {\n circle: {\n radius: string;\n fill: string;\n },\n line: {\n stroke: string;\n }\n },\n selectBox: {\n stroke: string;\n fill: string;\n },\n hover: {\n time: number;\n },\n ground: {\n color: string;\n opacity: number;\n height: number;\n stroke: boolean,\n strokeColor: string,\n strokeOpacity: number\n },\n markGraphic: {\n color: string;\n opacity: number;\n height: number;\n stroke: boolean;\n strokeColor: string;\n strokeOpacity: number;\n },\n graphic: {\n fillOpacity: number,\n },\n cameraBound: {\n padding: [number, number, number, number]\n },\n poi: {\n boxScale: number;\n }\n}\n\nexport const defaultConfig: Config = {\n apiDomain: \"\",\n apiInfo: {},\n apiPath: {\n floorGraphic: \"/api/inception-map/floor/get\",\n floorRange: \"/api/inception-map/range/get\",\n equipmentList: \"/api/inception-map/equipment/get\",\n roadNetwork: \"/api/inception-map/road_network/get\"\n },\n resizeObserver: false,\n initTransToMark: false,\n heatMap: {\n radius: 50,\n gradient: {\n 0: '#8F9FCD',\n 0.5: '#6284FF',\n 1: '#F95D5D',\n },\n },\n useFloorCache: true,\n control: {\n maxPolar: 1.2,\n defaultPolar: 1.1,\n defaultAzimuthal: 0,\n },\n defaultPadding: [20, 20, 20, 20],\n svg: {\n circle: {\n radius: \"2\",\n fill: \"#1CADFF\"\n },\n line: {\n stroke: \"#1CADFF\"\n }\n },\n selectBox: {\n stroke: \"#1CADFF\",\n fill: \"rgba(28, 173, 255, 0.3)\"\n },\n hover: {\n time: 100\n },\n ground: {\n color: \"#F6F6F6\",\n opacity: 1,\n height: 0.001,\n stroke: false, \n strokeColor: \"#E6E6E6\",\n strokeOpacity: 1\n },\n markGraphic: {\n color: \"#EEF0F3\",\n opacity: 1,\n height: 0.001,\n stroke: false,\n strokeColor: \"#000\",\n strokeOpacity: 1\n },\n graphic: {\n fillOpacity: 1,\n },\n cameraBound: {\n padding: [150, 150, 150, 150]\n },\n poi: {\n boxScale: 1.0\n }\n}\n\nexport function getConfig(config: Partial<Config>): Config {\n return merge({}, defaultConfig, config);\n}", "import { Config } from \"../config\";\nimport { GraphicInfo, ResGraphicInfo, LoadQuery } from \"../types\";\n\ntype BuildingGroundQuery = Omit<LoadQuery, \"floor\" | \"ts\" | \"resource_type_list\">;\n\n/**\n * \u8BF7\u6C42\u697C\u680B\u5730\u9762\n */\nexport async function loadBuildingGround({ brand, project }: BuildingGroundQuery, config: Config): Promise<GraphicInfo | null> {\n const {\n apiDomain,\n apiPath: { floorRange },\n apiInfo,\n } = config;\n const url = `${apiDomain}${floorRange}?brand=${brand}&project=${project}&phase=${project}&building=${project}`;\n const data = await fetch(url, apiInfo)\n .then((res) => res.json())\n .then((res) => res.data)\n .then((res: ResGraphicInfo[]): GraphicInfo | null => {\n const data = (res || [])[0];\n if (data) {\n data.info = JSON.parse(data.info);\n }\n return data as unknown as GraphicInfo | null;\n });\n return data;\n}\n\n/**\n * \u52A0\u8F7D\u56FE\u5143\n * @param param0 \n * @param config \n * @returns \n */\nexport async function loadGraphics({\n brand,\n project,\n floor,\n ts,\n resource_type_list,\n}: LoadQuery, config: Config): Promise<GraphicInfo[]> {\n const {\n apiDomain,\n apiPath: { floorGraphic },\n apiInfo,\n } = config;\n const url = `${apiDomain}${floorGraphic}?brand=${brand}&project=${project}&phase=${project}&building=${project}&floor=${floor}&ts=${ts}&resource_type_list=${resource_type_list}`;\n const data = await fetch(url, apiInfo)\n .then((res) => res.json())\n .then((res) => res.data)\n .then((res: ResGraphicInfo[]): GraphicInfo[] => {\n (res || []).map((item) => (item.info = JSON.parse(item.info)));\n return (res || []) as unknown as GraphicInfo[];\n });\n return data;\n}\n", "import { BMap } from \"../bmap\";\nimport { EventDispatcher } from 'three'\n\nexport class Plugin<T extends {} = {}> extends EventDispatcher<T> {\n\n bmap: BMap;\n\n constructor(bmap: BMap) {\n super()\n this.bmap = bmap;\n }\n\n dispose() {}\n \n}", "import { BMap } from \"../../bmap\";\nimport { Plugin } from \"../base\";\nimport { HooksName } from \"../../utils\";\nimport { Graphic } from \"../../elements\";\n\nexport interface EquipmentData {\n equipment_id: string;\n equipment_name: string;\n equipment_icon: string;\n}\n\ninterface EventMap {\n \"change-equipment-list\": {\n data: EquipmentData[]\n };\n}\n\nexport class Equipment extends Plugin<EventMap> {\n equipmentList: EquipmentData[] = [];\n\n equipmentMap: Map<string, EquipmentData> = new Map();\n\n constructor(bmap: BMap) {\n super(bmap);\n this.fetchEquipment();\n this.bmap.addEventListener(HooksName.SWITCH_FLOOR_AFTER, this.onSwitchFloor);\n }\n\n async fetchEquipment() {\n const {\n apiDomain,\n apiPath: { equipmentList },\n apiInfo,\n } = this.bmap.config;\n const url = `${apiDomain}${equipmentList}`;\n await fetch(url, apiInfo)\n .then((res) => res.json())\n .then((res) => res.data)\n .then((res: EquipmentData[]) => {\n this.equipmentList = res;\n this.equipmentMap = new Map(\n res.map((item) => [item.equipment_id, item])\n );\n });\n this.dispatchEvent({ \n type: \"change-equipment-list\",\n data: this.equipmentList\n })\n if (this.bmap.context.currentFloor) {\n this.changeGraphicToEquipment(\n this.bmap.context.currentFloor.graphicLayer.children as Graphic[]\n );\n }\n }\n\n onSwitchFloor = ({ data: { graphics } }: { data: { graphics: Graphic[] } }) => {\n if (!this.equipmentList.length) {\n return;\n }\n this.changeGraphicToEquipment(graphics);\n };\n\n getGraphicEquipment(graphic: Graphic) {\n return graphic.userData.data.info.userData.equipment;\n }\n\n changeGraphicToEquipment(graphics: Graphic[]) {\n graphics\n .filter((graphic) => {\n const equipment = this.getGraphicEquipment(graphic);\n return equipment && this.equipmentMap.has(equipment);\n })\n .forEach((graphic) => {\n const equipment = this.equipmentMap.get(\n this.getGraphicEquipment(graphic)\n );\n const poi = this.bmap.createGraphicPoi(graphic, {\n icon: equipment?.equipment_icon,\n built_in: true,\n icon_size: [14, 14],\n });\n if (poi) {\n poi.userData.data = equipment;\n poi.userData.type = \"equipment\"\n }\n });\n }\n\n dispose() {\n this.bmap.removeEventListener(HooksName.SWITCH_FLOOR_AFTER, this.onSwitchFloor); this\n \n Array.from(this.bmap.context.currentFloor?.poiLayer.pois || []).forEach(poi => { \n if (poi.userData.type === \"equipment\") {\n this.bmap.context.currentFloor?.poiLayer.removePoi(poi)\n }\n })\n }\n}\n", "\nexport default function inlineWorker(scriptText) {\n let blob = new Blob([scriptText], {type: 'text/javascript'});\n let url = URL.createObjectURL(blob);\n let worker = new Worker(url);\n URL.revokeObjectURL(url);\n return worker;\n}\n", "import inlineWorker from '__inline-worker'\nexport default function Worker() {\n return inlineWorker(\"var O1=Object.create;var Rf=Object.defineProperty;var D1=Object.getOwnPropertyDescriptor;var F1=Object.getOwnPropertyNames,cm=Object.getOwnPropertySymbols,U1=Object.getPrototypeOf,fm=Object.prototype.hasOwnProperty,B1=Object.prototype.propertyIsEnumerable;var If=(r,t,e)=>t in r?Rf(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e,bl=(r,t)=>{for(var e in t||(t={}))fm.call(t,e)&&If(r,e,t[e]);if(cm)for(var e of cm(t))B1.call(t,e)&&If(r,e,t[e]);return r};var Jt=(r,t)=>()=>(t||r((t={exports:{}}).exports,t),t.exports);var z1=(r,t,e,o)=>{if(t&&typeof t==\\\"object\\\"||typeof t==\\\"function\\\")for(let a of F1(t))!fm.call(r,a)&&a!==e&&Rf(r,a,{get:()=>t[a],enumerable:!(o=D1(t,a))||o.enumerable});return r};var On=(r,t,e)=>(e=r!=null?O1(U1(r)):{},z1(t||!r||!r.__esModule?Rf(e,\\\"default\\\",{value:r,enumerable:!0}):e,r));var si=(r,t,e)=>If(r,typeof t!=\\\"symbol\\\"?t+\\\"\\\":t,e);var e0=Jt((pR,t0)=>{t0.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t}});var i0=Jt((dR,r0)=>{var n0=e0();r0.exports=function(r,t){Array.isArray(t)||(t=[]),r.length>0&&t.push(n0([0,0],r[0]));for(var e=0;e<r.length-1;e++){var o=r[e],a=r[e+1],l=o[0],f=o[1],h=a[0],p=a[1],d=[.75*l+.25*h,.75*f+.25*p],g=[.25*l+.75*h,.25*f+.75*p];t.push(d),t.push(g)}return r.length>1&&t.push(n0([0,0],r[r.length-1])),t}});var gc=Jt((ER,a0)=>{\\\"use strict\\\";var s0=Object.getOwnPropertySymbols,kb=Object.prototype.hasOwnProperty,Gb=Object.prototype.propertyIsEnumerable;function Vb(r){if(r==null)throw new TypeError(\\\"Object.assign cannot be called with null or undefined\\\");return Object(r)}function Hb(){try{if(!Object.assign)return!1;var r=new String(\\\"abc\\\");if(r[5]=\\\"de\\\",Object.getOwnPropertyNames(r)[0]===\\\"5\\\")return!1;for(var t={},e=0;e<10;e++)t[\\\"_\\\"+String.fromCharCode(e)]=e;var o=Object.getOwnPropertyNames(t).map(function(l){return t[l]});if(o.join(\\\"\\\")!==\\\"0123456789\\\")return!1;var a={};return\\\"abcdefghijklmnopqrst\\\".split(\\\"\\\").forEach(function(l){a[l]=l}),Object.keys(Object.assign({},a)).join(\\\"\\\")===\\\"abcdefghijklmnopqrst\\\"}catch(l){return!1}}a0.exports=Hb()?Object.assign:function(r,t){for(var e,o=Vb(r),a,l=1;l<arguments.length;l++){e=Object(arguments[l]);for(var f in e)kb.call(e,f)&&(o[f]=e[f]);if(s0){a=s0(e);for(var h=0;h<a.length;h++)Gb.call(e,a[h])&&(o[a[h]]=e[a[h]])}}return o}});var rp=Jt((ep,np)=>{(function(r,t){typeof ep==\\\"object\\\"&&typeof np!=\\\"undefined\\\"?np.exports=t():typeof define==\\\"function\\\"&&define.amd?define(t):(r=r||self).RBush=t()})(ep,function(){\\\"use strict\\\";function r(x,v,C,S,O){(function F(G,z,L,D,q){for(;D>L;){if(D-L>600){var nt=D-L+1,k=z-L+1,xt=Math.log(nt),X=.5*Math.exp(2*xt/3),it=.5*Math.sqrt(xt*X*(nt-X)/nt)*(k-nt/2<0?-1:1),vt=Math.max(L,Math.floor(z-k*X/nt+it)),pt=Math.min(D,Math.floor(z+(nt-k)*X/nt+it));F(G,z,vt,pt,q)}var et=G[z],ot=L,V=D;for(t(G,L,z),q(G[D],et)>0&&t(G,L,D);ot<V;){for(t(G,ot,V),ot++,V--;q(G[ot],et)<0;)ot++;for(;q(G[V],et)>0;)V--}q(G[L],et)===0?t(G,L,V):t(G,++V,D),V<=z&&(L=V+1),z<=V&&(D=V-1)}})(x,v,C||0,S||x.length-1,O||e)}function t(x,v,C){var S=x[v];x[v]=x[C],x[C]=S}function e(x,v){return x<v?-1:x>v?1:0}var o=function(x){x===void 0&&(x=9),this._maxEntries=Math.max(4,x),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function a(x,v,C){if(!C)return v.indexOf(x);for(var S=0;S<v.length;S++)if(C(x,v[S]))return S;return-1}function l(x,v){f(x,0,x.children.length,v,x)}function f(x,v,C,S,O){O||(O=w(null)),O.minX=1/0,O.minY=1/0,O.maxX=-1/0,O.maxY=-1/0;for(var F=v;F<C;F++){var G=x.children[F];h(O,x.leaf?S(G):G)}return O}function h(x,v){return x.minX=Math.min(x.minX,v.minX),x.minY=Math.min(x.minY,v.minY),x.maxX=Math.max(x.maxX,v.maxX),x.maxY=Math.max(x.maxY,v.maxY),x}function p(x,v){return x.minX-v.minX}function d(x,v){return x.minY-v.minY}function g(x){return(x.maxX-x.minX)*(x.maxY-x.minY)}function _(x){return x.maxX-x.minX+(x.maxY-x.minY)}function y(x,v){return x.minX<=v.minX&&x.minY<=v.minY&&v.maxX<=x.maxX&&v.maxY<=x.maxY}function M(x,v){return v.minX<=x.maxX&&v.minY<=x.maxY&&v.maxX>=x.minX&&v.maxY>=x.minY}function w(x){return{children:x,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function T(x,v,C,S,O){for(var F=[v,C];F.length;)if(!((C=F.pop())-(v=F.pop())<=S)){var G=v+Math.ceil((C-v)/S/2)*S;r(x,G,v,C,O),F.push(v,G,G,C)}}return o.prototype.all=function(){return this._all(this.data,[])},o.prototype.search=function(x){var v=this.data,C=[];if(!M(x,v))return C;for(var S=this.toBBox,O=[];v;){for(var F=0;F<v.children.length;F++){var G=v.children[F],z=v.leaf?S(G):G;M(x,z)&&(v.leaf?C.push(G):y(x,z)?this._all(G,C):O.push(G))}v=O.pop()}return C},o.prototype.collides=function(x){var v=this.data;if(!M(x,v))return!1;for(var C=[];v;){for(var S=0;S<v.children.length;S++){var O=v.children[S],F=v.leaf?this.toBBox(O):O;if(M(x,F)){if(v.leaf||y(x,F))return!0;C.push(O)}}v=C.pop()}return!1},o.prototype.load=function(x){if(!x||!x.length)return this;if(x.length<this._minEntries){for(var v=0;v<x.length;v++)this.insert(x[v]);return this}var C=this._build(x.slice(),0,x.length-1,0);if(this.data.children.length)if(this.data.height===C.height)this._splitRoot(this.data,C);else{if(this.data.height<C.height){var S=this.data;this.data=C,C=S}this._insert(C,this.data.height-C.height-1,!0)}else this.data=C;return this},o.prototype.insert=function(x){return x&&this._insert(x,this.data.height-1),this},o.prototype.clear=function(){return this.data=w([]),this},o.prototype.remove=function(x,v){if(!x)return this;for(var C,S,O,F=this.data,G=this.toBBox(x),z=[],L=[];F||z.length;){if(F||(F=z.pop(),S=z[z.length-1],C=L.pop(),O=!0),F.leaf){var D=a(x,F.children,v);if(D!==-1)return F.children.splice(D,1),z.push(F),this._condense(z),this}O||F.leaf||!y(F,G)?S?(C++,F=S.children[C],O=!1):F=null:(z.push(F),L.push(C),C=0,S=F,F=F.children[0])}return this},o.prototype.toBBox=function(x){return x},o.prototype.compareMinX=function(x,v){return x.minX-v.minX},o.prototype.compareMinY=function(x,v){return x.minY-v.minY},o.prototype.toJSON=function(){return this.data},o.prototype.fromJSON=function(x){return this.data=x,this},o.prototype._all=function(x,v){for(var C=[];x;)x.leaf?v.push.apply(v,x.children):C.push.apply(C,x.children),x=C.pop();return v},o.prototype._build=function(x,v,C,S){var O,F=C-v+1,G=this._maxEntries;if(F<=G)return l(O=w(x.slice(v,C+1)),this.toBBox),O;S||(S=Math.ceil(Math.log(F)/Math.log(G)),G=Math.ceil(F/Math.pow(G,S-1))),(O=w([])).leaf=!1,O.height=S;var z=Math.ceil(F/G),L=z*Math.ceil(Math.sqrt(G));T(x,v,C,L,this.compareMinX);for(var D=v;D<=C;D+=L){var q=Math.min(D+L-1,C);T(x,D,q,z,this.compareMinY);for(var nt=D;nt<=q;nt+=z){var k=Math.min(nt+z-1,q);O.children.push(this._build(x,nt,k,S-1))}}return l(O,this.toBBox),O},o.prototype._chooseSubtree=function(x,v,C,S){for(;S.push(v),!v.leaf&&S.length-1!==C;){for(var O=1/0,F=1/0,G=void 0,z=0;z<v.children.length;z++){var L=v.children[z],D=g(L),q=(nt=x,k=L,(Math.max(k.maxX,nt.maxX)-Math.min(k.minX,nt.minX))*(Math.max(k.maxY,nt.maxY)-Math.min(k.minY,nt.minY))-D);q<F?(F=q,O=D<O?D:O,G=L):q===F&&D<O&&(O=D,G=L)}v=G||v.children[0]}var nt,k;return v},o.prototype._insert=function(x,v,C){var S=C?x:this.toBBox(x),O=[],F=this._chooseSubtree(S,this.data,v,O);for(F.children.push(x),h(F,S);v>=0&&O[v].children.length>this._maxEntries;)this._split(O,v),v--;this._adjustParentBBoxes(S,O,v)},o.prototype._split=function(x,v){var C=x[v],S=C.children.length,O=this._minEntries;this._chooseSplitAxis(C,O,S);var F=this._chooseSplitIndex(C,O,S),G=w(C.children.splice(F,C.children.length-F));G.height=C.height,G.leaf=C.leaf,l(C,this.toBBox),l(G,this.toBBox),v?x[v-1].children.push(G):this._splitRoot(C,G)},o.prototype._splitRoot=function(x,v){this.data=w([x,v]),this.data.height=x.height+1,this.data.leaf=!1,l(this.data,this.toBBox)},o.prototype._chooseSplitIndex=function(x,v,C){for(var S,O,F,G,z,L,D,q=1/0,nt=1/0,k=v;k<=C-v;k++){var xt=f(x,0,k,this.toBBox),X=f(x,k,C,this.toBBox),it=(O=xt,F=X,G=void 0,z=void 0,L=void 0,D=void 0,G=Math.max(O.minX,F.minX),z=Math.max(O.minY,F.minY),L=Math.min(O.maxX,F.maxX),D=Math.min(O.maxY,F.maxY),Math.max(0,L-G)*Math.max(0,D-z)),vt=g(xt)+g(X);it<q?(q=it,S=k,nt=vt<nt?vt:nt):it===q&&vt<nt&&(nt=vt,S=k)}return S||C-v},o.prototype._chooseSplitAxis=function(x,v,C){var S=x.leaf?this.compareMinX:p,O=x.leaf?this.compareMinY:d;this._allDistMargin(x,v,C,S)<this._allDistMargin(x,v,C,O)&&x.children.sort(S)},o.prototype._allDistMargin=function(x,v,C,S){x.children.sort(S);for(var O=this.toBBox,F=f(x,0,v,O),G=f(x,C-v,C,O),z=_(F)+_(G),L=v;L<C-v;L++){var D=x.children[L];h(F,x.leaf?O(D):D),z+=_(F)}for(var q=C-v-1;q>=v;q--){var nt=x.children[q];h(G,x.leaf?O(nt):nt),z+=_(G)}return z},o.prototype._adjustParentBBoxes=function(x,v,C){for(var S=C;S>=0;S--)h(v[S],x)},o.prototype._condense=function(x){for(var v=x.length-1,C=void 0;v>=0;v--)x[v].children.length===0?v>0?(C=x[v-1].children).splice(C.indexOf(x[v]),1):this.clear():l(x[v],this.toBBox)},o})});var u0=Jt((ip,op)=>{(function(r,t){typeof ip==\\\"object\\\"&&typeof op!=\\\"undefined\\\"?op.exports=t():typeof define==\\\"function\\\"&&define.amd?define(t):(r=r||self,r.TinyQueue=t())})(ip,function(){\\\"use strict\\\";var r=function(o,a){if(o===void 0&&(o=[]),a===void 0&&(a=t),this.data=o,this.length=this.data.length,this.compare=a,this.length>0)for(var l=(this.length>>1)-1;l>=0;l--)this._down(l)};r.prototype.push=function(o){this.data.push(o),this.length++,this._up(this.length-1)},r.prototype.pop=function(){if(this.length!==0){var o=this.data[0],a=this.data.pop();return this.length--,this.length>0&&(this.data[0]=a,this._down(0)),o}},r.prototype.peek=function(){return this.data[0]},r.prototype._up=function(o){for(var a=this,l=a.data,f=a.compare,h=l[o];o>0;){var p=o-1>>1,d=l[p];if(f(h,d)>=0)break;l[o]=d,o=p}l[o]=h},r.prototype._down=function(o){for(var a=this,l=a.data,f=a.compare,h=this.length>>1,p=l[o];o<h;){var d=(o<<1)+1,g=l[d],_=d+1;if(_<this.length&&f(l[_],g)<0&&(d=_,g=l[_]),f(g,p)>=0)break;l[o]=g,o=d}l[o]=p};function t(e,o){return e<o?-1:e>o?1:0}return r})});var c0=Jt((AR,l0)=>{l0.exports=function(t,e,o,a){var l=t[0],f=t[1],h=!1;o===void 0&&(o=0),a===void 0&&(a=e.length);for(var p=(a-o)/2,d=0,g=p-1;d<p;g=d++){var _=e[o+d*2+0],y=e[o+d*2+1],M=e[o+g*2+0],w=e[o+g*2+1],T=y>f!=w>f&&l<(M-_)*(f-y)/(w-y)+_;T&&(h=!h)}return h}});var h0=Jt((CR,f0)=>{f0.exports=function(t,e,o,a){var l=t[0],f=t[1],h=!1;o===void 0&&(o=0),a===void 0&&(a=e.length);for(var p=a-o,d=0,g=p-1;d<p;g=d++){var _=e[d+o][0],y=e[d+o][1],M=e[g+o][0],w=e[g+o][1],T=y>f!=w>f&&l<(M-_)*(f-y)/(w-y)+_;T&&(h=!h)}return h}});var m0=Jt((PR,_c)=>{var p0=c0(),d0=h0();_c.exports=function(t,e,o,a){return e.length>0&&Array.isArray(e[0])?d0(t,e,o,a):p0(t,e,o,a)};_c.exports.nested=d0;_c.exports.flat=p0});var y0=Jt((xc,g0)=>{(function(r,t){typeof xc==\\\"object\\\"&&typeof g0!=\\\"undefined\\\"?t(xc):typeof define==\\\"function\\\"&&define.amd?define([\\\"exports\\\"],t):t((r=r||self).predicates={})})(xc,function(r){\\\"use strict\\\";let e=33306690738754706e-32;function o(M,w,T,x,v){let C,S,O,F,G=w[0],z=x[0],L=0,D=0;z>G==z>-G?(C=G,G=w[++L]):(C=z,z=x[++D]);let q=0;if(L<M&&D<T)for(z>G==z>-G?(O=C-((S=G+C)-G),G=w[++L]):(O=C-((S=z+C)-z),z=x[++D]),C=S,O!==0&&(v[q++]=O);L<M&&D<T;)z>G==z>-G?(O=C-((S=C+G)-(F=S-C))+(G-F),G=w[++L]):(O=C-((S=C+z)-(F=S-C))+(z-F),z=x[++D]),C=S,O!==0&&(v[q++]=O);for(;L<M;)O=C-((S=C+G)-(F=S-C))+(G-F),G=w[++L],C=S,O!==0&&(v[q++]=O);for(;D<T;)O=C-((S=C+z)-(F=S-C))+(z-F),z=x[++D],C=S,O!==0&&(v[q++]=O);return C===0&&q!==0||(v[q++]=C),q}function a(M){return new Float64Array(M)}let l=33306690738754716e-32,f=22204460492503146e-32,h=11093356479670487e-47,p=a(4),d=a(8),g=a(12),_=a(16),y=a(4);r.orient2d=function(M,w,T,x,v,C){let S=(w-C)*(T-v),O=(M-v)*(x-C),F=S-O;if(S===0||O===0||S>0!=O>0)return F;let G=Math.abs(S+O);return Math.abs(F)>=l*G?F:-function(z,L,D,q,nt,k,xt){let X,it,vt,pt,et,ot,V,K,at,Tt,dt,Ct,Yt,Wt,Nt,ne,Pt,Xt,tt=z-nt,nn=D-nt,Gt=L-k,te=q-k;et=(Nt=(K=tt-(V=(ot=134217729*tt)-(ot-tt)))*(Tt=te-(at=(ot=134217729*te)-(ot-te)))-((Wt=tt*te)-V*at-K*at-V*Tt))-(dt=Nt-(Pt=(K=Gt-(V=(ot=134217729*Gt)-(ot-Gt)))*(Tt=nn-(at=(ot=134217729*nn)-(ot-nn)))-((ne=Gt*nn)-V*at-K*at-V*Tt))),p[0]=Nt-(dt+et)+(et-Pt),et=(Yt=Wt-((Ct=Wt+dt)-(et=Ct-Wt))+(dt-et))-(dt=Yt-ne),p[1]=Yt-(dt+et)+(et-ne),et=(Xt=Ct+dt)-Ct,p[2]=Ct-(Xt-et)+(dt-et),p[3]=Xt;let qt=function(W,J){let I=J[0];for(let P=1;P<W;P++)I+=J[P];return I}(4,p),$=f*xt;if(qt>=$||-qt>=$||(X=z-(tt+(et=z-tt))+(et-nt),vt=D-(nn+(et=D-nn))+(et-nt),it=L-(Gt+(et=L-Gt))+(et-k),pt=q-(te+(et=q-te))+(et-k),X===0&&it===0&&vt===0&&pt===0)||($=h*xt+e*Math.abs(qt),(qt+=tt*pt+te*X-(Gt*vt+nn*it))>=$||-qt>=$))return qt;et=(Nt=(K=X-(V=(ot=134217729*X)-(ot-X)))*(Tt=te-(at=(ot=134217729*te)-(ot-te)))-((Wt=X*te)-V*at-K*at-V*Tt))-(dt=Nt-(Pt=(K=it-(V=(ot=134217729*it)-(ot-it)))*(Tt=nn-(at=(ot=134217729*nn)-(ot-nn)))-((ne=it*nn)-V*at-K*at-V*Tt))),y[0]=Nt-(dt+et)+(et-Pt),et=(Yt=Wt-((Ct=Wt+dt)-(et=Ct-Wt))+(dt-et))-(dt=Yt-ne),y[1]=Yt-(dt+et)+(et-ne),et=(Xt=Ct+dt)-Ct,y[2]=Ct-(Xt-et)+(dt-et),y[3]=Xt;let N=o(4,p,4,y,d);et=(Nt=(K=tt-(V=(ot=134217729*tt)-(ot-tt)))*(Tt=pt-(at=(ot=134217729*pt)-(ot-pt)))-((Wt=tt*pt)-V*at-K*at-V*Tt))-(dt=Nt-(Pt=(K=Gt-(V=(ot=134217729*Gt)-(ot-Gt)))*(Tt=vt-(at=(ot=134217729*vt)-(ot-vt)))-((ne=Gt*vt)-V*at-K*at-V*Tt))),y[0]=Nt-(dt+et)+(et-Pt),et=(Yt=Wt-((Ct=Wt+dt)-(et=Ct-Wt))+(dt-et))-(dt=Yt-ne),y[1]=Yt-(dt+et)+(et-ne),et=(Xt=Ct+dt)-Ct,y[2]=Ct-(Xt-et)+(dt-et),y[3]=Xt;let b=o(N,d,4,y,g);et=(Nt=(K=X-(V=(ot=134217729*X)-(ot-X)))*(Tt=pt-(at=(ot=134217729*pt)-(ot-pt)))-((Wt=X*pt)-V*at-K*at-V*Tt))-(dt=Nt-(Pt=(K=it-(V=(ot=134217729*it)-(ot-it)))*(Tt=vt-(at=(ot=134217729*vt)-(ot-vt)))-((ne=it*vt)-V*at-K*at-V*Tt))),y[0]=Nt-(dt+et)+(et-Pt),et=(Yt=Wt-((Ct=Wt+dt)-(et=Ct-Wt))+(dt-et))-(dt=Yt-ne),y[1]=Yt-(dt+et)+(et-ne),et=(Xt=Ct+dt)-Ct,y[2]=Ct-(Xt-et)+(dt-et),y[3]=Xt;let R=o(b,g,4,y,_);return _[R-1]}(M,w,T,x,v,C,G)},r.orient2dfast=function(M,w,T,x,v,C){return(w-C)*(T-v)-(M-v)*(x-C)},Object.defineProperty(r,\\\"__esModule\\\",{value:!0})})});var S0=Jt((IR,lp)=>{\\\"use strict\\\";var v0=rp(),Mc=u0(),qb=m0(),Xb=y0().orient2d;Mc.default&&(Mc=Mc.default);lp.exports=M0;lp.exports.default=M0;function M0(r,t,e){t=Math.max(0,t===void 0?2:t),e=e||0;var o=Kb(r),a=new v0(16);a.toBBox=function(C){return{minX:C[0],minY:C[1],maxX:C[0],maxY:C[1]}},a.compareMinX=function(C,S){return C[0]-S[0]},a.compareMinY=function(C,S){return C[1]-S[1]},a.load(r);for(var l=[],f=0,h;f<o.length;f++){var p=o[f];a.remove(p),h=E0(p,h),l.push(h)}var d=new v0(16);for(f=0;f<l.length;f++)d.insert(sp(l[f]));for(var g=t*t,_=e*e;l.length;){var y=l.shift(),M=y.p,w=y.next.p,T=ap(M,w);if(!(T<_)){var x=T/g;p=Yb(a,y.prev.p,M,w,y.next.next.p,x,d),p&&Math.min(ap(p,M),ap(p,w))<=x&&(l.push(y),l.push(E0(p,y)),a.remove(p),d.remove(y),d.insert(sp(y)),d.insert(sp(y.next)))}}y=h;var v=[];do v.push(y.p),y=y.next;while(y!==h);return v.push(y.p),v}function Yb(r,t,e,o,a,l,f){for(var h=new Mc([],Zb),p=r.data;p;){for(var d=0;d<p.children.length;d++){var g=p.children[d],_=p.leaf?up(g,e,o):Jb(e,o,g);_>l||h.push({node:g,dist:_})}for(;h.length&&!h.peek().node.children;){var y=h.pop(),M=y.node,w=up(M,t,e),T=up(M,o,a);if(y.dist<w&&y.dist<T&&x0(e,M,f)&&x0(o,M,f))return M}p=h.pop(),p&&(p=p.node)}return null}function Zb(r,t){return r.dist-t.dist}function Jb(r,t,e){if(_0(r,e)||_0(t,e))return 0;var o=Ec(r[0],r[1],t[0],t[1],e.minX,e.minY,e.maxX,e.minY);if(o===0)return 0;var a=Ec(r[0],r[1],t[0],t[1],e.minX,e.minY,e.minX,e.maxY);if(a===0)return 0;var l=Ec(r[0],r[1],t[0],t[1],e.maxX,e.minY,e.maxX,e.maxY);if(l===0)return 0;var f=Ec(r[0],r[1],t[0],t[1],e.minX,e.maxY,e.maxX,e.maxY);return f===0?0:Math.min(o,a,l,f)}function _0(r,t){return r[0]>=t.minX&&r[0]<=t.maxX&&r[1]>=t.minY&&r[1]<=t.maxY}function x0(r,t,e){for(var o=Math.min(r[0],t[0]),a=Math.min(r[1],t[1]),l=Math.max(r[0],t[0]),f=Math.max(r[1],t[1]),h=e.search({minX:o,minY:a,maxX:l,maxY:f}),p=0;p<h.length;p++)if($b(h[p].p,h[p].next.p,r,t))return!1;return!0}function Za(r,t,e){return Xb(r[0],r[1],t[0],t[1],e[0],e[1])}function $b(r,t,e,o){return r!==o&&t!==e&&Za(r,t,e)>0!=Za(r,t,o)>0&&Za(e,o,r)>0!=Za(e,o,t)>0}function sp(r){var t=r.p,e=r.next.p;return r.minX=Math.min(t[0],e[0]),r.minY=Math.min(t[1],e[1]),r.maxX=Math.max(t[0],e[0]),r.maxY=Math.max(t[1],e[1]),r}function Kb(r){for(var t=r[0],e=r[0],o=r[0],a=r[0],l=0;l<r.length;l++){var f=r[l];f[0]<t[0]&&(t=f),f[0]>o[0]&&(o=f),f[1]<e[1]&&(e=f),f[1]>a[1]&&(a=f)}var h=[t,e,o,a],p=h.slice();for(l=0;l<r.length;l++)qb(r[l],h)||p.push(r[l]);return Qb(p)}function E0(r,t){var e={p:r,prev:null,next:null,minX:0,minY:0,maxX:0,maxY:0};return t?(e.next=t.next,e.prev=t,t.next.prev=e,t.next=e):(e.prev=e,e.next=e),e}function ap(r,t){var e=r[0]-t[0],o=r[1]-t[1];return e*e+o*o}function up(r,t,e){var o=t[0],a=t[1],l=e[0]-o,f=e[1]-a;if(l!==0||f!==0){var h=((r[0]-o)*l+(r[1]-a)*f)/(l*l+f*f);h>1?(o=e[0],a=e[1]):h>0&&(o+=l*h,a+=f*h)}return l=r[0]-o,f=r[1]-a,l*l+f*f}function Ec(r,t,e,o,a,l,f,h){var p=e-r,d=o-t,g=f-a,_=h-l,y=r-a,M=t-l,w=p*p+d*d,T=p*g+d*_,x=g*g+_*_,v=p*y+d*M,C=g*y+_*M,S=w*x-T*T,O,F,G,z,L=S,D=S;S===0?(F=0,L=1,z=C,D=x):(F=T*C-x*v,z=w*C-T*v,F<0?(F=0,z=C,D=x):F>L&&(F=L,z=C+T,D=x)),z<0?(z=0,-v<0?F=0:-v>w?F=L:(F=-v,L=w)):z>D&&(z=D,-v+T<0?F=0:-v+T>w?F=L:(F=-v+T,L=w)),O=F===0?0:F/L,G=z===0?0:z/D;var q=(1-O)*r+O*e,nt=(1-O)*t+O*o,k=(1-G)*a+G*f,xt=(1-G)*l+G*h,X=k-q,it=xt-nt;return X*X+it*it}function jb(r,t){return r[0]===t[0]?r[1]-t[1]:r[0]-t[0]}function Qb(r){r.sort(jb);for(var t=[],e=0;e<r.length;e++){for(;t.length>=2&&Za(t[t.length-2],t[t.length-1],r[e])<=0;)t.pop();t.push(r[e])}for(var o=[],a=r.length-1;a>=0;a--){for(;o.length>=2&&Za(o[o.length-2],o[o.length-1],r[a])<=0;)o.pop();o.push(r[a])}return o.pop(),t.pop(),t.concat(o)}});var P0=Jt((fp,hp)=>{(function(r,t){typeof fp==\\\"object\\\"&&typeof hp!=\\\"undefined\\\"?hp.exports=t():typeof define==\\\"function\\\"&&define.amd?define(t):r.quickselect=t()})(fp,function(){\\\"use strict\\\";function r(a,l,f,h,p){t(a,l,f||0,h||a.length-1,p||o)}function t(a,l,f,h,p){for(;h>f;){if(h-f>600){var d=h-f+1,g=l-f+1,_=Math.log(d),y=.5*Math.exp(2*_/3),M=.5*Math.sqrt(_*y*(d-y)/d)*(g-d/2<0?-1:1),w=Math.max(f,Math.floor(l-g*y/d+M)),T=Math.min(h,Math.floor(l+(d-g)*y/d+M));t(a,l,w,T,p)}var x=a[l],v=f,C=h;for(e(a,f,l),p(a[h],x)>0&&e(a,f,h);v<C;){for(e(a,v,C),v++,C--;p(a[v],x)<0;)v++;for(;p(a[C],x)>0;)C--}p(a[f],x)===0?e(a,f,C):(C++,e(a,C,h)),C<=l&&(f=C+1),l<=C&&(h=C-1)}}function e(a,l,f){var h=a[l];a[l]=a[f],a[f]=h}function o(a,l){return a<l?-1:a>l?1:0}return r})});var gp=Jt((n2,mp)=>{\\\"use strict\\\";mp.exports=Wu;mp.exports.default=Wu;var hT=P0();function Wu(r,t){if(!(this instanceof Wu))return new Wu(r,t);this._maxEntries=Math.max(4,r||9),this._minEntries=Math.max(2,Math.ceil(this._maxEntries*.4)),t&&this._initFormat(t),this.clear()}Wu.prototype={all:function(){return this._all(this.data,[])},search:function(r){var t=this.data,e=[],o=this.toBBox;if(!wc(r,t))return e;for(var a=[],l,f,h,p;t;){for(l=0,f=t.children.length;l<f;l++)h=t.children[l],p=t.leaf?o(h):h,wc(r,p)&&(t.leaf?e.push(h):dp(r,p)?this._all(h,e):a.push(h));t=a.pop()}return e},collides:function(r){var t=this.data,e=this.toBBox;if(!wc(r,t))return!1;for(var o=[],a,l,f,h;t;){for(a=0,l=t.children.length;a<l;a++)if(f=t.children[a],h=t.leaf?e(f):f,wc(r,h)){if(t.leaf||dp(r,h))return!0;o.push(f)}t=o.pop()}return!1},load:function(r){if(!(r&&r.length))return this;if(r.length<this._minEntries){for(var t=0,e=r.length;t<e;t++)this.insert(r[t]);return this}var o=this._build(r.slice(),0,r.length-1,0);if(!this.data.children.length)this.data=o;else if(this.data.height===o.height)this._splitRoot(this.data,o);else{if(this.data.height<o.height){var a=this.data;this.data=o,o=a}this._insert(o,this.data.height-o.height-1,!0)}return this},insert:function(r){return r&&this._insert(r,this.data.height-1),this},clear:function(){return this.data=Ka([]),this},remove:function(r,t){if(!r)return this;for(var e=this.data,o=this.toBBox(r),a=[],l=[],f,h,p,d;e||a.length;){if(e||(e=a.pop(),h=a[a.length-1],f=l.pop(),d=!0),e.leaf&&(p=pT(r,e.children,t),p!==-1))return e.children.splice(p,1),a.push(e),this._condense(a),this;!d&&!e.leaf&&dp(e,o)?(a.push(e),l.push(f),f=0,h=e,e=e.children[0]):h?(f++,e=h.children[f],d=!1):e=null}return this},toBBox:function(r){return r},compareMinX:I0,compareMinY:R0,toJSON:function(){return this.data},fromJSON:function(r){return this.data=r,this},_all:function(r,t){for(var e=[];r;)r.leaf?t.push.apply(t,r.children):e.push.apply(e,r.children),r=e.pop();return t},_build:function(r,t,e,o){var a=e-t+1,l=this._maxEntries,f;if(a<=l)return f=Ka(r.slice(t,e+1)),$a(f,this.toBBox),f;o||(o=Math.ceil(Math.log(a)/Math.log(l)),l=Math.ceil(a/Math.pow(l,o-1))),f=Ka([]),f.leaf=!1,f.height=o;var h=Math.ceil(a/l),p=h*Math.ceil(Math.sqrt(l)),d,g,_,y;for(L0(r,t,e,p,this.compareMinX),d=t;d<=e;d+=p)for(_=Math.min(d+p-1,e),L0(r,d,_,h,this.compareMinY),g=d;g<=_;g+=h)y=Math.min(g+h-1,_),f.children.push(this._build(r,g,y,o-1));return $a(f,this.toBBox),f},_chooseSubtree:function(r,t,e,o){for(var a,l,f,h,p,d,g,_;o.push(t),!(t.leaf||o.length-1===e);){for(g=_=1/0,a=0,l=t.children.length;a<l;a++)f=t.children[a],p=pp(f),d=dT(r,f)-p,d<_?(_=d,g=p<g?p:g,h=f):d===_&&p<g&&(g=p,h=f);t=h||t.children[0]}return t},_insert:function(r,t,e){var o=this.toBBox,a=e?r:o(r),l=[],f=this._chooseSubtree(a,this.data,t,l);for(f.children.push(r),Hu(f,a);t>=0&&l[t].children.length>this._maxEntries;)this._split(l,t),t--;this._adjustParentBBoxes(a,l,t)},_split:function(r,t){var e=r[t],o=e.children.length,a=this._minEntries;this._chooseSplitAxis(e,a,o);var l=this._chooseSplitIndex(e,a,o),f=Ka(e.children.splice(l,e.children.length-l));f.height=e.height,f.leaf=e.leaf,$a(e,this.toBBox),$a(f,this.toBBox),t?r[t-1].children.push(f):this._splitRoot(e,f)},_splitRoot:function(r,t){this.data=Ka([r,t]),this.data.height=r.height+1,this.data.leaf=!1,$a(this.data,this.toBBox)},_chooseSplitIndex:function(r,t,e){var o,a,l,f,h,p,d,g;for(p=d=1/0,o=t;o<=e-t;o++)a=Vu(r,0,o,this.toBBox),l=Vu(r,o,e,this.toBBox),f=mT(a,l),h=pp(a)+pp(l),f<p?(p=f,g=o,d=h<d?h:d):f===p&&h<d&&(d=h,g=o);return g},_chooseSplitAxis:function(r,t,e){var o=r.leaf?this.compareMinX:I0,a=r.leaf?this.compareMinY:R0,l=this._allDistMargin(r,t,e,o),f=this._allDistMargin(r,t,e,a);l<f&&r.children.sort(o)},_allDistMargin:function(r,t,e,o){r.children.sort(o);var a=this.toBBox,l=Vu(r,0,t,a),f=Vu(r,e-t,e,a),h=Sc(l)+Sc(f),p,d;for(p=t;p<e-t;p++)d=r.children[p],Hu(l,r.leaf?a(d):d),h+=Sc(l);for(p=e-t-1;p>=t;p--)d=r.children[p],Hu(f,r.leaf?a(d):d),h+=Sc(f);return h},_adjustParentBBoxes:function(r,t,e){for(var o=e;o>=0;o--)Hu(t[o],r)},_condense:function(r){for(var t=r.length-1,e;t>=0;t--)r[t].children.length===0?t>0?(e=r[t-1].children,e.splice(e.indexOf(r[t]),1)):this.clear():$a(r[t],this.toBBox)},_initFormat:function(r){var t=[\\\"return a\\\",\\\" - b\\\",\\\";\\\"];this.compareMinX=new Function(\\\"a\\\",\\\"b\\\",t.join(r[0])),this.compareMinY=new Function(\\\"a\\\",\\\"b\\\",t.join(r[1])),this.toBBox=new Function(\\\"a\\\",\\\"return {minX: a\\\"+r[0]+\\\", minY: a\\\"+r[1]+\\\", maxX: a\\\"+r[2]+\\\", maxY: a\\\"+r[3]+\\\"};\\\")}};function pT(r,t,e){if(!e)return t.indexOf(r);for(var o=0;o<t.length;o++)if(e(r,t[o]))return o;return-1}function $a(r,t){Vu(r,0,r.children.length,t,r)}function Vu(r,t,e,o,a){a||(a=Ka(null)),a.minX=1/0,a.minY=1/0,a.maxX=-1/0,a.maxY=-1/0;for(var l=t,f;l<e;l++)f=r.children[l],Hu(a,r.leaf?o(f):f);return a}function Hu(r,t){return r.minX=Math.min(r.minX,t.minX),r.minY=Math.min(r.minY,t.minY),r.maxX=Math.max(r.maxX,t.maxX),r.maxY=Math.max(r.maxY,t.maxY),r}function I0(r,t){return r.minX-t.minX}function R0(r,t){return r.minY-t.minY}function pp(r){return(r.maxX-r.minX)*(r.maxY-r.minY)}function Sc(r){return r.maxX-r.minX+(r.maxY-r.minY)}function dT(r,t){return(Math.max(t.maxX,r.maxX)-Math.min(t.minX,r.minX))*(Math.max(t.maxY,r.maxY)-Math.min(t.minY,r.minY))}function mT(r,t){var e=Math.max(r.minX,t.minX),o=Math.max(r.minY,t.minY),a=Math.min(r.maxX,t.maxX),l=Math.min(r.maxY,t.maxY);return Math.max(0,a-e)*Math.max(0,l-o)}function dp(r,t){return r.minX<=t.minX&&r.minY<=t.minY&&t.maxX<=r.maxX&&t.maxY<=r.maxY}function wc(r,t){return t.minX<=r.maxX&&t.minY<=r.maxY&&t.maxX>=r.minX&&t.maxY>=r.minY}function Ka(r){return{children:r,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function L0(r,t,e,o,a){for(var l=[t,e],f;l.length;)e=l.pop(),t=l.pop(),!(e-t<=o)&&(f=t+Math.ceil((e-t)/o/2)*o,hT(r,f,t,e,a),l.push(t,f,f,e))}});var B0=Jt((mO,Mp)=>{\\\"use strict\\\";Mp.exports=Cc;Mp.exports.default=Cc;function Cc(r,t,e){e=e||2;var o=t&&t.length,a=o?t[0]*e:r.length,l=D0(r,0,a,e,!0),f=[];if(!l||l.next===l.prev)return f;var h,p,d,g,_,y,M;if(o&&(l=bT(r,t,l,e)),r.length>80*e){h=d=r[0],p=g=r[1];for(var w=e;w<a;w+=e)_=r[w],y=r[w+1],_<h&&(h=_),y<p&&(p=y),_>d&&(d=_),y>g&&(g=y);M=Math.max(d-h,g-p),M=M!==0?32767/M:0}return Yu(l,f,e,h,p,M,0),f}function D0(r,t,e,o,a){var l,f;if(a===Ep(r,t,e,o)>0)for(l=t;l<e;l+=o)f=O0(l,r[l],r[l+1],f);else for(l=e-o;l>=t;l-=o)f=O0(l,r[l],r[l+1],f);return f&&Pc(f,f.next)&&(Ju(f),f=f.next),f}function Ks(r,t){if(!r)return r;t||(t=r);var e=r,o;do if(o=!1,!e.steiner&&(Pc(e,e.next)||Un(e.prev,e,e.next)===0)){if(Ju(e),e=t=e.prev,e===e.next)break;o=!0}else e=e.next;while(o||e!==t);return t}function Yu(r,t,e,o,a,l,f){if(r){!f&&l&&IT(r,o,a,l);for(var h=r,p,d;r.prev!==r.next;){if(p=r.prev,d=r.next,l?MT(r,o,a,l):ET(r)){t.push(p.i/e|0),t.push(r.i/e|0),t.push(d.i/e|0),Ju(r),r=d.next,h=d.next;continue}if(r=d,r===h){f?f===1?(r=ST(Ks(r),t,e),Yu(r,t,e,o,a,l,2)):f===2&&wT(r,t,e,o,a,l):Yu(Ks(r),t,e,o,a,l,1);break}}}}function ET(r){var t=r.prev,e=r,o=r.next;if(Un(t,e,o)>=0)return!1;for(var a=t.x,l=e.x,f=o.x,h=t.y,p=e.y,d=o.y,g=a<l?a<f?a:f:l<f?l:f,_=h<p?h<d?h:d:p<d?p:d,y=a>l?a>f?a:f:l>f?l:f,M=h>p?h>d?h:d:p>d?p:d,w=o.next;w!==t;){if(w.x>=g&&w.x<=y&&w.y>=_&&w.y<=M&&tu(a,h,l,p,f,d,w.x,w.y)&&Un(w.prev,w,w.next)>=0)return!1;w=w.next}return!0}function MT(r,t,e,o){var a=r.prev,l=r,f=r.next;if(Un(a,l,f)>=0)return!1;for(var h=a.x,p=l.x,d=f.x,g=a.y,_=l.y,y=f.y,M=h<p?h<d?h:d:p<d?p:d,w=g<_?g<y?g:y:_<y?_:y,T=h>p?h>d?h:d:p>d?p:d,x=g>_?g>y?g:y:_>y?_:y,v=_p(M,w,t,e,o),C=_p(T,x,t,e,o),S=r.prevZ,O=r.nextZ;S&&S.z>=v&&O&&O.z<=C;){if(S.x>=M&&S.x<=T&&S.y>=w&&S.y<=x&&S!==a&&S!==f&&tu(h,g,p,_,d,y,S.x,S.y)&&Un(S.prev,S,S.next)>=0||(S=S.prevZ,O.x>=M&&O.x<=T&&O.y>=w&&O.y<=x&&O!==a&&O!==f&&tu(h,g,p,_,d,y,O.x,O.y)&&Un(O.prev,O,O.next)>=0))return!1;O=O.nextZ}for(;S&&S.z>=v;){if(S.x>=M&&S.x<=T&&S.y>=w&&S.y<=x&&S!==a&&S!==f&&tu(h,g,p,_,d,y,S.x,S.y)&&Un(S.prev,S,S.next)>=0)return!1;S=S.prevZ}for(;O&&O.z<=C;){if(O.x>=M&&O.x<=T&&O.y>=w&&O.y<=x&&O!==a&&O!==f&&tu(h,g,p,_,d,y,O.x,O.y)&&Un(O.prev,O,O.next)>=0)return!1;O=O.nextZ}return!0}function ST(r,t,e){var o=r;do{var a=o.prev,l=o.next.next;!Pc(a,l)&&F0(a,o,o.next,l)&&Zu(a,l)&&Zu(l,a)&&(t.push(a.i/e|0),t.push(o.i/e|0),t.push(l.i/e|0),Ju(o),Ju(o.next),o=r=l),o=o.next}while(o!==r);return Ks(o)}function wT(r,t,e,o,a,l){var f=r;do{for(var h=f.next.next;h!==f.prev;){if(f.i!==h.i&&NT(f,h)){var p=U0(f,h);f=Ks(f,f.next),p=Ks(p,p.next),Yu(f,t,e,o,a,l,0),Yu(p,t,e,o,a,l,0);return}h=h.next}f=f.next}while(f!==r)}function bT(r,t,e,o){var a=[],l,f,h,p,d;for(l=0,f=t.length;l<f;l++)h=t[l]*o,p=l<f-1?t[l+1]*o:r.length,d=D0(r,h,p,o,!1),d===d.next&&(d.steiner=!0),a.push(LT(d));for(a.sort(TT),l=0;l<a.length;l++)e=AT(a[l],e);return e}function TT(r,t){return r.x-t.x}function AT(r,t){var e=CT(r,t);if(!e)return t;var o=U0(e,r);return Ks(o,o.next),Ks(e,e.next)}function CT(r,t){var e=t,o=r.x,a=r.y,l=-1/0,f;do{if(a<=e.y&&a>=e.next.y&&e.next.y!==e.y){var h=e.x+(a-e.y)*(e.next.x-e.x)/(e.next.y-e.y);if(h<=o&&h>l&&(l=h,f=e.x<e.next.x?e:e.next,h===o))return f}e=e.next}while(e!==t);if(!f)return null;var p=f,d=f.x,g=f.y,_=1/0,y;e=f;do o>=e.x&&e.x>=d&&o!==e.x&&tu(a<g?o:l,a,d,g,a<g?l:o,a,e.x,e.y)&&(y=Math.abs(a-e.y)/(o-e.x),Zu(e,r)&&(y<_||y===_&&(e.x>f.x||e.x===f.x&&PT(f,e)))&&(f=e,_=y)),e=e.next;while(e!==p);return f}function PT(r,t){return Un(r.prev,r,t.prev)<0&&Un(t.next,r,r.next)<0}function IT(r,t,e,o){var a=r;do a.z===0&&(a.z=_p(a.x,a.y,t,e,o)),a.prevZ=a.prev,a.nextZ=a.next,a=a.next;while(a!==r);a.prevZ.nextZ=null,a.prevZ=null,RT(a)}function RT(r){var t,e,o,a,l,f,h,p,d=1;do{for(e=r,r=null,l=null,f=0;e;){for(f++,o=e,h=0,t=0;t<d&&(h++,o=o.nextZ,!!o);t++);for(p=d;h>0||p>0&&o;)h!==0&&(p===0||!o||e.z<=o.z)?(a=e,e=e.nextZ,h--):(a=o,o=o.nextZ,p--),l?l.nextZ=a:r=a,a.prevZ=l,l=a;e=o}l.nextZ=null,d*=2}while(f>1);return r}function _p(r,t,e,o,a){return r=(r-e)*a|0,t=(t-o)*a|0,r=(r|r<<8)&16711935,r=(r|r<<4)&252645135,r=(r|r<<2)&858993459,r=(r|r<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,r|t<<1}function LT(r){var t=r,e=r;do(t.x<e.x||t.x===e.x&&t.y<e.y)&&(e=t),t=t.next;while(t!==r);return e}function tu(r,t,e,o,a,l,f,h){return(a-f)*(t-h)>=(r-f)*(l-h)&&(r-f)*(o-h)>=(e-f)*(t-h)&&(e-f)*(l-h)>=(a-f)*(o-h)}function NT(r,t){return r.next.i!==t.i&&r.prev.i!==t.i&&!OT(r,t)&&(Zu(r,t)&&Zu(t,r)&&DT(r,t)&&(Un(r.prev,r,t.prev)||Un(r,t.prev,t))||Pc(r,t)&&Un(r.prev,r,r.next)>0&&Un(t.prev,t,t.next)>0)}function Un(r,t,e){return(t.y-r.y)*(e.x-t.x)-(t.x-r.x)*(e.y-t.y)}function Pc(r,t){return r.x===t.x&&r.y===t.y}function F0(r,t,e,o){var a=Ac(Un(r,t,e)),l=Ac(Un(r,t,o)),f=Ac(Un(e,o,r)),h=Ac(Un(e,o,t));return!!(a!==l&&f!==h||a===0&&Tc(r,e,t)||l===0&&Tc(r,o,t)||f===0&&Tc(e,r,o)||h===0&&Tc(e,t,o))}function Tc(r,t,e){return t.x<=Math.max(r.x,e.x)&&t.x>=Math.min(r.x,e.x)&&t.y<=Math.max(r.y,e.y)&&t.y>=Math.min(r.y,e.y)}function Ac(r){return r>0?1:r<0?-1:0}function OT(r,t){var e=r;do{if(e.i!==r.i&&e.next.i!==r.i&&e.i!==t.i&&e.next.i!==t.i&&F0(e,e.next,r,t))return!0;e=e.next}while(e!==r);return!1}function Zu(r,t){return Un(r.prev,r,r.next)<0?Un(r,t,r.next)>=0&&Un(r,r.prev,t)>=0:Un(r,t,r.prev)<0||Un(r,r.next,t)<0}function DT(r,t){var e=r,o=!1,a=(r.x+t.x)/2,l=(r.y+t.y)/2;do e.y>l!=e.next.y>l&&e.next.y!==e.y&&a<(e.next.x-e.x)*(l-e.y)/(e.next.y-e.y)+e.x&&(o=!o),e=e.next;while(e!==r);return o}function U0(r,t){var e=new xp(r.i,r.x,r.y),o=new xp(t.i,t.x,t.y),a=r.next,l=t.prev;return r.next=t,t.prev=r,e.next=a,a.prev=e,o.next=e,e.prev=o,l.next=o,o.prev=l,o}function O0(r,t,e,o){var a=new xp(r,t,e);return o?(a.next=o.next,a.prev=o,o.next.prev=a,o.next=a):(a.prev=a,a.next=a),a}function Ju(r){r.next.prev=r.prev,r.prev.next=r.next,r.prevZ&&(r.prevZ.nextZ=r.nextZ),r.nextZ&&(r.nextZ.prevZ=r.prevZ)}function xp(r,t,e){this.i=r,this.x=t,this.y=e,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}Cc.deviation=function(r,t,e,o){var a=t&&t.length,l=a?t[0]*e:r.length,f=Math.abs(Ep(r,0,l,e));if(a)for(var h=0,p=t.length;h<p;h++){var d=t[h]*e,g=h<p-1?t[h+1]*e:r.length;f-=Math.abs(Ep(r,d,g,e))}var _=0;for(h=0;h<o.length;h+=3){var y=o[h]*e,M=o[h+1]*e,w=o[h+2]*e;_+=Math.abs((r[y]-r[w])*(r[M+1]-r[y+1])-(r[y]-r[M])*(r[w+1]-r[y+1]))}return f===0&&_===0?0:Math.abs((_-f)/f)};function Ep(r,t,e,o){for(var a=0,l=t,f=e-o;l<e;l+=o)a+=(r[f]-r[l])*(r[l+1]+r[f+1]),f=l;return a}Cc.flatten=function(r){for(var t=r[0][0].length,e={vertices:[],holes:[],dimensions:t},o=0,a=0;a<r.length;a++){for(var l=0;l<r[a].length;l++)for(var f=0;f<t;f++)e.vertices.push(r[a][l][f]);a>0&&(o+=r[a-1].length,e.holes.push(o))}return e}});var Ap=Jt(ue=>{\\\"use strict\\\";Object.defineProperty(ue,\\\"__esModule\\\",{value:!0});ue.earthRadius=63710088e-1;ue.factors={centimeters:ue.earthRadius*100,centimetres:ue.earthRadius*100,degrees:ue.earthRadius/111325,feet:ue.earthRadius*3.28084,inches:ue.earthRadius*39.37,kilometers:ue.earthRadius/1e3,kilometres:ue.earthRadius/1e3,meters:ue.earthRadius,metres:ue.earthRadius,miles:ue.earthRadius/1609.344,millimeters:ue.earthRadius*1e3,millimetres:ue.earthRadius*1e3,nauticalmiles:ue.earthRadius/1852,radians:1,yards:ue.earthRadius*1.0936};ue.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:1/1e3,kilometres:1/1e3,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/ue.earthRadius,yards:1.0936133};ue.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,hectares:1e-4,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,millimeters:1e6,millimetres:1e6,yards:1.195990046};function _s(r,t,e){e===void 0&&(e={});var o={type:\\\"Feature\\\"};return(e.id===0||e.id)&&(o.id=e.id),e.bbox&&(o.bbox=e.bbox),o.properties=t||{},o.geometry=r,o}ue.feature=_s;function UT(r,t,e){switch(e===void 0&&(e={}),r){case\\\"Point\\\":return Sp(t).geometry;case\\\"LineString\\\":return bp(t).geometry;case\\\"Polygon\\\":return wp(t).geometry;case\\\"MultiPoint\\\":return k0(t).geometry;case\\\"MultiLineString\\\":return z0(t).geometry;case\\\"MultiPolygon\\\":return G0(t).geometry;default:throw new Error(r+\\\" is invalid\\\")}}ue.geometry=UT;function Sp(r,t,e){if(e===void 0&&(e={}),!r)throw new Error(\\\"coordinates is required\\\");if(!Array.isArray(r))throw new Error(\\\"coordinates must be an Array\\\");if(r.length<2)throw new Error(\\\"coordinates must be at least 2 numbers long\\\");if(!Ic(r[0])||!Ic(r[1]))throw new Error(\\\"coordinates must contain numbers\\\");var o={type:\\\"Point\\\",coordinates:r};return _s(o,t,e)}ue.point=Sp;function BT(r,t,e){return e===void 0&&(e={}),Rc(r.map(function(o){return Sp(o,t)}),e)}ue.points=BT;function wp(r,t,e){e===void 0&&(e={});for(var o=0,a=r;o<a.length;o++){var l=a[o];if(l.length<4)throw new Error(\\\"Each LinearRing of a Polygon must have 4 or more Positions.\\\");for(var f=0;f<l[l.length-1].length;f++)if(l[l.length-1][f]!==l[0][f])throw new Error(\\\"First and last Position are not equivalent.\\\")}var h={type:\\\"Polygon\\\",coordinates:r};return _s(h,t,e)}ue.polygon=wp;function zT(r,t,e){return e===void 0&&(e={}),Rc(r.map(function(o){return wp(o,t)}),e)}ue.polygons=zT;function bp(r,t,e){if(e===void 0&&(e={}),r.length<2)throw new Error(\\\"coordinates must be an array of two or more positions\\\");var o={type:\\\"LineString\\\",coordinates:r};return _s(o,t,e)}ue.lineString=bp;function kT(r,t,e){return e===void 0&&(e={}),Rc(r.map(function(o){return bp(o,t)}),e)}ue.lineStrings=kT;function Rc(r,t){t===void 0&&(t={});var e={type:\\\"FeatureCollection\\\"};return t.id&&(e.id=t.id),t.bbox&&(e.bbox=t.bbox),e.features=r,e}ue.featureCollection=Rc;function z0(r,t,e){e===void 0&&(e={});var o={type:\\\"MultiLineString\\\",coordinates:r};return _s(o,t,e)}ue.multiLineString=z0;function k0(r,t,e){e===void 0&&(e={});var o={type:\\\"MultiPoint\\\",coordinates:r};return _s(o,t,e)}ue.multiPoint=k0;function G0(r,t,e){e===void 0&&(e={});var o={type:\\\"MultiPolygon\\\",coordinates:r};return _s(o,t,e)}ue.multiPolygon=G0;function GT(r,t,e){e===void 0&&(e={});var o={type:\\\"GeometryCollection\\\",geometries:r};return _s(o,t,e)}ue.geometryCollection=GT;function VT(r,t){if(t===void 0&&(t=0),t&&!(t>=0))throw new Error(\\\"precision must be a positive number\\\");var e=Math.pow(10,t||0);return Math.round(r*e)/e}ue.round=VT;function V0(r,t){t===void 0&&(t=\\\"kilometers\\\");var e=ue.factors[t];if(!e)throw new Error(t+\\\" units is invalid\\\");return r*e}ue.radiansToLength=V0;function Tp(r,t){t===void 0&&(t=\\\"kilometers\\\");var e=ue.factors[t];if(!e)throw new Error(t+\\\" units is invalid\\\");return r/e}ue.lengthToRadians=Tp;function HT(r,t){return H0(Tp(r,t))}ue.lengthToDegrees=HT;function WT(r){var t=r%360;return t<0&&(t+=360),t}ue.bearingToAzimuth=WT;function H0(r){var t=r%(2*Math.PI);return t*180/Math.PI}ue.radiansToDegrees=H0;function qT(r){var t=r%360;return t*Math.PI/180}ue.degreesToRadians=qT;function XT(r,t,e){if(t===void 0&&(t=\\\"kilometers\\\"),e===void 0&&(e=\\\"kilometers\\\"),!(r>=0))throw new Error(\\\"length must be a positive number\\\");return V0(Tp(r,t),e)}ue.convertLength=XT;function YT(r,t,e){if(t===void 0&&(t=\\\"meters\\\"),e===void 0&&(e=\\\"kilometers\\\"),!(r>=0))throw new Error(\\\"area must be a positive number\\\");var o=ue.areaFactors[t];if(!o)throw new Error(\\\"invalid original units\\\");var a=ue.areaFactors[e];if(!a)throw new Error(\\\"invalid final units\\\");return r/o*a}ue.convertArea=YT;function Ic(r){return!isNaN(r)&&r!==null&&!Array.isArray(r)}ue.isNumber=Ic;function ZT(r){return!!r&&r.constructor===Object}ue.isObject=ZT;function JT(r){if(!r)throw new Error(\\\"bbox is required\\\");if(!Array.isArray(r))throw new Error(\\\"bbox must be an Array\\\");if(r.length!==4&&r.length!==6)throw new Error(\\\"bbox must be an Array of 4 or 6 numbers\\\");r.forEach(function(t){if(!Ic(t))throw new Error(\\\"bbox must only contain numbers\\\")})}ue.validateBBox=JT;function $T(r){if(!r)throw new Error(\\\"id is required\\\");if([\\\"string\\\",\\\"number\\\"].indexOf(typeof r)===-1)throw new Error(\\\"id must be a number or a string\\\")}ue.validateId=$T});var Pp=Jt(ir=>{\\\"use strict\\\";Object.defineProperty(ir,\\\"__esModule\\\",{value:!0});var Gr=Ap();function $u(r,t,e){if(r!==null)for(var o,a,l,f,h,p,d,g=0,_=0,y,M=r.type,w=M===\\\"FeatureCollection\\\",T=M===\\\"Feature\\\",x=w?r.features.length:1,v=0;v<x;v++){d=w?r.features[v].geometry:T?r.geometry:r,y=d?d.type===\\\"GeometryCollection\\\":!1,h=y?d.geometries.length:1;for(var C=0;C<h;C++){var S=0,O=0;if(f=y?d.geometries[C]:d,f!==null){p=f.coordinates;var F=f.type;switch(g=e&&(F===\\\"Polygon\\\"||F===\\\"MultiPolygon\\\")?1:0,F){case null:break;case\\\"Point\\\":if(t(p,_,v,S,O)===!1)return!1;_++,S++;break;case\\\"LineString\\\":case\\\"MultiPoint\\\":for(o=0;o<p.length;o++){if(t(p[o],_,v,S,O)===!1)return!1;_++,F===\\\"MultiPoint\\\"&&S++}F===\\\"LineString\\\"&&S++;break;case\\\"Polygon\\\":case\\\"MultiLineString\\\":for(o=0;o<p.length;o++){for(a=0;a<p[o].length-g;a++){if(t(p[o][a],_,v,S,O)===!1)return!1;_++}F===\\\"MultiLineString\\\"&&S++,F===\\\"Polygon\\\"&&O++}F===\\\"Polygon\\\"&&S++;break;case\\\"MultiPolygon\\\":for(o=0;o<p.length;o++){for(O=0,a=0;a<p[o].length;a++){for(l=0;l<p[o][a].length-g;l++){if(t(p[o][a][l],_,v,S,O)===!1)return!1;_++}O++}S++}break;case\\\"GeometryCollection\\\":for(o=0;o<f.geometries.length;o++)if($u(f.geometries[o],t,e)===!1)return!1;break;default:throw new Error(\\\"Unknown Geometry Type\\\")}}}}}function KT(r,t,e,o){var a=e;return $u(r,function(l,f,h,p,d){f===0&&e===void 0?a=l:a=t(a,l,f,h,p,d)},o),a}function W0(r,t){var e;switch(r.type){case\\\"FeatureCollection\\\":for(e=0;e<r.features.length&&t(r.features[e].properties,e)!==!1;e++);break;case\\\"Feature\\\":t(r.properties,0);break}}function jT(r,t,e){var o=e;return W0(r,function(a,l){l===0&&e===void 0?o=a:o=t(o,a,l)}),o}function q0(r,t){if(r.type===\\\"Feature\\\")t(r,0);else if(r.type===\\\"FeatureCollection\\\")for(var e=0;e<r.features.length&&t(r.features[e],e)!==!1;e++);}function QT(r,t,e){var o=e;return q0(r,function(a,l){l===0&&e===void 0?o=a:o=t(o,a,l)}),o}function tA(r){var t=[];return $u(r,function(e){t.push(e)}),t}function Cp(r,t){var e,o,a,l,f,h,p,d,g,_,y=0,M=r.type===\\\"FeatureCollection\\\",w=r.type===\\\"Feature\\\",T=M?r.features.length:1;for(e=0;e<T;e++){for(h=M?r.features[e].geometry:w?r.geometry:r,d=M?r.features[e].properties:w?r.properties:{},g=M?r.features[e].bbox:w?r.bbox:void 0,_=M?r.features[e].id:w?r.id:void 0,p=h?h.type===\\\"GeometryCollection\\\":!1,f=p?h.geometries.length:1,a=0;a<f;a++){if(l=p?h.geometries[a]:h,l===null){if(t(null,y,d,g,_)===!1)return!1;continue}switch(l.type){case\\\"Point\\\":case\\\"LineString\\\":case\\\"MultiPoint\\\":case\\\"Polygon\\\":case\\\"MultiLineString\\\":case\\\"MultiPolygon\\\":{if(t(l,y,d,g,_)===!1)return!1;break}case\\\"GeometryCollection\\\":{for(o=0;o<l.geometries.length;o++)if(t(l.geometries[o],y,d,g,_)===!1)return!1;break}default:throw new Error(\\\"Unknown Geometry Type\\\")}}y++}}function eA(r,t,e){var o=e;return Cp(r,function(a,l,f,h,p){l===0&&e===void 0?o=a:o=t(o,a,l,f,h,p)}),o}function Lc(r,t){Cp(r,function(e,o,a,l,f){var h=e===null?null:e.type;switch(h){case null:case\\\"Point\\\":case\\\"LineString\\\":case\\\"Polygon\\\":return t(Gr.feature(e,a,{bbox:l,id:f}),o,0)===!1?!1:void 0}var p;switch(h){case\\\"MultiPoint\\\":p=\\\"Point\\\";break;case\\\"MultiLineString\\\":p=\\\"LineString\\\";break;case\\\"MultiPolygon\\\":p=\\\"Polygon\\\";break}for(var d=0;d<e.coordinates.length;d++){var g=e.coordinates[d],_={type:p,coordinates:g};if(t(Gr.feature(_,a),o,d)===!1)return!1}})}function nA(r,t,e){var o=e;return Lc(r,function(a,l,f){l===0&&f===0&&e===void 0?o=a:o=t(o,a,l,f)}),o}function X0(r,t){Lc(r,function(e,o,a){var l=0;if(e.geometry){var f=e.geometry.type;if(!(f===\\\"Point\\\"||f===\\\"MultiPoint\\\")){var h,p=0,d=0,g=0;if($u(e,function(_,y,M,w,T){if(h===void 0||o>p||w>d||T>g){h=_,p=o,d=w,g=T,l=0;return}var x=Gr.lineString([h,_],e.properties);if(t(x,o,a,T,l)===!1)return!1;l++,h=_})===!1)return!1}}})}function rA(r,t,e){var o=e,a=!1;return X0(r,function(l,f,h,p,d){a===!1&&e===void 0?o=l:o=t(o,l,f,h,p,d),a=!0}),o}function Y0(r,t){if(!r)throw new Error(\\\"geojson is required\\\");Lc(r,function(e,o,a){if(e.geometry!==null){var l=e.geometry.type,f=e.geometry.coordinates;switch(l){case\\\"LineString\\\":if(t(e,o,a,0,0)===!1)return!1;break;case\\\"Polygon\\\":for(var h=0;h<f.length;h++)if(t(Gr.lineString(f[h],e.properties),o,a,h)===!1)return!1;break}}})}function iA(r,t,e){var o=e;return Y0(r,function(a,l,f,h){l===0&&e===void 0?o=a:o=t(o,a,l,f,h)}),o}function oA(r,t){if(t=t||{},!Gr.isObject(t))throw new Error(\\\"options is invalid\\\");var e=t.featureIndex||0,o=t.multiFeatureIndex||0,a=t.geometryIndex||0,l=t.segmentIndex||0,f=t.properties,h;switch(r.type){case\\\"FeatureCollection\\\":e<0&&(e=r.features.length+e),f=f||r.features[e].properties,h=r.features[e].geometry;break;case\\\"Feature\\\":f=f||r.properties,h=r.geometry;break;case\\\"Point\\\":case\\\"MultiPoint\\\":return null;case\\\"LineString\\\":case\\\"Polygon\\\":case\\\"MultiLineString\\\":case\\\"MultiPolygon\\\":h=r;break;default:throw new Error(\\\"geojson is invalid\\\")}if(h===null)return null;var p=h.coordinates;switch(h.type){case\\\"Point\\\":case\\\"MultiPoint\\\":return null;case\\\"LineString\\\":return l<0&&(l=p.length+l-1),Gr.lineString([p[l],p[l+1]],f,t);case\\\"Polygon\\\":return a<0&&(a=p.length+a),l<0&&(l=p[a].length+l-1),Gr.lineString([p[a][l],p[a][l+1]],f,t);case\\\"MultiLineString\\\":return o<0&&(o=p.length+o),l<0&&(l=p[o].length+l-1),Gr.lineString([p[o][l],p[o][l+1]],f,t);case\\\"MultiPolygon\\\":return o<0&&(o=p.length+o),a<0&&(a=p[o].length+a),l<0&&(l=p[o][a].length-l-1),Gr.lineString([p[o][a][l],p[o][a][l+1]],f,t)}throw new Error(\\\"geojson is invalid\\\")}function sA(r,t){if(t=t||{},!Gr.isObject(t))throw new Error(\\\"options is invalid\\\");var e=t.featureIndex||0,o=t.multiFeatureIndex||0,a=t.geometryIndex||0,l=t.coordIndex||0,f=t.properties,h;switch(r.type){case\\\"FeatureCollection\\\":e<0&&(e=r.features.length+e),f=f||r.features[e].properties,h=r.features[e].geometry;break;case\\\"Feature\\\":f=f||r.properties,h=r.geometry;break;case\\\"Point\\\":case\\\"MultiPoint\\\":return null;case\\\"LineString\\\":case\\\"Polygon\\\":case\\\"MultiLineString\\\":case\\\"MultiPolygon\\\":h=r;break;default:throw new Error(\\\"geojson is invalid\\\")}if(h===null)return null;var p=h.coordinates;switch(h.type){case\\\"Point\\\":return Gr.point(p,f,t);case\\\"MultiPoint\\\":return o<0&&(o=p.length+o),Gr.point(p[o],f,t);case\\\"LineString\\\":return l<0&&(l=p.length+l),Gr.point(p[l],f,t);case\\\"Polygon\\\":return a<0&&(a=p.length+a),l<0&&(l=p[a].length+l),Gr.point(p[a][l],f,t);case\\\"MultiLineString\\\":return o<0&&(o=p.length+o),l<0&&(l=p[o].length+l),Gr.point(p[o][l],f,t);case\\\"MultiPolygon\\\":return o<0&&(o=p.length+o),a<0&&(a=p[o].length+a),l<0&&(l=p[o][a].length-l),Gr.point(p[o][a][l],f,t)}throw new Error(\\\"geojson is invalid\\\")}ir.coordAll=tA;ir.coordEach=$u;ir.coordReduce=KT;ir.featureEach=q0;ir.featureReduce=QT;ir.findPoint=sA;ir.findSegment=oA;ir.flattenEach=Lc;ir.flattenReduce=nA;ir.geomEach=Cp;ir.geomReduce=eA;ir.lineEach=Y0;ir.lineReduce=iA;ir.propEach=W0;ir.propReduce=jT;ir.segmentEach=X0;ir.segmentReduce=rA});var Z0=Jt(Rp=>{\\\"use strict\\\";Object.defineProperty(Rp,\\\"__esModule\\\",{value:!0});var aA=Pp();function Ip(r){var t=[1/0,1/0,-1/0,-1/0];return aA.coordEach(r,function(e){t[0]>e[0]&&(t[0]=e[0]),t[1]>e[1]&&(t[1]=e[1]),t[2]<e[0]&&(t[2]=e[0]),t[3]<e[1]&&(t[3]=e[1])}),t}Ip.default=Ip;Rp.default=Ip});var Nc=Jt((RO,Lp)=>{var mo=rp(),$0=Ap(),K0=Pp(),eu=Z0().default,uA=K0.featureEach,PO=K0.coordEach,IO=$0.polygon,J0=$0.featureCollection;function j0(r){var t=new mo(r);return t.insert=function(e){if(e.type!==\\\"Feature\\\")throw new Error(\\\"invalid feature\\\");return e.bbox=e.bbox?e.bbox:eu(e),mo.prototype.insert.call(this,e)},t.load=function(e){var o=[];return Array.isArray(e)?e.forEach(function(a){if(a.type!==\\\"Feature\\\")throw new Error(\\\"invalid features\\\");a.bbox=a.bbox?a.bbox:eu(a),o.push(a)}):uA(e,function(a){if(a.type!==\\\"Feature\\\")throw new Error(\\\"invalid features\\\");a.bbox=a.bbox?a.bbox:eu(a),o.push(a)}),mo.prototype.load.call(this,o)},t.remove=function(e,o){if(e.type!==\\\"Feature\\\")throw new Error(\\\"invalid feature\\\");return e.bbox=e.bbox?e.bbox:eu(e),mo.prototype.remove.call(this,e,o)},t.clear=function(){return mo.prototype.clear.call(this)},t.search=function(e){var o=mo.prototype.search.call(this,this.toBBox(e));return J0(o)},t.collides=function(e){return mo.prototype.collides.call(this,this.toBBox(e))},t.all=function(){var e=mo.prototype.all.call(this);return J0(e)},t.toJSON=function(){return mo.prototype.toJSON.call(this)},t.fromJSON=function(e){return mo.prototype.fromJSON.call(this,e)},t.toBBox=function(e){var o;if(e.bbox)o=e.bbox;else if(Array.isArray(e)&&e.length===4)o=e;else if(Array.isArray(e)&&e.length===6)o=[e[0],e[1],e[3],e[4]];else if(e.type===\\\"Feature\\\")o=eu(e);else if(e.type===\\\"FeatureCollection\\\")o=eu(e);else throw new Error(\\\"invalid geojson\\\");return{minX:o[0],minY:o[1],maxX:o[2],maxY:o[3]}},t}Lp.exports=j0;Lp.exports.default=j0});var Bp=Jt((k3,uy)=>{\\\"use strict\\\";var ay=Object.prototype.toString;uy.exports=function(t){var e=ay.call(t),o=e===\\\"[object Arguments]\\\";return o||(o=e!==\\\"[object Array]\\\"&&t!==null&&typeof t==\\\"object\\\"&&typeof t.length==\\\"number\\\"&&t.length>=0&&ay.call(t.callee)===\\\"[object Function]\\\"),o}});var yy=Jt((G3,gy)=>{\\\"use strict\\\";var my;Object.keys||(Qu=Object.prototype.hasOwnProperty,zp=Object.prototype.toString,ly=Bp(),kp=Object.prototype.propertyIsEnumerable,cy=!kp.call({toString:null},\\\"toString\\\"),fy=kp.call(function(){},\\\"prototype\\\"),tl=[\\\"toString\\\",\\\"toLocaleString\\\",\\\"valueOf\\\",\\\"hasOwnProperty\\\",\\\"isPrototypeOf\\\",\\\"propertyIsEnumerable\\\",\\\"constructor\\\"],Bc=function(r){var t=r.constructor;return t&&t.prototype===r},hy={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},py=function(){if(typeof window==\\\"undefined\\\")return!1;for(var r in window)try{if(!hy[\\\"$\\\"+r]&&Qu.call(window,r)&&window[r]!==null&&typeof window[r]==\\\"object\\\")try{Bc(window[r])}catch(t){return!0}}catch(t){return!0}return!1}(),dy=function(r){if(typeof window==\\\"undefined\\\"||!py)return Bc(r);try{return Bc(r)}catch(t){return!1}},my=function(t){var e=t!==null&&typeof t==\\\"object\\\",o=zp.call(t)===\\\"[object Function]\\\",a=ly(t),l=e&&zp.call(t)===\\\"[object String]\\\",f=[];if(!e&&!o&&!a)throw new TypeError(\\\"Object.keys called on a non-object\\\");var h=fy&&o;if(l&&t.length>0&&!Qu.call(t,0))for(var p=0;p<t.length;++p)f.push(String(p));if(a&&t.length>0)for(var d=0;d<t.length;++d)f.push(String(d));else for(var g in t)!(h&&g===\\\"prototype\\\")&&Qu.call(t,g)&&f.push(String(g));if(cy)for(var _=dy(t),y=0;y<tl.length;++y)!(_&&tl[y]===\\\"constructor\\\")&&Qu.call(t,tl[y])&&f.push(tl[y]);return f});var Qu,zp,ly,kp,cy,fy,tl,Bc,hy,py,dy;gy.exports=my});var Gp=Jt((V3,xy)=>{\\\"use strict\\\";var vA=Array.prototype.slice,_A=Bp(),vy=Object.keys,zc=vy?function(t){return vy(t)}:yy(),_y=Object.keys;zc.shim=function(){if(Object.keys){var t=function(){var e=Object.keys(arguments);return e&&e.length===arguments.length}(1,2);t||(Object.keys=function(o){return _A(o)?_y(vA.call(o)):_y(o)})}else Object.keys=zc;return Object.keys||zc};xy.exports=zc});var Vp=Jt((H3,Ey)=>{\\\"use strict\\\";Ey.exports=function(){if(typeof Symbol!=\\\"function\\\"||typeof Object.getOwnPropertySymbols!=\\\"function\\\")return!1;if(typeof Symbol.iterator==\\\"symbol\\\")return!0;var t={},e=Symbol(\\\"test\\\"),o=Object(e);if(typeof e==\\\"string\\\"||Object.prototype.toString.call(e)!==\\\"[object Symbol]\\\"||Object.prototype.toString.call(o)!==\\\"[object Symbol]\\\")return!1;var a=42;t[e]=a;for(e in t)return!1;if(typeof Object.keys==\\\"function\\\"&&Object.keys(t).length!==0||typeof Object.getOwnPropertyNames==\\\"function\\\"&&Object.getOwnPropertyNames(t).length!==0)return!1;var l=Object.getOwnPropertySymbols(t);if(l.length!==1||l[0]!==e||!Object.prototype.propertyIsEnumerable.call(t,e))return!1;if(typeof Object.getOwnPropertyDescriptor==\\\"function\\\"){var f=Object.getOwnPropertyDescriptor(t,e);if(f.value!==a||f.enumerable!==!0)return!1}return!0}});var kc=Jt((W3,My)=>{\\\"use strict\\\";var xA=Vp();My.exports=function(){return xA()&&!!Symbol.toStringTag}});var by=Jt((q3,wy)=>{\\\"use strict\\\";var Sy=typeof Symbol!=\\\"undefined\\\"&&Symbol,EA=Vp();wy.exports=function(){return typeof Sy!=\\\"function\\\"||typeof Symbol!=\\\"function\\\"||typeof Sy(\\\"foo\\\")!=\\\"symbol\\\"||typeof Symbol(\\\"bar\\\")!=\\\"symbol\\\"?!1:EA()}});var Cy=Jt((X3,Ay)=>{\\\"use strict\\\";var Ty={foo:{}},MA=Object;Ay.exports=function(){return{__proto__:Ty}.foo===Ty.foo&&!({__proto__:null}instanceof MA)}});var Ry=Jt((Y3,Iy)=>{\\\"use strict\\\";var SA=\\\"Function.prototype.bind called on incompatible \\\",wA=Object.prototype.toString,bA=Math.max,TA=\\\"[object Function]\\\",Py=function(t,e){for(var o=[],a=0;a<t.length;a+=1)o[a]=t[a];for(var l=0;l<e.length;l+=1)o[l+t.length]=e[l];return o},AA=function(t,e){for(var o=[],a=e||0,l=0;a<t.length;a+=1,l+=1)o[l]=t[a];return o},CA=function(r,t){for(var e=\\\"\\\",o=0;o<r.length;o+=1)e+=r[o],o+1<r.length&&(e+=t);return e};Iy.exports=function(t){var e=this;if(typeof e!=\\\"function\\\"||wA.apply(e)!==TA)throw new TypeError(SA+e);for(var o=AA(arguments,1),a,l=function(){if(this instanceof a){var g=e.apply(this,Py(o,arguments));return Object(g)===g?g:this}return e.apply(t,Py(o,arguments))},f=bA(0,e.length-o.length),h=[],p=0;p<f;p++)h[p]=\\\"$\\\"+p;if(a=Function(\\\"binder\\\",\\\"return function (\\\"+CA(h,\\\",\\\")+\\\"){ return binder.apply(this,arguments); }\\\")(l),e.prototype){var d=function(){};d.prototype=e.prototype,a.prototype=new d,d.prototype=null}return a}});var Gc=Jt((Z3,Ly)=>{\\\"use strict\\\";var PA=Ry();Ly.exports=Function.prototype.bind||PA});var Oy=Jt((J3,Ny)=>{\\\"use strict\\\";var IA=Function.prototype.call,RA=Object.prototype.hasOwnProperty,LA=Gc();Ny.exports=LA.call(IA,RA)});var ta=Jt(($3,zy)=>{\\\"use strict\\\";var tn,ou=SyntaxError,By=Function,iu=TypeError,Hp=function(r){try{return By('\\\"use strict\\\"; return ('+r+\\\").constructor;\\\")()}catch(t){}},js=Object.getOwnPropertyDescriptor;if(js)try{js({},\\\"\\\")}catch(r){js=null}var Wp=function(){throw new iu},NA=js?function(){try{return arguments.callee,Wp}catch(r){try{return js(arguments,\\\"callee\\\").get}catch(t){return Wp}}}():Wp,nu=by()(),OA=Cy()(),vr=Object.getPrototypeOf||(OA?function(r){return r.__proto__}:null),ru={},DA=typeof Uint8Array==\\\"undefined\\\"||!vr?tn:vr(Uint8Array),Qs={\\\"%AggregateError%\\\":typeof AggregateError==\\\"undefined\\\"?tn:AggregateError,\\\"%Array%\\\":Array,\\\"%ArrayBuffer%\\\":typeof ArrayBuffer==\\\"undefined\\\"?tn:ArrayBuffer,\\\"%ArrayIteratorPrototype%\\\":nu&&vr?vr([][Symbol.iterator]()):tn,\\\"%AsyncFromSyncIteratorPrototype%\\\":tn,\\\"%AsyncFunction%\\\":ru,\\\"%AsyncGenerator%\\\":ru,\\\"%AsyncGeneratorFunction%\\\":ru,\\\"%AsyncIteratorPrototype%\\\":ru,\\\"%Atomics%\\\":typeof Atomics==\\\"undefined\\\"?tn:Atomics,\\\"%BigInt%\\\":typeof BigInt==\\\"undefined\\\"?tn:BigInt,\\\"%BigInt64Array%\\\":typeof BigInt64Array==\\\"undefined\\\"?tn:BigInt64Array,\\\"%BigUint64Array%\\\":typeof BigUint64Array==\\\"undefined\\\"?tn:BigUint64Array,\\\"%Boolean%\\\":Boolean,\\\"%DataView%\\\":typeof DataView==\\\"undefined\\\"?tn:DataView,\\\"%Date%\\\":Date,\\\"%decodeURI%\\\":decodeURI,\\\"%decodeURIComponent%\\\":decodeURIComponent,\\\"%encodeURI%\\\":encodeURI,\\\"%encodeURIComponent%\\\":encodeURIComponent,\\\"%Error%\\\":Error,\\\"%eval%\\\":eval,\\\"%EvalError%\\\":EvalError,\\\"%Float32Array%\\\":typeof Float32Array==\\\"undefined\\\"?tn:Float32Array,\\\"%Float64Array%\\\":typeof Float64Array==\\\"undefined\\\"?tn:Float64Array,\\\"%FinalizationRegistry%\\\":typeof FinalizationRegistry==\\\"undefined\\\"?tn:FinalizationRegistry,\\\"%Function%\\\":By,\\\"%GeneratorFunction%\\\":ru,\\\"%Int8Array%\\\":typeof Int8Array==\\\"undefined\\\"?tn:Int8Array,\\\"%Int16Array%\\\":typeof Int16Array==\\\"undefined\\\"?tn:Int16Array,\\\"%Int32Array%\\\":typeof Int32Array==\\\"undefined\\\"?tn:Int32Array,\\\"%isFinite%\\\":isFinite,\\\"%isNaN%\\\":isNaN,\\\"%IteratorPrototype%\\\":nu&&vr?vr(vr([][Symbol.iterator]())):tn,\\\"%JSON%\\\":typeof JSON==\\\"object\\\"?JSON:tn,\\\"%Map%\\\":typeof Map==\\\"undefined\\\"?tn:Map,\\\"%MapIteratorPrototype%\\\":typeof Map==\\\"undefined\\\"||!nu||!vr?tn:vr(new Map()[Symbol.iterator]()),\\\"%Math%\\\":Math,\\\"%Number%\\\":Number,\\\"%Object%\\\":Object,\\\"%parseFloat%\\\":parseFloat,\\\"%parseInt%\\\":parseInt,\\\"%Promise%\\\":typeof Promise==\\\"undefined\\\"?tn:Promise,\\\"%Proxy%\\\":typeof Proxy==\\\"undefined\\\"?tn:Proxy,\\\"%RangeError%\\\":RangeError,\\\"%ReferenceError%\\\":ReferenceError,\\\"%Reflect%\\\":typeof Reflect==\\\"undefined\\\"?tn:Reflect,\\\"%RegExp%\\\":RegExp,\\\"%Set%\\\":typeof Set==\\\"undefined\\\"?tn:Set,\\\"%SetIteratorPrototype%\\\":typeof Set==\\\"undefined\\\"||!nu||!vr?tn:vr(new Set()[Symbol.iterator]()),\\\"%SharedArrayBuffer%\\\":typeof SharedArrayBuffer==\\\"undefined\\\"?tn:SharedArrayBuffer,\\\"%String%\\\":String,\\\"%StringIteratorPrototype%\\\":nu&&vr?vr(\\\"\\\"[Symbol.iterator]()):tn,\\\"%Symbol%\\\":nu?Symbol:tn,\\\"%SyntaxError%\\\":ou,\\\"%ThrowTypeError%\\\":NA,\\\"%TypedArray%\\\":DA,\\\"%TypeError%\\\":iu,\\\"%Uint8Array%\\\":typeof Uint8Array==\\\"undefined\\\"?tn:Uint8Array,\\\"%Uint8ClampedArray%\\\":typeof Uint8ClampedArray==\\\"undefined\\\"?tn:Uint8ClampedArray,\\\"%Uint16Array%\\\":typeof Uint16Array==\\\"undefined\\\"?tn:Uint16Array,\\\"%Uint32Array%\\\":typeof Uint32Array==\\\"undefined\\\"?tn:Uint32Array,\\\"%URIError%\\\":URIError,\\\"%WeakMap%\\\":typeof WeakMap==\\\"undefined\\\"?tn:WeakMap,\\\"%WeakRef%\\\":typeof WeakRef==\\\"undefined\\\"?tn:WeakRef,\\\"%WeakSet%\\\":typeof WeakSet==\\\"undefined\\\"?tn:WeakSet};if(vr)try{null.error}catch(r){Dy=vr(vr(r)),Qs[\\\"%Error.prototype%\\\"]=Dy}var Dy,FA=function r(t){var e;if(t===\\\"%AsyncFunction%\\\")e=Hp(\\\"async function () {}\\\");else if(t===\\\"%GeneratorFunction%\\\")e=Hp(\\\"function* () {}\\\");else if(t===\\\"%AsyncGeneratorFunction%\\\")e=Hp(\\\"async function* () {}\\\");else if(t===\\\"%AsyncGenerator%\\\"){var o=r(\\\"%AsyncGeneratorFunction%\\\");o&&(e=o.prototype)}else if(t===\\\"%AsyncIteratorPrototype%\\\"){var a=r(\\\"%AsyncGenerator%\\\");a&&vr&&(e=vr(a.prototype))}return Qs[t]=e,e},Fy={\\\"%ArrayBufferPrototype%\\\":[\\\"ArrayBuffer\\\",\\\"prototype\\\"],\\\"%ArrayPrototype%\\\":[\\\"Array\\\",\\\"prototype\\\"],\\\"%ArrayProto_entries%\\\":[\\\"Array\\\",\\\"prototype\\\",\\\"entries\\\"],\\\"%ArrayProto_forEach%\\\":[\\\"Array\\\",\\\"prototype\\\",\\\"forEach\\\"],\\\"%ArrayProto_keys%\\\":[\\\"Array\\\",\\\"prototype\\\",\\\"keys\\\"],\\\"%ArrayProto_values%\\\":[\\\"Array\\\",\\\"prototype\\\",\\\"values\\\"],\\\"%AsyncFunctionPrototype%\\\":[\\\"AsyncFunction\\\",\\\"prototype\\\"],\\\"%AsyncGenerator%\\\":[\\\"AsyncGeneratorFunction\\\",\\\"prototype\\\"],\\\"%AsyncGeneratorPrototype%\\\":[\\\"AsyncGeneratorFunction\\\",\\\"prototype\\\",\\\"prototype\\\"],\\\"%BooleanPrototype%\\\":[\\\"Boolean\\\",\\\"prototype\\\"],\\\"%DataViewPrototype%\\\":[\\\"DataView\\\",\\\"prototype\\\"],\\\"%DatePrototype%\\\":[\\\"Date\\\",\\\"prototype\\\"],\\\"%ErrorPrototype%\\\":[\\\"Error\\\",\\\"prototype\\\"],\\\"%EvalErrorPrototype%\\\":[\\\"EvalError\\\",\\\"prototype\\\"],\\\"%Float32ArrayPrototype%\\\":[\\\"Float32Array\\\",\\\"prototype\\\"],\\\"%Float64ArrayPrototype%\\\":[\\\"Float64Array\\\",\\\"prototype\\\"],\\\"%FunctionPrototype%\\\":[\\\"Function\\\",\\\"prototype\\\"],\\\"%Generator%\\\":[\\\"GeneratorFunction\\\",\\\"prototype\\\"],\\\"%GeneratorPrototype%\\\":[\\\"GeneratorFunction\\\",\\\"prototype\\\",\\\"prototype\\\"],\\\"%Int8ArrayPrototype%\\\":[\\\"Int8Array\\\",\\\"prototype\\\"],\\\"%Int16ArrayPrototype%\\\":[\\\"Int16Array\\\",\\\"prototype\\\"],\\\"%Int32ArrayPrototype%\\\":[\\\"Int32Array\\\",\\\"prototype\\\"],\\\"%JSONParse%\\\":[\\\"JSON\\\",\\\"parse\\\"],\\\"%JSONStringify%\\\":[\\\"JSON\\\",\\\"stringify\\\"],\\\"%MapPrototype%\\\":[\\\"Map\\\",\\\"prototype\\\"],\\\"%NumberPrototype%\\\":[\\\"Number\\\",\\\"prototype\\\"],\\\"%ObjectPrototype%\\\":[\\\"Object\\\",\\\"prototype\\\"],\\\"%ObjProto_toString%\\\":[\\\"Object\\\",\\\"prototype\\\",\\\"toString\\\"],\\\"%ObjProto_valueOf%\\\":[\\\"Object\\\",\\\"prototype\\\",\\\"valueOf\\\"],\\\"%PromisePrototype%\\\":[\\\"Promise\\\",\\\"prototype\\\"],\\\"%PromiseProto_then%\\\":[\\\"Promise\\\",\\\"prototype\\\",\\\"then\\\"],\\\"%Promise_all%\\\":[\\\"Promise\\\",\\\"all\\\"],\\\"%Promise_reject%\\\":[\\\"Promise\\\",\\\"reject\\\"],\\\"%Promise_resolve%\\\":[\\\"Promise\\\",\\\"resolve\\\"],\\\"%RangeErrorPrototype%\\\":[\\\"RangeError\\\",\\\"prototype\\\"],\\\"%ReferenceErrorPrototype%\\\":[\\\"ReferenceError\\\",\\\"prototype\\\"],\\\"%RegExpPrototype%\\\":[\\\"RegExp\\\",\\\"prototype\\\"],\\\"%SetPrototype%\\\":[\\\"Set\\\",\\\"prototype\\\"],\\\"%SharedArrayBufferPrototype%\\\":[\\\"SharedArrayBuffer\\\",\\\"prototype\\\"],\\\"%StringPrototype%\\\":[\\\"String\\\",\\\"prototype\\\"],\\\"%SymbolPrototype%\\\":[\\\"Symbol\\\",\\\"prototype\\\"],\\\"%SyntaxErrorPrototype%\\\":[\\\"SyntaxError\\\",\\\"prototype\\\"],\\\"%TypedArrayPrototype%\\\":[\\\"TypedArray\\\",\\\"prototype\\\"],\\\"%TypeErrorPrototype%\\\":[\\\"TypeError\\\",\\\"prototype\\\"],\\\"%Uint8ArrayPrototype%\\\":[\\\"Uint8Array\\\",\\\"prototype\\\"],\\\"%Uint8ClampedArrayPrototype%\\\":[\\\"Uint8ClampedArray\\\",\\\"prototype\\\"],\\\"%Uint16ArrayPrototype%\\\":[\\\"Uint16Array\\\",\\\"prototype\\\"],\\\"%Uint32ArrayPrototype%\\\":[\\\"Uint32Array\\\",\\\"prototype\\\"],\\\"%URIErrorPrototype%\\\":[\\\"URIError\\\",\\\"prototype\\\"],\\\"%WeakMapPrototype%\\\":[\\\"WeakMap\\\",\\\"prototype\\\"],\\\"%WeakSetPrototype%\\\":[\\\"WeakSet\\\",\\\"prototype\\\"]},el=Gc(),Vc=Oy(),UA=el.call(Function.call,Array.prototype.concat),BA=el.call(Function.apply,Array.prototype.splice),Uy=el.call(Function.call,String.prototype.replace),Hc=el.call(Function.call,String.prototype.slice),zA=el.call(Function.call,RegExp.prototype.exec),kA=/[^%.[\\\\]]+|\\\\[(?:(-?\\\\d+(?:\\\\.\\\\d+)?)|([\\\"'])((?:(?!\\\\2)[^\\\\\\\\]|\\\\\\\\.)*?)\\\\2)\\\\]|(?=(?:\\\\.|\\\\[\\\\])(?:\\\\.|\\\\[\\\\]|%$))/g,GA=/\\\\\\\\(\\\\\\\\)?/g,VA=function(t){var e=Hc(t,0,1),o=Hc(t,-1);if(e===\\\"%\\\"&&o!==\\\"%\\\")throw new ou(\\\"invalid intrinsic syntax, expected closing `%`\\\");if(o===\\\"%\\\"&&e!==\\\"%\\\")throw new ou(\\\"invalid intrinsic syntax, expected opening `%`\\\");var a=[];return Uy(t,kA,function(l,f,h,p){a[a.length]=h?Uy(p,GA,\\\"$1\\\"):f||l}),a},HA=function(t,e){var o=t,a;if(Vc(Fy,o)&&(a=Fy[o],o=\\\"%\\\"+a[0]+\\\"%\\\"),Vc(Qs,o)){var l=Qs[o];if(l===ru&&(l=FA(o)),typeof l==\\\"undefined\\\"&&!e)throw new iu(\\\"intrinsic \\\"+t+\\\" exists, but is not available. Please file an issue!\\\");return{alias:a,name:o,value:l}}throw new ou(\\\"intrinsic \\\"+t+\\\" does not exist!\\\")};zy.exports=function(t,e){if(typeof t!=\\\"string\\\"||t.length===0)throw new iu(\\\"intrinsic name must be a non-empty string\\\");if(arguments.length>1&&typeof e!=\\\"boolean\\\")throw new iu('\\\"allowMissing\\\" argument must be a boolean');if(zA(/^%?[^%]*%?$/,t)===null)throw new ou(\\\"`%` may not be present anywhere but at the beginning and end of the intrinsic name\\\");var o=VA(t),a=o.length>0?o[0]:\\\"\\\",l=HA(\\\"%\\\"+a+\\\"%\\\",e),f=l.name,h=l.value,p=!1,d=l.alias;d&&(a=d[0],BA(o,UA([0,1],d)));for(var g=1,_=!0;g<o.length;g+=1){var y=o[g],M=Hc(y,0,1),w=Hc(y,-1);if((M==='\\\"'||M===\\\"'\\\"||M===\\\"`\\\"||w==='\\\"'||w===\\\"'\\\"||w===\\\"`\\\")&&M!==w)throw new ou(\\\"property names with quotes must have matching quotes\\\");if((y===\\\"constructor\\\"||!_)&&(p=!0),a+=\\\".\\\"+y,f=\\\"%\\\"+a+\\\"%\\\",Vc(Qs,f))h=Qs[f];else if(h!=null){if(!(y in h)){if(!e)throw new iu(\\\"base intrinsic for \\\"+t+\\\" exists, but the property is not available.\\\");return}if(js&&g+1>=o.length){var T=js(h,y);_=!!T,_&&\\\"get\\\"in T&&!(\\\"originalValue\\\"in T.get)?h=T.get:h=h[y]}else _=Vc(h,y),h=h[y];_&&!p&&(Qs[f]=h)}}return h}});var nl=Jt((K3,ky)=>{\\\"use strict\\\";var WA=ta(),qp=WA(\\\"%Object.defineProperty%\\\",!0),Xp=function(){if(qp)try{return qp({},\\\"a\\\",{value:1}),!0}catch(t){return!1}return!1};Xp.hasArrayLengthDefineBug=function(){if(!Xp())return null;try{return qp([],\\\"length\\\",{value:1}).length!==1}catch(t){return!0}};ky.exports=Xp});var Yp=Jt((j3,Gy)=>{\\\"use strict\\\";var qA=ta(),Wc=qA(\\\"%Object.getOwnPropertyDescriptor%\\\",!0);if(Wc)try{Wc([],\\\"length\\\")}catch(r){Wc=null}Gy.exports=Wc});var qc=Jt((Q3,Hy)=>{\\\"use strict\\\";var XA=nl()(),Zp=ta(),rl=XA&&Zp(\\\"%Object.defineProperty%\\\",!0);if(rl)try{rl({},\\\"a\\\",{value:1})}catch(r){rl=!1}var YA=Zp(\\\"%SyntaxError%\\\"),su=Zp(\\\"%TypeError%\\\"),Vy=Yp();Hy.exports=function(t,e,o){if(!t||typeof t!=\\\"object\\\"&&typeof t!=\\\"function\\\")throw new su(\\\"`obj` must be an object or a function`\\\");if(typeof e!=\\\"string\\\"&&typeof e!=\\\"symbol\\\")throw new su(\\\"`property` must be a string or a symbol`\\\");if(arguments.length>3&&typeof arguments[3]!=\\\"boolean\\\"&&arguments[3]!==null)throw new su(\\\"`nonEnumerable`, if provided, must be a boolean or null\\\");if(arguments.length>4&&typeof arguments[4]!=\\\"boolean\\\"&&arguments[4]!==null)throw new su(\\\"`nonWritable`, if provided, must be a boolean or null\\\");if(arguments.length>5&&typeof arguments[5]!=\\\"boolean\\\"&&arguments[5]!==null)throw new su(\\\"`nonConfigurable`, if provided, must be a boolean or null\\\");if(arguments.length>6&&typeof arguments[6]!=\\\"boolean\\\")throw new su(\\\"`loose`, if provided, must be a boolean\\\");var a=arguments.length>3?arguments[3]:null,l=arguments.length>4?arguments[4]:null,f=arguments.length>5?arguments[5]:null,h=arguments.length>6?arguments[6]:!1,p=!!Vy&&Vy(t,e);if(rl)rl(t,e,{configurable:f===null&&p?p.configurable:!f,enumerable:a===null&&p?p.enumerable:!a,value:o,writable:l===null&&p?p.writable:!l});else if(h||!a&&!l&&!f)t[e]=o;else throw new YA(\\\"This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.\\\")}});var Jy=Jt((tF,Zy)=>{\\\"use strict\\\";var Yy=ta(),Wy=qc(),ZA=nl()(),qy=Yp(),Xy=Yy(\\\"%TypeError%\\\"),JA=Yy(\\\"%Math.floor%\\\");Zy.exports=function(t,e){if(typeof t!=\\\"function\\\")throw new Xy(\\\"`fn` is not a function\\\");if(typeof e!=\\\"number\\\"||e<0||e>4294967295||JA(e)!==e)throw new Xy(\\\"`length` must be a positive 32-bit integer\\\");var o=arguments.length>2&&!!arguments[2],a=!0,l=!0;if(\\\"length\\\"in t&&qy){var f=qy(t,\\\"length\\\");f&&!f.configurable&&(a=!1),f&&!f.writable&&(l=!1)}return(a||l||!o)&&(ZA?Wy(t,\\\"length\\\",e,!0,!0):Wy(t,\\\"length\\\",e)),t}});var Yc=Jt((eF,Xc)=>{\\\"use strict\\\";var Jp=Gc(),au=ta(),$A=Jy(),KA=au(\\\"%TypeError%\\\"),Ky=au(\\\"%Function.prototype.apply%\\\"),jy=au(\\\"%Function.prototype.call%\\\"),Qy=au(\\\"%Reflect.apply%\\\",!0)||Jp.call(jy,Ky),il=au(\\\"%Object.defineProperty%\\\",!0),jA=au(\\\"%Math.max%\\\");if(il)try{il({},\\\"a\\\",{value:1})}catch(r){il=null}Xc.exports=function(t){if(typeof t!=\\\"function\\\")throw new KA(\\\"a function is required\\\");var e=Qy(Jp,jy,arguments);return $A(e,1+jA(0,t.length-(arguments.length-1)),!0)};var $y=function(){return Qy(Jp,Ky,arguments)};il?il(Xc.exports,\\\"apply\\\",{value:$y}):Xc.exports.apply=$y});var $p=Jt((nF,nv)=>{\\\"use strict\\\";var tv=ta(),ev=Yc(),QA=ev(tv(\\\"String.prototype.indexOf\\\"));nv.exports=function(t,e){var o=tv(t,!!e);return typeof o==\\\"function\\\"&&QA(t,\\\".prototype.\\\")>-1?ev(o):o}});var ov=Jt((rF,iv)=>{\\\"use strict\\\";var tC=kc()(),eC=$p(),Kp=eC(\\\"Object.prototype.toString\\\"),Zc=function(t){return tC&&t&&typeof t==\\\"object\\\"&&Symbol.toStringTag in t?!1:Kp(t)===\\\"[object Arguments]\\\"},rv=function(t){return Zc(t)?!0:t!==null&&typeof t==\\\"object\\\"&&typeof t.length==\\\"number\\\"&&t.length>=0&&Kp(t)!==\\\"[object Array]\\\"&&Kp(t.callee)===\\\"[object Function]\\\"},nC=function(){return Zc(arguments)}();Zc.isLegacyArguments=rv;iv.exports=nC?Zc:rv});var uu=Jt((iF,lv)=>{\\\"use strict\\\";var rC=Gp(),iC=typeof Symbol==\\\"function\\\"&&typeof Symbol(\\\"foo\\\")==\\\"symbol\\\",oC=Object.prototype.toString,sC=Array.prototype.concat,sv=qc(),aC=function(r){return typeof r==\\\"function\\\"&&oC.call(r)===\\\"[object Function]\\\"},av=nl()(),uC=function(r,t,e,o){if(t in r){if(o===!0){if(r[t]===e)return}else if(!aC(o)||!o())return}av?sv(r,t,e,!0):sv(r,t,e)},uv=function(r,t){var e=arguments.length>2?arguments[2]:{},o=rC(t);iC&&(o=sC.call(o,Object.getOwnPropertySymbols(t)));for(var a=0;a<o.length;a+=1)uC(r,o[a],t[o[a]],e[o[a]])};uv.supportsDescriptors=!!av;lv.exports=uv});var jp=Jt((oF,fv)=>{\\\"use strict\\\";var cv=function(r){return r!==r};fv.exports=function(t,e){return t===0&&e===0?1/t===1/e:!!(t===e||cv(t)&&cv(e))}});var Qp=Jt((sF,hv)=>{\\\"use strict\\\";var lC=jp();hv.exports=function(){return typeof Object.is==\\\"function\\\"?Object.is:lC}});var dv=Jt((aF,pv)=>{\\\"use strict\\\";var cC=Qp(),fC=uu();pv.exports=function(){var t=cC();return fC(Object,{is:t},{is:function(){return Object.is!==t}}),t}});var vv=Jt((uF,yv)=>{\\\"use strict\\\";var hC=uu(),pC=Yc(),dC=jp(),mv=Qp(),mC=dv(),gv=pC(mv(),Object);hC(gv,{getPolyfill:mv,implementation:dC,shim:mC});yv.exports=gv});var Sv=Jt((lF,Mv)=>{\\\"use strict\\\";var td=$p(),_v=kc()(),xv,Ev,ed,nd;_v&&(xv=td(\\\"Object.prototype.hasOwnProperty\\\"),Ev=td(\\\"RegExp.prototype.exec\\\"),ed={},Jc=function(){throw ed},nd={toString:Jc,valueOf:Jc},typeof Symbol.toPrimitive==\\\"symbol\\\"&&(nd[Symbol.toPrimitive]=Jc));var Jc,gC=td(\\\"Object.prototype.toString\\\"),yC=Object.getOwnPropertyDescriptor,vC=\\\"[object RegExp]\\\";Mv.exports=_v?function(t){if(!t||typeof t!=\\\"object\\\")return!1;var e=yC(t,\\\"lastIndex\\\"),o=e&&xv(e,\\\"value\\\");if(!o)return!1;try{Ev(t,nd)}catch(a){return a===ed}}:function(t){return!t||typeof t!=\\\"object\\\"&&typeof t!=\\\"function\\\"?!1:gC(t)===vC}});var bv=Jt((cF,wv)=>{\\\"use strict\\\";var sl=function(){return typeof function(){}.name==\\\"string\\\"},ol=Object.getOwnPropertyDescriptor;if(ol)try{ol([],\\\"length\\\")}catch(r){ol=null}sl.functionsHaveConfigurableNames=function(){if(!sl()||!ol)return!1;var t=ol(function(){},\\\"name\\\");return!!t&&!!t.configurable};var _C=Function.prototype.bind;sl.boundFunctionsHaveNames=function(){return sl()&&typeof _C==\\\"function\\\"&&function(){}.bind().name!==\\\"\\\"};wv.exports=sl});var Cv=Jt((fF,Av)=>{\\\"use strict\\\";var Tv=qc(),xC=nl()(),EC=bv().functionsHaveConfigurableNames(),MC=TypeError;Av.exports=function(t,e){if(typeof t!=\\\"function\\\")throw new MC(\\\"`fn` is not a function\\\");var o=arguments.length>2&&!!arguments[2];return(!o||EC)&&(xC?Tv(t,\\\"name\\\",e,!0,!0):Tv(t,\\\"name\\\",e)),t}});var rd=Jt((hF,Pv)=>{\\\"use strict\\\";var SC=Cv(),wC=Object,bC=TypeError;Pv.exports=SC(function(){if(this!=null&&this!==wC(this))throw new bC(\\\"RegExp.prototype.flags getter called on non-object\\\");var t=\\\"\\\";return this.hasIndices&&(t+=\\\"d\\\"),this.global&&(t+=\\\"g\\\"),this.ignoreCase&&(t+=\\\"i\\\"),this.multiline&&(t+=\\\"m\\\"),this.dotAll&&(t+=\\\"s\\\"),this.unicode&&(t+=\\\"u\\\"),this.unicodeSets&&(t+=\\\"v\\\"),this.sticky&&(t+=\\\"y\\\"),t},\\\"get flags\\\",!0)});var id=Jt((pF,Iv)=>{\\\"use strict\\\";var TC=rd(),AC=uu().supportsDescriptors,CC=Object.getOwnPropertyDescriptor;Iv.exports=function(){if(AC&&/a/mig.flags===\\\"gim\\\"){var t=CC(RegExp.prototype,\\\"flags\\\");if(t&&typeof t.get==\\\"function\\\"&&typeof RegExp.prototype.dotAll==\\\"boolean\\\"&&typeof RegExp.prototype.hasIndices==\\\"boolean\\\"){var e=\\\"\\\",o={};if(Object.defineProperty(o,\\\"hasIndices\\\",{get:function(){e+=\\\"d\\\"}}),Object.defineProperty(o,\\\"sticky\\\",{get:function(){e+=\\\"y\\\"}}),e===\\\"dy\\\")return t.get}}return TC}});var Nv=Jt((dF,Lv)=>{\\\"use strict\\\";var PC=uu().supportsDescriptors,IC=id(),RC=Object.getOwnPropertyDescriptor,LC=Object.defineProperty,NC=TypeError,Rv=Object.getPrototypeOf,OC=/a/;Lv.exports=function(){if(!PC||!Rv)throw new NC(\\\"RegExp.prototype.flags requires a true ES5 environment that supports property descriptors\\\");var t=IC(),e=Rv(OC),o=RC(e,\\\"flags\\\");return(!o||o.get!==t)&&LC(e,\\\"flags\\\",{configurable:!0,enumerable:!1,get:t}),t}});var Uv=Jt((mF,Fv)=>{\\\"use strict\\\";var DC=uu(),FC=Yc(),UC=rd(),Ov=id(),BC=Nv(),Dv=FC(Ov());DC(Dv,{getPolyfill:Ov,implementation:UC,shim:BC});Fv.exports=Dv});var zv=Jt((gF,Bv)=>{\\\"use strict\\\";var zC=Date.prototype.getDay,kC=function(t){try{return zC.call(t),!0}catch(e){return!1}},GC=Object.prototype.toString,VC=\\\"[object Date]\\\",HC=kc()();Bv.exports=function(t){return typeof t!=\\\"object\\\"||t===null?!1:HC?kC(t):GC.call(t)===VC}});var od=Jt((yF,$v)=>{var kv=Gp(),Gv=ov(),Vv=vv(),Hv=Sv(),Wv=Uv(),qv=zv(),Xv=Date.prototype.getTime;function Jv(r,t,e){var o=e||{};return(o.strict?Vv(r,t):r===t)?!0:!r||!t||typeof r!=\\\"object\\\"&&typeof t!=\\\"object\\\"?o.strict?Vv(r,t):r==t:WC(r,t,o)}function Yv(r){return r==null}function Zv(r){return!(!r||typeof r!=\\\"object\\\"||typeof r.length!=\\\"number\\\"||typeof r.copy!=\\\"function\\\"||typeof r.slice!=\\\"function\\\"||r.length>0&&typeof r[0]!=\\\"number\\\")}function WC(r,t,e){var o,a;if(typeof r!=typeof t||Yv(r)||Yv(t)||r.prototype!==t.prototype||Gv(r)!==Gv(t))return!1;var l=Hv(r),f=Hv(t);if(l!==f)return!1;if(l||f)return r.source===t.source&&Wv(r)===Wv(t);if(qv(r)&&qv(t))return Xv.call(r)===Xv.call(t);var h=Zv(r),p=Zv(t);if(h!==p)return!1;if(h||p){if(r.length!==t.length)return!1;for(o=0;o<r.length;o++)if(r[o]!==t[o])return!1;return!0}if(typeof r!=typeof t)return!1;try{var d=kv(r),g=kv(t)}catch(_){return!1}if(d.length!==g.length)return!1;for(d.sort(),g.sort(),o=d.length-1;o>=0;o--)if(d[o]!=g[o])return!1;for(o=d.length-1;o>=0;o--)if(a=d[o],!Jv(r[a],t[a],e))return!1;return!0}$v.exports=Jv});var yd=Jt((SB,r_)=>{var OP=od(),go=function(r){this.precision=r&&r.precision?r.precision:17,this.direction=r&&r.direction?r.direction:!1,this.pseudoNode=r&&r.pseudoNode?r.pseudoNode:!1,this.objectComparator=r&&r.objectComparator?r.objectComparator:DP};go.prototype.compare=function(r,t){if(r.type!==t.type||!n_(r,t))return!1;switch(r.type){case\\\"Point\\\":return this.compareCoord(r.coordinates,t.coordinates);case\\\"LineString\\\":return this.compareLine(r.coordinates,t.coordinates,0,!1);case\\\"Polygon\\\":return this.comparePolygon(r,t);case\\\"Feature\\\":return this.compareFeature(r,t);default:if(r.type.indexOf(\\\"Multi\\\")===0){var e=this,o=e_(r),a=e_(t);return o.every(function(l){return this.some(function(f){return e.compare(l,f)})},a)}}return!1};function e_(r){return r.coordinates.map(function(t){return{type:r.type.replace(\\\"Multi\\\",\\\"\\\"),coordinates:t}})}function n_(r,t){return r.hasOwnProperty(\\\"coordinates\\\")?r.coordinates.length===t.coordinates.length:r.length===t.length}go.prototype.compareCoord=function(r,t){if(r.length!==t.length)return!1;for(var e=0;e<r.length;e++)if(r[e].toFixed(this.precision)!==t[e].toFixed(this.precision))return!1;return!0};go.prototype.compareLine=function(r,t,e,o){if(!n_(r,t))return!1;var a=this.pseudoNode?r:this.removePseudo(r),l=this.pseudoNode?t:this.removePseudo(t);if(!(o&&!this.compareCoord(a[0],l[0])&&(l=this.fixStartIndex(l,a),!l))){var f=this.compareCoord(a[e],l[e]);return this.direction||f?this.comparePath(a,l):this.compareCoord(a[e],l[l.length-(1+e)])?this.comparePath(a.slice().reverse(),l):!1}};go.prototype.fixStartIndex=function(r,t){for(var e,o=-1,a=0;a<r.length;a++)if(this.compareCoord(r[a],t[0])){o=a;break}return o>=0&&(e=[].concat(r.slice(o,r.length),r.slice(1,o+1))),e};go.prototype.comparePath=function(r,t){var e=this;return r.every(function(o,a){return e.compareCoord(o,this[a])},t)};go.prototype.comparePolygon=function(r,t){if(this.compareLine(r.coordinates[0],t.coordinates[0],1,!0)){var e=r.coordinates.slice(1,r.coordinates.length),o=t.coordinates.slice(1,t.coordinates.length),a=this;return e.every(function(l){return this.some(function(f){return a.compareLine(l,f,1,!0)})},o)}else return!1};go.prototype.compareFeature=function(r,t){return r.id!==t.id||!this.objectComparator(r.properties,t.properties)||!this.compareBBox(r,t)?!1:this.compare(r.geometry,t.geometry)};go.prototype.compareBBox=function(r,t){return!!(!r.bbox&&!t.bbox||r.bbox&&t.bbox&&this.compareCoord(r.bbox,t.bbox))};go.prototype.removePseudo=function(r){return r};function DP(r,t){return OP(r,t,{strict:!0})}r_.exports=go});var i_=Jt((DB,jc)=>{function Es(r,t,e,o){this.dataset=[],this.epsilon=1,this.minPts=2,this.distance=this._euclideanDistance,this.clusters=[],this.noise=[],this._visited=[],this._assigned=[],this._datasetLength=0,this._init(r,t,e,o)}Es.prototype.run=function(r,t,e,o){this._init(r,t,e,o);for(var a=0;a<this._datasetLength;a++)if(this._visited[a]!==1){this._visited[a]=1;var l=this._regionQuery(a);if(l.length<this.minPts)this.noise.push(a);else{var f=this.clusters.length;this.clusters.push([]),this._addToCluster(a,f),this._expandCluster(f,l)}}return this.clusters};Es.prototype._init=function(r,t,e,o){if(r){if(!(r instanceof Array))throw Error(\\\"Dataset must be of type array, \\\"+typeof r+\\\" given\\\");this.dataset=r,this.clusters=[],this.noise=[],this._datasetLength=r.length,this._visited=new Array(this._datasetLength),this._assigned=new Array(this._datasetLength)}t&&(this.epsilon=t),e&&(this.minPts=e),o&&(this.distance=o)};Es.prototype._expandCluster=function(r,t){for(var e=0;e<t.length;e++){var o=t[e];if(this._visited[o]!==1){this._visited[o]=1;var a=this._regionQuery(o);a.length>=this.minPts&&(t=this._mergeArrays(t,a))}this._assigned[o]!==1&&this._addToCluster(o,r)}};Es.prototype._addToCluster=function(r,t){this.clusters[t].push(r),this._assigned[r]=1};Es.prototype._regionQuery=function(r){for(var t=[],e=0;e<this._datasetLength;e++){var o=this.distance(this.dataset[r],this.dataset[e]);o<this.epsilon&&t.push(e)}return t};Es.prototype._mergeArrays=function(r,t){for(var e=t.length,o=0;o<e;o++){var a=t[o];r.indexOf(a)<0&&r.push(a)}return r};Es.prototype._euclideanDistance=function(r,t){for(var e=0,o=Math.min(r.length,t.length);o--;)e+=(r[o]-t[o])*(r[o]-t[o]);return Math.sqrt(e)};typeof jc!=\\\"undefined\\\"&&jc.exports&&(jc.exports=Es)});var o_=Jt((FB,Qc)=>{function Ms(r,t,e){this.k=3,this.dataset=[],this.assignments=[],this.centroids=[],this.init(r,t,e)}Ms.prototype.init=function(r,t,e){this.assignments=[],this.centroids=[],typeof r!=\\\"undefined\\\"&&(this.dataset=r),typeof t!=\\\"undefined\\\"&&(this.k=t),typeof e!=\\\"undefined\\\"&&(this.distance=e)};Ms.prototype.run=function(r,t){this.init(r,t);for(var e=this.dataset.length,o=0;o<this.k;o++)this.centroids[o]=this.randomCentroid();for(var a=!0;a;){a=this.assign();for(var l=0;l<this.k;l++){for(var f=new Array(g),h=0,p=0;p<g;p++)f[p]=0;for(var d=0;d<e;d++){var g=this.dataset[d].length;if(l===this.assignments[d]){for(var p=0;p<g;p++)f[p]+=this.dataset[d][p];h++}}if(h>0){for(var p=0;p<g;p++)f[p]/=h;this.centroids[l]=f}else this.centroids[l]=this.randomCentroid(),a=!0}}return this.getClusters()};Ms.prototype.randomCentroid=function(){var r=this.dataset.length-1,t,e;do e=Math.round(Math.random()*r),t=this.dataset[e];while(this.centroids.indexOf(t)>=0);return t};Ms.prototype.assign=function(){for(var r=!1,t=this.dataset.length,e,o=0;o<t;o++)e=this.argmin(this.dataset[o],this.centroids,this.distance),e!=this.assignments[o]&&(this.assignments[o]=e,r=!0);return r};Ms.prototype.getClusters=function(){for(var r=new Array(this.k),t,e=0;e<this.assignments.length;e++)t=this.assignments[e],typeof r[t]==\\\"undefined\\\"&&(r[t]=[]),r[t].push(e);return r};Ms.prototype.argmin=function(r,t,e){for(var o=Number.MAX_VALUE,a=0,l=t.length,f,h=0;h<l;h++)f=e(r,t[h]),f<o&&(o=f,a=h);return a};Ms.prototype.distance=function(r,t){for(var e=0,o=Math.min(r.length,t.length);o--;){var a=r[o]-t[o];e+=a*a}return Math.sqrt(e)};typeof Qc!=\\\"undefined\\\"&&Qc.exports&&(Qc.exports=Ms)});var vd=Jt((UB,tf)=>{function yo(r,t,e){this._queue=[],this._priorities=[],this._sorting=\\\"desc\\\",this._init(r,t,e)}yo.prototype.insert=function(r,t){for(var e=this._queue.length,o=e;o--;){var a=this._priorities[o];this._sorting===\\\"desc\\\"?t>a&&(e=o):t<a&&(e=o)}this._insertAt(r,t,e)};yo.prototype.remove=function(r){for(var t=this._queue.length;t--;){var e=this._queue[t];if(r===e){this._queue.splice(t,1),this._priorities.splice(t,1);break}}};yo.prototype.forEach=function(r){this._queue.forEach(r)};yo.prototype.getElements=function(){return this._queue};yo.prototype.getElementPriority=function(r){return this._priorities[r]};yo.prototype.getPriorities=function(){return this._priorities};yo.prototype.getElementsWithPriorities=function(){for(var r=[],t=0,e=this._queue.length;t<e;t++)r.push([this._queue[t],this._priorities[t]]);return r};yo.prototype._init=function(r,t,e){if(r&&t){if(this._queue=[],this._priorities=[],r.length!==t.length)throw new Error(\\\"Arrays must have the same length\\\");for(var o=0;o<r.length;o++)this.insert(r[o],t[o])}e&&(this._sorting=e)};yo.prototype._insertAt=function(r,t,e){this._queue.length===e?(this._queue.push(r),this._priorities.push(t)):(this._queue.splice(e,0,r),this._priorities.splice(e,0,t))};typeof tf!=\\\"undefined\\\"&&tf.exports&&(tf.exports=yo)});var a_=Jt((BB,cu)=>{typeof cu!=\\\"undefined\\\"&&cu.exports&&(s_=vd());var s_;function Jo(r,t,e,o){this.epsilon=1,this.minPts=1,this.distance=this._euclideanDistance,this._reachability=[],this._processed=[],this._coreDistance=0,this._orderedList=[],this._init(r,t,e,o)}Jo.prototype.run=function(r,t,e,o){this._init(r,t,e,o);for(var a=0,l=this.dataset.length;a<l;a++)if(this._processed[a]!==1){this._processed[a]=1,this.clusters.push([a]);var f=this.clusters.length-1;this._orderedList.push(a);var h=new s_(null,null,\\\"asc\\\"),p=this._regionQuery(a);this._distanceToCore(a)!==void 0&&(this._updateQueue(a,p,h),this._expandCluster(f,h))}return this.clusters};Jo.prototype.getReachabilityPlot=function(){for(var r=[],t=0,e=this._orderedList.length;t<e;t++){var o=this._orderedList[t],a=this._reachability[o];r.push([o,a])}return r};Jo.prototype._init=function(r,t,e,o){if(r){if(!(r instanceof Array))throw Error(\\\"Dataset must be of type array, \\\"+typeof r+\\\" given\\\");this.dataset=r,this.clusters=[],this._reachability=new Array(this.dataset.length),this._processed=new Array(this.dataset.length),this._coreDistance=0,this._orderedList=[]}t&&(this.epsilon=t),e&&(this.minPts=e),o&&(this.distance=o)};Jo.prototype._updateQueue=function(r,t,e){var o=this;this._coreDistance=this._distanceToCore(r),t.forEach(function(a){if(o._processed[a]===void 0){var l=o.distance(o.dataset[r],o.dataset[a]),f=Math.max(o._coreDistance,l);o._reachability[a]===void 0?(o._reachability[a]=f,e.insert(a,f)):f<o._reachability[a]&&(o._reachability[a]=f,e.remove(a),e.insert(a,f))}})};Jo.prototype._expandCluster=function(r,t){for(var e=t.getElements(),o=0,a=e.length;o<a;o++){var l=e[o];if(this._processed[l]===void 0){var f=this._regionQuery(l);this._processed[l]=1,this.clusters[r].push(l),this._orderedList.push(l),this._distanceToCore(l)!==void 0&&(this._updateQueue(l,f,t),this._expandCluster(r,t))}}};Jo.prototype._distanceToCore=function(r){for(var t=this.epsilon,e=0;e<t;e++){var o=this._regionQuery(r,e);if(o.length>=this.minPts)return e}};Jo.prototype._regionQuery=function(r,t){t=t||this.epsilon;for(var e=[],o=0,a=this.dataset.length;o<a;o++)this.distance(this.dataset[r],this.dataset[o])<t&&e.push(o);return e};Jo.prototype._euclideanDistance=function(r,t){for(var e=0,o=Math.min(r.length,t.length);o--;)e+=(r[o]-t[o])*(r[o]-t[o]);return Math.sqrt(e)};typeof cu!=\\\"undefined\\\"&&cu.exports&&(cu.exports=Jo)});var u_=Jt((zB,ef)=>{typeof ef!=\\\"undefined\\\"&&ef.exports&&(ef.exports={DBSCAN:i_(),KMEANS:o_(),OPTICS:a_(),PriorityQueue:vd()})});var _d=Jt((qB,c_)=>{\\\"use strict\\\";c_.exports={eudist:function(t,e,o){for(var a=t.length,l=0,f=0;f<a;f++){var h=(t[f]||0)-(e[f]||0);l+=h*h}return o?Math.sqrt(l):l},mandist:function(t,e,o){for(var a=t.length,l=0,f=0;f<a;f++)l+=Math.abs((t[f]||0)-(e[f]||0));return o?Math.sqrt(l):l},dist:function(t,e,o){var a=Math.abs(t-e);return o?a:a*a}}});var p_=Jt((XB,h_)=>{\\\"use strict\\\";var f_=_d(),GP=f_.eudist,VP=f_.dist;h_.exports={kmrand:function(t,e){for(var o={},a=[],l=e<<2,f=t.length,h=t[0].length>0;a.length<e&&l-- >0;){var p=t[Math.floor(Math.random()*f)],d=h?p.join(\\\"_\\\"):\\\"\\\"+p;o[d]||(o[d]=!0,a.push(p))}if(a.length<e)throw new Error(\\\"Error initializating clusters\\\");return a},kmpp:function(t,e){var o=t[0].length?GP:VP,a=[],l=t.length,f=t[0].length>0,h={},p=t[Math.floor(Math.random()*l)],d=f?p.join(\\\"_\\\"):\\\"\\\"+p;for(a.push(p),h[d]=!0;a.length<e;){for(var g=[],_=a.length,y=0,M=[],w=0;w<l;w++){for(var T=1/0,x=0;x<_;x++){var v=o(t[w],a[x]);v<=T&&(T=v)}g[w]=T}for(var C=0;C<l;C++)y+=g[C];for(var S=0;S<l;S++)M[S]={i:S,v:t[S],pr:g[S]/y,cs:0};M.sort(function(z,L){return z.pr-L.pr}),M[0].cs=M[0].pr;for(var O=1;O<l;O++)M[O].cs=M[O-1].cs+M[O].pr;for(var F=Math.random(),G=0;G<l-1&&M[G++].cs<F;);a.push(M[G-1].v)}return a}}});var v_=Jt((JB,y_)=>{\\\"use strict\\\";var xd=_d(),g_=p_(),HP=xd.eudist,YB=xd.mandist,ZB=xd.dist,WP=g_.kmrand,qP=g_.kmpp,d_=1e4;function m_(r,t,e){e=e||[];for(var o=0;o<r;o++)e[o]=t;return e}function XP(r,t,e,o){var a=[],l=[],f=[],h=[],p=!1,d=o||d_,g=r.length,_=r[0].length,y=_>0,M=[];if(e)e==\\\"kmrand\\\"?a=WP(r,t):e==\\\"kmpp\\\"?a=qP(r,t):a=e;else for(var w={};a.length<t;){var T=Math.floor(Math.random()*g);w[T]||(w[T]=!0,a.push(r[T]))}do{m_(t,0,M);for(var x=0;x<g;x++){for(var v=1/0,C=0,S=0;S<t;S++){var h=y?HP(r[x],a[S]):Math.abs(r[x]-a[S]);h<=v&&(v=h,C=S)}f[x]=C,M[C]++}for(var O=[],l=[],F=0,G=0;G<t;G++)O[G]=y?m_(_,0,O[G]):0,l[G]=a[G];if(y){for(var z=0;z<t;z++)a[z]=[];for(var L=0;L<g;L++)for(var D=f[L],q=O[D],nt=r[L],k=0;k<_;k++)q[k]+=nt[k];p=!0;for(var xt=0;xt<t;xt++){for(var X=a[xt],it=O[xt],vt=l[xt],pt=M[xt],et=0;et<_;et++)X[et]=it[et]/pt||0;if(p){for(var ot=0;ot<_;ot++)if(vt[ot]!=X[ot]){p=!1;break}}}}else{for(var V=0;V<g;V++){var K=f[V];O[K]+=r[V]}for(var at=0;at<t;at++)a[at]=O[at]/M[at]||0;p=!0;for(var Tt=0;Tt<t;Tt++)if(l[Tt]!=a[Tt]){p=!1;break}}p=p||--d<=0}while(!p);return{it:d_-d,k:t,idxs:f,centroids:a}}y_.exports=XP});var mu=Jt((Td,Ad)=>{(function(r,t){typeof Td==\\\"object\\\"&&typeof Ad!=\\\"undefined\\\"?Ad.exports=t():typeof define==\\\"function\\\"&&define.amd?define(t):(r=typeof globalThis!=\\\"undefined\\\"?globalThis:r||self,r.polygonClipping=t())})(Td,function(){\\\"use strict\\\";function r($,N){if(!($ instanceof N))throw new TypeError(\\\"Cannot call a class as a function\\\")}function t($,N){for(var b=0;b<N.length;b++){var R=N[b];R.enumerable=R.enumerable||!1,R.configurable=!0,\\\"value\\\"in R&&(R.writable=!0),Object.defineProperty($,R.key,R)}}function e($,N,b){return N&&t($.prototype,N),b&&t($,b),$}var o=function(){function $(N,b){this.next=null,this.key=N,this.data=b,this.left=null,this.right=null}return $}();function a($,N){return $>N?1:$<N?-1:0}function l($,N,b){for(var R=new o(null,null),W=R,J=R;;){var I=b($,N.key);if(I<0){if(N.left===null)break;if(b($,N.left.key)<0){var P=N.left;if(N.left=P.right,P.right=N,N=P,N.left===null)break}J.left=N,J=N,N=N.left}else if(I>0){if(N.right===null)break;if(b($,N.right.key)>0){var P=N.right;if(N.right=P.left,P.left=N,N=P,N.right===null)break}W.right=N,W=N,N=N.right}else break}return W.right=N.left,J.left=N.right,N.left=R.right,N.right=R.left,N}function f($,N,b,R){var W=new o($,N);if(b===null)return W.left=W.right=null,W;b=l($,b,R);var J=R($,b.key);return J<0?(W.left=b.left,W.right=b,b.left=null):J>=0&&(W.right=b.right,W.left=b,b.right=null),W}function h($,N,b){var R=null,W=null;if(N){N=l($,N,b);var J=b(N.key,$);J===0?(R=N.left,W=N.right):J<0?(W=N.right,N.right=null,R=N):(R=N.left,N.left=null,W=N)}return{left:R,right:W}}function p($,N,b){return N===null?$:($===null||(N=l($.key,N,b),N.left=$),N)}function d($,N,b,R,W){if($){R(\\\"\\\"+N+(b?\\\"\\\\u2514\\\\u2500\\\\u2500 \\\":\\\"\\\\u251C\\\\u2500\\\\u2500 \\\")+W($)+`\\n`);var J=N+(b?\\\" \\\":\\\"\\\\u2502 \\\");$.left&&d($.left,J,!1,R,W),$.right&&d($.right,J,!0,R,W)}}var g=function(){function $(N){N===void 0&&(N=a),this._root=null,this._size=0,this._comparator=N}return $.prototype.insert=function(N,b){return this._size++,this._root=f(N,b,this._root,this._comparator)},$.prototype.add=function(N,b){var R=new o(N,b);this._root===null&&(R.left=R.right=null,this._size++,this._root=R);var W=this._comparator,J=l(N,this._root,W),I=W(N,J.key);return I===0?this._root=J:(I<0?(R.left=J.left,R.right=J,J.left=null):I>0&&(R.right=J.right,R.left=J,J.right=null),this._size++,this._root=R),this._root},$.prototype.remove=function(N){this._root=this._remove(N,this._root,this._comparator)},$.prototype._remove=function(N,b,R){var W;if(b===null)return null;b=l(N,b,R);var J=R(N,b.key);return J===0?(b.left===null?W=b.right:(W=l(N,b.left,R),W.right=b.right),this._size--,W):b},$.prototype.pop=function(){var N=this._root;if(N){for(;N.left;)N=N.left;return this._root=l(N.key,this._root,this._comparator),this._root=this._remove(N.key,this._root,this._comparator),{key:N.key,data:N.data}}return null},$.prototype.findStatic=function(N){for(var b=this._root,R=this._comparator;b;){var W=R(N,b.key);if(W===0)return b;W<0?b=b.left:b=b.right}return null},$.prototype.find=function(N){return this._root&&(this._root=l(N,this._root,this._comparator),this._comparator(N,this._root.key)!==0)?null:this._root},$.prototype.contains=function(N){for(var b=this._root,R=this._comparator;b;){var W=R(N,b.key);if(W===0)return!0;W<0?b=b.left:b=b.right}return!1},$.prototype.forEach=function(N,b){for(var R=this._root,W=[],J=!1;!J;)R!==null?(W.push(R),R=R.left):W.length!==0?(R=W.pop(),N.call(b,R),R=R.right):J=!0;return this},$.prototype.range=function(N,b,R,W){for(var J=[],I=this._comparator,P=this._root,B;J.length!==0||P;)if(P)J.push(P),P=P.left;else{if(P=J.pop(),B=I(P.key,b),B>0)break;if(I(P.key,N)>=0&&R.call(W,P))return this;P=P.right}return this},$.prototype.keys=function(){var N=[];return this.forEach(function(b){var R=b.key;return N.push(R)}),N},$.prototype.values=function(){var N=[];return this.forEach(function(b){var R=b.data;return N.push(R)}),N},$.prototype.min=function(){return this._root?this.minNode(this._root).key:null},$.prototype.max=function(){return this._root?this.maxNode(this._root).key:null},$.prototype.minNode=function(N){if(N===void 0&&(N=this._root),N)for(;N.left;)N=N.left;return N},$.prototype.maxNode=function(N){if(N===void 0&&(N=this._root),N)for(;N.right;)N=N.right;return N},$.prototype.at=function(N){for(var b=this._root,R=!1,W=0,J=[];!R;)if(b)J.push(b),b=b.left;else if(J.length>0){if(b=J.pop(),W===N)return b;W++,b=b.right}else R=!0;return null},$.prototype.next=function(N){var b=this._root,R=null;if(N.right){for(R=N.right;R.left;)R=R.left;return R}for(var W=this._comparator;b;){var J=W(N.key,b.key);if(J===0)break;J<0?(R=b,b=b.left):b=b.right}return R},$.prototype.prev=function(N){var b=this._root,R=null;if(N.left!==null){for(R=N.left;R.right;)R=R.right;return R}for(var W=this._comparator;b;){var J=W(N.key,b.key);if(J===0)break;J<0?b=b.left:(R=b,b=b.right)}return R},$.prototype.clear=function(){return this._root=null,this._size=0,this},$.prototype.toList=function(){return M(this._root)},$.prototype.load=function(N,b,R){b===void 0&&(b=[]),R===void 0&&(R=!1);var W=N.length,J=this._comparator;if(R&&x(N,b,0,W-1,J),this._root===null)this._root=_(N,b,0,W),this._size=W;else{var I=T(this.toList(),y(N,b),J);W=this._size+W,this._root=w({head:I},0,W)}return this},$.prototype.isEmpty=function(){return this._root===null},Object.defineProperty($.prototype,\\\"size\\\",{get:function(){return this._size},enumerable:!0,configurable:!0}),Object.defineProperty($.prototype,\\\"root\\\",{get:function(){return this._root},enumerable:!0,configurable:!0}),$.prototype.toString=function(N){N===void 0&&(N=function(W){return String(W.key)});var b=[];return d(this._root,\\\"\\\",!0,function(R){return b.push(R)},N),b.join(\\\"\\\")},$.prototype.update=function(N,b,R){var W=this._comparator,J=h(N,this._root,W),I=J.left,P=J.right;W(N,b)<0?P=f(b,R,P,W):I=f(b,R,I,W),this._root=p(I,P,W)},$.prototype.split=function(N){return h(N,this._root,this._comparator)},$}();function _($,N,b,R){var W=R-b;if(W>0){var J=b+Math.floor(W/2),I=$[J],P=N[J],B=new o(I,P);return B.left=_($,N,b,J),B.right=_($,N,J+1,R),B}return null}function y($,N){for(var b=new o(null,null),R=b,W=0;W<$.length;W++)R=R.next=new o($[W],N[W]);return R.next=null,b.next}function M($){for(var N=$,b=[],R=!1,W=new o(null,null),J=W;!R;)N?(b.push(N),N=N.left):b.length>0?(N=J=J.next=b.pop(),N=N.right):R=!0;return J.next=null,W.next}function w($,N,b){var R=b-N;if(R>0){var W=N+Math.floor(R/2),J=w($,N,W),I=$.head;return I.left=J,$.head=$.head.next,I.right=w($,W+1,b),I}return null}function T($,N,b){for(var R=new o(null,null),W=R,J=$,I=N;J!==null&&I!==null;)b(J.key,I.key)<0?(W.next=J,J=J.next):(W.next=I,I=I.next),W=W.next;return J!==null?W.next=J:I!==null&&(W.next=I),R.next}function x($,N,b,R,W){if(!(b>=R)){for(var J=$[b+R>>1],I=b-1,P=R+1;;){do I++;while(W($[I],J)<0);do P--;while(W($[P],J)>0);if(I>=P)break;var B=$[I];$[I]=$[P],$[P]=B,B=N[I],N[I]=N[P],N[P]=B}x($,N,b,P,W),x($,N,P+1,R,W)}}var v=function(N,b){return N.ll.x<=b.x&&b.x<=N.ur.x&&N.ll.y<=b.y&&b.y<=N.ur.y},C=function(N,b){if(b.ur.x<N.ll.x||N.ur.x<b.ll.x||b.ur.y<N.ll.y||N.ur.y<b.ll.y)return null;var R=N.ll.x<b.ll.x?b.ll.x:N.ll.x,W=N.ur.x<b.ur.x?N.ur.x:b.ur.x,J=N.ll.y<b.ll.y?b.ll.y:N.ll.y,I=N.ur.y<b.ur.y?N.ur.y:b.ur.y;return{ll:{x:R,y:J},ur:{x:W,y:I}}},S=Number.EPSILON;S===void 0&&(S=Math.pow(2,-52));var O=S*S,F=function(N,b){if(-S<N&&N<S&&-S<b&&b<S)return 0;var R=N-b;return R*R<O*N*b?0:N<b?-1:1},G=function(){function $(){r(this,$),this.reset()}return e($,[{key:\\\"reset\\\",value:function(){this.xRounder=new z,this.yRounder=new z}},{key:\\\"round\\\",value:function(b,R){return{x:this.xRounder.round(b),y:this.yRounder.round(R)}}}]),$}(),z=function(){function $(){r(this,$),this.tree=new g,this.round(0)}return e($,[{key:\\\"round\\\",value:function(b){var R=this.tree.add(b),W=this.tree.prev(R);if(W!==null&&F(R.key,W.key)===0)return this.tree.remove(b),W.key;var J=this.tree.next(R);return J!==null&&F(R.key,J.key)===0?(this.tree.remove(b),J.key):b}}]),$}(),L=new G,D=function(N,b){return N.x*b.y-N.y*b.x},q=function(N,b){return N.x*b.x+N.y*b.y},nt=function(N,b,R){var W={x:b.x-N.x,y:b.y-N.y},J={x:R.x-N.x,y:R.y-N.y},I=D(W,J);return F(I,0)},k=function(N){return Math.sqrt(q(N,N))},xt=function(N,b,R){var W={x:b.x-N.x,y:b.y-N.y},J={x:R.x-N.x,y:R.y-N.y};return D(J,W)/k(J)/k(W)},X=function(N,b,R){var W={x:b.x-N.x,y:b.y-N.y},J={x:R.x-N.x,y:R.y-N.y};return q(J,W)/k(J)/k(W)},it=function(N,b,R){return b.y===0?null:{x:N.x+b.x/b.y*(R-N.y),y:R}},vt=function(N,b,R){return b.x===0?null:{x:R,y:N.y+b.y/b.x*(R-N.x)}},pt=function(N,b,R,W){if(b.x===0)return vt(R,W,N.x);if(W.x===0)return vt(N,b,R.x);if(b.y===0)return it(R,W,N.y);if(W.y===0)return it(N,b,R.y);var J=D(b,W);if(J==0)return null;var I={x:R.x-N.x,y:R.y-N.y},P=D(I,b)/J,B=D(I,W)/J,lt=N.x+B*b.x,ct=R.x+P*W.x,Q=N.y+B*b.y,St=R.y+P*W.y,_t=(lt+ct)/2,Mt=(Q+St)/2;return{x:_t,y:Mt}},et=function(){e($,null,[{key:\\\"compare\\\",value:function(b,R){var W=$.comparePoints(b.point,R.point);return W!==0?W:(b.point!==R.point&&b.link(R),b.isLeft!==R.isLeft?b.isLeft?1:-1:V.compare(b.segment,R.segment))}},{key:\\\"comparePoints\\\",value:function(b,R){return b.x<R.x?-1:b.x>R.x?1:b.y<R.y?-1:b.y>R.y?1:0}}]);function $(N,b){r(this,$),N.events===void 0?N.events=[this]:N.events.push(this),this.point=N,this.isLeft=b}return e($,[{key:\\\"link\\\",value:function(b){if(b.point===this.point)throw new Error(\\\"Tried to link already linked events\\\");for(var R=b.point.events,W=0,J=R.length;W<J;W++){var I=R[W];this.point.events.push(I),I.point=this.point}this.checkForConsuming()}},{key:\\\"checkForConsuming\\\",value:function(){for(var b=this.point.events.length,R=0;R<b;R++){var W=this.point.events[R];if(W.segment.consumedBy===void 0)for(var J=R+1;J<b;J++){var I=this.point.events[J];I.consumedBy===void 0&&W.otherSE.point.events===I.otherSE.point.events&&W.segment.consume(I.segment)}}}},{key:\\\"getAvailableLinkedEvents\\\",value:function(){for(var b=[],R=0,W=this.point.events.length;R<W;R++){var J=this.point.events[R];J!==this&&!J.segment.ringOut&&J.segment.isInResult()&&b.push(J)}return b}},{key:\\\"getLeftmostComparator\\\",value:function(b){var R=this,W=new Map,J=function(P){var B=P.otherSE;W.set(P,{sine:xt(R.point,b.point,B.point),cosine:X(R.point,b.point,B.point)})};return function(I,P){W.has(I)||J(I),W.has(P)||J(P);var B=W.get(I),lt=B.sine,ct=B.cosine,Q=W.get(P),St=Q.sine,_t=Q.cosine;return lt>=0&&St>=0?ct<_t?1:ct>_t?-1:0:lt<0&&St<0?ct<_t?-1:ct>_t?1:0:St<lt?-1:St>lt?1:0}}}]),$}(),ot=0,V=function(){e($,null,[{key:\\\"compare\\\",value:function(b,R){var W=b.leftSE.point.x,J=R.leftSE.point.x,I=b.rightSE.point.x,P=R.rightSE.point.x;if(P<W)return 1;if(I<J)return-1;var B=b.leftSE.point.y,lt=R.leftSE.point.y,ct=b.rightSE.point.y,Q=R.rightSE.point.y;if(W<J){if(lt<B&<<ct)return 1;if(lt>B&<>ct)return-1;var St=b.comparePoint(R.leftSE.point);if(St<0)return 1;if(St>0)return-1;var _t=R.comparePoint(b.rightSE.point);return _t!==0?_t:-1}if(W>J){if(B<lt&&B<Q)return-1;if(B>lt&&B>Q)return 1;var Mt=R.comparePoint(b.leftSE.point);if(Mt!==0)return Mt;var Lt=b.comparePoint(R.rightSE.point);return Lt<0?1:Lt>0?-1:1}if(B<lt)return-1;if(B>lt)return 1;if(I<P){var $t=R.comparePoint(b.rightSE.point);if($t!==0)return $t}if(I>P){var Et=b.comparePoint(R.rightSE.point);if(Et<0)return 1;if(Et>0)return-1}if(I!==P){var oe=ct-B,jt=I-W,Ht=Q-lt,Ot=P-J;if(oe>jt&&Ht<Ot)return 1;if(oe<jt&&Ht>Ot)return-1}return I>P?1:I<P||ct<Q?-1:ct>Q?1:b.id<R.id?-1:b.id>R.id?1:0}}]);function $(N,b,R,W){r(this,$),this.id=++ot,this.leftSE=N,N.segment=this,N.otherSE=b,this.rightSE=b,b.segment=this,b.otherSE=N,this.rings=R,this.windings=W}return e($,[{key:\\\"replaceRightSE\\\",value:function(b){this.rightSE=b,this.rightSE.segment=this,this.rightSE.otherSE=this.leftSE,this.leftSE.otherSE=this.rightSE}},{key:\\\"bbox\\\",value:function(){var b=this.leftSE.point.y,R=this.rightSE.point.y;return{ll:{x:this.leftSE.point.x,y:b<R?b:R},ur:{x:this.rightSE.point.x,y:b>R?b:R}}}},{key:\\\"vector\\\",value:function(){return{x:this.rightSE.point.x-this.leftSE.point.x,y:this.rightSE.point.y-this.leftSE.point.y}}},{key:\\\"isAnEndpoint\\\",value:function(b){return b.x===this.leftSE.point.x&&b.y===this.leftSE.point.y||b.x===this.rightSE.point.x&&b.y===this.rightSE.point.y}},{key:\\\"comparePoint\\\",value:function(b){if(this.isAnEndpoint(b))return 0;var R=this.leftSE.point,W=this.rightSE.point,J=this.vector();if(R.x===W.x)return b.x===R.x?0:b.x<R.x?1:-1;var I=(b.y-R.y)/J.y,P=R.x+I*J.x;if(b.x===P)return 0;var B=(b.x-R.x)/J.x,lt=R.y+B*J.y;return b.y===lt?0:b.y<lt?-1:1}},{key:\\\"getIntersection\\\",value:function(b){var R=this.bbox(),W=b.bbox(),J=C(R,W);if(J===null)return null;var I=this.leftSE.point,P=this.rightSE.point,B=b.leftSE.point,lt=b.rightSE.point,ct=v(R,B)&&this.comparePoint(B)===0,Q=v(W,I)&&b.comparePoint(I)===0,St=v(R,lt)&&this.comparePoint(lt)===0,_t=v(W,P)&&b.comparePoint(P)===0;if(Q&&ct)return _t&&!St?P:!_t&&St?lt:null;if(Q)return St&&I.x===lt.x&&I.y===lt.y?null:I;if(ct)return _t&&P.x===B.x&&P.y===B.y?null:B;if(_t&&St)return null;if(_t)return P;if(St)return lt;var Mt=pt(I,this.vector(),B,b.vector());return Mt===null||!v(J,Mt)?null:L.round(Mt.x,Mt.y)}},{key:\\\"split\\\",value:function(b){var R=[],W=b.events!==void 0,J=new et(b,!0),I=new et(b,!1),P=this.rightSE;this.replaceRightSE(I),R.push(I),R.push(J);var B=new $(J,P,this.rings.slice(),this.windings.slice());return et.comparePoints(B.leftSE.point,B.rightSE.point)>0&&B.swapEvents(),et.comparePoints(this.leftSE.point,this.rightSE.point)>0&&this.swapEvents(),W&&(J.checkForConsuming(),I.checkForConsuming()),R}},{key:\\\"swapEvents\\\",value:function(){var b=this.rightSE;this.rightSE=this.leftSE,this.leftSE=b,this.leftSE.isLeft=!0,this.rightSE.isLeft=!1;for(var R=0,W=this.windings.length;R<W;R++)this.windings[R]*=-1}},{key:\\\"consume\\\",value:function(b){for(var R=this,W=b;R.consumedBy;)R=R.consumedBy;for(;W.consumedBy;)W=W.consumedBy;var J=$.compare(R,W);if(J!==0){if(J>0){var I=R;R=W,W=I}if(R.prev===W){var P=R;R=W,W=P}for(var B=0,lt=W.rings.length;B<lt;B++){var ct=W.rings[B],Q=W.windings[B],St=R.rings.indexOf(ct);St===-1?(R.rings.push(ct),R.windings.push(Q)):R.windings[St]+=Q}W.rings=null,W.windings=null,W.consumedBy=R,W.leftSE.consumedBy=R.leftSE,W.rightSE.consumedBy=R.rightSE}}},{key:\\\"prevInResult\\\",value:function(){return this._prevInResult!==void 0?this._prevInResult:(this.prev?this.prev.isInResult()?this._prevInResult=this.prev:this._prevInResult=this.prev.prevInResult():this._prevInResult=null,this._prevInResult)}},{key:\\\"beforeState\\\",value:function(){if(this._beforeState!==void 0)return this._beforeState;if(!this.prev)this._beforeState={rings:[],windings:[],multiPolys:[]};else{var b=this.prev.consumedBy||this.prev;this._beforeState=b.afterState()}return this._beforeState}},{key:\\\"afterState\\\",value:function(){if(this._afterState!==void 0)return this._afterState;var b=this.beforeState();this._afterState={rings:b.rings.slice(0),windings:b.windings.slice(0),multiPolys:[]};for(var R=this._afterState.rings,W=this._afterState.windings,J=this._afterState.multiPolys,I=0,P=this.rings.length;I<P;I++){var B=this.rings[I],lt=this.windings[I],ct=R.indexOf(B);ct===-1?(R.push(B),W.push(lt)):W[ct]+=lt}for(var Q=[],St=[],_t=0,Mt=R.length;_t<Mt;_t++)if(W[_t]!==0){var Lt=R[_t],$t=Lt.poly;if(St.indexOf($t)===-1)if(Lt.isExterior)Q.push($t);else{St.indexOf($t)===-1&&St.push($t);var Et=Q.indexOf(Lt.poly);Et!==-1&&Q.splice(Et,1)}}for(var oe=0,jt=Q.length;oe<jt;oe++){var Ht=Q[oe].multiPoly;J.indexOf(Ht)===-1&&J.push(Ht)}return this._afterState}},{key:\\\"isInResult\\\",value:function(){if(this.consumedBy)return!1;if(this._isInResult!==void 0)return this._isInResult;var b=this.beforeState().multiPolys,R=this.afterState().multiPolys;switch(Xt.type){case\\\"union\\\":{var W=b.length===0,J=R.length===0;this._isInResult=W!==J;break}case\\\"intersection\\\":{var I,P;b.length<R.length?(I=b.length,P=R.length):(I=R.length,P=b.length),this._isInResult=P===Xt.numMultiPolys&&I<P;break}case\\\"xor\\\":{var B=Math.abs(b.length-R.length);this._isInResult=B%2===1;break}case\\\"difference\\\":{var lt=function(Q){return Q.length===1&&Q[0].isSubject};this._isInResult=lt(b)!==lt(R);break}default:throw new Error(\\\"Unrecognized operation type found \\\".concat(Xt.type))}return this._isInResult}}],[{key:\\\"fromRing\\\",value:function(b,R,W){var J,I,P,B=et.comparePoints(b,R);if(B<0)J=b,I=R,P=1;else if(B>0)J=R,I=b,P=-1;else throw new Error(\\\"Tried to create degenerate segment at [\\\".concat(b.x,\\\", \\\").concat(b.y,\\\"]\\\"));var lt=new et(J,!0),ct=new et(I,!1);return new $(lt,ct,[W],[P])}}]),$}(),K=function(){function $(N,b,R){if(r(this,$),!Array.isArray(N)||N.length===0)throw new Error(\\\"Input geometry is not a valid Polygon or MultiPolygon\\\");if(this.poly=b,this.isExterior=R,this.segments=[],typeof N[0][0]!=\\\"number\\\"||typeof N[0][1]!=\\\"number\\\")throw new Error(\\\"Input geometry is not a valid Polygon or MultiPolygon\\\");var W=L.round(N[0][0],N[0][1]);this.bbox={ll:{x:W.x,y:W.y},ur:{x:W.x,y:W.y}};for(var J=W,I=1,P=N.length;I<P;I++){if(typeof N[I][0]!=\\\"number\\\"||typeof N[I][1]!=\\\"number\\\")throw new Error(\\\"Input geometry is not a valid Polygon or MultiPolygon\\\");var B=L.round(N[I][0],N[I][1]);B.x===J.x&&B.y===J.y||(this.segments.push(V.fromRing(J,B,this)),B.x<this.bbox.ll.x&&(this.bbox.ll.x=B.x),B.y<this.bbox.ll.y&&(this.bbox.ll.y=B.y),B.x>this.bbox.ur.x&&(this.bbox.ur.x=B.x),B.y>this.bbox.ur.y&&(this.bbox.ur.y=B.y),J=B)}(W.x!==J.x||W.y!==J.y)&&this.segments.push(V.fromRing(J,W,this))}return e($,[{key:\\\"getSweepEvents\\\",value:function(){for(var b=[],R=0,W=this.segments.length;R<W;R++){var J=this.segments[R];b.push(J.leftSE),b.push(J.rightSE)}return b}}]),$}(),at=function(){function $(N,b){if(r(this,$),!Array.isArray(N))throw new Error(\\\"Input geometry is not a valid Polygon or MultiPolygon\\\");this.exteriorRing=new K(N[0],this,!0),this.bbox={ll:{x:this.exteriorRing.bbox.ll.x,y:this.exteriorRing.bbox.ll.y},ur:{x:this.exteriorRing.bbox.ur.x,y:this.exteriorRing.bbox.ur.y}},this.interiorRings=[];for(var R=1,W=N.length;R<W;R++){var J=new K(N[R],this,!1);J.bbox.ll.x<this.bbox.ll.x&&(this.bbox.ll.x=J.bbox.ll.x),J.bbox.ll.y<this.bbox.ll.y&&(this.bbox.ll.y=J.bbox.ll.y),J.bbox.ur.x>this.bbox.ur.x&&(this.bbox.ur.x=J.bbox.ur.x),J.bbox.ur.y>this.bbox.ur.y&&(this.bbox.ur.y=J.bbox.ur.y),this.interiorRings.push(J)}this.multiPoly=b}return e($,[{key:\\\"getSweepEvents\\\",value:function(){for(var b=this.exteriorRing.getSweepEvents(),R=0,W=this.interiorRings.length;R<W;R++)for(var J=this.interiorRings[R].getSweepEvents(),I=0,P=J.length;I<P;I++)b.push(J[I]);return b}}]),$}(),Tt=function(){function $(N,b){if(r(this,$),!Array.isArray(N))throw new Error(\\\"Input geometry is not a valid Polygon or MultiPolygon\\\");try{typeof N[0][0][0]==\\\"number\\\"&&(N=[N])}catch(I){}this.polys=[],this.bbox={ll:{x:Number.POSITIVE_INFINITY,y:Number.POSITIVE_INFINITY},ur:{x:Number.NEGATIVE_INFINITY,y:Number.NEGATIVE_INFINITY}};for(var R=0,W=N.length;R<W;R++){var J=new at(N[R],this);J.bbox.ll.x<this.bbox.ll.x&&(this.bbox.ll.x=J.bbox.ll.x),J.bbox.ll.y<this.bbox.ll.y&&(this.bbox.ll.y=J.bbox.ll.y),J.bbox.ur.x>this.bbox.ur.x&&(this.bbox.ur.x=J.bbox.ur.x),J.bbox.ur.y>this.bbox.ur.y&&(this.bbox.ur.y=J.bbox.ur.y),this.polys.push(J)}this.isSubject=b}return e($,[{key:\\\"getSweepEvents\\\",value:function(){for(var b=[],R=0,W=this.polys.length;R<W;R++)for(var J=this.polys[R].getSweepEvents(),I=0,P=J.length;I<P;I++)b.push(J[I]);return b}}]),$}(),dt=function(){e($,null,[{key:\\\"factory\\\",value:function(b){for(var R=[],W=0,J=b.length;W<J;W++){var I=b[W];if(!(!I.isInResult()||I.ringOut)){for(var P=null,B=I.leftSE,lt=I.rightSE,ct=[B],Q=B.point,St=[];P=B,B=lt,ct.push(B),B.point!==Q;)for(;;){var _t=B.getAvailableLinkedEvents();if(_t.length===0){var Mt=ct[0].point,Lt=ct[ct.length-1].point;throw new Error(\\\"Unable to complete output ring starting at [\\\".concat(Mt.x,\\\",\\\")+\\\" \\\".concat(Mt.y,\\\"]. Last matching segment found ends at\\\")+\\\" [\\\".concat(Lt.x,\\\", \\\").concat(Lt.y,\\\"].\\\"))}if(_t.length===1){lt=_t[0].otherSE;break}for(var $t=null,Et=0,oe=St.length;Et<oe;Et++)if(St[Et].point===B.point){$t=Et;break}if($t!==null){var jt=St.splice($t)[0],Ht=ct.splice(jt.index);Ht.unshift(Ht[0].otherSE),R.push(new $(Ht.reverse()));continue}St.push({index:ct.length,point:B.point});var Ot=B.getLeftmostComparator(P);lt=_t.sort(Ot)[0].otherSE;break}R.push(new $(ct))}}return R}}]);function $(N){r(this,$),this.events=N;for(var b=0,R=N.length;b<R;b++)N[b].segment.ringOut=this;this.poly=null}return e($,[{key:\\\"getGeom\\\",value:function(){for(var b=this.events[0].point,R=[b],W=1,J=this.events.length-1;W<J;W++){var I=this.events[W].point,P=this.events[W+1].point;nt(I,b,P)!==0&&(R.push(I),b=I)}if(R.length===1)return null;var B=R[0],lt=R[1];nt(B,b,lt)===0&&R.shift(),R.push(R[0]);for(var ct=this.isExteriorRing()?1:-1,Q=this.isExteriorRing()?0:R.length-1,St=this.isExteriorRing()?R.length:-1,_t=[],Mt=Q;Mt!=St;Mt+=ct)_t.push([R[Mt].x,R[Mt].y]);return _t}},{key:\\\"isExteriorRing\\\",value:function(){if(this._isExteriorRing===void 0){var b=this.enclosingRing();this._isExteriorRing=b?!b.isExteriorRing():!0}return this._isExteriorRing}},{key:\\\"enclosingRing\\\",value:function(){return this._enclosingRing===void 0&&(this._enclosingRing=this._calcEnclosingRing()),this._enclosingRing}},{key:\\\"_calcEnclosingRing\\\",value:function(){for(var b=this.events[0],R=1,W=this.events.length;R<W;R++){var J=this.events[R];et.compare(b,J)>0&&(b=J)}for(var I=b.segment.prevInResult(),P=I?I.prevInResult():null;;){if(!I)return null;if(!P)return I.ringOut;if(P.ringOut!==I.ringOut)return P.ringOut.enclosingRing()!==I.ringOut?I.ringOut:I.ringOut.enclosingRing();I=P.prevInResult(),P=I?I.prevInResult():null}}}]),$}(),Ct=function(){function $(N){r(this,$),this.exteriorRing=N,N.poly=this,this.interiorRings=[]}return e($,[{key:\\\"addInterior\\\",value:function(b){this.interiorRings.push(b),b.poly=this}},{key:\\\"getGeom\\\",value:function(){var b=[this.exteriorRing.getGeom()];if(b[0]===null)return null;for(var R=0,W=this.interiorRings.length;R<W;R++){var J=this.interiorRings[R].getGeom();J!==null&&b.push(J)}return b}}]),$}(),Yt=function(){function $(N){r(this,$),this.rings=N,this.polys=this._composePolys(N)}return e($,[{key:\\\"getGeom\\\",value:function(){for(var b=[],R=0,W=this.polys.length;R<W;R++){var J=this.polys[R].getGeom();J!==null&&b.push(J)}return b}},{key:\\\"_composePolys\\\",value:function(b){for(var R=[],W=0,J=b.length;W<J;W++){var I=b[W];if(!I.poly)if(I.isExteriorRing())R.push(new Ct(I));else{var P=I.enclosingRing();P.poly||R.push(new Ct(P)),P.poly.addInterior(I)}}return R}}]),$}(),Wt=function(){function $(N){var b=arguments.length>1&&arguments[1]!==void 0?arguments[1]:V.compare;r(this,$),this.queue=N,this.tree=new g(b),this.segments=[]}return e($,[{key:\\\"process\\\",value:function(b){var R=b.segment,W=[];if(b.consumedBy)return b.isLeft?this.queue.remove(b.otherSE):this.tree.remove(R),W;var J=b.isLeft?this.tree.insert(R):this.tree.find(R);if(!J)throw new Error(\\\"Unable to find segment #\\\".concat(R.id,\\\" \\\")+\\\"[\\\".concat(R.leftSE.point.x,\\\", \\\").concat(R.leftSE.point.y,\\\"] -> \\\")+\\\"[\\\".concat(R.rightSE.point.x,\\\", \\\").concat(R.rightSE.point.y,\\\"] \\\")+\\\"in SweepLine tree. Please submit a bug report.\\\");for(var I=J,P=J,B=void 0,lt=void 0;B===void 0;)I=this.tree.prev(I),I===null?B=null:I.key.consumedBy===void 0&&(B=I.key);for(;lt===void 0;)P=this.tree.next(P),P===null?lt=null:P.key.consumedBy===void 0&&(lt=P.key);if(b.isLeft){var ct=null;if(B){var Q=B.getIntersection(R);if(Q!==null&&(R.isAnEndpoint(Q)||(ct=Q),!B.isAnEndpoint(Q)))for(var St=this._splitSafely(B,Q),_t=0,Mt=St.length;_t<Mt;_t++)W.push(St[_t])}var Lt=null;if(lt){var $t=lt.getIntersection(R);if($t!==null&&(R.isAnEndpoint($t)||(Lt=$t),!lt.isAnEndpoint($t)))for(var Et=this._splitSafely(lt,$t),oe=0,jt=Et.length;oe<jt;oe++)W.push(Et[oe])}if(ct!==null||Lt!==null){var Ht=null;if(ct===null)Ht=Lt;else if(Lt===null)Ht=ct;else{var Ot=et.comparePoints(ct,Lt);Ht=Ot<=0?ct:Lt}this.queue.remove(R.rightSE),W.push(R.rightSE);for(var Y=R.split(Ht),wt=0,j=Y.length;wt<j;wt++)W.push(Y[wt])}W.length>0?(this.tree.remove(R),W.push(b)):(this.segments.push(R),R.prev=B)}else{if(B&<){var Ut=B.getIntersection(lt);if(Ut!==null){if(!B.isAnEndpoint(Ut))for(var Dt=this._splitSafely(B,Ut),ft=0,Kt=Dt.length;ft<Kt;ft++)W.push(Dt[ft]);if(!lt.isAnEndpoint(Ut))for(var re=this._splitSafely(lt,Ut),mn=0,He=re.length;mn<He;mn++)W.push(re[mn])}}this.tree.remove(R)}return W}},{key:\\\"_splitSafely\\\",value:function(b,R){this.tree.remove(b);var W=b.rightSE;this.queue.remove(W);var J=b.split(R);return J.push(W),b.consumedBy===void 0&&this.tree.insert(b),J}}]),$}(),Nt=typeof process!=\\\"undefined\\\"&&process.env.POLYGON_CLIPPING_MAX_QUEUE_SIZE||1e6,ne=typeof process!=\\\"undefined\\\"&&process.env.POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS||1e6,Pt=function(){function $(){r(this,$)}return e($,[{key:\\\"run\\\",value:function(b,R,W){Xt.type=b,L.reset();for(var J=[new Tt(R,!0)],I=0,P=W.length;I<P;I++)J.push(new Tt(W[I],!1));if(Xt.numMultiPolys=J.length,Xt.type===\\\"difference\\\")for(var B=J[0],lt=1;lt<J.length;)C(J[lt].bbox,B.bbox)!==null?lt++:J.splice(lt,1);if(Xt.type===\\\"intersection\\\"){for(var ct=0,Q=J.length;ct<Q;ct++)for(var St=J[ct],_t=ct+1,Mt=J.length;_t<Mt;_t++)if(C(St.bbox,J[_t].bbox)===null)return[]}for(var Lt=new g(et.compare),$t=0,Et=J.length;$t<Et;$t++)for(var oe=J[$t].getSweepEvents(),jt=0,Ht=oe.length;jt<Ht;jt++)if(Lt.insert(oe[jt]),Lt.size>Nt)throw new Error(\\\"Infinite loop when putting segment endpoints in a priority queue (queue size too big). Please file a bug report.\\\");for(var Ot=new Wt(Lt),Y=Lt.size,wt=Lt.pop();wt;){var j=wt.key;if(Lt.size===Y){var Ut=j.segment;throw new Error(\\\"Unable to pop() \\\".concat(j.isLeft?\\\"left\\\":\\\"right\\\",\\\" SweepEvent \\\")+\\\"[\\\".concat(j.point.x,\\\", \\\").concat(j.point.y,\\\"] from segment #\\\").concat(Ut.id,\\\" \\\")+\\\"[\\\".concat(Ut.leftSE.point.x,\\\", \\\").concat(Ut.leftSE.point.y,\\\"] -> \\\")+\\\"[\\\".concat(Ut.rightSE.point.x,\\\", \\\").concat(Ut.rightSE.point.y,\\\"] from queue. \\\")+\\\"Please file a bug report.\\\")}if(Lt.size>Nt)throw new Error(\\\"Infinite loop when passing sweep line over endpoints (queue size too big). Please file a bug report.\\\");if(Ot.segments.length>ne)throw new Error(\\\"Infinite loop when passing sweep line over endpoints (too many sweep line segments). Please file a bug report.\\\");for(var Dt=Ot.process(j),ft=0,Kt=Dt.length;ft<Kt;ft++){var re=Dt[ft];re.consumedBy===void 0&&Lt.insert(re)}Y=Lt.size,wt=Lt.pop()}L.reset();var mn=dt.factory(Ot.segments),He=new Yt(mn);return He.getGeom()}}]),$}(),Xt=new Pt,tt=function(N){for(var b=arguments.length,R=new Array(b>1?b-1:0),W=1;W<b;W++)R[W-1]=arguments[W];return Xt.run(\\\"union\\\",N,R)},nn=function(N){for(var b=arguments.length,R=new Array(b>1?b-1:0),W=1;W<b;W++)R[W-1]=arguments[W];return Xt.run(\\\"intersection\\\",N,R)},Gt=function(N){for(var b=arguments.length,R=new Array(b>1?b-1:0),W=1;W<b;W++)R[W-1]=arguments[W];return Xt.run(\\\"xor\\\",N,R)},te=function(N){for(var b=arguments.length,R=new Array(b>1?b-1:0),W=1;W<b;W++)R[W-1]=arguments[W];return Xt.run(\\\"difference\\\",N,R)},qt={union:tt,intersection:nn,xor:Gt,difference:te};return qt})});var U_=Jt((sf,F_)=>{(function(r,t){typeof sf==\\\"object\\\"&&typeof F_!=\\\"undefined\\\"?t(sf):typeof define==\\\"function\\\"&&define.amd?define([\\\"exports\\\"],t):t(r.jsts={})})(sf,function(r){\\\"use strict\\\";function t(){}function e(n){this.message=n||\\\"\\\"}function o(n){this.message=n||\\\"\\\"}function a(n){this.message=n||\\\"\\\"}function l(){}function f(n){return n===null?pi:n.color}function h(n){return n===null?null:n.parent}function p(n,i){n!==null&&(n.color=i)}function d(n){return n===null?null:n.left}function g(n){return n===null?null:n.right}function _(){this.root_=null,this.size_=0}function y(){}function M(){this.array_=[],arguments[0]instanceof Ot&&this.addAll(arguments[0])}function w(){}function T(n){this.message=n||\\\"\\\"}function x(){this.array_=[]}\\\"fill\\\"in Array.prototype||Object.defineProperty(Array.prototype,\\\"fill\\\",{configurable:!0,value:function(n){if(this===void 0||this===null)throw new TypeError(this+\\\" is not an object\\\");var i=Object(this),s=Math.max(Math.min(i.length,9007199254740991),0)||0,u=1 in arguments&&parseInt(Number(arguments[1]),10)||0;u=u<0?Math.max(s+u,0):Math.min(u,s);var c=2 in arguments&&arguments[2]!==void 0?parseInt(Number(arguments[2]),10)||0:s;for(c=c<0?Math.max(s+arguments[2],0):Math.min(c,s);u<c;)i[u]=n,++u;return i},writable:!0}),Number.isFinite=Number.isFinite||function(n){return typeof n==\\\"number\\\"&&isFinite(n)},Number.isInteger=Number.isInteger||function(n){return typeof n==\\\"number\\\"&&isFinite(n)&&Math.floor(n)===n},Number.parseFloat=Number.parseFloat||parseFloat,Number.isNaN=Number.isNaN||function(n){return n!=n},Math.trunc=Math.trunc||function(n){return n<0?Math.ceil(n):Math.floor(n)};var v=function(){};v.prototype.interfaces_=function(){return[]},v.prototype.getClass=function(){return v},v.prototype.equalsWithTolerance=function(n,i,s){return Math.abs(n-i)<=s};var C=function(n){function i(s){n.call(this,s),this.name=\\\"IllegalArgumentException\\\",this.message=s,this.stack=new n().stack}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i}(Error),S=function(){},O={MAX_VALUE:{configurable:!0}};S.isNaN=function(n){return Number.isNaN(n)},S.doubleToLongBits=function(n){return n},S.longBitsToDouble=function(n){return n},S.isInfinite=function(n){return!Number.isFinite(n)},O.MAX_VALUE.get=function(){return Number.MAX_VALUE},Object.defineProperties(S,O);var F=function(){},G=function(){},z=function(){},L=function n(){if(this.x=null,this.y=null,this.z=null,arguments.length===0)this.x=0,this.y=0,this.z=n.NULL_ORDINATE;else if(arguments.length===1){var i=arguments[0];this.x=i.x,this.y=i.y,this.z=i.z}else arguments.length===2?(this.x=arguments[0],this.y=arguments[1],this.z=n.NULL_ORDINATE):arguments.length===3&&(this.x=arguments[0],this.y=arguments[1],this.z=arguments[2])},D={DimensionalComparator:{configurable:!0},serialVersionUID:{configurable:!0},NULL_ORDINATE:{configurable:!0},X:{configurable:!0},Y:{configurable:!0},Z:{configurable:!0}};L.prototype.setOrdinate=function(n,i){switch(n){case L.X:this.x=i;break;case L.Y:this.y=i;break;case L.Z:this.z=i;break;default:throw new C(\\\"Invalid ordinate index: \\\"+n)}},L.prototype.equals2D=function(){if(arguments.length===1){var n=arguments[0];return this.x===n.x&&this.y===n.y}if(arguments.length===2){var i=arguments[0],s=arguments[1];return!!v.equalsWithTolerance(this.x,i.x,s)&&!!v.equalsWithTolerance(this.y,i.y,s)}},L.prototype.getOrdinate=function(n){switch(n){case L.X:return this.x;case L.Y:return this.y;case L.Z:return this.z}throw new C(\\\"Invalid ordinate index: \\\"+n)},L.prototype.equals3D=function(n){return this.x===n.x&&this.y===n.y&&(this.z===n.z||S.isNaN(this.z))&&S.isNaN(n.z)},L.prototype.equals=function(n){return n instanceof L&&this.equals2D(n)},L.prototype.equalInZ=function(n,i){return v.equalsWithTolerance(this.z,n.z,i)},L.prototype.compareTo=function(n){var i=n;return this.x<i.x?-1:this.x>i.x?1:this.y<i.y?-1:this.y>i.y?1:0},L.prototype.clone=function(){},L.prototype.copy=function(){return new L(this)},L.prototype.toString=function(){return\\\"(\\\"+this.x+\\\", \\\"+this.y+\\\", \\\"+this.z+\\\")\\\"},L.prototype.distance3D=function(n){var i=this.x-n.x,s=this.y-n.y,u=this.z-n.z;return Math.sqrt(i*i+s*s+u*u)},L.prototype.distance=function(n){var i=this.x-n.x,s=this.y-n.y;return Math.sqrt(i*i+s*s)},L.prototype.hashCode=function(){var n=17;return n=37*n+L.hashCode(this.x),n=37*n+L.hashCode(this.y)},L.prototype.setCoordinate=function(n){this.x=n.x,this.y=n.y,this.z=n.z},L.prototype.interfaces_=function(){return[F,G,t]},L.prototype.getClass=function(){return L},L.hashCode=function(){if(arguments.length===1){var n=arguments[0],i=S.doubleToLongBits(n);return Math.trunc((i^i)>>>32)}},D.DimensionalComparator.get=function(){return q},D.serialVersionUID.get=function(){return 6683108902428367e3},D.NULL_ORDINATE.get=function(){return S.NaN},D.X.get=function(){return 0},D.Y.get=function(){return 1},D.Z.get=function(){return 2},Object.defineProperties(L,D);var q=function(n){if(this._dimensionsToTest=2,arguments.length!==0){if(arguments.length===1){var i=arguments[0];if(i!==2&&i!==3)throw new C(\\\"only 2 or 3 dimensions may be specified\\\");this._dimensionsToTest=i}}};q.prototype.compare=function(n,i){var s=n,u=i,c=q.compare(s.x,u.x);if(c!==0)return c;var m=q.compare(s.y,u.y);return m!==0?m:this._dimensionsToTest<=2?0:q.compare(s.z,u.z)},q.prototype.interfaces_=function(){return[z]},q.prototype.getClass=function(){return q},q.compare=function(n,i){return n<i?-1:n>i?1:S.isNaN(n)?S.isNaN(i)?0:-1:S.isNaN(i)?1:0};var nt=function(){};nt.prototype.create=function(){},nt.prototype.interfaces_=function(){return[]},nt.prototype.getClass=function(){return nt};var k=function(){},xt={INTERIOR:{configurable:!0},BOUNDARY:{configurable:!0},EXTERIOR:{configurable:!0},NONE:{configurable:!0}};k.prototype.interfaces_=function(){return[]},k.prototype.getClass=function(){return k},k.toLocationSymbol=function(n){switch(n){case k.EXTERIOR:return\\\"e\\\";case k.BOUNDARY:return\\\"b\\\";case k.INTERIOR:return\\\"i\\\";case k.NONE:return\\\"-\\\"}throw new C(\\\"Unknown location value: \\\"+n)},xt.INTERIOR.get=function(){return 0},xt.BOUNDARY.get=function(){return 1},xt.EXTERIOR.get=function(){return 2},xt.NONE.get=function(){return-1},Object.defineProperties(k,xt);var X=function(n,i){return n.interfaces_&&n.interfaces_().indexOf(i)>-1},it=function(){},vt={LOG_10:{configurable:!0}};it.prototype.interfaces_=function(){return[]},it.prototype.getClass=function(){return it},it.log10=function(n){var i=Math.log(n);return S.isInfinite(i)||S.isNaN(i)?i:i/it.LOG_10},it.min=function(n,i,s,u){var c=n;return i<c&&(c=i),s<c&&(c=s),u<c&&(c=u),c},it.clamp=function(){if(typeof arguments[2]==\\\"number\\\"&&typeof arguments[0]==\\\"number\\\"&&typeof arguments[1]==\\\"number\\\"){var n=arguments[0],i=arguments[1],s=arguments[2];return n<i?i:n>s?s:n}if(Number.isInteger(arguments[2])&&Number.isInteger(arguments[0])&&Number.isInteger(arguments[1])){var u=arguments[0],c=arguments[1],m=arguments[2];return u<c?c:u>m?m:u}},it.wrap=function(n,i){return n<0?i- -n%i:n%i},it.max=function(){if(arguments.length===3){var n=arguments[0],i=arguments[1],s=arguments[2],u=n;return i>u&&(u=i),s>u&&(u=s),u}if(arguments.length===4){var c=arguments[0],m=arguments[1],E=arguments[2],A=arguments[3],U=c;return m>U&&(U=m),E>U&&(U=E),A>U&&(U=A),U}},it.average=function(n,i){return(n+i)/2},vt.LOG_10.get=function(){return Math.log(10)},Object.defineProperties(it,vt);var pt=function(n){this.str=n};pt.prototype.append=function(n){this.str+=n},pt.prototype.setCharAt=function(n,i){this.str=this.str.substr(0,n)+i+this.str.substr(n+1)},pt.prototype.toString=function(n){return this.str};var et=function(n){this.value=n};et.prototype.intValue=function(){return this.value},et.prototype.compareTo=function(n){return this.value<n?-1:this.value>n?1:0},et.isNaN=function(n){return Number.isNaN(n)};var ot=function(){};ot.isWhitespace=function(n){return n<=32&&n>=0||n===127},ot.toUpperCase=function(n){return n.toUpperCase()};var V=function n(){if(this._hi=0,this._lo=0,arguments.length===0)this.init(0);else if(arguments.length===1){if(typeof arguments[0]==\\\"number\\\"){var i=arguments[0];this.init(i)}else if(arguments[0]instanceof n){var s=arguments[0];this.init(s)}else if(typeof arguments[0]==\\\"string\\\"){var u=arguments[0];n.call(this,n.parse(u))}}else if(arguments.length===2){var c=arguments[0],m=arguments[1];this.init(c,m)}},K={PI:{configurable:!0},TWO_PI:{configurable:!0},PI_2:{configurable:!0},E:{configurable:!0},NaN:{configurable:!0},EPS:{configurable:!0},SPLIT:{configurable:!0},MAX_PRINT_DIGITS:{configurable:!0},TEN:{configurable:!0},ONE:{configurable:!0},SCI_NOT_EXPONENT_CHAR:{configurable:!0},SCI_NOT_ZERO:{configurable:!0}};V.prototype.le=function(n){return(this._hi<n._hi||this._hi===n._hi)&&this._lo<=n._lo},V.prototype.extractSignificantDigits=function(n,i){var s=this.abs(),u=V.magnitude(s._hi),c=V.TEN.pow(u);(s=s.divide(c)).gt(V.TEN)?(s=s.divide(V.TEN),u+=1):s.lt(V.ONE)&&(s=s.multiply(V.TEN),u-=1);for(var m=u+1,E=new pt,A=V.MAX_PRINT_DIGITS-1,U=0;U<=A;U++){n&&U===m&&E.append(\\\".\\\");var Z=Math.trunc(s._hi);if(Z<0)break;var ut=!1,ht=0;Z>9?(ut=!0,ht=\\\"9\\\"):ht=\\\"0\\\"+Z,E.append(ht),s=s.subtract(V.valueOf(Z)).multiply(V.TEN),ut&&s.selfAdd(V.TEN);var At=!0,Rt=V.magnitude(s._hi);if(Rt<0&&Math.abs(Rt)>=A-U&&(At=!1),!At)break}return i[0]=u,E.toString()},V.prototype.sqr=function(){return this.multiply(this)},V.prototype.doubleValue=function(){return this._hi+this._lo},V.prototype.subtract=function(){if(arguments[0]instanceof V){var n=arguments[0];return this.add(n.negate())}if(typeof arguments[0]==\\\"number\\\"){var i=arguments[0];return this.add(-i)}},V.prototype.equals=function(){if(arguments.length===1){var n=arguments[0];return this._hi===n._hi&&this._lo===n._lo}},V.prototype.isZero=function(){return this._hi===0&&this._lo===0},V.prototype.selfSubtract=function(){if(arguments[0]instanceof V){var n=arguments[0];return this.isNaN()?this:this.selfAdd(-n._hi,-n._lo)}if(typeof arguments[0]==\\\"number\\\"){var i=arguments[0];return this.isNaN()?this:this.selfAdd(-i,0)}},V.prototype.getSpecialNumberString=function(){return this.isZero()?\\\"0.0\\\":this.isNaN()?\\\"NaN \\\":null},V.prototype.min=function(n){return this.le(n)?this:n},V.prototype.selfDivide=function(){if(arguments.length===1){if(arguments[0]instanceof V){var n=arguments[0];return this.selfDivide(n._hi,n._lo)}if(typeof arguments[0]==\\\"number\\\"){var i=arguments[0];return this.selfDivide(i,0)}}else if(arguments.length===2){var s=arguments[0],u=arguments[1],c=null,m=null,E=null,A=null,U=null,Z=null,ut=null,ht=null;return U=this._hi/s,Z=V.SPLIT*U,c=Z-U,ht=V.SPLIT*s,c=Z-c,m=U-c,E=ht-s,ut=U*s,E=ht-E,A=s-E,ht=c*E-ut+c*A+m*E+m*A,Z=(this._hi-ut-ht+this._lo-U*u)/s,ht=U+Z,this._hi=ht,this._lo=U-ht+Z,this}},V.prototype.dump=function(){return\\\"DD<\\\"+this._hi+\\\", \\\"+this._lo+\\\">\\\"},V.prototype.divide=function(){if(arguments[0]instanceof V){var n=arguments[0],i=null,s=null,u=null,c=null,m=null,E=null,A=null,U=null;return s=(m=this._hi/n._hi)-(i=(E=V.SPLIT*m)-(i=E-m)),U=i*(u=(U=V.SPLIT*n._hi)-(u=U-n._hi))-(A=m*n._hi)+i*(c=n._hi-u)+s*u+s*c,E=(this._hi-A-U+this._lo-m*n._lo)/n._hi,new V(U=m+E,m-U+E)}if(typeof arguments[0]==\\\"number\\\"){var Z=arguments[0];return S.isNaN(Z)?V.createNaN():V.copy(this).selfDivide(Z,0)}},V.prototype.ge=function(n){return(this._hi>n._hi||this._hi===n._hi)&&this._lo>=n._lo},V.prototype.pow=function(n){if(n===0)return V.valueOf(1);var i=new V(this),s=V.valueOf(1),u=Math.abs(n);if(u>1)for(;u>0;)u%2==1&&s.selfMultiply(i),(u/=2)>0&&(i=i.sqr());else s=i;return n<0?s.reciprocal():s},V.prototype.ceil=function(){if(this.isNaN())return V.NaN;var n=Math.ceil(this._hi),i=0;return n===this._hi&&(i=Math.ceil(this._lo)),new V(n,i)},V.prototype.compareTo=function(n){var i=n;return this._hi<i._hi?-1:this._hi>i._hi?1:this._lo<i._lo?-1:this._lo>i._lo?1:0},V.prototype.rint=function(){return this.isNaN()?this:this.add(.5).floor()},V.prototype.setValue=function(){if(arguments[0]instanceof V){var n=arguments[0];return this.init(n),this}if(typeof arguments[0]==\\\"number\\\"){var i=arguments[0];return this.init(i),this}},V.prototype.max=function(n){return this.ge(n)?this:n},V.prototype.sqrt=function(){if(this.isZero())return V.valueOf(0);if(this.isNegative())return V.NaN;var n=1/Math.sqrt(this._hi),i=this._hi*n,s=V.valueOf(i),u=this.subtract(s.sqr())._hi*(.5*n);return s.add(u)},V.prototype.selfAdd=function(){if(arguments.length===1){if(arguments[0]instanceof V){var n=arguments[0];return this.selfAdd(n._hi,n._lo)}if(typeof arguments[0]==\\\"number\\\"){var i=arguments[0],s=null,u=null,c=null,m=null,E=null,A=null;return c=this._hi+i,E=c-this._hi,m=c-E,m=i-E+(this._hi-m),A=m+this._lo,s=c+A,u=A+(c-s),this._hi=s+u,this._lo=u+(s-this._hi),this}}else if(arguments.length===2){var U=arguments[0],Z=arguments[1],ut=null,ht=null,At=null,Rt=null,kt=null,ee=null,on=null;Rt=this._hi+U,ht=this._lo+Z,kt=Rt-(ee=Rt-this._hi),At=ht-(on=ht-this._lo);var In=(ut=Rt+(ee=(kt=U-ee+(this._hi-kt))+ht))+(ee=(At=Z-on+(this._lo-At))+(ee+(Rt-ut))),pr=ee+(ut-In);return this._hi=In,this._lo=pr,this}},V.prototype.selfMultiply=function(){if(arguments.length===1){if(arguments[0]instanceof V){var n=arguments[0];return this.selfMultiply(n._hi,n._lo)}if(typeof arguments[0]==\\\"number\\\"){var i=arguments[0];return this.selfMultiply(i,0)}}else if(arguments.length===2){var s=arguments[0],u=arguments[1],c=null,m=null,E=null,A=null,U=null,Z=null;c=(U=V.SPLIT*this._hi)-this._hi,Z=V.SPLIT*s,c=U-c,m=this._hi-c,E=Z-s;var ut=(U=this._hi*s)+(Z=c*(E=Z-E)-U+c*(A=s-E)+m*E+m*A+(this._hi*u+this._lo*s)),ht=Z+(c=U-ut);return this._hi=ut,this._lo=ht,this}},V.prototype.selfSqr=function(){return this.selfMultiply(this)},V.prototype.floor=function(){if(this.isNaN())return V.NaN;var n=Math.floor(this._hi),i=0;return n===this._hi&&(i=Math.floor(this._lo)),new V(n,i)},V.prototype.negate=function(){return this.isNaN()?this:new V(-this._hi,-this._lo)},V.prototype.clone=function(){},V.prototype.multiply=function(){if(arguments[0]instanceof V){var n=arguments[0];return n.isNaN()?V.createNaN():V.copy(this).selfMultiply(n)}if(typeof arguments[0]==\\\"number\\\"){var i=arguments[0];return S.isNaN(i)?V.createNaN():V.copy(this).selfMultiply(i,0)}},V.prototype.isNaN=function(){return S.isNaN(this._hi)},V.prototype.intValue=function(){return Math.trunc(this._hi)},V.prototype.toString=function(){var n=V.magnitude(this._hi);return n>=-3&&n<=20?this.toStandardNotation():this.toSciNotation()},V.prototype.toStandardNotation=function(){var n=this.getSpecialNumberString();if(n!==null)return n;var i=new Array(1).fill(null),s=this.extractSignificantDigits(!0,i),u=i[0]+1,c=s;if(s.charAt(0)===\\\".\\\")c=\\\"0\\\"+s;else if(u<0)c=\\\"0.\\\"+V.stringOfChar(\\\"0\\\",-u)+s;else if(s.indexOf(\\\".\\\")===-1){var m=u-s.length;c=s+V.stringOfChar(\\\"0\\\",m)+\\\".0\\\"}return this.isNegative()?\\\"-\\\"+c:c},V.prototype.reciprocal=function(){var n=null,i=null,s=null,u=null,c=null,m=null,E=null,A=null;i=(c=1/this._hi)-(n=(m=V.SPLIT*c)-(n=m-c)),s=(A=V.SPLIT*this._hi)-this._hi;var U=c+(m=(1-(E=c*this._hi)-(A=n*(s=A-s)-E+n*(u=this._hi-s)+i*s+i*u)-c*this._lo)/this._hi);return new V(U,c-U+m)},V.prototype.toSciNotation=function(){if(this.isZero())return V.SCI_NOT_ZERO;var n=this.getSpecialNumberString();if(n!==null)return n;var i=new Array(1).fill(null),s=this.extractSignificantDigits(!1,i),u=V.SCI_NOT_EXPONENT_CHAR+i[0];if(s.charAt(0)===\\\"0\\\")throw new Error(\\\"Found leading zero: \\\"+s);var c=\\\"\\\";s.length>1&&(c=s.substring(1));var m=s.charAt(0)+\\\".\\\"+c;return this.isNegative()?\\\"-\\\"+m+u:m+u},V.prototype.abs=function(){return this.isNaN()?V.NaN:this.isNegative()?this.negate():new V(this)},V.prototype.isPositive=function(){return(this._hi>0||this._hi===0)&&this._lo>0},V.prototype.lt=function(n){return(this._hi<n._hi||this._hi===n._hi)&&this._lo<n._lo},V.prototype.add=function(){if(arguments[0]instanceof V){var n=arguments[0];return V.copy(this).selfAdd(n)}if(typeof arguments[0]==\\\"number\\\"){var i=arguments[0];return V.copy(this).selfAdd(i)}},V.prototype.init=function(){if(arguments.length===1){if(typeof arguments[0]==\\\"number\\\"){var n=arguments[0];this._hi=n,this._lo=0}else if(arguments[0]instanceof V){var i=arguments[0];this._hi=i._hi,this._lo=i._lo}}else if(arguments.length===2){var s=arguments[0],u=arguments[1];this._hi=s,this._lo=u}},V.prototype.gt=function(n){return(this._hi>n._hi||this._hi===n._hi)&&this._lo>n._lo},V.prototype.isNegative=function(){return(this._hi<0||this._hi===0)&&this._lo<0},V.prototype.trunc=function(){return this.isNaN()?V.NaN:this.isPositive()?this.floor():this.ceil()},V.prototype.signum=function(){return this._hi>0?1:this._hi<0?-1:this._lo>0?1:this._lo<0?-1:0},V.prototype.interfaces_=function(){return[t,F,G]},V.prototype.getClass=function(){return V},V.sqr=function(n){return V.valueOf(n).selfMultiply(n)},V.valueOf=function(){if(typeof arguments[0]==\\\"string\\\"){var n=arguments[0];return V.parse(n)}if(typeof arguments[0]==\\\"number\\\"){var i=arguments[0];return new V(i)}},V.sqrt=function(n){return V.valueOf(n).sqrt()},V.parse=function(n){for(var i=0,s=n.length;ot.isWhitespace(n.charAt(i));)i++;var u=!1;if(i<s){var c=n.charAt(i);c!==\\\"-\\\"&&c!==\\\"+\\\"||(i++,c===\\\"-\\\"&&(u=!0))}for(var m=new V,E=0,A=0,U=0;!(i>=s);){var Z=n.charAt(i);if(i++,ot.isDigit(Z)){var ut=Z-\\\"0\\\";m.selfMultiply(V.TEN),m.selfAdd(ut),E++}else{if(Z!==\\\".\\\"){if(Z===\\\"e\\\"||Z===\\\"E\\\"){var ht=n.substring(i);try{U=et.parseInt(ht)}catch(on){throw on instanceof Error?new Error(\\\"Invalid exponent \\\"+ht+\\\" in string \\\"+n):on}break}throw new Error(\\\"Unexpected character '\\\"+Z+\\\"' at position \\\"+i+\\\" in string \\\"+n)}A=E}}var At=m,Rt=E-A-U;if(Rt===0)At=m;else if(Rt>0){var kt=V.TEN.pow(Rt);At=m.divide(kt)}else if(Rt<0){var ee=V.TEN.pow(-Rt);At=m.multiply(ee)}return u?At.negate():At},V.createNaN=function(){return new V(S.NaN,S.NaN)},V.copy=function(n){return new V(n)},V.magnitude=function(n){var i=Math.abs(n),s=Math.log(i)/Math.log(10),u=Math.trunc(Math.floor(s));return 10*Math.pow(10,u)<=i&&(u+=1),u},V.stringOfChar=function(n,i){for(var s=new pt,u=0;u<i;u++)s.append(n);return s.toString()},K.PI.get=function(){return new V(3.141592653589793,12246467991473532e-32)},K.TWO_PI.get=function(){return new V(6.283185307179586,24492935982947064e-32)},K.PI_2.get=function(){return new V(1.5707963267948966,6123233995736766e-32)},K.E.get=function(){return new V(2.718281828459045,14456468917292502e-32)},K.NaN.get=function(){return new V(S.NaN,S.NaN)},K.EPS.get=function(){return 123259516440783e-46},K.SPLIT.get=function(){return 134217729},K.MAX_PRINT_DIGITS.get=function(){return 32},K.TEN.get=function(){return V.valueOf(10)},K.ONE.get=function(){return V.valueOf(1)},K.SCI_NOT_EXPONENT_CHAR.get=function(){return\\\"E\\\"},K.SCI_NOT_ZERO.get=function(){return\\\"0.0E0\\\"},Object.defineProperties(V,K);var at=function(){},Tt={DP_SAFE_EPSILON:{configurable:!0}};at.prototype.interfaces_=function(){return[]},at.prototype.getClass=function(){return at},at.orientationIndex=function(n,i,s){var u=at.orientationIndexFilter(n,i,s);if(u<=1)return u;var c=V.valueOf(i.x).selfAdd(-n.x),m=V.valueOf(i.y).selfAdd(-n.y),E=V.valueOf(s.x).selfAdd(-i.x),A=V.valueOf(s.y).selfAdd(-i.y);return c.selfMultiply(A).selfSubtract(m.selfMultiply(E)).signum()},at.signOfDet2x2=function(n,i,s,u){return n.multiply(u).selfSubtract(i.multiply(s)).signum()},at.intersection=function(n,i,s,u){var c=V.valueOf(u.y).selfSubtract(s.y).selfMultiply(V.valueOf(i.x).selfSubtract(n.x)),m=V.valueOf(u.x).selfSubtract(s.x).selfMultiply(V.valueOf(i.y).selfSubtract(n.y)),E=c.subtract(m),A=V.valueOf(u.x).selfSubtract(s.x).selfMultiply(V.valueOf(n.y).selfSubtract(s.y)),U=V.valueOf(u.y).selfSubtract(s.y).selfMultiply(V.valueOf(n.x).selfSubtract(s.x)),Z=A.subtract(U).selfDivide(E).doubleValue(),ut=V.valueOf(n.x).selfAdd(V.valueOf(i.x).selfSubtract(n.x).selfMultiply(Z)).doubleValue(),ht=V.valueOf(i.x).selfSubtract(n.x).selfMultiply(V.valueOf(n.y).selfSubtract(s.y)),At=V.valueOf(i.y).selfSubtract(n.y).selfMultiply(V.valueOf(n.x).selfSubtract(s.x)),Rt=ht.subtract(At).selfDivide(E).doubleValue(),kt=V.valueOf(s.y).selfAdd(V.valueOf(u.y).selfSubtract(s.y).selfMultiply(Rt)).doubleValue();return new L(ut,kt)},at.orientationIndexFilter=function(n,i,s){var u=null,c=(n.x-s.x)*(i.y-s.y),m=(n.y-s.y)*(i.x-s.x),E=c-m;if(c>0){if(m<=0)return at.signum(E);u=c+m}else{if(!(c<0)||m>=0)return at.signum(E);u=-c-m}var A=at.DP_SAFE_EPSILON*u;return E>=A||-E>=A?at.signum(E):2},at.signum=function(n){return n>0?1:n<0?-1:0},Tt.DP_SAFE_EPSILON.get=function(){return 1e-15},Object.defineProperties(at,Tt);var dt=function(){},Ct={X:{configurable:!0},Y:{configurable:!0},Z:{configurable:!0},M:{configurable:!0}};Ct.X.get=function(){return 0},Ct.Y.get=function(){return 1},Ct.Z.get=function(){return 2},Ct.M.get=function(){return 3},dt.prototype.setOrdinate=function(n,i,s){},dt.prototype.size=function(){},dt.prototype.getOrdinate=function(n,i){},dt.prototype.getCoordinate=function(){},dt.prototype.getCoordinateCopy=function(n){},dt.prototype.getDimension=function(){},dt.prototype.getX=function(n){},dt.prototype.clone=function(){},dt.prototype.expandEnvelope=function(n){},dt.prototype.copy=function(){},dt.prototype.getY=function(n){},dt.prototype.toCoordinateArray=function(){},dt.prototype.interfaces_=function(){return[G]},dt.prototype.getClass=function(){return dt},Object.defineProperties(dt,Ct);var Yt=function(){},Wt=function(n){function i(){n.call(this,\\\"Projective point not representable on the Cartesian plane.\\\")}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i}(Yt),Nt=function(){};Nt.arraycopy=function(n,i,s,u,c){for(var m=0,E=i;E<i+c;E++)s[u+m]=n[E],m++},Nt.getProperty=function(n){return{\\\"line.separator\\\":`\\n`}[n]};var ne=function n(){if(this.x=null,this.y=null,this.w=null,arguments.length===0)this.x=0,this.y=0,this.w=1;else if(arguments.length===1){var i=arguments[0];this.x=i.x,this.y=i.y,this.w=1}else if(arguments.length===2){if(typeof arguments[0]==\\\"number\\\"&&typeof arguments[1]==\\\"number\\\"){var s=arguments[0],u=arguments[1];this.x=s,this.y=u,this.w=1}else if(arguments[0]instanceof n&&arguments[1]instanceof n){var c=arguments[0],m=arguments[1];this.x=c.y*m.w-m.y*c.w,this.y=m.x*c.w-c.x*m.w,this.w=c.x*m.y-m.x*c.y}else if(arguments[0]instanceof L&&arguments[1]instanceof L){var E=arguments[0],A=arguments[1];this.x=E.y-A.y,this.y=A.x-E.x,this.w=E.x*A.y-A.x*E.y}}else if(arguments.length===3){var U=arguments[0],Z=arguments[1],ut=arguments[2];this.x=U,this.y=Z,this.w=ut}else if(arguments.length===4){var ht=arguments[0],At=arguments[1],Rt=arguments[2],kt=arguments[3],ee=ht.y-At.y,on=At.x-ht.x,In=ht.x*At.y-At.x*ht.y,pr=Rt.y-kt.y,Yi=kt.x-Rt.x,Oo=Rt.x*kt.y-kt.x*Rt.y;this.x=on*Oo-Yi*In,this.y=pr*In-ee*Oo,this.w=ee*Yi-pr*on}};ne.prototype.getY=function(){var n=this.y/this.w;if(S.isNaN(n)||S.isInfinite(n))throw new Wt;return n},ne.prototype.getX=function(){var n=this.x/this.w;if(S.isNaN(n)||S.isInfinite(n))throw new Wt;return n},ne.prototype.getCoordinate=function(){var n=new L;return n.x=this.getX(),n.y=this.getY(),n},ne.prototype.interfaces_=function(){return[]},ne.prototype.getClass=function(){return ne},ne.intersection=function(n,i,s,u){var c=n.y-i.y,m=i.x-n.x,E=n.x*i.y-i.x*n.y,A=s.y-u.y,U=u.x-s.x,Z=s.x*u.y-u.x*s.y,ut=c*U-A*m,ht=(m*Z-U*E)/ut,At=(A*E-c*Z)/ut;if(S.isNaN(ht)||S.isInfinite(ht)||S.isNaN(At)||S.isInfinite(At))throw new Wt;return new L(ht,At)};var Pt=function n(){if(this._minx=null,this._maxx=null,this._miny=null,this._maxy=null,arguments.length===0)this.init();else if(arguments.length===1){if(arguments[0]instanceof L){var i=arguments[0];this.init(i.x,i.x,i.y,i.y)}else if(arguments[0]instanceof n){var s=arguments[0];this.init(s)}}else if(arguments.length===2){var u=arguments[0],c=arguments[1];this.init(u.x,c.x,u.y,c.y)}else if(arguments.length===4){var m=arguments[0],E=arguments[1],A=arguments[2],U=arguments[3];this.init(m,E,A,U)}},Xt={serialVersionUID:{configurable:!0}};Pt.prototype.getArea=function(){return this.getWidth()*this.getHeight()},Pt.prototype.equals=function(n){if(!(n instanceof Pt))return!1;var i=n;return this.isNull()?i.isNull():this._maxx===i.getMaxX()&&this._maxy===i.getMaxY()&&this._minx===i.getMinX()&&this._miny===i.getMinY()},Pt.prototype.intersection=function(n){if(this.isNull()||n.isNull()||!this.intersects(n))return new Pt;var i=this._minx>n._minx?this._minx:n._minx,s=this._miny>n._miny?this._miny:n._miny,u=this._maxx<n._maxx?this._maxx:n._maxx,c=this._maxy<n._maxy?this._maxy:n._maxy;return new Pt(i,u,s,c)},Pt.prototype.isNull=function(){return this._maxx<this._minx},Pt.prototype.getMaxX=function(){return this._maxx},Pt.prototype.covers=function(){if(arguments.length===1){if(arguments[0]instanceof L){var n=arguments[0];return this.covers(n.x,n.y)}if(arguments[0]instanceof Pt){var i=arguments[0];return!this.isNull()&&!i.isNull()&&i.getMinX()>=this._minx&&i.getMaxX()<=this._maxx&&i.getMinY()>=this._miny&&i.getMaxY()<=this._maxy}}else if(arguments.length===2){var s=arguments[0],u=arguments[1];return!this.isNull()&&s>=this._minx&&s<=this._maxx&&u>=this._miny&&u<=this._maxy}},Pt.prototype.intersects=function(){if(arguments.length===1){if(arguments[0]instanceof Pt){var n=arguments[0];return!this.isNull()&&!n.isNull()&&!(n._minx>this._maxx||n._maxx<this._minx||n._miny>this._maxy||n._maxy<this._miny)}if(arguments[0]instanceof L){var i=arguments[0];return this.intersects(i.x,i.y)}}else if(arguments.length===2){var s=arguments[0],u=arguments[1];return!this.isNull()&&!(s>this._maxx||s<this._minx||u>this._maxy||u<this._miny)}},Pt.prototype.getMinY=function(){return this._miny},Pt.prototype.getMinX=function(){return this._minx},Pt.prototype.expandToInclude=function(){if(arguments.length===1){if(arguments[0]instanceof L){var n=arguments[0];this.expandToInclude(n.x,n.y)}else if(arguments[0]instanceof Pt){var i=arguments[0];if(i.isNull())return null;this.isNull()?(this._minx=i.getMinX(),this._maxx=i.getMaxX(),this._miny=i.getMinY(),this._maxy=i.getMaxY()):(i._minx<this._minx&&(this._minx=i._minx),i._maxx>this._maxx&&(this._maxx=i._maxx),i._miny<this._miny&&(this._miny=i._miny),i._maxy>this._maxy&&(this._maxy=i._maxy))}}else if(arguments.length===2){var s=arguments[0],u=arguments[1];this.isNull()?(this._minx=s,this._maxx=s,this._miny=u,this._maxy=u):(s<this._minx&&(this._minx=s),s>this._maxx&&(this._maxx=s),u<this._miny&&(this._miny=u),u>this._maxy&&(this._maxy=u))}},Pt.prototype.minExtent=function(){if(this.isNull())return 0;var n=this.getWidth(),i=this.getHeight();return n<i?n:i},Pt.prototype.getWidth=function(){return this.isNull()?0:this._maxx-this._minx},Pt.prototype.compareTo=function(n){var i=n;return this.isNull()?i.isNull()?0:-1:i.isNull()?1:this._minx<i._minx?-1:this._minx>i._minx?1:this._miny<i._miny?-1:this._miny>i._miny?1:this._maxx<i._maxx?-1:this._maxx>i._maxx?1:this._maxy<i._maxy?-1:this._maxy>i._maxy?1:0},Pt.prototype.translate=function(n,i){if(this.isNull())return null;this.init(this.getMinX()+n,this.getMaxX()+n,this.getMinY()+i,this.getMaxY()+i)},Pt.prototype.toString=function(){return\\\"Env[\\\"+this._minx+\\\" : \\\"+this._maxx+\\\", \\\"+this._miny+\\\" : \\\"+this._maxy+\\\"]\\\"},Pt.prototype.setToNull=function(){this._minx=0,this._maxx=-1,this._miny=0,this._maxy=-1},Pt.prototype.getHeight=function(){return this.isNull()?0:this._maxy-this._miny},Pt.prototype.maxExtent=function(){if(this.isNull())return 0;var n=this.getWidth(),i=this.getHeight();return n>i?n:i},Pt.prototype.expandBy=function(){if(arguments.length===1){var n=arguments[0];this.expandBy(n,n)}else if(arguments.length===2){var i=arguments[0],s=arguments[1];if(this.isNull())return null;this._minx-=i,this._maxx+=i,this._miny-=s,this._maxy+=s,(this._minx>this._maxx||this._miny>this._maxy)&&this.setToNull()}},Pt.prototype.contains=function(){if(arguments.length===1){if(arguments[0]instanceof Pt){var n=arguments[0];return this.covers(n)}if(arguments[0]instanceof L){var i=arguments[0];return this.covers(i)}}else if(arguments.length===2){var s=arguments[0],u=arguments[1];return this.covers(s,u)}},Pt.prototype.centre=function(){return this.isNull()?null:new L((this.getMinX()+this.getMaxX())/2,(this.getMinY()+this.getMaxY())/2)},Pt.prototype.init=function(){if(arguments.length===0)this.setToNull();else if(arguments.length===1){if(arguments[0]instanceof L){var n=arguments[0];this.init(n.x,n.x,n.y,n.y)}else if(arguments[0]instanceof Pt){var i=arguments[0];this._minx=i._minx,this._maxx=i._maxx,this._miny=i._miny,this._maxy=i._maxy}}else if(arguments.length===2){var s=arguments[0],u=arguments[1];this.init(s.x,u.x,s.y,u.y)}else if(arguments.length===4){var c=arguments[0],m=arguments[1],E=arguments[2],A=arguments[3];c<m?(this._minx=c,this._maxx=m):(this._minx=m,this._maxx=c),E<A?(this._miny=E,this._maxy=A):(this._miny=A,this._maxy=E)}},Pt.prototype.getMaxY=function(){return this._maxy},Pt.prototype.distance=function(n){if(this.intersects(n))return 0;var i=0;this._maxx<n._minx?i=n._minx-this._maxx:this._minx>n._maxx&&(i=this._minx-n._maxx);var s=0;return this._maxy<n._miny?s=n._miny-this._maxy:this._miny>n._maxy&&(s=this._miny-n._maxy),i===0?s:s===0?i:Math.sqrt(i*i+s*s)},Pt.prototype.hashCode=function(){var n=17;return n=37*n+L.hashCode(this._minx),n=37*n+L.hashCode(this._maxx),n=37*n+L.hashCode(this._miny),n=37*n+L.hashCode(this._maxy)},Pt.prototype.interfaces_=function(){return[F,t]},Pt.prototype.getClass=function(){return Pt},Pt.intersects=function(){if(arguments.length===3){var n=arguments[0],i=arguments[1],s=arguments[2];return s.x>=(n.x<i.x?n.x:i.x)&&s.x<=(n.x>i.x?n.x:i.x)&&s.y>=(n.y<i.y?n.y:i.y)&&s.y<=(n.y>i.y?n.y:i.y)}if(arguments.length===4){var u=arguments[0],c=arguments[1],m=arguments[2],E=arguments[3],A=Math.min(m.x,E.x),U=Math.max(m.x,E.x),Z=Math.min(u.x,c.x),ut=Math.max(u.x,c.x);return!(Z>U)&&!(ut<A)&&(A=Math.min(m.y,E.y),U=Math.max(m.y,E.y),Z=Math.min(u.y,c.y),ut=Math.max(u.y,c.y),!(Z>U)&&!(ut<A))}},Xt.serialVersionUID.get=function(){return 5873921885273102e3},Object.defineProperties(Pt,Xt);var tt={typeStr:/^\\\\s*(\\\\w+)\\\\s*\\\\(\\\\s*(.*)\\\\s*\\\\)\\\\s*$/,emptyTypeStr:/^\\\\s*(\\\\w+)\\\\s*EMPTY\\\\s*$/,spaces:/\\\\s+/,parenComma:/\\\\)\\\\s*,\\\\s*\\\\(/,doubleParenComma:/\\\\)\\\\s*\\\\)\\\\s*,\\\\s*\\\\(\\\\s*\\\\(/,trimParens:/^\\\\s*\\\\(?(.*?)\\\\)?\\\\s*$/},nn=function(n){this.geometryFactory=n||new le};nn.prototype.read=function(n){var i,s,u;n=n.replace(/[\\\\n\\\\r]/g,\\\" \\\");var c=tt.typeStr.exec(n);if(n.search(\\\"EMPTY\\\")!==-1&&((c=tt.emptyTypeStr.exec(n))[2]=void 0),c&&(s=c[1].toLowerCase(),u=c[2],te[s]&&(i=te[s].apply(this,[u]))),i===void 0)throw new Error(\\\"Could not parse WKT \\\"+n);return i},nn.prototype.write=function(n){return this.extractGeometry(n)},nn.prototype.extractGeometry=function(n){var i=n.getGeometryType().toLowerCase();if(!Gt[i])return null;var s=i.toUpperCase();return n.isEmpty()?s+\\\" EMPTY\\\":s+\\\"(\\\"+Gt[i].apply(this,[n])+\\\")\\\"};var Gt={coordinate:function(n){return n.x+\\\" \\\"+n.y},point:function(n){return Gt.coordinate.call(this,n._coordinates._coordinates[0])},multipoint:function(n){for(var i=[],s=0,u=n._geometries.length;s<u;++s)i.push(\\\"(\\\"+Gt.point.apply(this,[n._geometries[s]])+\\\")\\\");return i.join(\\\",\\\")},linestring:function(n){for(var i=[],s=0,u=n._points._coordinates.length;s<u;++s)i.push(Gt.coordinate.apply(this,[n._points._coordinates[s]]));return i.join(\\\",\\\")},linearring:function(n){for(var i=[],s=0,u=n._points._coordinates.length;s<u;++s)i.push(Gt.coordinate.apply(this,[n._points._coordinates[s]]));return i.join(\\\",\\\")},multilinestring:function(n){for(var i=[],s=0,u=n._geometries.length;s<u;++s)i.push(\\\"(\\\"+Gt.linestring.apply(this,[n._geometries[s]])+\\\")\\\");return i.join(\\\",\\\")},polygon:function(n){var i=[];i.push(\\\"(\\\"+Gt.linestring.apply(this,[n._shell])+\\\")\\\");for(var s=0,u=n._holes.length;s<u;++s)i.push(\\\"(\\\"+Gt.linestring.apply(this,[n._holes[s]])+\\\")\\\");return i.join(\\\",\\\")},multipolygon:function(n){for(var i=[],s=0,u=n._geometries.length;s<u;++s)i.push(\\\"(\\\"+Gt.polygon.apply(this,[n._geometries[s]])+\\\")\\\");return i.join(\\\",\\\")},geometrycollection:function(n){for(var i=[],s=0,u=n._geometries.length;s<u;++s)i.push(this.extractGeometry(n._geometries[s]));return i.join(\\\",\\\")}},te={point:function(n){if(n===void 0)return this.geometryFactory.createPoint();var i=n.trim().split(tt.spaces);return this.geometryFactory.createPoint(new L(Number.parseFloat(i[0]),Number.parseFloat(i[1])))},multipoint:function(n){if(n===void 0)return this.geometryFactory.createMultiPoint();for(var i,s=n.trim().split(\\\",\\\"),u=[],c=0,m=s.length;c<m;++c)i=s[c].replace(tt.trimParens,\\\"$1\\\"),u.push(te.point.apply(this,[i]));return this.geometryFactory.createMultiPoint(u)},linestring:function(n){if(n===void 0)return this.geometryFactory.createLineString();for(var i,s=n.trim().split(\\\",\\\"),u=[],c=0,m=s.length;c<m;++c)i=s[c].trim().split(tt.spaces),u.push(new L(Number.parseFloat(i[0]),Number.parseFloat(i[1])));return this.geometryFactory.createLineString(u)},linearring:function(n){if(n===void 0)return this.geometryFactory.createLinearRing();for(var i,s=n.trim().split(\\\",\\\"),u=[],c=0,m=s.length;c<m;++c)i=s[c].trim().split(tt.spaces),u.push(new L(Number.parseFloat(i[0]),Number.parseFloat(i[1])));return this.geometryFactory.createLinearRing(u)},multilinestring:function(n){if(n===void 0)return this.geometryFactory.createMultiLineString();for(var i,s=n.trim().split(tt.parenComma),u=[],c=0,m=s.length;c<m;++c)i=s[c].replace(tt.trimParens,\\\"$1\\\"),u.push(te.linestring.apply(this,[i]));return this.geometryFactory.createMultiLineString(u)},polygon:function(n){if(n===void 0)return this.geometryFactory.createPolygon();for(var i,s,u,c,m=n.trim().split(tt.parenComma),E=[],A=0,U=m.length;A<U;++A)i=m[A].replace(tt.trimParens,\\\"$1\\\"),s=te.linestring.apply(this,[i]),u=this.geometryFactory.createLinearRing(s._points),A===0?c=u:E.push(u);return this.geometryFactory.createPolygon(c,E)},multipolygon:function(n){if(n===void 0)return this.geometryFactory.createMultiPolygon();for(var i,s=n.trim().split(tt.doubleParenComma),u=[],c=0,m=s.length;c<m;++c)i=s[c].replace(tt.trimParens,\\\"$1\\\"),u.push(te.polygon.apply(this,[i]));return this.geometryFactory.createMultiPolygon(u)},geometrycollection:function(n){if(n===void 0)return this.geometryFactory.createGeometryCollection();for(var i=(n=n.replace(/,\\\\s*([A-Za-z])/g,\\\"|$1\\\")).trim().split(\\\"|\\\"),s=[],u=0,c=i.length;u<c;++u)s.push(this.read(i[u]));return this.geometryFactory.createGeometryCollection(s)}},qt=function(n){this.parser=new nn(n)};qt.prototype.write=function(n){return this.parser.write(n)},qt.toLineString=function(n,i){if(arguments.length!==2)throw new Error(\\\"Not implemented\\\");return\\\"LINESTRING ( \\\"+n.x+\\\" \\\"+n.y+\\\", \\\"+i.x+\\\" \\\"+i.y+\\\" )\\\"};var $=function(n){function i(s){n.call(this,s),this.name=\\\"RuntimeException\\\",this.message=s,this.stack=new n().stack}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i}(Error),N=function(n){function i(){if(n.call(this),arguments.length===0)n.call(this);else if(arguments.length===1){var s=arguments[0];n.call(this,s)}}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i}($),b=function(){};b.prototype.interfaces_=function(){return[]},b.prototype.getClass=function(){return b},b.shouldNeverReachHere=function(){if(arguments.length===0)b.shouldNeverReachHere(null);else if(arguments.length===1){var n=arguments[0];throw new N(\\\"Should never reach here\\\"+(n!==null?\\\": \\\"+n:\\\"\\\"))}},b.isTrue=function(){var n,i;if(arguments.length===1)n=arguments[0],b.isTrue(n,null);else if(arguments.length===2&&(n=arguments[0],i=arguments[1],!n))throw i===null?new N:new N(i)},b.equals=function(){var n,i,s;if(arguments.length===2)n=arguments[0],i=arguments[1],b.equals(n,i,null);else if(arguments.length===3&&(n=arguments[0],i=arguments[1],s=arguments[2],!i.equals(n)))throw new N(\\\"Expected \\\"+n+\\\" but encountered \\\"+i+(s!==null?\\\": \\\"+s:\\\"\\\"))};var R=function(){this._result=null,this._inputLines=Array(2).fill().map(function(){return Array(2)}),this._intPt=new Array(2).fill(null),this._intLineIndex=null,this._isProper=null,this._pa=null,this._pb=null,this._precisionModel=null,this._intPt[0]=new L,this._intPt[1]=new L,this._pa=this._intPt[0],this._pb=this._intPt[1],this._result=0},W={DONT_INTERSECT:{configurable:!0},DO_INTERSECT:{configurable:!0},COLLINEAR:{configurable:!0},NO_INTERSECTION:{configurable:!0},POINT_INTERSECTION:{configurable:!0},COLLINEAR_INTERSECTION:{configurable:!0}};R.prototype.getIndexAlongSegment=function(n,i){return this.computeIntLineIndex(),this._intLineIndex[n][i]},R.prototype.getTopologySummary=function(){var n=new pt;return this.isEndPoint()&&n.append(\\\" endpoint\\\"),this._isProper&&n.append(\\\" proper\\\"),this.isCollinear()&&n.append(\\\" collinear\\\"),n.toString()},R.prototype.computeIntersection=function(n,i,s,u){this._inputLines[0][0]=n,this._inputLines[0][1]=i,this._inputLines[1][0]=s,this._inputLines[1][1]=u,this._result=this.computeIntersect(n,i,s,u)},R.prototype.getIntersectionNum=function(){return this._result},R.prototype.computeIntLineIndex=function(){if(arguments.length===0)this._intLineIndex===null&&(this._intLineIndex=Array(2).fill().map(function(){return Array(2)}),this.computeIntLineIndex(0),this.computeIntLineIndex(1));else if(arguments.length===1){var n=arguments[0];this.getEdgeDistance(n,0)>this.getEdgeDistance(n,1)?(this._intLineIndex[n][0]=0,this._intLineIndex[n][1]=1):(this._intLineIndex[n][0]=1,this._intLineIndex[n][1]=0)}},R.prototype.isProper=function(){return this.hasIntersection()&&this._isProper},R.prototype.setPrecisionModel=function(n){this._precisionModel=n},R.prototype.isInteriorIntersection=function(){if(arguments.length===0)return!!this.isInteriorIntersection(0)||!!this.isInteriorIntersection(1);if(arguments.length===1){for(var n=arguments[0],i=0;i<this._result;i++)if(!this._intPt[i].equals2D(this._inputLines[n][0])&&!this._intPt[i].equals2D(this._inputLines[n][1]))return!0;return!1}},R.prototype.getIntersection=function(n){return this._intPt[n]},R.prototype.isEndPoint=function(){return this.hasIntersection()&&!this._isProper},R.prototype.hasIntersection=function(){return this._result!==R.NO_INTERSECTION},R.prototype.getEdgeDistance=function(n,i){return R.computeEdgeDistance(this._intPt[i],this._inputLines[n][0],this._inputLines[n][1])},R.prototype.isCollinear=function(){return this._result===R.COLLINEAR_INTERSECTION},R.prototype.toString=function(){return qt.toLineString(this._inputLines[0][0],this._inputLines[0][1])+\\\" - \\\"+qt.toLineString(this._inputLines[1][0],this._inputLines[1][1])+this.getTopologySummary()},R.prototype.getEndpoint=function(n,i){return this._inputLines[n][i]},R.prototype.isIntersection=function(n){for(var i=0;i<this._result;i++)if(this._intPt[i].equals2D(n))return!0;return!1},R.prototype.getIntersectionAlongSegment=function(n,i){return this.computeIntLineIndex(),this._intPt[this._intLineIndex[n][i]]},R.prototype.interfaces_=function(){return[]},R.prototype.getClass=function(){return R},R.computeEdgeDistance=function(n,i,s){var u=Math.abs(s.x-i.x),c=Math.abs(s.y-i.y),m=-1;if(n.equals(i))m=0;else if(n.equals(s))m=u>c?u:c;else{var E=Math.abs(n.x-i.x),A=Math.abs(n.y-i.y);(m=u>c?E:A)!==0||n.equals(i)||(m=Math.max(E,A))}return b.isTrue(!(m===0&&!n.equals(i)),\\\"Bad distance calculation\\\"),m},R.nonRobustComputeEdgeDistance=function(n,i,s){var u=n.x-i.x,c=n.y-i.y,m=Math.sqrt(u*u+c*c);return b.isTrue(!(m===0&&!n.equals(i)),\\\"Invalid distance calculation\\\"),m},W.DONT_INTERSECT.get=function(){return 0},W.DO_INTERSECT.get=function(){return 1},W.COLLINEAR.get=function(){return 2},W.NO_INTERSECTION.get=function(){return 0},W.POINT_INTERSECTION.get=function(){return 1},W.COLLINEAR_INTERSECTION.get=function(){return 2},Object.defineProperties(R,W);var J=function(n){function i(){n.apply(this,arguments)}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.isInSegmentEnvelopes=function(s){var u=new Pt(this._inputLines[0][0],this._inputLines[0][1]),c=new Pt(this._inputLines[1][0],this._inputLines[1][1]);return u.contains(s)&&c.contains(s)},i.prototype.computeIntersection=function(){if(arguments.length!==3)return n.prototype.computeIntersection.apply(this,arguments);var s=arguments[0],u=arguments[1],c=arguments[2];if(this._isProper=!1,Pt.intersects(u,c,s)&&B.orientationIndex(u,c,s)===0&&B.orientationIndex(c,u,s)===0)return this._isProper=!0,(s.equals(u)||s.equals(c))&&(this._isProper=!1),this._result=n.POINT_INTERSECTION,null;this._result=n.NO_INTERSECTION},i.prototype.normalizeToMinimum=function(s,u,c,m,E){E.x=this.smallestInAbsValue(s.x,u.x,c.x,m.x),E.y=this.smallestInAbsValue(s.y,u.y,c.y,m.y),s.x-=E.x,s.y-=E.y,u.x-=E.x,u.y-=E.y,c.x-=E.x,c.y-=E.y,m.x-=E.x,m.y-=E.y},i.prototype.safeHCoordinateIntersection=function(s,u,c,m){var E=null;try{E=ne.intersection(s,u,c,m)}catch(A){if(!(A instanceof Wt))throw A;E=i.nearestEndpoint(s,u,c,m)}return E},i.prototype.intersection=function(s,u,c,m){var E=this.intersectionWithNormalization(s,u,c,m);return this.isInSegmentEnvelopes(E)||(E=new L(i.nearestEndpoint(s,u,c,m))),this._precisionModel!==null&&this._precisionModel.makePrecise(E),E},i.prototype.smallestInAbsValue=function(s,u,c,m){var E=s,A=Math.abs(E);return Math.abs(u)<A&&(E=u,A=Math.abs(u)),Math.abs(c)<A&&(E=c,A=Math.abs(c)),Math.abs(m)<A&&(E=m),E},i.prototype.checkDD=function(s,u,c,m,E){var A=at.intersection(s,u,c,m),U=this.isInSegmentEnvelopes(A);Nt.out.println(\\\"DD in env = \\\"+U+\\\" --------------------- \\\"+A),E.distance(A)>1e-4&&Nt.out.println(\\\"Distance = \\\"+E.distance(A))},i.prototype.intersectionWithNormalization=function(s,u,c,m){var E=new L(s),A=new L(u),U=new L(c),Z=new L(m),ut=new L;this.normalizeToEnvCentre(E,A,U,Z,ut);var ht=this.safeHCoordinateIntersection(E,A,U,Z);return ht.x+=ut.x,ht.y+=ut.y,ht},i.prototype.computeCollinearIntersection=function(s,u,c,m){var E=Pt.intersects(s,u,c),A=Pt.intersects(s,u,m),U=Pt.intersects(c,m,s),Z=Pt.intersects(c,m,u);return E&&A?(this._intPt[0]=c,this._intPt[1]=m,n.COLLINEAR_INTERSECTION):U&&Z?(this._intPt[0]=s,this._intPt[1]=u,n.COLLINEAR_INTERSECTION):E&&U?(this._intPt[0]=c,this._intPt[1]=s,!c.equals(s)||A||Z?n.COLLINEAR_INTERSECTION:n.POINT_INTERSECTION):E&&Z?(this._intPt[0]=c,this._intPt[1]=u,!c.equals(u)||A||U?n.COLLINEAR_INTERSECTION:n.POINT_INTERSECTION):A&&U?(this._intPt[0]=m,this._intPt[1]=s,!m.equals(s)||E||Z?n.COLLINEAR_INTERSECTION:n.POINT_INTERSECTION):A&&Z?(this._intPt[0]=m,this._intPt[1]=u,!m.equals(u)||E||U?n.COLLINEAR_INTERSECTION:n.POINT_INTERSECTION):n.NO_INTERSECTION},i.prototype.normalizeToEnvCentre=function(s,u,c,m,E){var A=s.x<u.x?s.x:u.x,U=s.y<u.y?s.y:u.y,Z=s.x>u.x?s.x:u.x,ut=s.y>u.y?s.y:u.y,ht=c.x<m.x?c.x:m.x,At=c.y<m.y?c.y:m.y,Rt=c.x>m.x?c.x:m.x,kt=c.y>m.y?c.y:m.y,ee=((A>ht?A:ht)+(Z<Rt?Z:Rt))/2,on=((U>At?U:At)+(ut<kt?ut:kt))/2;E.x=ee,E.y=on,s.x-=E.x,s.y-=E.y,u.x-=E.x,u.y-=E.y,c.x-=E.x,c.y-=E.y,m.x-=E.x,m.y-=E.y},i.prototype.computeIntersect=function(s,u,c,m){if(this._isProper=!1,!Pt.intersects(s,u,c,m))return n.NO_INTERSECTION;var E=B.orientationIndex(s,u,c),A=B.orientationIndex(s,u,m);if(E>0&&A>0||E<0&&A<0)return n.NO_INTERSECTION;var U=B.orientationIndex(c,m,s),Z=B.orientationIndex(c,m,u);return U>0&&Z>0||U<0&&Z<0?n.NO_INTERSECTION:E===0&&A===0&&U===0&&Z===0?this.computeCollinearIntersection(s,u,c,m):(E===0||A===0||U===0||Z===0?(this._isProper=!1,s.equals2D(c)||s.equals2D(m)?this._intPt[0]=s:u.equals2D(c)||u.equals2D(m)?this._intPt[0]=u:E===0?this._intPt[0]=new L(c):A===0?this._intPt[0]=new L(m):U===0?this._intPt[0]=new L(s):Z===0&&(this._intPt[0]=new L(u))):(this._isProper=!0,this._intPt[0]=this.intersection(s,u,c,m)),n.POINT_INTERSECTION)},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i.nearestEndpoint=function(s,u,c,m){var E=s,A=B.distancePointLine(s,c,m),U=B.distancePointLine(u,c,m);return U<A&&(A=U,E=u),(U=B.distancePointLine(c,s,u))<A&&(A=U,E=c),(U=B.distancePointLine(m,s,u))<A&&(A=U,E=m),E},i}(R),I=function(){};I.prototype.interfaces_=function(){return[]},I.prototype.getClass=function(){return I},I.orientationIndex=function(n,i,s){var u=i.x-n.x,c=i.y-n.y,m=s.x-i.x,E=s.y-i.y;return I.signOfDet2x2(u,c,m,E)},I.signOfDet2x2=function(n,i,s,u){var c=null,m=null,E=null;if(c=1,n===0||u===0)return i===0||s===0?0:i>0?s>0?-c:c:s>0?c:-c;if(i===0||s===0)return u>0?n>0?c:-c:n>0?-c:c;if(i>0?u>0?i<=u||(c=-c,m=n,n=s,s=m,m=i,i=u,u=m):i<=-u?(c=-c,s=-s,u=-u):(m=n,n=-s,s=m,m=i,i=-u,u=m):u>0?-i<=u?(c=-c,n=-n,i=-i):(m=-n,n=s,s=m,m=-i,i=u,u=m):i>=u?(n=-n,i=-i,s=-s,u=-u):(c=-c,m=-n,n=-s,s=m,m=-i,i=-u,u=m),n>0){if(!(s>0)||!(n<=s))return c}else{if(s>0||!(n>=s))return-c;c=-c,n=-n,s=-s}for(;;){if(E=Math.floor(s/n),s-=E*n,(u-=E*i)<0)return-c;if(u>i)return c;if(n>s+s){if(i<u+u)return c}else{if(i>u+u)return-c;s=n-s,u=i-u,c=-c}if(u===0)return s===0?0:-c;if(s===0||(E=Math.floor(n/s),n-=E*s,(i-=E*u)<0))return c;if(i>u)return-c;if(s>n+n){if(u<i+i)return-c}else{if(u>i+i)return c;n=s-n,i=u-i,c=-c}if(i===0)return n===0?0:c;if(n===0)return-c}};var P=function(){this._p=null,this._crossingCount=0,this._isPointOnSegment=!1;var n=arguments[0];this._p=n};P.prototype.countSegment=function(n,i){if(n.x<this._p.x&&i.x<this._p.x)return null;if(this._p.x===i.x&&this._p.y===i.y)return this._isPointOnSegment=!0,null;if(n.y===this._p.y&&i.y===this._p.y){var s=n.x,u=i.x;return s>u&&(s=i.x,u=n.x),this._p.x>=s&&this._p.x<=u&&(this._isPointOnSegment=!0),null}if(n.y>this._p.y&&i.y<=this._p.y||i.y>this._p.y&&n.y<=this._p.y){var c=n.x-this._p.x,m=n.y-this._p.y,E=i.x-this._p.x,A=i.y-this._p.y,U=I.signOfDet2x2(c,m,E,A);if(U===0)return this._isPointOnSegment=!0,null;A<m&&(U=-U),U>0&&this._crossingCount++}},P.prototype.isPointInPolygon=function(){return this.getLocation()!==k.EXTERIOR},P.prototype.getLocation=function(){return this._isPointOnSegment?k.BOUNDARY:this._crossingCount%2==1?k.INTERIOR:k.EXTERIOR},P.prototype.isOnSegment=function(){return this._isPointOnSegment},P.prototype.interfaces_=function(){return[]},P.prototype.getClass=function(){return P},P.locatePointInRing=function(){if(arguments[0]instanceof L&&X(arguments[1],dt)){for(var n=arguments[0],i=arguments[1],s=new P(n),u=new L,c=new L,m=1;m<i.size();m++)if(i.getCoordinate(m,u),i.getCoordinate(m-1,c),s.countSegment(u,c),s.isOnSegment())return s.getLocation();return s.getLocation()}if(arguments[0]instanceof L&&arguments[1]instanceof Array){for(var E=arguments[0],A=arguments[1],U=new P(E),Z=1;Z<A.length;Z++){var ut=A[Z],ht=A[Z-1];if(U.countSegment(ut,ht),U.isOnSegment())return U.getLocation()}return U.getLocation()}};var B=function(){},lt={CLOCKWISE:{configurable:!0},RIGHT:{configurable:!0},COUNTERCLOCKWISE:{configurable:!0},LEFT:{configurable:!0},COLLINEAR:{configurable:!0},STRAIGHT:{configurable:!0}};B.prototype.interfaces_=function(){return[]},B.prototype.getClass=function(){return B},B.orientationIndex=function(n,i,s){return at.orientationIndex(n,i,s)},B.signedArea=function(){if(arguments[0]instanceof Array){var n=arguments[0];if(n.length<3)return 0;for(var i=0,s=n[0].x,u=1;u<n.length-1;u++){var c=n[u].x-s,m=n[u+1].y;i+=c*(n[u-1].y-m)}return i/2}if(X(arguments[0],dt)){var E=arguments[0],A=E.size();if(A<3)return 0;var U=new L,Z=new L,ut=new L;E.getCoordinate(0,Z),E.getCoordinate(1,ut);var ht=Z.x;ut.x-=ht;for(var At=0,Rt=1;Rt<A-1;Rt++)U.y=Z.y,Z.x=ut.x,Z.y=ut.y,E.getCoordinate(Rt+1,ut),ut.x-=ht,At+=Z.x*(U.y-ut.y);return At/2}},B.distanceLineLine=function(n,i,s,u){if(n.equals(i))return B.distancePointLine(n,s,u);if(s.equals(u))return B.distancePointLine(u,n,i);var c=!1;if(Pt.intersects(n,i,s,u)){var m=(i.x-n.x)*(u.y-s.y)-(i.y-n.y)*(u.x-s.x);if(m===0)c=!0;else{var E=(n.y-s.y)*(u.x-s.x)-(n.x-s.x)*(u.y-s.y),A=((n.y-s.y)*(i.x-n.x)-(n.x-s.x)*(i.y-n.y))/m,U=E/m;(U<0||U>1||A<0||A>1)&&(c=!0)}}else c=!0;return c?it.min(B.distancePointLine(n,s,u),B.distancePointLine(i,s,u),B.distancePointLine(s,n,i),B.distancePointLine(u,n,i)):0},B.isPointInRing=function(n,i){return B.locatePointInRing(n,i)!==k.EXTERIOR},B.computeLength=function(n){var i=n.size();if(i<=1)return 0;var s=0,u=new L;n.getCoordinate(0,u);for(var c=u.x,m=u.y,E=1;E<i;E++){n.getCoordinate(E,u);var A=u.x,U=u.y,Z=A-c,ut=U-m;s+=Math.sqrt(Z*Z+ut*ut),c=A,m=U}return s},B.isCCW=function(n){var i=n.length-1;if(i<3)throw new C(\\\"Ring has fewer than 4 points, so orientation cannot be determined\\\");for(var s=n[0],u=0,c=1;c<=i;c++){var m=n[c];m.y>s.y&&(s=m,u=c)}var E=u;do(E-=1)<0&&(E=i);while(n[E].equals2D(s)&&E!==u);var A=u;do A=(A+1)%i;while(n[A].equals2D(s)&&A!==u);var U=n[E],Z=n[A];if(U.equals2D(s)||Z.equals2D(s)||U.equals2D(Z))return!1;var ut=B.computeOrientation(U,s,Z),ht=!1;return ht=ut===0?U.x>Z.x:ut>0,ht},B.locatePointInRing=function(n,i){return P.locatePointInRing(n,i)},B.distancePointLinePerpendicular=function(n,i,s){var u=(s.x-i.x)*(s.x-i.x)+(s.y-i.y)*(s.y-i.y),c=((i.y-n.y)*(s.x-i.x)-(i.x-n.x)*(s.y-i.y))/u;return Math.abs(c)*Math.sqrt(u)},B.computeOrientation=function(n,i,s){return B.orientationIndex(n,i,s)},B.distancePointLine=function(){if(arguments.length===2){var n=arguments[0],i=arguments[1];if(i.length===0)throw new C(\\\"Line array must contain at least one vertex\\\");for(var s=n.distance(i[0]),u=0;u<i.length-1;u++){var c=B.distancePointLine(n,i[u],i[u+1]);c<s&&(s=c)}return s}if(arguments.length===3){var m=arguments[0],E=arguments[1],A=arguments[2];if(E.x===A.x&&E.y===A.y)return m.distance(E);var U=(A.x-E.x)*(A.x-E.x)+(A.y-E.y)*(A.y-E.y),Z=((m.x-E.x)*(A.x-E.x)+(m.y-E.y)*(A.y-E.y))/U;if(Z<=0)return m.distance(E);if(Z>=1)return m.distance(A);var ut=((E.y-m.y)*(A.x-E.x)-(E.x-m.x)*(A.y-E.y))/U;return Math.abs(ut)*Math.sqrt(U)}},B.isOnLine=function(n,i){for(var s=new J,u=1;u<i.length;u++){var c=i[u-1],m=i[u];if(s.computeIntersection(n,c,m),s.hasIntersection())return!0}return!1},lt.CLOCKWISE.get=function(){return-1},lt.RIGHT.get=function(){return B.CLOCKWISE},lt.COUNTERCLOCKWISE.get=function(){return 1},lt.LEFT.get=function(){return B.COUNTERCLOCKWISE},lt.COLLINEAR.get=function(){return 0},lt.STRAIGHT.get=function(){return B.COLLINEAR},Object.defineProperties(B,lt);var ct=function(){};ct.prototype.filter=function(n){},ct.prototype.interfaces_=function(){return[]},ct.prototype.getClass=function(){return ct};var Q=function(){var n=arguments[0];this._envelope=null,this._factory=null,this._SRID=null,this._userData=null,this._factory=n,this._SRID=n.getSRID()},St={serialVersionUID:{configurable:!0},SORTINDEX_POINT:{configurable:!0},SORTINDEX_MULTIPOINT:{configurable:!0},SORTINDEX_LINESTRING:{configurable:!0},SORTINDEX_LINEARRING:{configurable:!0},SORTINDEX_MULTILINESTRING:{configurable:!0},SORTINDEX_POLYGON:{configurable:!0},SORTINDEX_MULTIPOLYGON:{configurable:!0},SORTINDEX_GEOMETRYCOLLECTION:{configurable:!0},geometryChangedFilter:{configurable:!0}};Q.prototype.isGeometryCollection=function(){return this.getSortIndex()===Q.SORTINDEX_GEOMETRYCOLLECTION},Q.prototype.getFactory=function(){return this._factory},Q.prototype.getGeometryN=function(n){return this},Q.prototype.getArea=function(){return 0},Q.prototype.isRectangle=function(){return!1},Q.prototype.equals=function(){if(arguments[0]instanceof Q){var n=arguments[0];return n!==null&&this.equalsTopo(n)}if(arguments[0]instanceof Object){var i=arguments[0];if(!(i instanceof Q))return!1;var s=i;return this.equalsExact(s)}},Q.prototype.equalsExact=function(n){return this===n||this.equalsExact(n,0)},Q.prototype.geometryChanged=function(){this.apply(Q.geometryChangedFilter)},Q.prototype.geometryChangedAction=function(){this._envelope=null},Q.prototype.equalsNorm=function(n){return n!==null&&this.norm().equalsExact(n.norm())},Q.prototype.getLength=function(){return 0},Q.prototype.getNumGeometries=function(){return 1},Q.prototype.compareTo=function(){if(arguments.length===1){var n=arguments[0],i=n;return this.getSortIndex()!==i.getSortIndex()?this.getSortIndex()-i.getSortIndex():this.isEmpty()&&i.isEmpty()?0:this.isEmpty()?-1:i.isEmpty()?1:this.compareToSameClass(n)}if(arguments.length===2){var s=arguments[0],u=arguments[1];return this.getSortIndex()!==s.getSortIndex()?this.getSortIndex()-s.getSortIndex():this.isEmpty()&&s.isEmpty()?0:this.isEmpty()?-1:s.isEmpty()?1:this.compareToSameClass(s,u)}},Q.prototype.getUserData=function(){return this._userData},Q.prototype.getSRID=function(){return this._SRID},Q.prototype.getEnvelope=function(){return this.getFactory().toGeometry(this.getEnvelopeInternal())},Q.prototype.checkNotGeometryCollection=function(n){if(n.getSortIndex()===Q.SORTINDEX_GEOMETRYCOLLECTION)throw new C(\\\"This method does not support GeometryCollection arguments\\\")},Q.prototype.equal=function(n,i,s){return s===0?n.equals(i):n.distance(i)<=s},Q.prototype.norm=function(){var n=this.copy();return n.normalize(),n},Q.prototype.getPrecisionModel=function(){return this._factory.getPrecisionModel()},Q.prototype.getEnvelopeInternal=function(){return this._envelope===null&&(this._envelope=this.computeEnvelopeInternal()),new Pt(this._envelope)},Q.prototype.setSRID=function(n){this._SRID=n},Q.prototype.setUserData=function(n){this._userData=n},Q.prototype.compare=function(n,i){for(var s=n.iterator(),u=i.iterator();s.hasNext()&&u.hasNext();){var c=s.next(),m=u.next(),E=c.compareTo(m);if(E!==0)return E}return s.hasNext()?1:u.hasNext()?-1:0},Q.prototype.hashCode=function(){return this.getEnvelopeInternal().hashCode()},Q.prototype.isGeometryCollectionOrDerived=function(){return this.getSortIndex()===Q.SORTINDEX_GEOMETRYCOLLECTION||this.getSortIndex()===Q.SORTINDEX_MULTIPOINT||this.getSortIndex()===Q.SORTINDEX_MULTILINESTRING||this.getSortIndex()===Q.SORTINDEX_MULTIPOLYGON},Q.prototype.interfaces_=function(){return[G,F,t]},Q.prototype.getClass=function(){return Q},Q.hasNonEmptyElements=function(n){for(var i=0;i<n.length;i++)if(!n[i].isEmpty())return!0;return!1},Q.hasNullElements=function(n){for(var i=0;i<n.length;i++)if(n[i]===null)return!0;return!1},St.serialVersionUID.get=function(){return 8763622679187377e3},St.SORTINDEX_POINT.get=function(){return 0},St.SORTINDEX_MULTIPOINT.get=function(){return 1},St.SORTINDEX_LINESTRING.get=function(){return 2},St.SORTINDEX_LINEARRING.get=function(){return 3},St.SORTINDEX_MULTILINESTRING.get=function(){return 4},St.SORTINDEX_POLYGON.get=function(){return 5},St.SORTINDEX_MULTIPOLYGON.get=function(){return 6},St.SORTINDEX_GEOMETRYCOLLECTION.get=function(){return 7},St.geometryChangedFilter.get=function(){return _t},Object.defineProperties(Q,St);var _t=function(){};_t.interfaces_=function(){return[ct]},_t.filter=function(n){n.geometryChangedAction()};var Mt=function(){};Mt.prototype.filter=function(n){},Mt.prototype.interfaces_=function(){return[]},Mt.prototype.getClass=function(){return Mt};var Lt=function(){},$t={Mod2BoundaryNodeRule:{configurable:!0},EndPointBoundaryNodeRule:{configurable:!0},MultiValentEndPointBoundaryNodeRule:{configurable:!0},MonoValentEndPointBoundaryNodeRule:{configurable:!0},MOD2_BOUNDARY_RULE:{configurable:!0},ENDPOINT_BOUNDARY_RULE:{configurable:!0},MULTIVALENT_ENDPOINT_BOUNDARY_RULE:{configurable:!0},MONOVALENT_ENDPOINT_BOUNDARY_RULE:{configurable:!0},OGC_SFS_BOUNDARY_RULE:{configurable:!0}};Lt.prototype.isInBoundary=function(n){},Lt.prototype.interfaces_=function(){return[]},Lt.prototype.getClass=function(){return Lt},$t.Mod2BoundaryNodeRule.get=function(){return Et},$t.EndPointBoundaryNodeRule.get=function(){return oe},$t.MultiValentEndPointBoundaryNodeRule.get=function(){return jt},$t.MonoValentEndPointBoundaryNodeRule.get=function(){return Ht},$t.MOD2_BOUNDARY_RULE.get=function(){return new Et},$t.ENDPOINT_BOUNDARY_RULE.get=function(){return new oe},$t.MULTIVALENT_ENDPOINT_BOUNDARY_RULE.get=function(){return new jt},$t.MONOVALENT_ENDPOINT_BOUNDARY_RULE.get=function(){return new Ht},$t.OGC_SFS_BOUNDARY_RULE.get=function(){return Lt.MOD2_BOUNDARY_RULE},Object.defineProperties(Lt,$t);var Et=function(){};Et.prototype.isInBoundary=function(n){return n%2==1},Et.prototype.interfaces_=function(){return[Lt]},Et.prototype.getClass=function(){return Et};var oe=function(){};oe.prototype.isInBoundary=function(n){return n>0},oe.prototype.interfaces_=function(){return[Lt]},oe.prototype.getClass=function(){return oe};var jt=function(){};jt.prototype.isInBoundary=function(n){return n>1},jt.prototype.interfaces_=function(){return[Lt]},jt.prototype.getClass=function(){return jt};var Ht=function(){};Ht.prototype.isInBoundary=function(n){return n===1},Ht.prototype.interfaces_=function(){return[Lt]},Ht.prototype.getClass=function(){return Ht};var Ot=function(){};Ot.prototype.add=function(){},Ot.prototype.addAll=function(){},Ot.prototype.isEmpty=function(){},Ot.prototype.iterator=function(){},Ot.prototype.size=function(){},Ot.prototype.toArray=function(){},Ot.prototype.remove=function(){},(e.prototype=new Error).name=\\\"IndexOutOfBoundsException\\\";var Y=function(){};Y.prototype.hasNext=function(){},Y.prototype.next=function(){},Y.prototype.remove=function(){};var wt=function(n){function i(){n.apply(this,arguments)}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.get=function(){},i.prototype.set=function(){},i.prototype.isEmpty=function(){},i}(Ot);(o.prototype=new Error).name=\\\"NoSuchElementException\\\";var j=function(n){function i(){n.call(this),this.array_=[],arguments[0]instanceof Ot&&this.addAll(arguments[0])}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.ensureCapacity=function(){},i.prototype.interfaces_=function(){return[n,Ot]},i.prototype.add=function(s){return arguments.length===1?this.array_.push(s):this.array_.splice(arguments[0],arguments[1]),!0},i.prototype.clear=function(){this.array_=[]},i.prototype.addAll=function(s){for(var u=s.iterator();u.hasNext();)this.add(u.next());return!0},i.prototype.set=function(s,u){var c=this.array_[s];return this.array_[s]=u,c},i.prototype.iterator=function(){return new Ut(this)},i.prototype.get=function(s){if(s<0||s>=this.size())throw new e;return this.array_[s]},i.prototype.isEmpty=function(){return this.array_.length===0},i.prototype.size=function(){return this.array_.length},i.prototype.toArray=function(){for(var s=[],u=0,c=this.array_.length;u<c;u++)s.push(this.array_[u]);return s},i.prototype.remove=function(s){for(var u=!1,c=0,m=this.array_.length;c<m;c++)if(this.array_[c]===s){this.array_.splice(c,1),u=!0;break}return u},i}(wt),Ut=function(n){function i(s){n.call(this),this.arrayList_=s,this.position_=0}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.next=function(){if(this.position_===this.arrayList_.size())throw new o;return this.arrayList_.get(this.position_++)},i.prototype.hasNext=function(){return this.position_<this.arrayList_.size()},i.prototype.set=function(s){return this.arrayList_.set(this.position_-1,s)},i.prototype.remove=function(){this.arrayList_.remove(this.arrayList_.get(this.position_))},i}(Y),Dt=function(n){function i(){if(n.call(this),arguments.length!==0){if(arguments.length===1){var u=arguments[0];this.ensureCapacity(u.length),this.add(u,!0)}else if(arguments.length===2){var c=arguments[0],m=arguments[1];this.ensureCapacity(c.length),this.add(c,m)}}}n&&(i.__proto__=n),(i.prototype=Object.create(n&&n.prototype)).constructor=i;var s={coordArrayType:{configurable:!0}};return s.coordArrayType.get=function(){return new Array(0).fill(null)},i.prototype.getCoordinate=function(u){return this.get(u)},i.prototype.addAll=function(){if(arguments.length===2){for(var u=arguments[0],c=arguments[1],m=!1,E=u.iterator();E.hasNext();)this.add(E.next(),c),m=!0;return m}return n.prototype.addAll.apply(this,arguments)},i.prototype.clone=function(){for(var u=n.prototype.clone.call(this),c=0;c<this.size();c++)u.add(c,this.get(c).copy());return u},i.prototype.toCoordinateArray=function(){return this.toArray(i.coordArrayType)},i.prototype.add=function(){if(arguments.length===1){var u=arguments[0];n.prototype.add.call(this,u)}else if(arguments.length===2){if(arguments[0]instanceof Array&&typeof arguments[1]==\\\"boolean\\\"){var c=arguments[0],m=arguments[1];return this.add(c,m,!0),!0}if(arguments[0]instanceof L&&typeof arguments[1]==\\\"boolean\\\"){var E=arguments[0];if(!arguments[1]&&this.size()>=1&&this.get(this.size()-1).equals2D(E))return null;n.prototype.add.call(this,E)}else if(arguments[0]instanceof Object&&typeof arguments[1]==\\\"boolean\\\"){var A=arguments[0],U=arguments[1];return this.add(A,U),!0}}else if(arguments.length===3){if(typeof arguments[2]==\\\"boolean\\\"&&arguments[0]instanceof Array&&typeof arguments[1]==\\\"boolean\\\"){var Z=arguments[0],ut=arguments[1];if(arguments[2])for(var ht=0;ht<Z.length;ht++)this.add(Z[ht],ut);else for(var At=Z.length-1;At>=0;At--)this.add(Z[At],ut);return!0}if(typeof arguments[2]==\\\"boolean\\\"&&Number.isInteger(arguments[0])&&arguments[1]instanceof L){var Rt=arguments[0],kt=arguments[1];if(!arguments[2]){var ee=this.size();if(ee>0&&(Rt>0&&this.get(Rt-1).equals2D(kt)||Rt<ee&&this.get(Rt).equals2D(kt)))return null}n.prototype.add.call(this,Rt,kt)}}else if(arguments.length===4){var on=arguments[0],In=arguments[1],pr=arguments[2],Yi=arguments[3],Oo=1;pr>Yi&&(Oo=-1);for(var Pf=pr;Pf!==Yi;Pf+=Oo)this.add(on[Pf],In);return!0}},i.prototype.closeRing=function(){this.size()>0&&this.add(new L(this.get(0)),!1)},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},Object.defineProperties(i,s),i}(j),ft=function(){},Kt={ForwardComparator:{configurable:!0},BidirectionalComparator:{configurable:!0},coordArrayType:{configurable:!0}};Kt.ForwardComparator.get=function(){return re},Kt.BidirectionalComparator.get=function(){return mn},Kt.coordArrayType.get=function(){return new Array(0).fill(null)},ft.prototype.interfaces_=function(){return[]},ft.prototype.getClass=function(){return ft},ft.isRing=function(n){return!(n.length<4)&&!!n[0].equals2D(n[n.length-1])},ft.ptNotInList=function(n,i){for(var s=0;s<n.length;s++){var u=n[s];if(ft.indexOf(u,i)<0)return u}return null},ft.scroll=function(n,i){var s=ft.indexOf(i,n);if(s<0)return null;var u=new Array(n.length).fill(null);Nt.arraycopy(n,s,u,0,n.length-s),Nt.arraycopy(n,0,u,n.length-s,s),Nt.arraycopy(u,0,n,0,n.length)},ft.equals=function(){if(arguments.length===2){var n=arguments[0],i=arguments[1];if(n===i)return!0;if(n===null||i===null||n.length!==i.length)return!1;for(var s=0;s<n.length;s++)if(!n[s].equals(i[s]))return!1;return!0}if(arguments.length===3){var u=arguments[0],c=arguments[1],m=arguments[2];if(u===c)return!0;if(u===null||c===null||u.length!==c.length)return!1;for(var E=0;E<u.length;E++)if(m.compare(u[E],c[E])!==0)return!1;return!0}},ft.intersection=function(n,i){for(var s=new Dt,u=0;u<n.length;u++)i.intersects(n[u])&&s.add(n[u],!0);return s.toCoordinateArray()},ft.hasRepeatedPoints=function(n){for(var i=1;i<n.length;i++)if(n[i-1].equals(n[i]))return!0;return!1},ft.removeRepeatedPoints=function(n){return ft.hasRepeatedPoints(n)?new Dt(n,!1).toCoordinateArray():n},ft.reverse=function(n){for(var i=n.length-1,s=Math.trunc(i/2),u=0;u<=s;u++){var c=n[u];n[u]=n[i-u],n[i-u]=c}},ft.removeNull=function(n){for(var i=0,s=0;s<n.length;s++)n[s]!==null&&i++;var u=new Array(i).fill(null);if(i===0)return u;for(var c=0,m=0;m<n.length;m++)n[m]!==null&&(u[c++]=n[m]);return u},ft.copyDeep=function(){if(arguments.length===1){for(var n=arguments[0],i=new Array(n.length).fill(null),s=0;s<n.length;s++)i[s]=new L(n[s]);return i}if(arguments.length===5)for(var u=arguments[0],c=arguments[1],m=arguments[2],E=arguments[3],A=arguments[4],U=0;U<A;U++)m[E+U]=new L(u[c+U])},ft.isEqualReversed=function(n,i){for(var s=0;s<n.length;s++){var u=n[s],c=i[n.length-s-1];if(u.compareTo(c)!==0)return!1}return!0},ft.envelope=function(n){for(var i=new Pt,s=0;s<n.length;s++)i.expandToInclude(n[s]);return i},ft.toCoordinateArray=function(n){return n.toArray(ft.coordArrayType)},ft.atLeastNCoordinatesOrNothing=function(n,i){return i.length>=n?i:[]},ft.indexOf=function(n,i){for(var s=0;s<i.length;s++)if(n.equals(i[s]))return s;return-1},ft.increasingDirection=function(n){for(var i=0;i<Math.trunc(n.length/2);i++){var s=n.length-1-i,u=n[i].compareTo(n[s]);if(u!==0)return u}return 1},ft.compare=function(n,i){for(var s=0;s<n.length&&s<i.length;){var u=n[s].compareTo(i[s]);if(u!==0)return u;s++}return s<i.length?-1:s<n.length?1:0},ft.minCoordinate=function(n){for(var i=null,s=0;s<n.length;s++)(i===null||i.compareTo(n[s])>0)&&(i=n[s]);return i},ft.extract=function(n,i,s){i=it.clamp(i,0,n.length);var u=(s=it.clamp(s,-1,n.length))-i+1;s<0&&(u=0),i>=n.length&&(u=0),s<i&&(u=0);var c=new Array(u).fill(null);if(u===0)return c;for(var m=0,E=i;E<=s;E++)c[m++]=n[E];return c},Object.defineProperties(ft,Kt);var re=function(){};re.prototype.compare=function(n,i){return ft.compare(n,i)},re.prototype.interfaces_=function(){return[z]},re.prototype.getClass=function(){return re};var mn=function(){};mn.prototype.compare=function(n,i){var s=n,u=i;if(s.length<u.length)return-1;if(s.length>u.length)return 1;if(s.length===0)return 0;var c=ft.compare(s,u);return ft.isEqualReversed(s,u)?0:c},mn.prototype.OLDcompare=function(n,i){var s=n,u=i;if(s.length<u.length)return-1;if(s.length>u.length)return 1;if(s.length===0)return 0;for(var c=ft.increasingDirection(s),m=ft.increasingDirection(u),E=c>0?0:s.length-1,A=m>0?0:s.length-1,U=0;U<s.length;U++){var Z=s[E].compareTo(u[A]);if(Z!==0)return Z;E+=c,A+=m}return 0},mn.prototype.interfaces_=function(){return[z]},mn.prototype.getClass=function(){return mn};var He=function(){};He.prototype.get=function(){},He.prototype.put=function(){},He.prototype.size=function(){},He.prototype.values=function(){},He.prototype.entrySet=function(){};var Si=function(n){function i(){n.apply(this,arguments)}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i}(He);(a.prototype=new Error).name=\\\"OperationNotSupported\\\",(l.prototype=new Ot).contains=function(){};var $n=function(n){function i(){n.call(this),this.array_=[],arguments[0]instanceof Ot&&this.addAll(arguments[0])}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.contains=function(s){for(var u=0,c=this.array_.length;u<c;u++)if(this.array_[u]===s)return!0;return!1},i.prototype.add=function(s){return!this.contains(s)&&(this.array_.push(s),!0)},i.prototype.addAll=function(s){for(var u=s.iterator();u.hasNext();)this.add(u.next());return!0},i.prototype.remove=function(s){throw new Error},i.prototype.size=function(){return this.array_.length},i.prototype.isEmpty=function(){return this.array_.length===0},i.prototype.toArray=function(){for(var s=[],u=0,c=this.array_.length;u<c;u++)s.push(this.array_[u]);return s},i.prototype.iterator=function(){return new ml(this)},i}(l),ml=function(n){function i(s){n.call(this),this.hashSet_=s,this.position_=0}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.next=function(){if(this.position_===this.hashSet_.size())throw new o;return this.hashSet_.array_[this.position_++]},i.prototype.hasNext=function(){return this.position_<this.hashSet_.size()},i.prototype.remove=function(){throw new a},i}(Y),pi=0;(_.prototype=new Si).get=function(n){for(var i=this.root_;i!==null;){var s=n.compareTo(i.key);if(s<0)i=i.left;else{if(!(s>0))return i.value;i=i.right}}return null},_.prototype.put=function(n,i){if(this.root_===null)return this.root_={key:n,value:i,left:null,right:null,parent:null,color:pi,getValue:function(){return this.value},getKey:function(){return this.key}},this.size_=1,null;var s,u,c=this.root_;do if(s=c,(u=n.compareTo(c.key))<0)c=c.left;else{if(!(u>0)){var m=c.value;return c.value=i,m}c=c.right}while(c!==null);var E={key:n,left:null,right:null,value:i,parent:s,color:pi,getValue:function(){return this.value},getKey:function(){return this.key}};return u<0?s.left=E:s.right=E,this.fixAfterInsertion(E),this.size_++,null},_.prototype.fixAfterInsertion=function(n){for(n.color=1;n!=null&&n!==this.root_&&n.parent.color===1;)if(h(n)===d(h(h(n)))){var i=g(h(h(n)));f(i)===1?(p(h(n),pi),p(i,pi),p(h(h(n)),1),n=h(h(n))):(n===g(h(n))&&(n=h(n),this.rotateLeft(n)),p(h(n),pi),p(h(h(n)),1),this.rotateRight(h(h(n))))}else{var s=d(h(h(n)));f(s)===1?(p(h(n),pi),p(s,pi),p(h(h(n)),1),n=h(h(n))):(n===d(h(n))&&(n=h(n),this.rotateRight(n)),p(h(n),pi),p(h(h(n)),1),this.rotateLeft(h(h(n))))}this.root_.color=pi},_.prototype.values=function(){var n=new j,i=this.getFirstEntry();if(i!==null)for(n.add(i.value);(i=_.successor(i))!==null;)n.add(i.value);return n},_.prototype.entrySet=function(){var n=new $n,i=this.getFirstEntry();if(i!==null)for(n.add(i);(i=_.successor(i))!==null;)n.add(i);return n},_.prototype.rotateLeft=function(n){if(n!=null){var i=n.right;n.right=i.left,i.left!=null&&(i.left.parent=n),i.parent=n.parent,n.parent===null?this.root_=i:n.parent.left===n?n.parent.left=i:n.parent.right=i,i.left=n,n.parent=i}},_.prototype.rotateRight=function(n){if(n!=null){var i=n.left;n.left=i.right,i.right!=null&&(i.right.parent=n),i.parent=n.parent,n.parent===null?this.root_=i:n.parent.right===n?n.parent.right=i:n.parent.left=i,i.right=n,n.parent=i}},_.prototype.getFirstEntry=function(){var n=this.root_;if(n!=null)for(;n.left!=null;)n=n.left;return n},_.successor=function(n){if(n===null)return null;if(n.right!==null){for(var i=n.right;i.left!==null;)i=i.left;return i}for(var s=n.parent,u=n;s!==null&&u===s.right;)u=s,s=s.parent;return s},_.prototype.size=function(){return this.size_};var Ts=function(){};Ts.prototype.interfaces_=function(){return[]},Ts.prototype.getClass=function(){return Ts},y.prototype=new l,(M.prototype=new y).contains=function(n){for(var i=0,s=this.array_.length;i<s;i++)if(this.array_[i].compareTo(n)===0)return!0;return!1},M.prototype.add=function(n){if(this.contains(n))return!1;for(var i=0,s=this.array_.length;i<s;i++)if(this.array_[i].compareTo(n)===1)return this.array_.splice(i,0,n),!0;return this.array_.push(n),!0},M.prototype.addAll=function(n){for(var i=n.iterator();i.hasNext();)this.add(i.next());return!0},M.prototype.remove=function(n){throw new a},M.prototype.size=function(){return this.array_.length},M.prototype.isEmpty=function(){return this.array_.length===0},M.prototype.toArray=function(){for(var n=[],i=0,s=this.array_.length;i<s;i++)n.push(this.array_[i]);return n},M.prototype.iterator=function(){return new Eo(this)};var Eo=function(n){this.treeSet_=n,this.position_=0};Eo.prototype.next=function(){if(this.position_===this.treeSet_.size())throw new o;return this.treeSet_.array_[this.position_++]},Eo.prototype.hasNext=function(){return this.position_<this.treeSet_.size()},Eo.prototype.remove=function(){throw new a};var Ui=function(){};Ui.sort=function(){var n,i,s,u,c=arguments[0];if(arguments.length===1)u=function(E,A){return E.compareTo(A)},c.sort(u);else if(arguments.length===2)s=arguments[1],u=function(E,A){return s.compare(E,A)},c.sort(u);else if(arguments.length===3){(i=c.slice(arguments[1],arguments[2])).sort();var m=c.slice(0,arguments[1]).concat(i,c.slice(arguments[2],c.length));for(c.splice(0,c.length),n=0;n<m.length;n++)c.push(m[n])}else if(arguments.length===4)for(i=c.slice(arguments[1],arguments[2]),s=arguments[3],u=function(E,A){return s.compare(E,A)},i.sort(u),m=c.slice(0,arguments[1]).concat(i,c.slice(arguments[2],c.length)),c.splice(0,c.length),n=0;n<m.length;n++)c.push(m[n])},Ui.asList=function(n){for(var i=new j,s=0,u=n.length;s<u;s++)i.add(n[s]);return i};var pe=function(){},Rr={P:{configurable:!0},L:{configurable:!0},A:{configurable:!0},FALSE:{configurable:!0},TRUE:{configurable:!0},DONTCARE:{configurable:!0},SYM_FALSE:{configurable:!0},SYM_TRUE:{configurable:!0},SYM_DONTCARE:{configurable:!0},SYM_P:{configurable:!0},SYM_L:{configurable:!0},SYM_A:{configurable:!0}};Rr.P.get=function(){return 0},Rr.L.get=function(){return 1},Rr.A.get=function(){return 2},Rr.FALSE.get=function(){return-1},Rr.TRUE.get=function(){return-2},Rr.DONTCARE.get=function(){return-3},Rr.SYM_FALSE.get=function(){return\\\"F\\\"},Rr.SYM_TRUE.get=function(){return\\\"T\\\"},Rr.SYM_DONTCARE.get=function(){return\\\"*\\\"},Rr.SYM_P.get=function(){return\\\"0\\\"},Rr.SYM_L.get=function(){return\\\"1\\\"},Rr.SYM_A.get=function(){return\\\"2\\\"},pe.prototype.interfaces_=function(){return[]},pe.prototype.getClass=function(){return pe},pe.toDimensionSymbol=function(n){switch(n){case pe.FALSE:return pe.SYM_FALSE;case pe.TRUE:return pe.SYM_TRUE;case pe.DONTCARE:return pe.SYM_DONTCARE;case pe.P:return pe.SYM_P;case pe.L:return pe.SYM_L;case pe.A:return pe.SYM_A}throw new C(\\\"Unknown dimension value: \\\"+n)},pe.toDimensionValue=function(n){switch(ot.toUpperCase(n)){case pe.SYM_FALSE:return pe.FALSE;case pe.SYM_TRUE:return pe.TRUE;case pe.SYM_DONTCARE:return pe.DONTCARE;case pe.SYM_P:return pe.P;case pe.SYM_L:return pe.L;case pe.SYM_A:return pe.A}throw new C(\\\"Unknown dimension symbol: \\\"+n)},Object.defineProperties(pe,Rr);var ei=function(){};ei.prototype.filter=function(n){},ei.prototype.interfaces_=function(){return[]},ei.prototype.getClass=function(){return ei};var Vr=function(){};Vr.prototype.filter=function(n,i){},Vr.prototype.isDone=function(){},Vr.prototype.isGeometryChanged=function(){},Vr.prototype.interfaces_=function(){return[]},Vr.prototype.getClass=function(){return Vr};var Vn=function(n){function i(u,c){if(n.call(this,c),this._geometries=u||[],n.hasNullElements(this._geometries))throw new C(\\\"geometries must not contain null elements\\\")}n&&(i.__proto__=n),(i.prototype=Object.create(n&&n.prototype)).constructor=i;var s={serialVersionUID:{configurable:!0}};return i.prototype.computeEnvelopeInternal=function(){for(var u=new Pt,c=0;c<this._geometries.length;c++)u.expandToInclude(this._geometries[c].getEnvelopeInternal());return u},i.prototype.getGeometryN=function(u){return this._geometries[u]},i.prototype.getSortIndex=function(){return n.SORTINDEX_GEOMETRYCOLLECTION},i.prototype.getCoordinates=function(){for(var u=new Array(this.getNumPoints()).fill(null),c=-1,m=0;m<this._geometries.length;m++)for(var E=this._geometries[m].getCoordinates(),A=0;A<E.length;A++)u[++c]=E[A];return u},i.prototype.getArea=function(){for(var u=0,c=0;c<this._geometries.length;c++)u+=this._geometries[c].getArea();return u},i.prototype.equalsExact=function(){if(arguments.length===2){var u=arguments[0],c=arguments[1];if(!this.isEquivalentClass(u))return!1;var m=u;if(this._geometries.length!==m._geometries.length)return!1;for(var E=0;E<this._geometries.length;E++)if(!this._geometries[E].equalsExact(m._geometries[E],c))return!1;return!0}return n.prototype.equalsExact.apply(this,arguments)},i.prototype.normalize=function(){for(var u=0;u<this._geometries.length;u++)this._geometries[u].normalize();Ui.sort(this._geometries)},i.prototype.getCoordinate=function(){return this.isEmpty()?null:this._geometries[0].getCoordinate()},i.prototype.getBoundaryDimension=function(){for(var u=pe.FALSE,c=0;c<this._geometries.length;c++)u=Math.max(u,this._geometries[c].getBoundaryDimension());return u},i.prototype.getDimension=function(){for(var u=pe.FALSE,c=0;c<this._geometries.length;c++)u=Math.max(u,this._geometries[c].getDimension());return u},i.prototype.getLength=function(){for(var u=0,c=0;c<this._geometries.length;c++)u+=this._geometries[c].getLength();return u},i.prototype.getNumPoints=function(){for(var u=0,c=0;c<this._geometries.length;c++)u+=this._geometries[c].getNumPoints();return u},i.prototype.getNumGeometries=function(){return this._geometries.length},i.prototype.reverse=function(){for(var u=this._geometries.length,c=new Array(u).fill(null),m=0;m<this._geometries.length;m++)c[m]=this._geometries[m].reverse();return this.getFactory().createGeometryCollection(c)},i.prototype.compareToSameClass=function(){if(arguments.length===1){var u=arguments[0],c=new M(Ui.asList(this._geometries)),m=new M(Ui.asList(u._geometries));return this.compare(c,m)}if(arguments.length===2){for(var E=arguments[0],A=arguments[1],U=E,Z=this.getNumGeometries(),ut=U.getNumGeometries(),ht=0;ht<Z&&ht<ut;){var At=this.getGeometryN(ht),Rt=U.getGeometryN(ht),kt=At.compareToSameClass(Rt,A);if(kt!==0)return kt;ht++}return ht<Z?1:ht<ut?-1:0}},i.prototype.apply=function(){if(X(arguments[0],Mt))for(var u=arguments[0],c=0;c<this._geometries.length;c++)this._geometries[c].apply(u);else if(X(arguments[0],Vr)){var m=arguments[0];if(this._geometries.length===0)return null;for(var E=0;E<this._geometries.length&&(this._geometries[E].apply(m),!m.isDone());E++);m.isGeometryChanged()&&this.geometryChanged()}else if(X(arguments[0],ei)){var A=arguments[0];A.filter(this);for(var U=0;U<this._geometries.length;U++)this._geometries[U].apply(A)}else if(X(arguments[0],ct)){var Z=arguments[0];Z.filter(this);for(var ut=0;ut<this._geometries.length;ut++)this._geometries[ut].apply(Z)}},i.prototype.getBoundary=function(){return this.checkNotGeometryCollection(this),b.shouldNeverReachHere(),null},i.prototype.clone=function(){var u=n.prototype.clone.call(this);u._geometries=new Array(this._geometries.length).fill(null);for(var c=0;c<this._geometries.length;c++)u._geometries[c]=this._geometries[c].clone();return u},i.prototype.getGeometryType=function(){return\\\"GeometryCollection\\\"},i.prototype.copy=function(){for(var u=new Array(this._geometries.length).fill(null),c=0;c<u.length;c++)u[c]=this._geometries[c].copy();return new i(u,this._factory)},i.prototype.isEmpty=function(){for(var u=0;u<this._geometries.length;u++)if(!this._geometries[u].isEmpty())return!1;return!0},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},s.serialVersionUID.get=function(){return-5694727726395021e3},Object.defineProperties(i,s),i}(Q),H=function(n){function i(){n.apply(this,arguments)}n&&(i.__proto__=n),(i.prototype=Object.create(n&&n.prototype)).constructor=i;var s={serialVersionUID:{configurable:!0}};return i.prototype.getSortIndex=function(){return Q.SORTINDEX_MULTILINESTRING},i.prototype.equalsExact=function(){if(arguments.length===2){var u=arguments[0],c=arguments[1];return!!this.isEquivalentClass(u)&&n.prototype.equalsExact.call(this,u,c)}return n.prototype.equalsExact.apply(this,arguments)},i.prototype.getBoundaryDimension=function(){return this.isClosed()?pe.FALSE:0},i.prototype.isClosed=function(){if(this.isEmpty())return!1;for(var u=0;u<this._geometries.length;u++)if(!this._geometries[u].isClosed())return!1;return!0},i.prototype.getDimension=function(){return 1},i.prototype.reverse=function(){for(var u=this._geometries.length,c=new Array(u).fill(null),m=0;m<this._geometries.length;m++)c[u-1-m]=this._geometries[m].reverse();return this.getFactory().createMultiLineString(c)},i.prototype.getBoundary=function(){return new rt(this).getBoundary()},i.prototype.getGeometryType=function(){return\\\"MultiLineString\\\"},i.prototype.copy=function(){for(var u=new Array(this._geometries.length).fill(null),c=0;c<u.length;c++)u[c]=this._geometries[c].copy();return new i(u,this._factory)},i.prototype.interfaces_=function(){return[Ts]},i.prototype.getClass=function(){return i},s.serialVersionUID.get=function(){return 8166665132445434e3},Object.defineProperties(i,s),i}(Vn),rt=function(){if(this._geom=null,this._geomFact=null,this._bnRule=null,this._endpointMap=null,arguments.length===1){var n=arguments[0],i=Lt.MOD2_BOUNDARY_RULE;this._geom=n,this._geomFact=n.getFactory(),this._bnRule=i}else if(arguments.length===2){var s=arguments[0],u=arguments[1];this._geom=s,this._geomFact=s.getFactory(),this._bnRule=u}};rt.prototype.boundaryMultiLineString=function(n){if(this._geom.isEmpty())return this.getEmptyMultiPoint();var i=this.computeBoundaryCoordinates(n);return i.length===1?this._geomFact.createPoint(i[0]):this._geomFact.createMultiPointFromCoords(i)},rt.prototype.getBoundary=function(){return this._geom instanceof Bt?this.boundaryLineString(this._geom):this._geom instanceof H?this.boundaryMultiLineString(this._geom):this._geom.getBoundary()},rt.prototype.boundaryLineString=function(n){return this._geom.isEmpty()?this.getEmptyMultiPoint():n.isClosed()?this._bnRule.isInBoundary(2)?n.getStartPoint():this._geomFact.createMultiPoint():this._geomFact.createMultiPoint([n.getStartPoint(),n.getEndPoint()])},rt.prototype.getEmptyMultiPoint=function(){return this._geomFact.createMultiPoint()},rt.prototype.computeBoundaryCoordinates=function(n){var i=new j;this._endpointMap=new _;for(var s=0;s<n.getNumGeometries();s++){var u=n.getGeometryN(s);u.getNumPoints()!==0&&(this.addEndpoint(u.getCoordinateN(0)),this.addEndpoint(u.getCoordinateN(u.getNumPoints()-1)))}for(var c=this._endpointMap.entrySet().iterator();c.hasNext();){var m=c.next(),E=m.getValue().count;this._bnRule.isInBoundary(E)&&i.add(m.getKey())}return ft.toCoordinateArray(i)},rt.prototype.addEndpoint=function(n){var i=this._endpointMap.get(n);i===null&&(i=new gt,this._endpointMap.put(n,i)),i.count++},rt.prototype.interfaces_=function(){return[]},rt.prototype.getClass=function(){return rt},rt.getBoundary=function(){if(arguments.length===1){var n=arguments[0];return new rt(n).getBoundary()}if(arguments.length===2){var i=arguments[0],s=arguments[1];return new rt(i,s).getBoundary()}};var gt=function(){this.count=null};gt.prototype.interfaces_=function(){return[]},gt.prototype.getClass=function(){return gt};var st=function(){},yt={NEWLINE:{configurable:!0},SIMPLE_ORDINATE_FORMAT:{configurable:!0}};st.prototype.interfaces_=function(){return[]},st.prototype.getClass=function(){return st},st.chars=function(n,i){for(var s=new Array(i).fill(null),u=0;u<i;u++)s[u]=n;return String(s)},st.getStackTrace=function(){if(arguments.length===1){var n=arguments[0],i=new function(){},s=new function(){}(i);return n.printStackTrace(s),i.toString()}if(arguments.length===2){for(var u=arguments[0],c=arguments[1],m=\\\"\\\",E=new function(){}(new function(){}(st.getStackTrace(u))),A=0;A<c;A++)try{m+=E.readLine()+st.NEWLINE}catch(U){if(!(U instanceof w))throw U;b.shouldNeverReachHere()}return m}},st.split=function(n,i){for(var s=i.length,u=new j,c=\\\"\\\"+n,m=c.indexOf(i);m>=0;){var E=c.substring(0,m);u.add(E),m=(c=c.substring(m+s)).indexOf(i)}c.length>0&&u.add(c);for(var A=new Array(u.size()).fill(null),U=0;U<A.length;U++)A[U]=u.get(U);return A},st.toString=function(){if(arguments.length===1){var n=arguments[0];return st.SIMPLE_ORDINATE_FORMAT.format(n)}},st.spaces=function(n){return st.chars(\\\" \\\",n)},yt.NEWLINE.get=function(){return Nt.getProperty(\\\"line.separator\\\")},yt.SIMPLE_ORDINATE_FORMAT.get=function(){return new function(){}(\\\"0.#\\\")},Object.defineProperties(st,yt);var It=function(){};It.prototype.interfaces_=function(){return[]},It.prototype.getClass=function(){return It},It.copyCoord=function(n,i,s,u){for(var c=Math.min(n.getDimension(),s.getDimension()),m=0;m<c;m++)s.setOrdinate(u,m,n.getOrdinate(i,m))},It.isRing=function(n){var i=n.size();return i===0||!(i<=3)&&n.getOrdinate(0,dt.X)===n.getOrdinate(i-1,dt.X)&&n.getOrdinate(0,dt.Y)===n.getOrdinate(i-1,dt.Y)},It.isEqual=function(n,i){var s=n.size();if(s!==i.size())return!1;for(var u=Math.min(n.getDimension(),i.getDimension()),c=0;c<s;c++)for(var m=0;m<u;m++){var E=n.getOrdinate(c,m),A=i.getOrdinate(c,m);if(n.getOrdinate(c,m)!==i.getOrdinate(c,m)&&(!S.isNaN(E)||!S.isNaN(A)))return!1}return!0},It.extend=function(n,i,s){var u=n.create(s,i.getDimension()),c=i.size();if(It.copy(i,0,u,0,c),c>0)for(var m=c;m<s;m++)It.copy(i,c-1,u,m,1);return u},It.reverse=function(n){for(var i=n.size()-1,s=Math.trunc(i/2),u=0;u<=s;u++)It.swap(n,u,i-u)},It.swap=function(n,i,s){if(i===s)return null;for(var u=0;u<n.getDimension();u++){var c=n.getOrdinate(i,u);n.setOrdinate(i,u,n.getOrdinate(s,u)),n.setOrdinate(s,u,c)}},It.copy=function(n,i,s,u,c){for(var m=0;m<c;m++)It.copyCoord(n,i+m,s,u+m)},It.toString=function(){if(arguments.length===1){var n=arguments[0],i=n.size();if(i===0)return\\\"()\\\";var s=n.getDimension(),u=new pt;u.append(\\\"(\\\");for(var c=0;c<i;c++){c>0&&u.append(\\\" \\\");for(var m=0;m<s;m++)m>0&&u.append(\\\",\\\"),u.append(st.toString(n.getOrdinate(c,m)))}return u.append(\\\")\\\"),u.toString()}},It.ensureValidRing=function(n,i){var s=i.size();return s===0?i:s<=3?It.createClosedRing(n,i,4):i.getOrdinate(0,dt.X)===i.getOrdinate(s-1,dt.X)&&i.getOrdinate(0,dt.Y)===i.getOrdinate(s-1,dt.Y)?i:It.createClosedRing(n,i,s+1)},It.createClosedRing=function(n,i,s){var u=n.create(s,i.getDimension()),c=i.size();It.copy(i,0,u,0,c);for(var m=c;m<s;m++)It.copy(i,0,u,m,1);return u};var Bt=function(n){function i(u,c){n.call(this,c),this._points=null,this.init(u)}n&&(i.__proto__=n),(i.prototype=Object.create(n&&n.prototype)).constructor=i;var s={serialVersionUID:{configurable:!0}};return i.prototype.computeEnvelopeInternal=function(){return this.isEmpty()?new Pt:this._points.expandEnvelope(new Pt)},i.prototype.isRing=function(){return this.isClosed()&&this.isSimple()},i.prototype.getSortIndex=function(){return n.SORTINDEX_LINESTRING},i.prototype.getCoordinates=function(){return this._points.toCoordinateArray()},i.prototype.equalsExact=function(){if(arguments.length===2){var u=arguments[0],c=arguments[1];if(!this.isEquivalentClass(u))return!1;var m=u;if(this._points.size()!==m._points.size())return!1;for(var E=0;E<this._points.size();E++)if(!this.equal(this._points.getCoordinate(E),m._points.getCoordinate(E),c))return!1;return!0}return n.prototype.equalsExact.apply(this,arguments)},i.prototype.normalize=function(){for(var u=0;u<Math.trunc(this._points.size()/2);u++){var c=this._points.size()-1-u;if(!this._points.getCoordinate(u).equals(this._points.getCoordinate(c)))return this._points.getCoordinate(u).compareTo(this._points.getCoordinate(c))>0&&It.reverse(this._points),null}},i.prototype.getCoordinate=function(){return this.isEmpty()?null:this._points.getCoordinate(0)},i.prototype.getBoundaryDimension=function(){return this.isClosed()?pe.FALSE:0},i.prototype.isClosed=function(){return!this.isEmpty()&&this.getCoordinateN(0).equals2D(this.getCoordinateN(this.getNumPoints()-1))},i.prototype.getEndPoint=function(){return this.isEmpty()?null:this.getPointN(this.getNumPoints()-1)},i.prototype.getDimension=function(){return 1},i.prototype.getLength=function(){return B.computeLength(this._points)},i.prototype.getNumPoints=function(){return this._points.size()},i.prototype.reverse=function(){var u=this._points.copy();return It.reverse(u),this.getFactory().createLineString(u)},i.prototype.compareToSameClass=function(){if(arguments.length===1){for(var u=arguments[0],c=0,m=0;c<this._points.size()&&m<u._points.size();){var E=this._points.getCoordinate(c).compareTo(u._points.getCoordinate(m));if(E!==0)return E;c++,m++}return c<this._points.size()?1:m<u._points.size()?-1:0}if(arguments.length===2){var A=arguments[0];return arguments[1].compare(this._points,A._points)}},i.prototype.apply=function(){if(X(arguments[0],Mt))for(var u=arguments[0],c=0;c<this._points.size();c++)u.filter(this._points.getCoordinate(c));else if(X(arguments[0],Vr)){var m=arguments[0];if(this._points.size()===0)return null;for(var E=0;E<this._points.size()&&(m.filter(this._points,E),!m.isDone());E++);m.isGeometryChanged()&&this.geometryChanged()}else X(arguments[0],ei)?arguments[0].filter(this):X(arguments[0],ct)&&arguments[0].filter(this)},i.prototype.getBoundary=function(){return new rt(this).getBoundary()},i.prototype.isEquivalentClass=function(u){return u instanceof i},i.prototype.clone=function(){var u=n.prototype.clone.call(this);return u._points=this._points.clone(),u},i.prototype.getCoordinateN=function(u){return this._points.getCoordinate(u)},i.prototype.getGeometryType=function(){return\\\"LineString\\\"},i.prototype.copy=function(){return new i(this._points.copy(),this._factory)},i.prototype.getCoordinateSequence=function(){return this._points},i.prototype.isEmpty=function(){return this._points.size()===0},i.prototype.init=function(u){if(u===null&&(u=this.getFactory().getCoordinateSequenceFactory().create([])),u.size()===1)throw new C(\\\"Invalid number of points in LineString (found \\\"+u.size()+\\\" - must be 0 or >= 2)\\\");this._points=u},i.prototype.isCoordinate=function(u){for(var c=0;c<this._points.size();c++)if(this._points.getCoordinate(c).equals(u))return!0;return!1},i.prototype.getStartPoint=function(){return this.isEmpty()?null:this.getPointN(0)},i.prototype.getPointN=function(u){return this.getFactory().createPoint(this._points.getCoordinate(u))},i.prototype.interfaces_=function(){return[Ts]},i.prototype.getClass=function(){return i},s.serialVersionUID.get=function(){return 0x2b2b51ba435c8e00},Object.defineProperties(i,s),i}(Q),se=function(){};se.prototype.interfaces_=function(){return[]},se.prototype.getClass=function(){return se};var Qt=function(n){function i(u,c){n.call(this,c),this._coordinates=u||null,this.init(this._coordinates)}n&&(i.__proto__=n),(i.prototype=Object.create(n&&n.prototype)).constructor=i;var s={serialVersionUID:{configurable:!0}};return i.prototype.computeEnvelopeInternal=function(){if(this.isEmpty())return new Pt;var u=new Pt;return u.expandToInclude(this._coordinates.getX(0),this._coordinates.getY(0)),u},i.prototype.getSortIndex=function(){return n.SORTINDEX_POINT},i.prototype.getCoordinates=function(){return this.isEmpty()?[]:[this.getCoordinate()]},i.prototype.equalsExact=function(){if(arguments.length===2){var u=arguments[0],c=arguments[1];return!!this.isEquivalentClass(u)&&(!(!this.isEmpty()||!u.isEmpty())||this.isEmpty()===u.isEmpty()&&this.equal(u.getCoordinate(),this.getCoordinate(),c))}return n.prototype.equalsExact.apply(this,arguments)},i.prototype.normalize=function(){},i.prototype.getCoordinate=function(){return this._coordinates.size()!==0?this._coordinates.getCoordinate(0):null},i.prototype.getBoundaryDimension=function(){return pe.FALSE},i.prototype.getDimension=function(){return 0},i.prototype.getNumPoints=function(){return this.isEmpty()?0:1},i.prototype.reverse=function(){return this.copy()},i.prototype.getX=function(){if(this.getCoordinate()===null)throw new Error(\\\"getX called on empty Point\\\");return this.getCoordinate().x},i.prototype.compareToSameClass=function(){if(arguments.length===1){var u=arguments[0];return this.getCoordinate().compareTo(u.getCoordinate())}if(arguments.length===2){var c=arguments[0];return arguments[1].compare(this._coordinates,c._coordinates)}},i.prototype.apply=function(){if(X(arguments[0],Mt)){var u=arguments[0];if(this.isEmpty())return null;u.filter(this.getCoordinate())}else if(X(arguments[0],Vr)){var c=arguments[0];if(this.isEmpty())return null;c.filter(this._coordinates,0),c.isGeometryChanged()&&this.geometryChanged()}else X(arguments[0],ei)?arguments[0].filter(this):X(arguments[0],ct)&&arguments[0].filter(this)},i.prototype.getBoundary=function(){return this.getFactory().createGeometryCollection(null)},i.prototype.clone=function(){var u=n.prototype.clone.call(this);return u._coordinates=this._coordinates.clone(),u},i.prototype.getGeometryType=function(){return\\\"Point\\\"},i.prototype.copy=function(){return new i(this._coordinates.copy(),this._factory)},i.prototype.getCoordinateSequence=function(){return this._coordinates},i.prototype.getY=function(){if(this.getCoordinate()===null)throw new Error(\\\"getY called on empty Point\\\");return this.getCoordinate().y},i.prototype.isEmpty=function(){return this._coordinates.size()===0},i.prototype.init=function(u){u===null&&(u=this.getFactory().getCoordinateSequenceFactory().create([])),b.isTrue(u.size()<=1),this._coordinates=u},i.prototype.isSimple=function(){return!0},i.prototype.interfaces_=function(){return[se]},i.prototype.getClass=function(){return i},s.serialVersionUID.get=function(){return 4902022702746615e3},Object.defineProperties(i,s),i}(Q),ce=function(){};ce.prototype.interfaces_=function(){return[]},ce.prototype.getClass=function(){return ce};var Vt=function(n){function i(u,c,m){if(n.call(this,m),this._shell=null,this._holes=null,u===null&&(u=this.getFactory().createLinearRing()),c===null&&(c=[]),n.hasNullElements(c))throw new C(\\\"holes must not contain null elements\\\");if(u.isEmpty()&&n.hasNonEmptyElements(c))throw new C(\\\"shell is empty but holes are not\\\");this._shell=u,this._holes=c}n&&(i.__proto__=n),(i.prototype=Object.create(n&&n.prototype)).constructor=i;var s={serialVersionUID:{configurable:!0}};return i.prototype.computeEnvelopeInternal=function(){return this._shell.getEnvelopeInternal()},i.prototype.getSortIndex=function(){return n.SORTINDEX_POLYGON},i.prototype.getCoordinates=function(){if(this.isEmpty())return[];for(var u=new Array(this.getNumPoints()).fill(null),c=-1,m=this._shell.getCoordinates(),E=0;E<m.length;E++)u[++c]=m[E];for(var A=0;A<this._holes.length;A++)for(var U=this._holes[A].getCoordinates(),Z=0;Z<U.length;Z++)u[++c]=U[Z];return u},i.prototype.getArea=function(){var u=0;u+=Math.abs(B.signedArea(this._shell.getCoordinateSequence()));for(var c=0;c<this._holes.length;c++)u-=Math.abs(B.signedArea(this._holes[c].getCoordinateSequence()));return u},i.prototype.isRectangle=function(){if(this.getNumInteriorRing()!==0||this._shell===null||this._shell.getNumPoints()!==5)return!1;for(var u=this._shell.getCoordinateSequence(),c=this.getEnvelopeInternal(),m=0;m<5;m++){var E=u.getX(m);if(E!==c.getMinX()&&E!==c.getMaxX())return!1;var A=u.getY(m);if(A!==c.getMinY()&&A!==c.getMaxY())return!1}for(var U=u.getX(0),Z=u.getY(0),ut=1;ut<=4;ut++){var ht=u.getX(ut),At=u.getY(ut);if(ht!==U==(At!==Z))return!1;U=ht,Z=At}return!0},i.prototype.equalsExact=function(){if(arguments.length===2){var u=arguments[0],c=arguments[1];if(!this.isEquivalentClass(u))return!1;var m=u,E=this._shell,A=m._shell;if(!E.equalsExact(A,c)||this._holes.length!==m._holes.length)return!1;for(var U=0;U<this._holes.length;U++)if(!this._holes[U].equalsExact(m._holes[U],c))return!1;return!0}return n.prototype.equalsExact.apply(this,arguments)},i.prototype.normalize=function(){if(arguments.length===0){this.normalize(this._shell,!0);for(var u=0;u<this._holes.length;u++)this.normalize(this._holes[u],!1);Ui.sort(this._holes)}else if(arguments.length===2){var c=arguments[0],m=arguments[1];if(c.isEmpty())return null;var E=new Array(c.getCoordinates().length-1).fill(null);Nt.arraycopy(c.getCoordinates(),0,E,0,E.length);var A=ft.minCoordinate(c.getCoordinates());ft.scroll(E,A),Nt.arraycopy(E,0,c.getCoordinates(),0,E.length),c.getCoordinates()[E.length]=E[0],B.isCCW(c.getCoordinates())===m&&ft.reverse(c.getCoordinates())}},i.prototype.getCoordinate=function(){return this._shell.getCoordinate()},i.prototype.getNumInteriorRing=function(){return this._holes.length},i.prototype.getBoundaryDimension=function(){return 1},i.prototype.getDimension=function(){return 2},i.prototype.getLength=function(){var u=0;u+=this._shell.getLength();for(var c=0;c<this._holes.length;c++)u+=this._holes[c].getLength();return u},i.prototype.getNumPoints=function(){for(var u=this._shell.getNumPoints(),c=0;c<this._holes.length;c++)u+=this._holes[c].getNumPoints();return u},i.prototype.reverse=function(){var u=this.copy();u._shell=this._shell.copy().reverse(),u._holes=new Array(this._holes.length).fill(null);for(var c=0;c<this._holes.length;c++)u._holes[c]=this._holes[c].copy().reverse();return u},i.prototype.convexHull=function(){return this.getExteriorRing().convexHull()},i.prototype.compareToSameClass=function(){if(arguments.length===1){var u=arguments[0],c=this._shell,m=u._shell;return c.compareToSameClass(m)}if(arguments.length===2){var E=arguments[0],A=arguments[1],U=E,Z=this._shell,ut=U._shell,ht=Z.compareToSameClass(ut,A);if(ht!==0)return ht;for(var At=this.getNumInteriorRing(),Rt=U.getNumInteriorRing(),kt=0;kt<At&&kt<Rt;){var ee=this.getInteriorRingN(kt),on=U.getInteriorRingN(kt),In=ee.compareToSameClass(on,A);if(In!==0)return In;kt++}return kt<At?1:kt<Rt?-1:0}},i.prototype.apply=function(u){if(X(u,Mt)){this._shell.apply(u);for(var c=0;c<this._holes.length;c++)this._holes[c].apply(u)}else if(X(u,Vr)){if(this._shell.apply(u),!u.isDone())for(var m=0;m<this._holes.length&&(this._holes[m].apply(u),!u.isDone());m++);u.isGeometryChanged()&&this.geometryChanged()}else if(X(u,ei))u.filter(this);else if(X(u,ct)){u.filter(this),this._shell.apply(u);for(var E=0;E<this._holes.length;E++)this._holes[E].apply(u)}},i.prototype.getBoundary=function(){if(this.isEmpty())return this.getFactory().createMultiLineString();var u=new Array(this._holes.length+1).fill(null);u[0]=this._shell;for(var c=0;c<this._holes.length;c++)u[c+1]=this._holes[c];return u.length<=1?this.getFactory().createLinearRing(u[0].getCoordinateSequence()):this.getFactory().createMultiLineString(u)},i.prototype.clone=function(){var u=n.prototype.clone.call(this);u._shell=this._shell.clone(),u._holes=new Array(this._holes.length).fill(null);for(var c=0;c<this._holes.length;c++)u._holes[c]=this._holes[c].clone();return u},i.prototype.getGeometryType=function(){return\\\"Polygon\\\"},i.prototype.copy=function(){for(var u=this._shell.copy(),c=new Array(this._holes.length).fill(null),m=0;m<c.length;m++)c[m]=this._holes[m].copy();return new i(u,c,this._factory)},i.prototype.getExteriorRing=function(){return this._shell},i.prototype.isEmpty=function(){return this._shell.isEmpty()},i.prototype.getInteriorRingN=function(u){return this._holes[u]},i.prototype.interfaces_=function(){return[ce]},i.prototype.getClass=function(){return i},s.serialVersionUID.get=function(){return-0x307ffefd8dc97200},Object.defineProperties(i,s),i}(Q),fe=function(n){function i(){n.apply(this,arguments)}n&&(i.__proto__=n),(i.prototype=Object.create(n&&n.prototype)).constructor=i;var s={serialVersionUID:{configurable:!0}};return i.prototype.getSortIndex=function(){return Q.SORTINDEX_MULTIPOINT},i.prototype.isValid=function(){return!0},i.prototype.equalsExact=function(){if(arguments.length===2){var u=arguments[0],c=arguments[1];return!!this.isEquivalentClass(u)&&n.prototype.equalsExact.call(this,u,c)}return n.prototype.equalsExact.apply(this,arguments)},i.prototype.getCoordinate=function(){if(arguments.length===1){var u=arguments[0];return this._geometries[u].getCoordinate()}return n.prototype.getCoordinate.apply(this,arguments)},i.prototype.getBoundaryDimension=function(){return pe.FALSE},i.prototype.getDimension=function(){return 0},i.prototype.getBoundary=function(){return this.getFactory().createGeometryCollection(null)},i.prototype.getGeometryType=function(){return\\\"MultiPoint\\\"},i.prototype.copy=function(){for(var u=new Array(this._geometries.length).fill(null),c=0;c<u.length;c++)u[c]=this._geometries[c].copy();return new i(u,this._factory)},i.prototype.interfaces_=function(){return[se]},i.prototype.getClass=function(){return i},s.serialVersionUID.get=function(){return-8048474874175356e3},Object.defineProperties(i,s),i}(Vn),sn=function(n){function i(u,c){u instanceof L&&c instanceof le&&(u=c.getCoordinateSequenceFactory().create(u)),n.call(this,u,c),this.validateConstruction()}n&&(i.__proto__=n),(i.prototype=Object.create(n&&n.prototype)).constructor=i;var s={MINIMUM_VALID_SIZE:{configurable:!0},serialVersionUID:{configurable:!0}};return i.prototype.getSortIndex=function(){return Q.SORTINDEX_LINEARRING},i.prototype.getBoundaryDimension=function(){return pe.FALSE},i.prototype.isClosed=function(){return!!this.isEmpty()||n.prototype.isClosed.call(this)},i.prototype.reverse=function(){var u=this._points.copy();return It.reverse(u),this.getFactory().createLinearRing(u)},i.prototype.validateConstruction=function(){if(!this.isEmpty()&&!n.prototype.isClosed.call(this))throw new C(\\\"Points of LinearRing do not form a closed linestring\\\");if(this.getCoordinateSequence().size()>=1&&this.getCoordinateSequence().size()<i.MINIMUM_VALID_SIZE)throw new C(\\\"Invalid number of points in LinearRing (found \\\"+this.getCoordinateSequence().size()+\\\" - must be 0 or >= 4)\\\")},i.prototype.getGeometryType=function(){return\\\"LinearRing\\\"},i.prototype.copy=function(){return new i(this._points.copy(),this._factory)},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},s.MINIMUM_VALID_SIZE.get=function(){return 4},s.serialVersionUID.get=function(){return-0x3b229e262367a600},Object.defineProperties(i,s),i}(Bt),un=function(n){function i(){n.apply(this,arguments)}n&&(i.__proto__=n),(i.prototype=Object.create(n&&n.prototype)).constructor=i;var s={serialVersionUID:{configurable:!0}};return i.prototype.getSortIndex=function(){return Q.SORTINDEX_MULTIPOLYGON},i.prototype.equalsExact=function(){if(arguments.length===2){var u=arguments[0],c=arguments[1];return!!this.isEquivalentClass(u)&&n.prototype.equalsExact.call(this,u,c)}return n.prototype.equalsExact.apply(this,arguments)},i.prototype.getBoundaryDimension=function(){return 1},i.prototype.getDimension=function(){return 2},i.prototype.reverse=function(){for(var u=this._geometries.length,c=new Array(u).fill(null),m=0;m<this._geometries.length;m++)c[m]=this._geometries[m].reverse();return this.getFactory().createMultiPolygon(c)},i.prototype.getBoundary=function(){if(this.isEmpty())return this.getFactory().createMultiLineString();for(var u=new j,c=0;c<this._geometries.length;c++)for(var m=this._geometries[c].getBoundary(),E=0;E<m.getNumGeometries();E++)u.add(m.getGeometryN(E));var A=new Array(u.size()).fill(null);return this.getFactory().createMultiLineString(u.toArray(A))},i.prototype.getGeometryType=function(){return\\\"MultiPolygon\\\"},i.prototype.copy=function(){for(var u=new Array(this._geometries.length).fill(null),c=0;c<u.length;c++)u[c]=this._geometries[c].copy();return new i(u,this._factory)},i.prototype.interfaces_=function(){return[ce]},i.prototype.getClass=function(){return i},s.serialVersionUID.get=function(){return-0x7a5aa1369171980},Object.defineProperties(i,s),i}(Vn),vn=function(n){this._factory=n||null,this._isUserDataCopied=!1},ni={NoOpGeometryOperation:{configurable:!0},CoordinateOperation:{configurable:!0},CoordinateSequenceOperation:{configurable:!0}};vn.prototype.setCopyUserData=function(n){this._isUserDataCopied=n},vn.prototype.edit=function(n,i){if(n===null)return null;var s=this.editInternal(n,i);return this._isUserDataCopied&&s.setUserData(n.getUserData()),s},vn.prototype.editInternal=function(n,i){return this._factory===null&&(this._factory=n.getFactory()),n instanceof Vn?this.editGeometryCollection(n,i):n instanceof Vt?this.editPolygon(n,i):n instanceof Qt?i.edit(n,this._factory):n instanceof Bt?i.edit(n,this._factory):(b.shouldNeverReachHere(\\\"Unsupported Geometry class: \\\"+n.getClass().getName()),null)},vn.prototype.editGeometryCollection=function(n,i){for(var s=i.edit(n,this._factory),u=new j,c=0;c<s.getNumGeometries();c++){var m=this.edit(s.getGeometryN(c),i);m===null||m.isEmpty()||u.add(m)}return s.getClass()===fe?this._factory.createMultiPoint(u.toArray([])):s.getClass()===H?this._factory.createMultiLineString(u.toArray([])):s.getClass()===un?this._factory.createMultiPolygon(u.toArray([])):this._factory.createGeometryCollection(u.toArray([]))},vn.prototype.editPolygon=function(n,i){var s=i.edit(n,this._factory);if(s===null&&(s=this._factory.createPolygon(null)),s.isEmpty())return s;var u=this.edit(s.getExteriorRing(),i);if(u===null||u.isEmpty())return this._factory.createPolygon();for(var c=new j,m=0;m<s.getNumInteriorRing();m++){var E=this.edit(s.getInteriorRingN(m),i);E===null||E.isEmpty()||c.add(E)}return this._factory.createPolygon(u,c.toArray([]))},vn.prototype.interfaces_=function(){return[]},vn.prototype.getClass=function(){return vn},vn.GeometryEditorOperation=function(){},ni.NoOpGeometryOperation.get=function(){return En},ni.CoordinateOperation.get=function(){return de},ni.CoordinateSequenceOperation.get=function(){return Mo},Object.defineProperties(vn,ni);var En=function(){};En.prototype.edit=function(n,i){return n},En.prototype.interfaces_=function(){return[vn.GeometryEditorOperation]},En.prototype.getClass=function(){return En};var de=function(){};de.prototype.edit=function(n,i){var s=this.editCoordinates(n.getCoordinates(),n);return s===null?n:n instanceof sn?i.createLinearRing(s):n instanceof Bt?i.createLineString(s):n instanceof Qt?s.length>0?i.createPoint(s[0]):i.createPoint():n},de.prototype.interfaces_=function(){return[vn.GeometryEditorOperation]},de.prototype.getClass=function(){return de};var Mo=function(){};Mo.prototype.edit=function(n,i){return n instanceof sn?i.createLinearRing(this.edit(n.getCoordinateSequence(),n)):n instanceof Bt?i.createLineString(this.edit(n.getCoordinateSequence(),n)):n instanceof Qt?i.createPoint(this.edit(n.getCoordinateSequence(),n)):n},Mo.prototype.interfaces_=function(){return[vn.GeometryEditorOperation]},Mo.prototype.getClass=function(){return Mo};var he=function(){if(this._dimension=3,this._coordinates=null,arguments.length===1){if(arguments[0]instanceof Array)this._coordinates=arguments[0],this._dimension=3;else if(Number.isInteger(arguments[0])){var n=arguments[0];this._coordinates=new Array(n).fill(null);for(var i=0;i<n;i++)this._coordinates[i]=new L}else if(X(arguments[0],dt)){var s=arguments[0];if(s===null)return this._coordinates=new Array(0).fill(null),null;this._dimension=s.getDimension(),this._coordinates=new Array(s.size()).fill(null);for(var u=0;u<this._coordinates.length;u++)this._coordinates[u]=s.getCoordinateCopy(u)}}else if(arguments.length===2){if(arguments[0]instanceof Array&&Number.isInteger(arguments[1])){var c=arguments[0],m=arguments[1];this._coordinates=c,this._dimension=m,c===null&&(this._coordinates=new Array(0).fill(null))}else if(Number.isInteger(arguments[0])&&Number.isInteger(arguments[1])){var E=arguments[0],A=arguments[1];this._coordinates=new Array(E).fill(null),this._dimension=A;for(var U=0;U<E;U++)this._coordinates[U]=new L}}},ro={serialVersionUID:{configurable:!0}};he.prototype.setOrdinate=function(n,i,s){switch(i){case dt.X:this._coordinates[n].x=s;break;case dt.Y:this._coordinates[n].y=s;break;case dt.Z:this._coordinates[n].z=s;break;default:throw new C(\\\"invalid ordinateIndex\\\")}},he.prototype.size=function(){return this._coordinates.length},he.prototype.getOrdinate=function(n,i){switch(i){case dt.X:return this._coordinates[n].x;case dt.Y:return this._coordinates[n].y;case dt.Z:return this._coordinates[n].z}return S.NaN},he.prototype.getCoordinate=function(){if(arguments.length===1){var n=arguments[0];return this._coordinates[n]}if(arguments.length===2){var i=arguments[0],s=arguments[1];s.x=this._coordinates[i].x,s.y=this._coordinates[i].y,s.z=this._coordinates[i].z}},he.prototype.getCoordinateCopy=function(n){return new L(this._coordinates[n])},he.prototype.getDimension=function(){return this._dimension},he.prototype.getX=function(n){return this._coordinates[n].x},he.prototype.clone=function(){for(var n=new Array(this.size()).fill(null),i=0;i<this._coordinates.length;i++)n[i]=this._coordinates[i].clone();return new he(n,this._dimension)},he.prototype.expandEnvelope=function(n){for(var i=0;i<this._coordinates.length;i++)n.expandToInclude(this._coordinates[i]);return n},he.prototype.copy=function(){for(var n=new Array(this.size()).fill(null),i=0;i<this._coordinates.length;i++)n[i]=this._coordinates[i].copy();return new he(n,this._dimension)},he.prototype.toString=function(){if(this._coordinates.length>0){var n=new pt(17*this._coordinates.length);n.append(\\\"(\\\"),n.append(this._coordinates[0]);for(var i=1;i<this._coordinates.length;i++)n.append(\\\", \\\"),n.append(this._coordinates[i]);return n.append(\\\")\\\"),n.toString()}return\\\"()\\\"},he.prototype.getY=function(n){return this._coordinates[n].y},he.prototype.toCoordinateArray=function(){return this._coordinates},he.prototype.interfaces_=function(){return[dt,t]},he.prototype.getClass=function(){return he},ro.serialVersionUID.get=function(){return-0xcb44a778db18e00},Object.defineProperties(he,ro);var ri=function(){},So={serialVersionUID:{configurable:!0},instanceObject:{configurable:!0}};ri.prototype.readResolve=function(){return ri.instance()},ri.prototype.create=function(){if(arguments.length===1){if(arguments[0]instanceof Array){var n=arguments[0];return new he(n)}if(X(arguments[0],dt)){var i=arguments[0];return new he(i)}}else if(arguments.length===2){var s=arguments[0],u=arguments[1];return u>3&&(u=3),u<2?new he(s):new he(s,u)}},ri.prototype.interfaces_=function(){return[nt,t]},ri.prototype.getClass=function(){return ri},ri.instance=function(){return ri.instanceObject},So.serialVersionUID.get=function(){return-0x38e49fa6cf6f2e00},So.instanceObject.get=function(){return new ri},Object.defineProperties(ri,So);var sa=function(n){function i(){n.call(this),this.map_=new Map}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.get=function(s){return this.map_.get(s)||null},i.prototype.put=function(s,u){return this.map_.set(s,u),u},i.prototype.values=function(){for(var s=new j,u=this.map_.values(),c=u.next();!c.done;)s.add(c.value),c=u.next();return s},i.prototype.entrySet=function(){var s=new $n;return this.map_.entries().forEach(function(u){return s.add(u)}),s},i.prototype.size=function(){return this.map_.size()},i}(He),ie=function n(){if(this._modelType=null,this._scale=null,arguments.length===0)this._modelType=n.FLOATING;else if(arguments.length===1){if(arguments[0]instanceof Lr){var i=arguments[0];this._modelType=i,i===n.FIXED&&this.setScale(1)}else if(typeof arguments[0]==\\\"number\\\"){var s=arguments[0];this._modelType=n.FIXED,this.setScale(s)}else if(arguments[0]instanceof n){var u=arguments[0];this._modelType=u._modelType,this._scale=u._scale}}},Bi={serialVersionUID:{configurable:!0},maximumPreciseValue:{configurable:!0}};ie.prototype.equals=function(n){if(!(n instanceof ie))return!1;var i=n;return this._modelType===i._modelType&&this._scale===i._scale},ie.prototype.compareTo=function(n){var i=n,s=this.getMaximumSignificantDigits(),u=i.getMaximumSignificantDigits();return new et(s).compareTo(new et(u))},ie.prototype.getScale=function(){return this._scale},ie.prototype.isFloating=function(){return this._modelType===ie.FLOATING||this._modelType===ie.FLOATING_SINGLE},ie.prototype.getType=function(){return this._modelType},ie.prototype.toString=function(){var n=\\\"UNKNOWN\\\";return this._modelType===ie.FLOATING?n=\\\"Floating\\\":this._modelType===ie.FLOATING_SINGLE?n=\\\"Floating-Single\\\":this._modelType===ie.FIXED&&(n=\\\"Fixed (Scale=\\\"+this.getScale()+\\\")\\\"),n},ie.prototype.makePrecise=function(){if(typeof arguments[0]==\\\"number\\\"){var n=arguments[0];return S.isNaN(n)||this._modelType===ie.FLOATING_SINGLE?n:this._modelType===ie.FIXED?Math.round(n*this._scale)/this._scale:n}if(arguments[0]instanceof L){var i=arguments[0];if(this._modelType===ie.FLOATING)return null;i.x=this.makePrecise(i.x),i.y=this.makePrecise(i.y)}},ie.prototype.getMaximumSignificantDigits=function(){var n=16;return this._modelType===ie.FLOATING?n=16:this._modelType===ie.FLOATING_SINGLE?n=6:this._modelType===ie.FIXED&&(n=1+Math.trunc(Math.ceil(Math.log(this.getScale())/Math.log(10)))),n},ie.prototype.setScale=function(n){this._scale=Math.abs(n)},ie.prototype.interfaces_=function(){return[t,F]},ie.prototype.getClass=function(){return ie},ie.mostPrecise=function(n,i){return n.compareTo(i)>=0?n:i},Bi.serialVersionUID.get=function(){return 7777263578777804e3},Bi.maximumPreciseValue.get=function(){return 9007199254740992},Object.defineProperties(ie,Bi);var Lr=function n(i){this._name=i||null,n.nameToTypeMap.put(i,this)},xr={serialVersionUID:{configurable:!0},nameToTypeMap:{configurable:!0}};Lr.prototype.readResolve=function(){return Lr.nameToTypeMap.get(this._name)},Lr.prototype.toString=function(){return this._name},Lr.prototype.interfaces_=function(){return[t]},Lr.prototype.getClass=function(){return Lr},xr.serialVersionUID.get=function(){return-552860263173159e4},xr.nameToTypeMap.get=function(){return new sa},Object.defineProperties(Lr,xr),ie.Type=Lr,ie.FIXED=new Lr(\\\"FIXED\\\"),ie.FLOATING=new Lr(\\\"FLOATING\\\"),ie.FLOATING_SINGLE=new Lr(\\\"FLOATING SINGLE\\\");var le=function n(){this._precisionModel=new ie,this._SRID=0,this._coordinateSequenceFactory=n.getDefaultCoordinateSequenceFactory(),arguments.length===0||(arguments.length===1?X(arguments[0],nt)?this._coordinateSequenceFactory=arguments[0]:arguments[0]instanceof ie&&(this._precisionModel=arguments[0]):arguments.length===2?(this._precisionModel=arguments[0],this._SRID=arguments[1]):arguments.length===3&&(this._precisionModel=arguments[0],this._SRID=arguments[1],this._coordinateSequenceFactory=arguments[2]))},gl={serialVersionUID:{configurable:!0}};le.prototype.toGeometry=function(n){return n.isNull()?this.createPoint(null):n.getMinX()===n.getMaxX()&&n.getMinY()===n.getMaxY()?this.createPoint(new L(n.getMinX(),n.getMinY())):n.getMinX()===n.getMaxX()||n.getMinY()===n.getMaxY()?this.createLineString([new L(n.getMinX(),n.getMinY()),new L(n.getMaxX(),n.getMaxY())]):this.createPolygon(this.createLinearRing([new L(n.getMinX(),n.getMinY()),new L(n.getMinX(),n.getMaxY()),new L(n.getMaxX(),n.getMaxY()),new L(n.getMaxX(),n.getMinY()),new L(n.getMinX(),n.getMinY())]),null)},le.prototype.createLineString=function(n){return n?n instanceof Array?new Bt(this.getCoordinateSequenceFactory().create(n),this):X(n,dt)?new Bt(n,this):void 0:new Bt(this.getCoordinateSequenceFactory().create([]),this)},le.prototype.createMultiLineString=function(){if(arguments.length===0)return new H(null,this);if(arguments.length===1){var n=arguments[0];return new H(n,this)}},le.prototype.buildGeometry=function(n){for(var i=null,s=!1,u=!1,c=n.iterator();c.hasNext();){var m=c.next(),E=m.getClass();i===null&&(i=E),E!==i&&(s=!0),m.isGeometryCollectionOrDerived()&&(u=!0)}if(i===null)return this.createGeometryCollection();if(s||u)return this.createGeometryCollection(le.toGeometryArray(n));var A=n.iterator().next();if(n.size()>1){if(A instanceof Vt)return this.createMultiPolygon(le.toPolygonArray(n));if(A instanceof Bt)return this.createMultiLineString(le.toLineStringArray(n));if(A instanceof Qt)return this.createMultiPoint(le.toPointArray(n));b.shouldNeverReachHere(\\\"Unhandled class: \\\"+A.getClass().getName())}return A},le.prototype.createMultiPointFromCoords=function(n){return this.createMultiPoint(n!==null?this.getCoordinateSequenceFactory().create(n):null)},le.prototype.createPoint=function(){if(arguments.length===0)return this.createPoint(this.getCoordinateSequenceFactory().create([]));if(arguments.length===1){if(arguments[0]instanceof L){var n=arguments[0];return this.createPoint(n!==null?this.getCoordinateSequenceFactory().create([n]):null)}if(X(arguments[0],dt)){var i=arguments[0];return new Qt(i,this)}}},le.prototype.getCoordinateSequenceFactory=function(){return this._coordinateSequenceFactory},le.prototype.createPolygon=function(){if(arguments.length===0)return new Vt(null,null,this);if(arguments.length===1){if(X(arguments[0],dt)){var n=arguments[0];return this.createPolygon(this.createLinearRing(n))}if(arguments[0]instanceof Array){var i=arguments[0];return this.createPolygon(this.createLinearRing(i))}if(arguments[0]instanceof sn){var s=arguments[0];return this.createPolygon(s,null)}}else if(arguments.length===2){var u=arguments[0],c=arguments[1];return new Vt(u,c,this)}},le.prototype.getSRID=function(){return this._SRID},le.prototype.createGeometryCollection=function(){if(arguments.length===0)return new Vn(null,this);if(arguments.length===1){var n=arguments[0];return new Vn(n,this)}},le.prototype.createGeometry=function(n){return new vn(this).edit(n,{edit:function(){if(arguments.length===2){var i=arguments[0];return this._coordinateSequenceFactory.create(i)}}})},le.prototype.getPrecisionModel=function(){return this._precisionModel},le.prototype.createLinearRing=function(){if(arguments.length===0)return this.createLinearRing(this.getCoordinateSequenceFactory().create([]));if(arguments.length===1){if(arguments[0]instanceof Array){var n=arguments[0];return this.createLinearRing(n!==null?this.getCoordinateSequenceFactory().create(n):null)}if(X(arguments[0],dt)){var i=arguments[0];return new sn(i,this)}}},le.prototype.createMultiPolygon=function(){if(arguments.length===0)return new un(null,this);if(arguments.length===1){var n=arguments[0];return new un(n,this)}},le.prototype.createMultiPoint=function(){if(arguments.length===0)return new fe(null,this);if(arguments.length===1){if(arguments[0]instanceof Array){var n=arguments[0];return new fe(n,this)}if(arguments[0]instanceof Array){var i=arguments[0];return this.createMultiPoint(i!==null?this.getCoordinateSequenceFactory().create(i):null)}if(X(arguments[0],dt)){var s=arguments[0];if(s===null)return this.createMultiPoint(new Array(0).fill(null));for(var u=new Array(s.size()).fill(null),c=0;c<s.size();c++){var m=this.getCoordinateSequenceFactory().create(1,s.getDimension());It.copy(s,c,m,0,1),u[c]=this.createPoint(m)}return this.createMultiPoint(u)}}},le.prototype.interfaces_=function(){return[t]},le.prototype.getClass=function(){return le},le.toMultiPolygonArray=function(n){var i=new Array(n.size()).fill(null);return n.toArray(i)},le.toGeometryArray=function(n){if(n===null)return null;var i=new Array(n.size()).fill(null);return n.toArray(i)},le.getDefaultCoordinateSequenceFactory=function(){return ri.instance()},le.toMultiLineStringArray=function(n){var i=new Array(n.size()).fill(null);return n.toArray(i)},le.toLineStringArray=function(n){var i=new Array(n.size()).fill(null);return n.toArray(i)},le.toMultiPointArray=function(n){var i=new Array(n.size()).fill(null);return n.toArray(i)},le.toLinearRingArray=function(n){var i=new Array(n.size()).fill(null);return n.toArray(i)},le.toPointArray=function(n){var i=new Array(n.size()).fill(null);return n.toArray(i)},le.toPolygonArray=function(n){var i=new Array(n.size()).fill(null);return n.toArray(i)},le.createPointFromInternalCoord=function(n,i){return i.getPrecisionModel().makePrecise(n),i.getFactory().createPoint(n)},gl.serialVersionUID.get=function(){return-6820524753094096e3},Object.defineProperties(le,gl);var yl=[\\\"Point\\\",\\\"MultiPoint\\\",\\\"LineString\\\",\\\"MultiLineString\\\",\\\"Polygon\\\",\\\"MultiPolygon\\\"],vl=function(n){this.geometryFactory=n||new le};vl.prototype.read=function(n){var i,s=(i=typeof n==\\\"string\\\"?JSON.parse(n):n).type;if(!wi[s])throw new Error(\\\"Unknown GeoJSON type: \\\"+i.type);return yl.indexOf(s)!==-1?wi[s].apply(this,[i.coordinates]):s===\\\"GeometryCollection\\\"?wi[s].apply(this,[i.geometries]):wi[s].apply(this,[i])},vl.prototype.write=function(n){var i=n.getGeometryType();if(!io[i])throw new Error(\\\"Geometry is not supported\\\");return io[i].apply(this,[n])};var wi={Feature:function(n){var i={};for(var s in n)i[s]=n[s];if(n.geometry){var u=n.geometry.type;if(!wi[u])throw new Error(\\\"Unknown GeoJSON type: \\\"+n.type);i.geometry=this.read(n.geometry)}return n.bbox&&(i.bbox=wi.bbox.apply(this,[n.bbox])),i},FeatureCollection:function(n){var i={};if(n.features){i.features=[];for(var s=0;s<n.features.length;++s)i.features.push(this.read(n.features[s]))}return n.bbox&&(i.bbox=this.parse.bbox.apply(this,[n.bbox])),i},coordinates:function(n){for(var i=[],s=0;s<n.length;++s){var u=n[s];i.push(new L(u[0],u[1]))}return i},bbox:function(n){return this.geometryFactory.createLinearRing([new L(n[0],n[1]),new L(n[2],n[1]),new L(n[2],n[3]),new L(n[0],n[3]),new L(n[0],n[1])])},Point:function(n){var i=new L(n[0],n[1]);return this.geometryFactory.createPoint(i)},MultiPoint:function(n){for(var i=[],s=0;s<n.length;++s)i.push(wi.Point.apply(this,[n[s]]));return this.geometryFactory.createMultiPoint(i)},LineString:function(n){var i=wi.coordinates.apply(this,[n]);return this.geometryFactory.createLineString(i)},MultiLineString:function(n){for(var i=[],s=0;s<n.length;++s)i.push(wi.LineString.apply(this,[n[s]]));return this.geometryFactory.createMultiLineString(i)},Polygon:function(n){for(var i=wi.coordinates.apply(this,[n[0]]),s=this.geometryFactory.createLinearRing(i),u=[],c=1;c<n.length;++c){var m=n[c],E=wi.coordinates.apply(this,[m]),A=this.geometryFactory.createLinearRing(E);u.push(A)}return this.geometryFactory.createPolygon(s,u)},MultiPolygon:function(n){for(var i=[],s=0;s<n.length;++s){var u=n[s];i.push(wi.Polygon.apply(this,[u]))}return this.geometryFactory.createMultiPolygon(i)},GeometryCollection:function(n){for(var i=[],s=0;s<n.length;++s){var u=n[s];i.push(this.read(u))}return this.geometryFactory.createGeometryCollection(i)}},io={coordinate:function(n){return[n.x,n.y]},Point:function(n){return{type:\\\"Point\\\",coordinates:io.coordinate.apply(this,[n.getCoordinate()])}},MultiPoint:function(n){for(var i=[],s=0;s<n._geometries.length;++s){var u=n._geometries[s],c=io.Point.apply(this,[u]);i.push(c.coordinates)}return{type:\\\"MultiPoint\\\",coordinates:i}},LineString:function(n){for(var i=[],s=n.getCoordinates(),u=0;u<s.length;++u){var c=s[u];i.push(io.coordinate.apply(this,[c]))}return{type:\\\"LineString\\\",coordinates:i}},MultiLineString:function(n){for(var i=[],s=0;s<n._geometries.length;++s){var u=n._geometries[s],c=io.LineString.apply(this,[u]);i.push(c.coordinates)}return{type:\\\"MultiLineString\\\",coordinates:i}},Polygon:function(n){var i=[],s=io.LineString.apply(this,[n._shell]);i.push(s.coordinates);for(var u=0;u<n._holes.length;++u){var c=n._holes[u],m=io.LineString.apply(this,[c]);i.push(m.coordinates)}return{type:\\\"Polygon\\\",coordinates:i}},MultiPolygon:function(n){for(var i=[],s=0;s<n._geometries.length;++s){var u=n._geometries[s],c=io.Polygon.apply(this,[u]);i.push(c.coordinates)}return{type:\\\"MultiPolygon\\\",coordinates:i}},GeometryCollection:function(n){for(var i=[],s=0;s<n._geometries.length;++s){var u=n._geometries[s],c=u.getGeometryType();i.push(io[c].apply(this,[u]))}return{type:\\\"GeometryCollection\\\",geometries:i}}},_f=function(n){this.geometryFactory=n||new le,this.precisionModel=this.geometryFactory.getPrecisionModel(),this.parser=new vl(this.geometryFactory)};_f.prototype.read=function(n){var i=this.parser.read(n);return this.precisionModel.getType()===ie.FIXED&&this.reducePrecision(i),i},_f.prototype.reducePrecision=function(n){var i,s;if(n.coordinate)this.precisionModel.makePrecise(n.coordinate);else if(n.points)for(i=0,s=n.points.length;i<s;i++)this.precisionModel.makePrecise(n.points[i]);else if(n.geometries)for(i=0,s=n.geometries.length;i<s;i++)this.reducePrecision(n.geometries[i])};var Wd=function(){this.parser=new vl(this.geometryFactory)};Wd.prototype.write=function(n){return this.parser.write(n)};var bt=function(){},_l={ON:{configurable:!0},LEFT:{configurable:!0},RIGHT:{configurable:!0}};bt.prototype.interfaces_=function(){return[]},bt.prototype.getClass=function(){return bt},bt.opposite=function(n){return n===bt.LEFT?bt.RIGHT:n===bt.RIGHT?bt.LEFT:n},_l.ON.get=function(){return 0},_l.LEFT.get=function(){return 1},_l.RIGHT.get=function(){return 2},Object.defineProperties(bt,_l),(T.prototype=new Error).name=\\\"EmptyStackException\\\",(x.prototype=new wt).add=function(n){return this.array_.push(n),!0},x.prototype.get=function(n){if(n<0||n>=this.size())throw new Error;return this.array_[n]},x.prototype.push=function(n){return this.array_.push(n),n},x.prototype.pop=function(n){if(this.array_.length===0)throw new T;return this.array_.pop()},x.prototype.peek=function(){if(this.array_.length===0)throw new T;return this.array_[this.array_.length-1]},x.prototype.empty=function(){return this.array_.length===0},x.prototype.isEmpty=function(){return this.empty()},x.prototype.search=function(n){return this.array_.indexOf(n)},x.prototype.size=function(){return this.array_.length},x.prototype.toArray=function(){for(var n=[],i=0,s=this.array_.length;i<s;i++)n.push(this.array_[i]);return n};var bi=function(){this._minIndex=-1,this._minCoord=null,this._minDe=null,this._orientedDe=null};bi.prototype.getCoordinate=function(){return this._minCoord},bi.prototype.getRightmostSide=function(n,i){var s=this.getRightmostSideOfSegment(n,i);return s<0&&(s=this.getRightmostSideOfSegment(n,i-1)),s<0&&(this._minCoord=null,this.checkForRightmostCoordinate(n)),s},bi.prototype.findRightmostEdgeAtVertex=function(){var n=this._minDe.getEdge().getCoordinates();b.isTrue(this._minIndex>0&&this._minIndex<n.length,\\\"rightmost point expected to be interior vertex of edge\\\");var i=n[this._minIndex-1],s=n[this._minIndex+1],u=B.computeOrientation(this._minCoord,s,i),c=!1;(i.y<this._minCoord.y&&s.y<this._minCoord.y&&u===B.COUNTERCLOCKWISE||i.y>this._minCoord.y&&s.y>this._minCoord.y&&u===B.CLOCKWISE)&&(c=!0),c&&(this._minIndex=this._minIndex-1)},bi.prototype.getRightmostSideOfSegment=function(n,i){var s=n.getEdge().getCoordinates();if(i<0||i+1>=s.length||s[i].y===s[i+1].y)return-1;var u=bt.LEFT;return s[i].y<s[i+1].y&&(u=bt.RIGHT),u},bi.prototype.getEdge=function(){return this._orientedDe},bi.prototype.checkForRightmostCoordinate=function(n){for(var i=n.getEdge().getCoordinates(),s=0;s<i.length-1;s++)(this._minCoord===null||i[s].x>this._minCoord.x)&&(this._minDe=n,this._minIndex=s,this._minCoord=i[s])},bi.prototype.findRightmostEdgeAtNode=function(){var n=this._minDe.getNode().getEdges();this._minDe=n.getRightmostEdge(),this._minDe.isForward()||(this._minDe=this._minDe.getSym(),this._minIndex=this._minDe.getEdge().getCoordinates().length-1)},bi.prototype.findEdge=function(n){for(var i=n.iterator();i.hasNext();){var s=i.next();s.isForward()&&this.checkForRightmostCoordinate(s)}b.isTrue(this._minIndex!==0||this._minCoord.equals(this._minDe.getCoordinate()),\\\"inconsistency in rightmost processing\\\"),this._minIndex===0?this.findRightmostEdgeAtNode():this.findRightmostEdgeAtVertex(),this._orientedDe=this._minDe,this.getRightmostSide(this._minDe,this._minIndex)===bt.LEFT&&(this._orientedDe=this._minDe.getSym())},bi.prototype.interfaces_=function(){return[]},bi.prototype.getClass=function(){return bi};var oo=function(n){function i(s,u){n.call(this,i.msgWithCoord(s,u)),this.pt=u?new L(u):null,this.name=\\\"TopologyException\\\"}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.getCoordinate=function(){return this.pt},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i.msgWithCoord=function(s,u){return u?s:s+\\\" [ \\\"+u+\\\" ]\\\"},i}($),xl=function(){this.array_=[]};xl.prototype.addLast=function(n){this.array_.push(n)},xl.prototype.removeFirst=function(){return this.array_.shift()},xl.prototype.isEmpty=function(){return this.array_.length===0};var sr=function(){this._finder=null,this._dirEdgeList=new j,this._nodes=new j,this._rightMostCoord=null,this._env=null,this._finder=new bi};sr.prototype.clearVisitedEdges=function(){for(var n=this._dirEdgeList.iterator();n.hasNext();)n.next().setVisited(!1)},sr.prototype.getRightmostCoordinate=function(){return this._rightMostCoord},sr.prototype.computeNodeDepth=function(n){for(var i=null,s=n.getEdges().iterator();s.hasNext();){var u=s.next();if(u.isVisited()||u.getSym().isVisited()){i=u;break}}if(i===null)throw new oo(\\\"unable to find edge to compute depths at \\\"+n.getCoordinate());n.getEdges().computeDepths(i);for(var c=n.getEdges().iterator();c.hasNext();){var m=c.next();m.setVisited(!0),this.copySymDepths(m)}},sr.prototype.computeDepth=function(n){this.clearVisitedEdges();var i=this._finder.getEdge();i.setEdgeDepths(bt.RIGHT,n),this.copySymDepths(i),this.computeDepths(i)},sr.prototype.create=function(n){this.addReachable(n),this._finder.findEdge(this._dirEdgeList),this._rightMostCoord=this._finder.getCoordinate()},sr.prototype.findResultEdges=function(){for(var n=this._dirEdgeList.iterator();n.hasNext();){var i=n.next();i.getDepth(bt.RIGHT)>=1&&i.getDepth(bt.LEFT)<=0&&!i.isInteriorAreaEdge()&&i.setInResult(!0)}},sr.prototype.computeDepths=function(n){var i=new $n,s=new xl,u=n.getNode();for(s.addLast(u),i.add(u),n.setVisited(!0);!s.isEmpty();){var c=s.removeFirst();i.add(c),this.computeNodeDepth(c);for(var m=c.getEdges().iterator();m.hasNext();){var E=m.next().getSym();if(!E.isVisited()){var A=E.getNode();i.contains(A)||(s.addLast(A),i.add(A))}}}},sr.prototype.compareTo=function(n){var i=n;return this._rightMostCoord.x<i._rightMostCoord.x?-1:this._rightMostCoord.x>i._rightMostCoord.x?1:0},sr.prototype.getEnvelope=function(){if(this._env===null){for(var n=new Pt,i=this._dirEdgeList.iterator();i.hasNext();)for(var s=i.next().getEdge().getCoordinates(),u=0;u<s.length-1;u++)n.expandToInclude(s[u]);this._env=n}return this._env},sr.prototype.addReachable=function(n){var i=new x;for(i.add(n);!i.empty();){var s=i.pop();this.add(s,i)}},sr.prototype.copySymDepths=function(n){var i=n.getSym();i.setDepth(bt.LEFT,n.getDepth(bt.RIGHT)),i.setDepth(bt.RIGHT,n.getDepth(bt.LEFT))},sr.prototype.add=function(n,i){n.setVisited(!0),this._nodes.add(n);for(var s=n.getEdges().iterator();s.hasNext();){var u=s.next();this._dirEdgeList.add(u);var c=u.getSym().getNode();c.isVisited()||i.push(c)}},sr.prototype.getNodes=function(){return this._nodes},sr.prototype.getDirectedEdges=function(){return this._dirEdgeList},sr.prototype.interfaces_=function(){return[F]},sr.prototype.getClass=function(){return sr};var hn=function n(){if(this.location=null,arguments.length===1){if(arguments[0]instanceof Array){var i=arguments[0];this.init(i.length)}else if(Number.isInteger(arguments[0])){var s=arguments[0];this.init(1),this.location[bt.ON]=s}else if(arguments[0]instanceof n){var u=arguments[0];if(this.init(u.location.length),u!==null)for(var c=0;c<this.location.length;c++)this.location[c]=u.location[c]}}else if(arguments.length===3){var m=arguments[0],E=arguments[1],A=arguments[2];this.init(3),this.location[bt.ON]=m,this.location[bt.LEFT]=E,this.location[bt.RIGHT]=A}};hn.prototype.setAllLocations=function(n){for(var i=0;i<this.location.length;i++)this.location[i]=n},hn.prototype.isNull=function(){for(var n=0;n<this.location.length;n++)if(this.location[n]!==k.NONE)return!1;return!0},hn.prototype.setAllLocationsIfNull=function(n){for(var i=0;i<this.location.length;i++)this.location[i]===k.NONE&&(this.location[i]=n)},hn.prototype.isLine=function(){return this.location.length===1},hn.prototype.merge=function(n){if(n.location.length>this.location.length){var i=new Array(3).fill(null);i[bt.ON]=this.location[bt.ON],i[bt.LEFT]=k.NONE,i[bt.RIGHT]=k.NONE,this.location=i}for(var s=0;s<this.location.length;s++)this.location[s]===k.NONE&&s<n.location.length&&(this.location[s]=n.location[s])},hn.prototype.getLocations=function(){return this.location},hn.prototype.flip=function(){if(this.location.length<=1)return null;var n=this.location[bt.LEFT];this.location[bt.LEFT]=this.location[bt.RIGHT],this.location[bt.RIGHT]=n},hn.prototype.toString=function(){var n=new pt;return this.location.length>1&&n.append(k.toLocationSymbol(this.location[bt.LEFT])),n.append(k.toLocationSymbol(this.location[bt.ON])),this.location.length>1&&n.append(k.toLocationSymbol(this.location[bt.RIGHT])),n.toString()},hn.prototype.setLocations=function(n,i,s){this.location[bt.ON]=n,this.location[bt.LEFT]=i,this.location[bt.RIGHT]=s},hn.prototype.get=function(n){return n<this.location.length?this.location[n]:k.NONE},hn.prototype.isArea=function(){return this.location.length>1},hn.prototype.isAnyNull=function(){for(var n=0;n<this.location.length;n++)if(this.location[n]===k.NONE)return!0;return!1},hn.prototype.setLocation=function(){if(arguments.length===1){var n=arguments[0];this.setLocation(bt.ON,n)}else if(arguments.length===2){var i=arguments[0],s=arguments[1];this.location[i]=s}},hn.prototype.init=function(n){this.location=new Array(n).fill(null),this.setAllLocations(k.NONE)},hn.prototype.isEqualOnSide=function(n,i){return this.location[i]===n.location[i]},hn.prototype.allPositionsEqual=function(n){for(var i=0;i<this.location.length;i++)if(this.location[i]!==n)return!1;return!0},hn.prototype.interfaces_=function(){return[]},hn.prototype.getClass=function(){return hn};var rn=function n(){if(this.elt=new Array(2).fill(null),arguments.length===1){if(Number.isInteger(arguments[0])){var i=arguments[0];this.elt[0]=new hn(i),this.elt[1]=new hn(i)}else if(arguments[0]instanceof n){var s=arguments[0];this.elt[0]=new hn(s.elt[0]),this.elt[1]=new hn(s.elt[1])}}else if(arguments.length===2){var u=arguments[0],c=arguments[1];this.elt[0]=new hn(k.NONE),this.elt[1]=new hn(k.NONE),this.elt[u].setLocation(c)}else if(arguments.length===3){var m=arguments[0],E=arguments[1],A=arguments[2];this.elt[0]=new hn(m,E,A),this.elt[1]=new hn(m,E,A)}else if(arguments.length===4){var U=arguments[0],Z=arguments[1],ut=arguments[2],ht=arguments[3];this.elt[0]=new hn(k.NONE,k.NONE,k.NONE),this.elt[1]=new hn(k.NONE,k.NONE,k.NONE),this.elt[U].setLocations(Z,ut,ht)}};rn.prototype.getGeometryCount=function(){var n=0;return this.elt[0].isNull()||n++,this.elt[1].isNull()||n++,n},rn.prototype.setAllLocations=function(n,i){this.elt[n].setAllLocations(i)},rn.prototype.isNull=function(n){return this.elt[n].isNull()},rn.prototype.setAllLocationsIfNull=function(){if(arguments.length===1){var n=arguments[0];this.setAllLocationsIfNull(0,n),this.setAllLocationsIfNull(1,n)}else if(arguments.length===2){var i=arguments[0],s=arguments[1];this.elt[i].setAllLocationsIfNull(s)}},rn.prototype.isLine=function(n){return this.elt[n].isLine()},rn.prototype.merge=function(n){for(var i=0;i<2;i++)this.elt[i]===null&&n.elt[i]!==null?this.elt[i]=new hn(n.elt[i]):this.elt[i].merge(n.elt[i])},rn.prototype.flip=function(){this.elt[0].flip(),this.elt[1].flip()},rn.prototype.getLocation=function(){if(arguments.length===1){var n=arguments[0];return this.elt[n].get(bt.ON)}if(arguments.length===2){var i=arguments[0],s=arguments[1];return this.elt[i].get(s)}},rn.prototype.toString=function(){var n=new pt;return this.elt[0]!==null&&(n.append(\\\"A:\\\"),n.append(this.elt[0].toString())),this.elt[1]!==null&&(n.append(\\\" B:\\\"),n.append(this.elt[1].toString())),n.toString()},rn.prototype.isArea=function(){if(arguments.length===0)return this.elt[0].isArea()||this.elt[1].isArea();if(arguments.length===1){var n=arguments[0];return this.elt[n].isArea()}},rn.prototype.isAnyNull=function(n){return this.elt[n].isAnyNull()},rn.prototype.setLocation=function(){if(arguments.length===2){var n=arguments[0],i=arguments[1];this.elt[n].setLocation(bt.ON,i)}else if(arguments.length===3){var s=arguments[0],u=arguments[1],c=arguments[2];this.elt[s].setLocation(u,c)}},rn.prototype.isEqualOnSide=function(n,i){return this.elt[0].isEqualOnSide(n.elt[0],i)&&this.elt[1].isEqualOnSide(n.elt[1],i)},rn.prototype.allPositionsEqual=function(n,i){return this.elt[n].allPositionsEqual(i)},rn.prototype.toLine=function(n){this.elt[n].isArea()&&(this.elt[n]=new hn(this.elt[n].location[0]))},rn.prototype.interfaces_=function(){return[]},rn.prototype.getClass=function(){return rn},rn.toLineLabel=function(n){for(var i=new rn(k.NONE),s=0;s<2;s++)i.setLocation(s,n.getLocation(s));return i};var An=function(){this._startDe=null,this._maxNodeDegree=-1,this._edges=new j,this._pts=new j,this._label=new rn(k.NONE),this._ring=null,this._isHole=null,this._shell=null,this._holes=new j,this._geometryFactory=null;var n=arguments[0],i=arguments[1];this._geometryFactory=i,this.computePoints(n),this.computeRing()};An.prototype.computeRing=function(){if(this._ring!==null)return null;for(var n=new Array(this._pts.size()).fill(null),i=0;i<this._pts.size();i++)n[i]=this._pts.get(i);this._ring=this._geometryFactory.createLinearRing(n),this._isHole=B.isCCW(this._ring.getCoordinates())},An.prototype.isIsolated=function(){return this._label.getGeometryCount()===1},An.prototype.computePoints=function(n){this._startDe=n;var i=n,s=!0;do{if(i===null)throw new oo(\\\"Found null DirectedEdge\\\");if(i.getEdgeRing()===this)throw new oo(\\\"Directed Edge visited twice during ring-building at \\\"+i.getCoordinate());this._edges.add(i);var u=i.getLabel();b.isTrue(u.isArea()),this.mergeLabel(u),this.addPoints(i.getEdge(),i.isForward(),s),s=!1,this.setEdgeRing(i,this),i=this.getNext(i)}while(i!==this._startDe)},An.prototype.getLinearRing=function(){return this._ring},An.prototype.getCoordinate=function(n){return this._pts.get(n)},An.prototype.computeMaxNodeDegree=function(){this._maxNodeDegree=0;var n=this._startDe;do{var i=n.getNode().getEdges().getOutgoingDegree(this);i>this._maxNodeDegree&&(this._maxNodeDegree=i),n=this.getNext(n)}while(n!==this._startDe);this._maxNodeDegree*=2},An.prototype.addPoints=function(n,i,s){var u=n.getCoordinates();if(i){var c=1;s&&(c=0);for(var m=c;m<u.length;m++)this._pts.add(u[m])}else{var E=u.length-2;s&&(E=u.length-1);for(var A=E;A>=0;A--)this._pts.add(u[A])}},An.prototype.isHole=function(){return this._isHole},An.prototype.setInResult=function(){var n=this._startDe;do n.getEdge().setInResult(!0),n=n.getNext();while(n!==this._startDe)},An.prototype.containsPoint=function(n){var i=this.getLinearRing();if(!i.getEnvelopeInternal().contains(n)||!B.isPointInRing(n,i.getCoordinates()))return!1;for(var s=this._holes.iterator();s.hasNext();)if(s.next().containsPoint(n))return!1;return!0},An.prototype.addHole=function(n){this._holes.add(n)},An.prototype.isShell=function(){return this._shell===null},An.prototype.getLabel=function(){return this._label},An.prototype.getEdges=function(){return this._edges},An.prototype.getMaxNodeDegree=function(){return this._maxNodeDegree<0&&this.computeMaxNodeDegree(),this._maxNodeDegree},An.prototype.getShell=function(){return this._shell},An.prototype.mergeLabel=function(){if(arguments.length===1){var n=arguments[0];this.mergeLabel(n,0),this.mergeLabel(n,1)}else if(arguments.length===2){var i=arguments[0],s=arguments[1],u=i.getLocation(s,bt.RIGHT);if(u===k.NONE)return null;if(this._label.getLocation(s)===k.NONE)return this._label.setLocation(s,u),null}},An.prototype.setShell=function(n){this._shell=n,n!==null&&n.addHole(this)},An.prototype.toPolygon=function(n){for(var i=new Array(this._holes.size()).fill(null),s=0;s<this._holes.size();s++)i[s]=this._holes.get(s).getLinearRing();return n.createPolygon(this.getLinearRing(),i)},An.prototype.interfaces_=function(){return[]},An.prototype.getClass=function(){return An};var A1=function(n){function i(){var s=arguments[0],u=arguments[1];n.call(this,s,u)}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.setEdgeRing=function(s,u){s.setMinEdgeRing(u)},i.prototype.getNext=function(s){return s.getNextMin()},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i}(An),C1=function(n){function i(){var s=arguments[0],u=arguments[1];n.call(this,s,u)}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.buildMinimalRings=function(){var s=new j,u=this._startDe;do{if(u.getMinEdgeRing()===null){var c=new A1(u,this._geometryFactory);s.add(c)}u=u.getNext()}while(u!==this._startDe);return s},i.prototype.setEdgeRing=function(s,u){s.setEdgeRing(u)},i.prototype.linkDirectedEdgesForMinimalEdgeRings=function(){var s=this._startDe;do s.getNode().getEdges().linkMinimalDirectedEdges(this),s=s.getNext();while(s!==this._startDe)},i.prototype.getNext=function(s){return s.getNext()},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i}(An),Hr=function(){if(this._label=null,this._isInResult=!1,this._isCovered=!1,this._isCoveredSet=!1,this._isVisited=!1,arguments.length!==0){if(arguments.length===1){var n=arguments[0];this._label=n}}};Hr.prototype.setVisited=function(n){this._isVisited=n},Hr.prototype.setInResult=function(n){this._isInResult=n},Hr.prototype.isCovered=function(){return this._isCovered},Hr.prototype.isCoveredSet=function(){return this._isCoveredSet},Hr.prototype.setLabel=function(n){this._label=n},Hr.prototype.getLabel=function(){return this._label},Hr.prototype.setCovered=function(n){this._isCovered=n,this._isCoveredSet=!0},Hr.prototype.updateIM=function(n){b.isTrue(this._label.getGeometryCount()>=2,\\\"found partial label\\\"),this.computeIM(n)},Hr.prototype.isInResult=function(){return this._isInResult},Hr.prototype.isVisited=function(){return this._isVisited},Hr.prototype.interfaces_=function(){return[]},Hr.prototype.getClass=function(){return Hr};var El=function(n){function i(){n.call(this),this._coord=null,this._edges=null;var s=arguments[0],u=arguments[1];this._coord=s,this._edges=u,this._label=new rn(0,k.NONE)}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.isIncidentEdgeInResult=function(){for(var s=this.getEdges().getEdges().iterator();s.hasNext();)if(s.next().getEdge().isInResult())return!0;return!1},i.prototype.isIsolated=function(){return this._label.getGeometryCount()===1},i.prototype.getCoordinate=function(){return this._coord},i.prototype.print=function(s){s.println(\\\"node \\\"+this._coord+\\\" lbl: \\\"+this._label)},i.prototype.computeIM=function(s){},i.prototype.computeMergedLocation=function(s,u){var c=k.NONE;if(c=this._label.getLocation(u),!s.isNull(u)){var m=s.getLocation(u);c!==k.BOUNDARY&&(c=m)}return c},i.prototype.setLabel=function(){if(arguments.length!==2)return n.prototype.setLabel.apply(this,arguments);var s=arguments[0],u=arguments[1];this._label===null?this._label=new rn(s,u):this._label.setLocation(s,u)},i.prototype.getEdges=function(){return this._edges},i.prototype.mergeLabel=function(){if(arguments[0]instanceof i){var s=arguments[0];this.mergeLabel(s._label)}else if(arguments[0]instanceof rn)for(var u=arguments[0],c=0;c<2;c++){var m=this.computeMergedLocation(u,c);this._label.getLocation(c)===k.NONE&&this._label.setLocation(c,m)}},i.prototype.add=function(s){this._edges.insert(s),s.setNode(this)},i.prototype.setLabelBoundary=function(s){if(this._label===null)return null;var u=k.NONE;this._label!==null&&(u=this._label.getLocation(s));var c=null;switch(u){case k.BOUNDARY:c=k.INTERIOR;break;case k.INTERIOR:default:c=k.BOUNDARY}this._label.setLocation(s,c)},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i}(Hr),Ti=function(){this.nodeMap=new _,this.nodeFact=null;var n=arguments[0];this.nodeFact=n};Ti.prototype.find=function(n){return this.nodeMap.get(n)},Ti.prototype.addNode=function(){if(arguments[0]instanceof L){var n=arguments[0],i=this.nodeMap.get(n);return i===null&&(i=this.nodeFact.createNode(n),this.nodeMap.put(n,i)),i}if(arguments[0]instanceof El){var s=arguments[0],u=this.nodeMap.get(s.getCoordinate());return u===null?(this.nodeMap.put(s.getCoordinate(),s),s):(u.mergeLabel(s),u)}},Ti.prototype.print=function(n){for(var i=this.iterator();i.hasNext();)i.next().print(n)},Ti.prototype.iterator=function(){return this.nodeMap.values().iterator()},Ti.prototype.values=function(){return this.nodeMap.values()},Ti.prototype.getBoundaryNodes=function(n){for(var i=new j,s=this.iterator();s.hasNext();){var u=s.next();u.getLabel().getLocation(n)===k.BOUNDARY&&i.add(u)}return i},Ti.prototype.add=function(n){var i=n.getCoordinate();this.addNode(i).add(n)},Ti.prototype.interfaces_=function(){return[]},Ti.prototype.getClass=function(){return Ti};var ln=function(){},yu={NE:{configurable:!0},NW:{configurable:!0},SW:{configurable:!0},SE:{configurable:!0}};ln.prototype.interfaces_=function(){return[]},ln.prototype.getClass=function(){return ln},ln.isNorthern=function(n){return n===ln.NE||n===ln.NW},ln.isOpposite=function(n,i){return n===i?!1:(n-i+4)%4===2},ln.commonHalfPlane=function(n,i){if(n===i)return n;if((n-i+4)%4===2)return-1;var s=n<i?n:i;return s===0&&(n>i?n:i)===3?3:s},ln.isInHalfPlane=function(n,i){return i===ln.SE?n===ln.SE||n===ln.SW:n===i||n===i+1},ln.quadrant=function(){if(typeof arguments[0]==\\\"number\\\"&&typeof arguments[1]==\\\"number\\\"){var n=arguments[0],i=arguments[1];if(n===0&&i===0)throw new C(\\\"Cannot compute the quadrant for point ( \\\"+n+\\\", \\\"+i+\\\" )\\\");return n>=0?i>=0?ln.NE:ln.SE:i>=0?ln.NW:ln.SW}if(arguments[0]instanceof L&&arguments[1]instanceof L){var s=arguments[0],u=arguments[1];if(u.x===s.x&&u.y===s.y)throw new C(\\\"Cannot compute the quadrant for two identical points \\\"+s);return u.x>=s.x?u.y>=s.y?ln.NE:ln.SE:u.y>=s.y?ln.NW:ln.SW}},yu.NE.get=function(){return 0},yu.NW.get=function(){return 1},yu.SW.get=function(){return 2},yu.SE.get=function(){return 3},Object.defineProperties(ln,yu);var Kn=function(){if(this._edge=null,this._label=null,this._node=null,this._p0=null,this._p1=null,this._dx=null,this._dy=null,this._quadrant=null,arguments.length===1){var n=arguments[0];this._edge=n}else if(arguments.length===3){var i=arguments[0],s=arguments[1],u=arguments[2];this._edge=i,this.init(s,u),this._label=null}else if(arguments.length===4){var c=arguments[0],m=arguments[1],E=arguments[2],A=arguments[3];this._edge=c,this.init(m,E),this._label=A}};Kn.prototype.compareDirection=function(n){return this._dx===n._dx&&this._dy===n._dy?0:this._quadrant>n._quadrant?1:this._quadrant<n._quadrant?-1:B.computeOrientation(n._p0,n._p1,this._p1)},Kn.prototype.getDy=function(){return this._dy},Kn.prototype.getCoordinate=function(){return this._p0},Kn.prototype.setNode=function(n){this._node=n},Kn.prototype.print=function(n){var i=Math.atan2(this._dy,this._dx),s=this.getClass().getName(),u=s.lastIndexOf(\\\".\\\"),c=s.substring(u+1);n.print(\\\" \\\"+c+\\\": \\\"+this._p0+\\\" - \\\"+this._p1+\\\" \\\"+this._quadrant+\\\":\\\"+i+\\\" \\\"+this._label)},Kn.prototype.compareTo=function(n){var i=n;return this.compareDirection(i)},Kn.prototype.getDirectedCoordinate=function(){return this._p1},Kn.prototype.getDx=function(){return this._dx},Kn.prototype.getLabel=function(){return this._label},Kn.prototype.getEdge=function(){return this._edge},Kn.prototype.getQuadrant=function(){return this._quadrant},Kn.prototype.getNode=function(){return this._node},Kn.prototype.toString=function(){var n=Math.atan2(this._dy,this._dx),i=this.getClass().getName(),s=i.lastIndexOf(\\\".\\\");return\\\" \\\"+i.substring(s+1)+\\\": \\\"+this._p0+\\\" - \\\"+this._p1+\\\" \\\"+this._quadrant+\\\":\\\"+n+\\\" \\\"+this._label},Kn.prototype.computeLabel=function(n){},Kn.prototype.init=function(n,i){this._p0=n,this._p1=i,this._dx=i.x-n.x,this._dy=i.y-n.y,this._quadrant=ln.quadrant(this._dx,this._dy),b.isTrue(!(this._dx===0&&this._dy===0),\\\"EdgeEnd with identical endpoints found\\\")},Kn.prototype.interfaces_=function(){return[F]},Kn.prototype.getClass=function(){return Kn};var xf=function(n){function i(){var s=arguments[0],u=arguments[1];if(n.call(this,s),this._isForward=null,this._isInResult=!1,this._isVisited=!1,this._sym=null,this._next=null,this._nextMin=null,this._edgeRing=null,this._minEdgeRing=null,this._depth=[0,-999,-999],this._isForward=u,u)this.init(s.getCoordinate(0),s.getCoordinate(1));else{var c=s.getNumPoints()-1;this.init(s.getCoordinate(c),s.getCoordinate(c-1))}this.computeDirectedLabel()}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.getNextMin=function(){return this._nextMin},i.prototype.getDepth=function(s){return this._depth[s]},i.prototype.setVisited=function(s){this._isVisited=s},i.prototype.computeDirectedLabel=function(){this._label=new rn(this._edge.getLabel()),this._isForward||this._label.flip()},i.prototype.getNext=function(){return this._next},i.prototype.setDepth=function(s,u){if(this._depth[s]!==-999&&this._depth[s]!==u)throw new oo(\\\"assigned depths do not match\\\",this.getCoordinate());this._depth[s]=u},i.prototype.isInteriorAreaEdge=function(){for(var s=!0,u=0;u<2;u++)this._label.isArea(u)&&this._label.getLocation(u,bt.LEFT)===k.INTERIOR&&this._label.getLocation(u,bt.RIGHT)===k.INTERIOR||(s=!1);return s},i.prototype.setNextMin=function(s){this._nextMin=s},i.prototype.print=function(s){n.prototype.print.call(this,s),s.print(\\\" \\\"+this._depth[bt.LEFT]+\\\"/\\\"+this._depth[bt.RIGHT]),s.print(\\\" (\\\"+this.getDepthDelta()+\\\")\\\"),this._isInResult&&s.print(\\\" inResult\\\")},i.prototype.setMinEdgeRing=function(s){this._minEdgeRing=s},i.prototype.isLineEdge=function(){var s=this._label.isLine(0)||this._label.isLine(1),u=!this._label.isArea(0)||this._label.allPositionsEqual(0,k.EXTERIOR),c=!this._label.isArea(1)||this._label.allPositionsEqual(1,k.EXTERIOR);return s&&u&&c},i.prototype.setEdgeRing=function(s){this._edgeRing=s},i.prototype.getMinEdgeRing=function(){return this._minEdgeRing},i.prototype.getDepthDelta=function(){var s=this._edge.getDepthDelta();return this._isForward||(s=-s),s},i.prototype.setInResult=function(s){this._isInResult=s},i.prototype.getSym=function(){return this._sym},i.prototype.isForward=function(){return this._isForward},i.prototype.getEdge=function(){return this._edge},i.prototype.printEdge=function(s){this.print(s),s.print(\\\" \\\"),this._isForward?this._edge.print(s):this._edge.printReverse(s)},i.prototype.setSym=function(s){this._sym=s},i.prototype.setVisitedEdge=function(s){this.setVisited(s),this._sym.setVisited(s)},i.prototype.setEdgeDepths=function(s,u){var c=this.getEdge().getDepthDelta();this._isForward||(c=-c);var m=1;s===bt.LEFT&&(m=-1);var E=bt.opposite(s),A=u+c*m;this.setDepth(s,u),this.setDepth(E,A)},i.prototype.getEdgeRing=function(){return this._edgeRing},i.prototype.isInResult=function(){return this._isInResult},i.prototype.setNext=function(s){this._next=s},i.prototype.isVisited=function(){return this._isVisited},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i.depthFactor=function(s,u){return s===k.EXTERIOR&&u===k.INTERIOR?1:s===k.INTERIOR&&u===k.EXTERIOR?-1:0},i}(Kn),aa=function(){};aa.prototype.createNode=function(n){return new El(n,null)},aa.prototype.interfaces_=function(){return[]},aa.prototype.getClass=function(){return aa};var _n=function(){if(this._edges=new j,this._nodes=null,this._edgeEndList=new j,arguments.length===0)this._nodes=new Ti(new aa);else if(arguments.length===1){var n=arguments[0];this._nodes=new Ti(n)}};_n.prototype.printEdges=function(n){n.println(\\\"Edges:\\\");for(var i=0;i<this._edges.size();i++){n.println(\\\"edge \\\"+i+\\\":\\\");var s=this._edges.get(i);s.print(n),s.eiList.print(n)}},_n.prototype.find=function(n){return this._nodes.find(n)},_n.prototype.addNode=function(){if(arguments[0]instanceof El){var n=arguments[0];return this._nodes.addNode(n)}if(arguments[0]instanceof L){var i=arguments[0];return this._nodes.addNode(i)}},_n.prototype.getNodeIterator=function(){return this._nodes.iterator()},_n.prototype.linkResultDirectedEdges=function(){for(var n=this._nodes.iterator();n.hasNext();)n.next().getEdges().linkResultDirectedEdges()},_n.prototype.debugPrintln=function(n){Nt.out.println(n)},_n.prototype.isBoundaryNode=function(n,i){var s=this._nodes.find(i);if(s===null)return!1;var u=s.getLabel();return u!==null&&u.getLocation(n)===k.BOUNDARY},_n.prototype.linkAllDirectedEdges=function(){for(var n=this._nodes.iterator();n.hasNext();)n.next().getEdges().linkAllDirectedEdges()},_n.prototype.matchInSameDirection=function(n,i,s,u){return!!n.equals(s)&&B.computeOrientation(n,i,u)===B.COLLINEAR&&ln.quadrant(n,i)===ln.quadrant(s,u)},_n.prototype.getEdgeEnds=function(){return this._edgeEndList},_n.prototype.debugPrint=function(n){Nt.out.print(n)},_n.prototype.getEdgeIterator=function(){return this._edges.iterator()},_n.prototype.findEdgeInSameDirection=function(n,i){for(var s=0;s<this._edges.size();s++){var u=this._edges.get(s),c=u.getCoordinates();if(this.matchInSameDirection(n,i,c[0],c[1])||this.matchInSameDirection(n,i,c[c.length-1],c[c.length-2]))return u}return null},_n.prototype.insertEdge=function(n){this._edges.add(n)},_n.prototype.findEdgeEnd=function(n){for(var i=this.getEdgeEnds().iterator();i.hasNext();){var s=i.next();if(s.getEdge()===n)return s}return null},_n.prototype.addEdges=function(n){for(var i=n.iterator();i.hasNext();){var s=i.next();this._edges.add(s);var u=new xf(s,!0),c=new xf(s,!1);u.setSym(c),c.setSym(u),this.add(u),this.add(c)}},_n.prototype.add=function(n){this._nodes.add(n),this._edgeEndList.add(n)},_n.prototype.getNodes=function(){return this._nodes.values()},_n.prototype.findEdge=function(n,i){for(var s=0;s<this._edges.size();s++){var u=this._edges.get(s),c=u.getCoordinates();if(n.equals(c[0])&&i.equals(c[1]))return u}return null},_n.prototype.interfaces_=function(){return[]},_n.prototype.getClass=function(){return _n},_n.linkResultDirectedEdges=function(n){for(var i=n.iterator();i.hasNext();)i.next().getEdges().linkResultDirectedEdges()};var Nr=function(){this._geometryFactory=null,this._shellList=new j;var n=arguments[0];this._geometryFactory=n};Nr.prototype.sortShellsAndHoles=function(n,i,s){for(var u=n.iterator();u.hasNext();){var c=u.next();c.isHole()?s.add(c):i.add(c)}},Nr.prototype.computePolygons=function(n){for(var i=new j,s=n.iterator();s.hasNext();){var u=s.next().toPolygon(this._geometryFactory);i.add(u)}return i},Nr.prototype.placeFreeHoles=function(n,i){for(var s=i.iterator();s.hasNext();){var u=s.next();if(u.getShell()===null){var c=this.findEdgeRingContaining(u,n);if(c===null)throw new oo(\\\"unable to assign hole to a shell\\\",u.getCoordinate(0));u.setShell(c)}}},Nr.prototype.buildMinimalEdgeRings=function(n,i,s){for(var u=new j,c=n.iterator();c.hasNext();){var m=c.next();if(m.getMaxNodeDegree()>2){m.linkDirectedEdgesForMinimalEdgeRings();var E=m.buildMinimalRings(),A=this.findShell(E);A!==null?(this.placePolygonHoles(A,E),i.add(A)):s.addAll(E)}else u.add(m)}return u},Nr.prototype.containsPoint=function(n){for(var i=this._shellList.iterator();i.hasNext();)if(i.next().containsPoint(n))return!0;return!1},Nr.prototype.buildMaximalEdgeRings=function(n){for(var i=new j,s=n.iterator();s.hasNext();){var u=s.next();if(u.isInResult()&&u.getLabel().isArea()&&u.getEdgeRing()===null){var c=new C1(u,this._geometryFactory);i.add(c),c.setInResult()}}return i},Nr.prototype.placePolygonHoles=function(n,i){for(var s=i.iterator();s.hasNext();){var u=s.next();u.isHole()&&u.setShell(n)}},Nr.prototype.getPolygons=function(){return this.computePolygons(this._shellList)},Nr.prototype.findEdgeRingContaining=function(n,i){for(var s=n.getLinearRing(),u=s.getEnvelopeInternal(),c=s.getCoordinateN(0),m=null,E=null,A=i.iterator();A.hasNext();){var U=A.next(),Z=U.getLinearRing(),ut=Z.getEnvelopeInternal();m!==null&&(E=m.getLinearRing().getEnvelopeInternal());var ht=!1;ut.contains(u)&&B.isPointInRing(c,Z.getCoordinates())&&(ht=!0),ht&&(m===null||E.contains(ut))&&(m=U)}return m},Nr.prototype.findShell=function(n){for(var i=0,s=null,u=n.iterator();u.hasNext();){var c=u.next();c.isHole()||(s=c,i++)}return b.isTrue(i<=1,\\\"found two shells in MinimalEdgeRing list\\\"),s},Nr.prototype.add=function(){if(arguments.length===1){var n=arguments[0];this.add(n.getEdgeEnds(),n.getNodes())}else if(arguments.length===2){var i=arguments[0],s=arguments[1];_n.linkResultDirectedEdges(s);var u=this.buildMaximalEdgeRings(i),c=new j,m=this.buildMinimalEdgeRings(u,this._shellList,c);this.sortShellsAndHoles(m,this._shellList,c),this.placeFreeHoles(this._shellList,c)}},Nr.prototype.interfaces_=function(){return[]},Nr.prototype.getClass=function(){return Nr};var ua=function(){};ua.prototype.getBounds=function(){},ua.prototype.interfaces_=function(){return[]},ua.prototype.getClass=function(){return ua};var di=function(){this._bounds=null,this._item=null;var n=arguments[0],i=arguments[1];this._bounds=n,this._item=i};di.prototype.getItem=function(){return this._item},di.prototype.getBounds=function(){return this._bounds},di.prototype.interfaces_=function(){return[ua,t]},di.prototype.getClass=function(){return di};var so=function(){this._size=null,this._items=null,this._size=0,this._items=new j,this._items.add(null)};so.prototype.poll=function(){if(this.isEmpty())return null;var n=this._items.get(1);return this._items.set(1,this._items.get(this._size)),this._size-=1,this.reorder(1),n},so.prototype.size=function(){return this._size},so.prototype.reorder=function(n){for(var i=null,s=this._items.get(n);2*n<=this._size&&((i=2*n)!==this._size&&this._items.get(i+1).compareTo(this._items.get(i))<0&&i++,this._items.get(i).compareTo(s)<0);n=i)this._items.set(n,this._items.get(i));this._items.set(n,s)},so.prototype.clear=function(){this._size=0,this._items.clear()},so.prototype.isEmpty=function(){return this._size===0},so.prototype.add=function(n){this._items.add(null),this._size+=1;var i=this._size;for(this._items.set(0,n);n.compareTo(this._items.get(Math.trunc(i/2)))<0;i/=2)this._items.set(i,this._items.get(Math.trunc(i/2)));this._items.set(i,n)},so.prototype.interfaces_=function(){return[]},so.prototype.getClass=function(){return so};var wo=function(){};wo.prototype.visitItem=function(n){},wo.prototype.interfaces_=function(){return[]},wo.prototype.getClass=function(){return wo};var As=function(){};As.prototype.insert=function(n,i){},As.prototype.remove=function(n,i){},As.prototype.query=function(){},As.prototype.interfaces_=function(){return[]},As.prototype.getClass=function(){return As};var Nn=function(){if(this._childBoundables=new j,this._bounds=null,this._level=null,arguments.length!==0){if(arguments.length===1){var n=arguments[0];this._level=n}}},qd={serialVersionUID:{configurable:!0}};Nn.prototype.getLevel=function(){return this._level},Nn.prototype.size=function(){return this._childBoundables.size()},Nn.prototype.getChildBoundables=function(){return this._childBoundables},Nn.prototype.addChildBoundable=function(n){b.isTrue(this._bounds===null),this._childBoundables.add(n)},Nn.prototype.isEmpty=function(){return this._childBoundables.isEmpty()},Nn.prototype.getBounds=function(){return this._bounds===null&&(this._bounds=this.computeBounds()),this._bounds},Nn.prototype.interfaces_=function(){return[ua,t]},Nn.prototype.getClass=function(){return Nn},qd.serialVersionUID.get=function(){return 6493722185909574e3},Object.defineProperties(Nn,qd);var mi=function(){};mi.reverseOrder=function(){return{compare:function(n,i){return i.compareTo(n)}}},mi.min=function(n){return mi.sort(n),n.get(0)},mi.sort=function(n,i){var s=n.toArray();i?Ui.sort(s,i):Ui.sort(s);for(var u=n.iterator(),c=0,m=s.length;c<m;c++)u.next(),u.set(s[c])},mi.singletonList=function(n){var i=new j;return i.add(n),i};var Cn=function(){this._boundable1=null,this._boundable2=null,this._distance=null,this._itemDistance=null;var n=arguments[0],i=arguments[1],s=arguments[2];this._boundable1=n,this._boundable2=i,this._itemDistance=s,this._distance=this.distance()};Cn.prototype.expandToQueue=function(n,i){var s=Cn.isComposite(this._boundable1),u=Cn.isComposite(this._boundable2);if(s&&u)return Cn.area(this._boundable1)>Cn.area(this._boundable2)?(this.expand(this._boundable1,this._boundable2,n,i),null):(this.expand(this._boundable2,this._boundable1,n,i),null);if(s)return this.expand(this._boundable1,this._boundable2,n,i),null;if(u)return this.expand(this._boundable2,this._boundable1,n,i),null;throw new C(\\\"neither boundable is composite\\\")},Cn.prototype.isLeaves=function(){return!(Cn.isComposite(this._boundable1)||Cn.isComposite(this._boundable2))},Cn.prototype.compareTo=function(n){var i=n;return this._distance<i._distance?-1:this._distance>i._distance?1:0},Cn.prototype.expand=function(n,i,s,u){for(var c=n.getChildBoundables().iterator();c.hasNext();){var m=c.next(),E=new Cn(m,i,this._itemDistance);E.getDistance()<u&&s.add(E)}},Cn.prototype.getBoundable=function(n){return n===0?this._boundable1:this._boundable2},Cn.prototype.getDistance=function(){return this._distance},Cn.prototype.distance=function(){return this.isLeaves()?this._itemDistance.distance(this._boundable1,this._boundable2):this._boundable1.getBounds().distance(this._boundable2.getBounds())},Cn.prototype.interfaces_=function(){return[F]},Cn.prototype.getClass=function(){return Cn},Cn.area=function(n){return n.getBounds().getArea()},Cn.isComposite=function(n){return n instanceof Nn};var zn=function n(){if(this._root=null,this._built=!1,this._itemBoundables=new j,this._nodeCapacity=null,arguments.length===0){var i=n.DEFAULT_NODE_CAPACITY;this._nodeCapacity=i}else if(arguments.length===1){var s=arguments[0];b.isTrue(s>1,\\\"Node capacity must be greater than 1\\\"),this._nodeCapacity=s}},Ml={IntersectsOp:{configurable:!0},serialVersionUID:{configurable:!0},DEFAULT_NODE_CAPACITY:{configurable:!0}};zn.prototype.getNodeCapacity=function(){return this._nodeCapacity},zn.prototype.lastNode=function(n){return n.get(n.size()-1)},zn.prototype.size=function(){if(arguments.length===0)return this.isEmpty()?0:(this.build(),this.size(this._root));if(arguments.length===1){for(var n=0,i=arguments[0].getChildBoundables().iterator();i.hasNext();){var s=i.next();s instanceof Nn?n+=this.size(s):s instanceof di&&(n+=1)}return n}},zn.prototype.removeItem=function(n,i){for(var s=null,u=n.getChildBoundables().iterator();u.hasNext();){var c=u.next();c instanceof di&&c.getItem()===i&&(s=c)}return s!==null&&(n.getChildBoundables().remove(s),!0)},zn.prototype.itemsTree=function(){if(arguments.length===0){this.build();var n=this.itemsTree(this._root);return n===null?new j:n}if(arguments.length===1){for(var i=arguments[0],s=new j,u=i.getChildBoundables().iterator();u.hasNext();){var c=u.next();if(c instanceof Nn){var m=this.itemsTree(c);m!==null&&s.add(m)}else c instanceof di?s.add(c.getItem()):b.shouldNeverReachHere()}return s.size()<=0?null:s}},zn.prototype.insert=function(n,i){b.isTrue(!this._built,\\\"Cannot insert items into an STR packed R-tree after it has been built.\\\"),this._itemBoundables.add(new di(n,i))},zn.prototype.boundablesAtLevel=function(){if(arguments.length===1){var n=arguments[0],i=new j;return this.boundablesAtLevel(n,this._root,i),i}if(arguments.length===3){var s=arguments[0],u=arguments[1],c=arguments[2];if(b.isTrue(s>-2),u.getLevel()===s)return c.add(u),null;for(var m=u.getChildBoundables().iterator();m.hasNext();){var E=m.next();E instanceof Nn?this.boundablesAtLevel(s,E,c):(b.isTrue(E instanceof di),s===-1&&c.add(E))}return null}},zn.prototype.query=function(){if(arguments.length===1){var n=arguments[0];this.build();var i=new j;return this.isEmpty()||this.getIntersectsOp().intersects(this._root.getBounds(),n)&&this.query(n,this._root,i),i}if(arguments.length===2){var s=arguments[0],u=arguments[1];if(this.build(),this.isEmpty())return null;this.getIntersectsOp().intersects(this._root.getBounds(),s)&&this.query(s,this._root,u)}else if(arguments.length===3){if(X(arguments[2],wo)&&arguments[0]instanceof Object&&arguments[1]instanceof Nn)for(var c=arguments[0],m=arguments[1],E=arguments[2],A=m.getChildBoundables(),U=0;U<A.size();U++){var Z=A.get(U);this.getIntersectsOp().intersects(Z.getBounds(),c)&&(Z instanceof Nn?this.query(c,Z,E):Z instanceof di?E.visitItem(Z.getItem()):b.shouldNeverReachHere())}else if(X(arguments[2],wt)&&arguments[0]instanceof Object&&arguments[1]instanceof Nn)for(var ut=arguments[0],ht=arguments[1],At=arguments[2],Rt=ht.getChildBoundables(),kt=0;kt<Rt.size();kt++){var ee=Rt.get(kt);this.getIntersectsOp().intersects(ee.getBounds(),ut)&&(ee instanceof Nn?this.query(ut,ee,At):ee instanceof di?At.add(ee.getItem()):b.shouldNeverReachHere())}}},zn.prototype.build=function(){if(this._built)return null;this._root=this._itemBoundables.isEmpty()?this.createNode(0):this.createHigherLevels(this._itemBoundables,-1),this._itemBoundables=null,this._built=!0},zn.prototype.getRoot=function(){return this.build(),this._root},zn.prototype.remove=function(){if(arguments.length===2){var n=arguments[0],i=arguments[1];return this.build(),!!this.getIntersectsOp().intersects(this._root.getBounds(),n)&&this.remove(n,this._root,i)}if(arguments.length===3){var s=arguments[0],u=arguments[1],c=arguments[2],m=this.removeItem(u,c);if(m)return!0;for(var E=null,A=u.getChildBoundables().iterator();A.hasNext();){var U=A.next();if(this.getIntersectsOp().intersects(U.getBounds(),s)&&U instanceof Nn&&(m=this.remove(s,U,c))){E=U;break}}return E!==null&&E.getChildBoundables().isEmpty()&&u.getChildBoundables().remove(E),m}},zn.prototype.createHigherLevels=function(n,i){b.isTrue(!n.isEmpty());var s=this.createParentBoundables(n,i+1);return s.size()===1?s.get(0):this.createHigherLevels(s,i+1)},zn.prototype.depth=function(){if(arguments.length===0)return this.isEmpty()?0:(this.build(),this.depth(this._root));if(arguments.length===1){for(var n=0,i=arguments[0].getChildBoundables().iterator();i.hasNext();){var s=i.next();if(s instanceof Nn){var u=this.depth(s);u>n&&(n=u)}}return n+1}},zn.prototype.createParentBoundables=function(n,i){b.isTrue(!n.isEmpty());var s=new j;s.add(this.createNode(i));var u=new j(n);mi.sort(u,this.getComparator());for(var c=u.iterator();c.hasNext();){var m=c.next();this.lastNode(s).getChildBoundables().size()===this.getNodeCapacity()&&s.add(this.createNode(i)),this.lastNode(s).addChildBoundable(m)}return s},zn.prototype.isEmpty=function(){return this._built?this._root.isEmpty():this._itemBoundables.isEmpty()},zn.prototype.interfaces_=function(){return[t]},zn.prototype.getClass=function(){return zn},zn.compareDoubles=function(n,i){return n>i?1:n<i?-1:0},Ml.IntersectsOp.get=function(){return P1},Ml.serialVersionUID.get=function(){return-3886435814360241e3},Ml.DEFAULT_NODE_CAPACITY.get=function(){return 10},Object.defineProperties(zn,Ml);var P1=function(){},la=function(){};la.prototype.distance=function(n,i){},la.prototype.interfaces_=function(){return[]},la.prototype.getClass=function(){return la};var Xd=function(n){function i(u){u=u||i.DEFAULT_NODE_CAPACITY,n.call(this,u)}n&&(i.__proto__=n),(i.prototype=Object.create(n&&n.prototype)).constructor=i;var s={STRtreeNode:{configurable:!0},serialVersionUID:{configurable:!0},xComparator:{configurable:!0},yComparator:{configurable:!0},intersectsOp:{configurable:!0},DEFAULT_NODE_CAPACITY:{configurable:!0}};return i.prototype.createParentBoundablesFromVerticalSlices=function(u,c){b.isTrue(u.length>0);for(var m=new j,E=0;E<u.length;E++)m.addAll(this.createParentBoundablesFromVerticalSlice(u[E],c));return m},i.prototype.createNode=function(u){return new Yd(u)},i.prototype.size=function(){return arguments.length===0?n.prototype.size.call(this):n.prototype.size.apply(this,arguments)},i.prototype.insert=function(){if(arguments.length!==2)return n.prototype.insert.apply(this,arguments);var u=arguments[0],c=arguments[1];if(u.isNull())return null;n.prototype.insert.call(this,u,c)},i.prototype.getIntersectsOp=function(){return i.intersectsOp},i.prototype.verticalSlices=function(u,c){for(var m=Math.trunc(Math.ceil(u.size()/c)),E=new Array(c).fill(null),A=u.iterator(),U=0;U<c;U++){E[U]=new j;for(var Z=0;A.hasNext()&&Z<m;){var ut=A.next();E[U].add(ut),Z++}}return E},i.prototype.query=function(){if(arguments.length===1){var u=arguments[0];return n.prototype.query.call(this,u)}if(arguments.length===2){var c=arguments[0],m=arguments[1];n.prototype.query.call(this,c,m)}else if(arguments.length===3){if(X(arguments[2],wo)&&arguments[0]instanceof Object&&arguments[1]instanceof Nn){var E=arguments[0],A=arguments[1],U=arguments[2];n.prototype.query.call(this,E,A,U)}else if(X(arguments[2],wt)&&arguments[0]instanceof Object&&arguments[1]instanceof Nn){var Z=arguments[0],ut=arguments[1],ht=arguments[2];n.prototype.query.call(this,Z,ut,ht)}}},i.prototype.getComparator=function(){return i.yComparator},i.prototype.createParentBoundablesFromVerticalSlice=function(u,c){return n.prototype.createParentBoundables.call(this,u,c)},i.prototype.remove=function(){if(arguments.length===2){var u=arguments[0],c=arguments[1];return n.prototype.remove.call(this,u,c)}return n.prototype.remove.apply(this,arguments)},i.prototype.depth=function(){return arguments.length===0?n.prototype.depth.call(this):n.prototype.depth.apply(this,arguments)},i.prototype.createParentBoundables=function(u,c){b.isTrue(!u.isEmpty());var m=Math.trunc(Math.ceil(u.size()/this.getNodeCapacity())),E=new j(u);mi.sort(E,i.xComparator);var A=this.verticalSlices(E,Math.trunc(Math.ceil(Math.sqrt(m))));return this.createParentBoundablesFromVerticalSlices(A,c)},i.prototype.nearestNeighbour=function(){if(arguments.length===1){if(X(arguments[0],la)){var u=arguments[0],c=new Cn(this.getRoot(),this.getRoot(),u);return this.nearestNeighbour(c)}if(arguments[0]instanceof Cn){var m=arguments[0];return this.nearestNeighbour(m,S.POSITIVE_INFINITY)}}else if(arguments.length===2){if(arguments[0]instanceof i&&X(arguments[1],la)){var E=arguments[0],A=arguments[1],U=new Cn(this.getRoot(),E.getRoot(),A);return this.nearestNeighbour(U)}if(arguments[0]instanceof Cn&&typeof arguments[1]==\\\"number\\\"){var Z=arguments[0],ut=arguments[1],ht=null,At=new so;for(At.add(Z);!At.isEmpty()&&ut>0;){var Rt=At.poll(),kt=Rt.getDistance();if(kt>=ut)break;Rt.isLeaves()?(ut=kt,ht=Rt):Rt.expandToQueue(At,ut)}return[ht.getBoundable(0).getItem(),ht.getBoundable(1).getItem()]}}else if(arguments.length===3){var ee=arguments[0],on=arguments[1],In=arguments[2],pr=new di(ee,on),Yi=new Cn(this.getRoot(),pr,In);return this.nearestNeighbour(Yi)[0]}},i.prototype.interfaces_=function(){return[As,t]},i.prototype.getClass=function(){return i},i.centreX=function(u){return i.avg(u.getMinX(),u.getMaxX())},i.avg=function(u,c){return(u+c)/2},i.centreY=function(u){return i.avg(u.getMinY(),u.getMaxY())},s.STRtreeNode.get=function(){return Yd},s.serialVersionUID.get=function(){return 0x39920f7d5f261e0},s.xComparator.get=function(){return{interfaces_:function(){return[z]},compare:function(u,c){return n.compareDoubles(i.centreX(u.getBounds()),i.centreX(c.getBounds()))}}},s.yComparator.get=function(){return{interfaces_:function(){return[z]},compare:function(u,c){return n.compareDoubles(i.centreY(u.getBounds()),i.centreY(c.getBounds()))}}},s.intersectsOp.get=function(){return{interfaces_:function(){return[n.IntersectsOp]},intersects:function(u,c){return u.intersects(c)}}},s.DEFAULT_NODE_CAPACITY.get=function(){return 10},Object.defineProperties(i,s),i}(zn),Yd=function(n){function i(){var s=arguments[0];n.call(this,s)}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.computeBounds=function(){for(var s=null,u=this.getChildBoundables().iterator();u.hasNext();){var c=u.next();s===null?s=new Pt(c.getBounds()):s.expandToInclude(c.getBounds())}return s},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i}(Nn),Er=function(){};Er.prototype.interfaces_=function(){return[]},Er.prototype.getClass=function(){return Er},Er.relativeSign=function(n,i){return n<i?-1:n>i?1:0},Er.compare=function(n,i,s){if(i.equals2D(s))return 0;var u=Er.relativeSign(i.x,s.x),c=Er.relativeSign(i.y,s.y);switch(n){case 0:return Er.compareValue(u,c);case 1:return Er.compareValue(c,u);case 2:return Er.compareValue(c,-u);case 3:return Er.compareValue(-u,c);case 4:return Er.compareValue(-u,-c);case 5:return Er.compareValue(-c,-u);case 6:return Er.compareValue(-c,u);case 7:return Er.compareValue(u,-c)}return b.shouldNeverReachHere(\\\"invalid octant value\\\"),0},Er.compareValue=function(n,i){return n<0?-1:n>0?1:i<0?-1:i>0?1:0};var bo=function(){this._segString=null,this.coord=null,this.segmentIndex=null,this._segmentOctant=null,this._isInterior=null;var n=arguments[0],i=arguments[1],s=arguments[2],u=arguments[3];this._segString=n,this.coord=new L(i),this.segmentIndex=s,this._segmentOctant=u,this._isInterior=!i.equals2D(n.getCoordinate(s))};bo.prototype.getCoordinate=function(){return this.coord},bo.prototype.print=function(n){n.print(this.coord),n.print(\\\" seg # = \\\"+this.segmentIndex)},bo.prototype.compareTo=function(n){var i=n;return this.segmentIndex<i.segmentIndex?-1:this.segmentIndex>i.segmentIndex?1:this.coord.equals2D(i.coord)?0:Er.compare(this._segmentOctant,this.coord,i.coord)},bo.prototype.isEndPoint=function(n){return this.segmentIndex===0&&!this._isInterior||this.segmentIndex===n},bo.prototype.isInterior=function(){return this._isInterior},bo.prototype.interfaces_=function(){return[F]},bo.prototype.getClass=function(){return bo};var ar=function(){this._nodeMap=new _,this._edge=null;var n=arguments[0];this._edge=n};ar.prototype.getSplitCoordinates=function(){var n=new Dt;this.addEndpoints();for(var i=this.iterator(),s=i.next();i.hasNext();){var u=i.next();this.addEdgeCoordinates(s,u,n),s=u}return n.toCoordinateArray()},ar.prototype.addCollapsedNodes=function(){var n=new j;this.findCollapsesFromInsertedNodes(n),this.findCollapsesFromExistingVertices(n);for(var i=n.iterator();i.hasNext();){var s=i.next().intValue();this.add(this._edge.getCoordinate(s),s)}},ar.prototype.print=function(n){n.println(\\\"Intersections:\\\");for(var i=this.iterator();i.hasNext();)i.next().print(n)},ar.prototype.findCollapsesFromExistingVertices=function(n){for(var i=0;i<this._edge.size()-2;i++){var s=this._edge.getCoordinate(i),u=this._edge.getCoordinate(i+2);s.equals2D(u)&&n.add(new et(i+1))}},ar.prototype.addEdgeCoordinates=function(n,i,s){var u=this._edge.getCoordinate(i.segmentIndex),c=i.isInterior()||!i.coord.equals2D(u);s.add(new L(n.coord),!1);for(var m=n.segmentIndex+1;m<=i.segmentIndex;m++)s.add(this._edge.getCoordinate(m));c&&s.add(new L(i.coord))},ar.prototype.iterator=function(){return this._nodeMap.values().iterator()},ar.prototype.addSplitEdges=function(n){this.addEndpoints(),this.addCollapsedNodes();for(var i=this.iterator(),s=i.next();i.hasNext();){var u=i.next(),c=this.createSplitEdge(s,u);n.add(c),s=u}},ar.prototype.findCollapseIndex=function(n,i,s){if(!n.coord.equals2D(i.coord))return!1;var u=i.segmentIndex-n.segmentIndex;return i.isInterior()||u--,u===1&&(s[0]=n.segmentIndex+1,!0)},ar.prototype.findCollapsesFromInsertedNodes=function(n){for(var i=new Array(1).fill(null),s=this.iterator(),u=s.next();s.hasNext();){var c=s.next();this.findCollapseIndex(u,c,i)&&n.add(new et(i[0])),u=c}},ar.prototype.getEdge=function(){return this._edge},ar.prototype.addEndpoints=function(){var n=this._edge.size()-1;this.add(this._edge.getCoordinate(0),0),this.add(this._edge.getCoordinate(n),n)},ar.prototype.createSplitEdge=function(n,i){var s=i.segmentIndex-n.segmentIndex+2,u=this._edge.getCoordinate(i.segmentIndex),c=i.isInterior()||!i.coord.equals2D(u);c||s--;var m=new Array(s).fill(null),E=0;m[E++]=new L(n.coord);for(var A=n.segmentIndex+1;A<=i.segmentIndex;A++)m[E++]=this._edge.getCoordinate(A);return c&&(m[E]=new L(i.coord)),new wn(m,this._edge.getData())},ar.prototype.add=function(n,i){var s=new bo(this._edge,n,i,this._edge.getSegmentOctant(i)),u=this._nodeMap.get(s);return u!==null?(b.isTrue(u.coord.equals2D(n),\\\"Found equal nodes with different coordinates\\\"),u):(this._nodeMap.put(s,s),s)},ar.prototype.checkSplitEdgesCorrectness=function(n){var i=this._edge.getCoordinates(),s=n.get(0).getCoordinate(0);if(!s.equals2D(i[0]))throw new $(\\\"bad split edge start point at \\\"+s);var u=n.get(n.size()-1).getCoordinates(),c=u[u.length-1];if(!c.equals2D(i[i.length-1]))throw new $(\\\"bad split edge end point at \\\"+c)},ar.prototype.interfaces_=function(){return[]},ar.prototype.getClass=function(){return ar};var Cs=function(){};Cs.prototype.interfaces_=function(){return[]},Cs.prototype.getClass=function(){return Cs},Cs.octant=function(){if(typeof arguments[0]==\\\"number\\\"&&typeof arguments[1]==\\\"number\\\"){var n=arguments[0],i=arguments[1];if(n===0&&i===0)throw new C(\\\"Cannot compute the octant for point ( \\\"+n+\\\", \\\"+i+\\\" )\\\");var s=Math.abs(n),u=Math.abs(i);return n>=0?i>=0?s>=u?0:1:s>=u?7:6:i>=0?s>=u?3:2:s>=u?4:5}if(arguments[0]instanceof L&&arguments[1]instanceof L){var c=arguments[0],m=arguments[1],E=m.x-c.x,A=m.y-c.y;if(E===0&&A===0)throw new C(\\\"Cannot compute the octant for two identical points \\\"+c);return Cs.octant(E,A)}};var zi=function(){};zi.prototype.getCoordinates=function(){},zi.prototype.size=function(){},zi.prototype.getCoordinate=function(n){},zi.prototype.isClosed=function(){},zi.prototype.setData=function(n){},zi.prototype.getData=function(){},zi.prototype.interfaces_=function(){return[]},zi.prototype.getClass=function(){return zi};var vu=function(){};vu.prototype.addIntersection=function(n,i){},vu.prototype.interfaces_=function(){return[zi]},vu.prototype.getClass=function(){return vu};var wn=function(){this._nodeList=new ar(this),this._pts=null,this._data=null;var n=arguments[0],i=arguments[1];this._pts=n,this._data=i};wn.prototype.getCoordinates=function(){return this._pts},wn.prototype.size=function(){return this._pts.length},wn.prototype.getCoordinate=function(n){return this._pts[n]},wn.prototype.isClosed=function(){return this._pts[0].equals(this._pts[this._pts.length-1])},wn.prototype.getSegmentOctant=function(n){return n===this._pts.length-1?-1:this.safeOctant(this.getCoordinate(n),this.getCoordinate(n+1))},wn.prototype.setData=function(n){this._data=n},wn.prototype.safeOctant=function(n,i){return n.equals2D(i)?0:Cs.octant(n,i)},wn.prototype.getData=function(){return this._data},wn.prototype.addIntersection=function(){if(arguments.length===2){var n=arguments[0],i=arguments[1];this.addIntersectionNode(n,i)}else if(arguments.length===4){var s=arguments[0],u=arguments[1],c=arguments[3],m=new L(s.getIntersection(c));this.addIntersection(m,u)}},wn.prototype.toString=function(){return qt.toLineString(new he(this._pts))},wn.prototype.getNodeList=function(){return this._nodeList},wn.prototype.addIntersectionNode=function(n,i){var s=i,u=s+1;if(u<this._pts.length){var c=this._pts[u];n.equals2D(c)&&(s=u)}return this._nodeList.add(n,s)},wn.prototype.addIntersections=function(n,i,s){for(var u=0;u<n.getIntersectionNum();u++)this.addIntersection(n,i,s,u)},wn.prototype.interfaces_=function(){return[vu]},wn.prototype.getClass=function(){return wn},wn.getNodedSubstrings=function(){if(arguments.length===1){var n=arguments[0],i=new j;return wn.getNodedSubstrings(n,i),i}if(arguments.length===2)for(var s=arguments[0],u=arguments[1],c=s.iterator();c.hasNext();)c.next().getNodeList().addSplitEdges(u)};var Zt=function(){if(this.p0=null,this.p1=null,arguments.length===0)this.p0=new L,this.p1=new L;else if(arguments.length===1){var n=arguments[0];this.p0=new L(n.p0),this.p1=new L(n.p1)}else if(arguments.length===2)this.p0=arguments[0],this.p1=arguments[1];else if(arguments.length===4){var i=arguments[0],s=arguments[1],u=arguments[2],c=arguments[3];this.p0=new L(i,s),this.p1=new L(u,c)}},Zd={serialVersionUID:{configurable:!0}};Zt.prototype.minX=function(){return Math.min(this.p0.x,this.p1.x)},Zt.prototype.orientationIndex=function(){if(arguments[0]instanceof Zt){var n=arguments[0],i=B.orientationIndex(this.p0,this.p1,n.p0),s=B.orientationIndex(this.p0,this.p1,n.p1);return i>=0&&s>=0||i<=0&&s<=0?Math.max(i,s):0}if(arguments[0]instanceof L){var u=arguments[0];return B.orientationIndex(this.p0,this.p1,u)}},Zt.prototype.toGeometry=function(n){return n.createLineString([this.p0,this.p1])},Zt.prototype.isVertical=function(){return this.p0.x===this.p1.x},Zt.prototype.equals=function(n){if(!(n instanceof Zt))return!1;var i=n;return this.p0.equals(i.p0)&&this.p1.equals(i.p1)},Zt.prototype.intersection=function(n){var i=new J;return i.computeIntersection(this.p0,this.p1,n.p0,n.p1),i.hasIntersection()?i.getIntersection(0):null},Zt.prototype.project=function(){if(arguments[0]instanceof L){var n=arguments[0];if(n.equals(this.p0)||n.equals(this.p1))return new L(n);var i=this.projectionFactor(n),s=new L;return s.x=this.p0.x+i*(this.p1.x-this.p0.x),s.y=this.p0.y+i*(this.p1.y-this.p0.y),s}if(arguments[0]instanceof Zt){var u=arguments[0],c=this.projectionFactor(u.p0),m=this.projectionFactor(u.p1);if(c>=1&&m>=1||c<=0&&m<=0)return null;var E=this.project(u.p0);c<0&&(E=this.p0),c>1&&(E=this.p1);var A=this.project(u.p1);return m<0&&(A=this.p0),m>1&&(A=this.p1),new Zt(E,A)}},Zt.prototype.normalize=function(){this.p1.compareTo(this.p0)<0&&this.reverse()},Zt.prototype.angle=function(){return Math.atan2(this.p1.y-this.p0.y,this.p1.x-this.p0.x)},Zt.prototype.getCoordinate=function(n){return n===0?this.p0:this.p1},Zt.prototype.distancePerpendicular=function(n){return B.distancePointLinePerpendicular(n,this.p0,this.p1)},Zt.prototype.minY=function(){return Math.min(this.p0.y,this.p1.y)},Zt.prototype.midPoint=function(){return Zt.midPoint(this.p0,this.p1)},Zt.prototype.projectionFactor=function(n){if(n.equals(this.p0))return 0;if(n.equals(this.p1))return 1;var i=this.p1.x-this.p0.x,s=this.p1.y-this.p0.y,u=i*i+s*s;return u<=0?S.NaN:((n.x-this.p0.x)*i+(n.y-this.p0.y)*s)/u},Zt.prototype.closestPoints=function(n){var i=this.intersection(n);if(i!==null)return[i,i];var s=new Array(2).fill(null),u=S.MAX_VALUE,c=null,m=this.closestPoint(n.p0);u=m.distance(n.p0),s[0]=m,s[1]=n.p0;var E=this.closestPoint(n.p1);(c=E.distance(n.p1))<u&&(u=c,s[0]=E,s[1]=n.p1);var A=n.closestPoint(this.p0);(c=A.distance(this.p0))<u&&(u=c,s[0]=this.p0,s[1]=A);var U=n.closestPoint(this.p1);return(c=U.distance(this.p1))<u&&(u=c,s[0]=this.p1,s[1]=U),s},Zt.prototype.closestPoint=function(n){var i=this.projectionFactor(n);return i>0&&i<1?this.project(n):this.p0.distance(n)<this.p1.distance(n)?this.p0:this.p1},Zt.prototype.maxX=function(){return Math.max(this.p0.x,this.p1.x)},Zt.prototype.getLength=function(){return this.p0.distance(this.p1)},Zt.prototype.compareTo=function(n){var i=n,s=this.p0.compareTo(i.p0);return s!==0?s:this.p1.compareTo(i.p1)},Zt.prototype.reverse=function(){var n=this.p0;this.p0=this.p1,this.p1=n},Zt.prototype.equalsTopo=function(n){return this.p0.equals(n.p0)&&(this.p1.equals(n.p1)||this.p0.equals(n.p1))&&this.p1.equals(n.p0)},Zt.prototype.lineIntersection=function(n){try{return ne.intersection(this.p0,this.p1,n.p0,n.p1)}catch(i){if(!(i instanceof Wt))throw i}return null},Zt.prototype.maxY=function(){return Math.max(this.p0.y,this.p1.y)},Zt.prototype.pointAlongOffset=function(n,i){var s=this.p0.x+n*(this.p1.x-this.p0.x),u=this.p0.y+n*(this.p1.y-this.p0.y),c=this.p1.x-this.p0.x,m=this.p1.y-this.p0.y,E=Math.sqrt(c*c+m*m),A=0,U=0;if(i!==0){if(E<=0)throw new Error(\\\"Cannot compute offset from zero-length line segment\\\");A=i*c/E,U=i*m/E}return new L(s-U,u+A)},Zt.prototype.setCoordinates=function(){if(arguments.length===1){var n=arguments[0];this.setCoordinates(n.p0,n.p1)}else if(arguments.length===2){var i=arguments[0],s=arguments[1];this.p0.x=i.x,this.p0.y=i.y,this.p1.x=s.x,this.p1.y=s.y}},Zt.prototype.segmentFraction=function(n){var i=this.projectionFactor(n);return i<0?i=0:(i>1||S.isNaN(i))&&(i=1),i},Zt.prototype.toString=function(){return\\\"LINESTRING( \\\"+this.p0.x+\\\" \\\"+this.p0.y+\\\", \\\"+this.p1.x+\\\" \\\"+this.p1.y+\\\")\\\"},Zt.prototype.isHorizontal=function(){return this.p0.y===this.p1.y},Zt.prototype.distance=function(){if(arguments[0]instanceof Zt){var n=arguments[0];return B.distanceLineLine(this.p0,this.p1,n.p0,n.p1)}if(arguments[0]instanceof L){var i=arguments[0];return B.distancePointLine(i,this.p0,this.p1)}},Zt.prototype.pointAlong=function(n){var i=new L;return i.x=this.p0.x+n*(this.p1.x-this.p0.x),i.y=this.p0.y+n*(this.p1.y-this.p0.y),i},Zt.prototype.hashCode=function(){var n=S.doubleToLongBits(this.p0.x);n^=31*S.doubleToLongBits(this.p0.y);var i=Math.trunc(n)^Math.trunc(n>>32),s=S.doubleToLongBits(this.p1.x);return s^=31*S.doubleToLongBits(this.p1.y),i^(Math.trunc(s)^Math.trunc(s>>32))},Zt.prototype.interfaces_=function(){return[F,t]},Zt.prototype.getClass=function(){return Zt},Zt.midPoint=function(n,i){return new L((n.x+i.x)/2,(n.y+i.y)/2)},Zd.serialVersionUID.get=function(){return 0x2d2172135f411c00},Object.defineProperties(Zt,Zd);var _u=function(){this.tempEnv1=new Pt,this.tempEnv2=new Pt,this._overlapSeg1=new Zt,this._overlapSeg2=new Zt};_u.prototype.overlap=function(){if(arguments.length!==2){if(arguments.length===4){var n=arguments[0],i=arguments[1],s=arguments[2],u=arguments[3];n.getLineSegment(i,this._overlapSeg1),s.getLineSegment(u,this._overlapSeg2),this.overlap(this._overlapSeg1,this._overlapSeg2)}}},_u.prototype.interfaces_=function(){return[]},_u.prototype.getClass=function(){return _u};var Or=function(){this._pts=null,this._start=null,this._end=null,this._env=null,this._context=null,this._id=null;var n=arguments[0],i=arguments[1],s=arguments[2],u=arguments[3];this._pts=n,this._start=i,this._end=s,this._context=u};Or.prototype.getLineSegment=function(n,i){i.p0=this._pts[n],i.p1=this._pts[n+1]},Or.prototype.computeSelect=function(n,i,s,u){var c=this._pts[i],m=this._pts[s];if(u.tempEnv1.init(c,m),s-i==1)return u.select(this,i),null;if(!n.intersects(u.tempEnv1))return null;var E=Math.trunc((i+s)/2);i<E&&this.computeSelect(n,i,E,u),E<s&&this.computeSelect(n,E,s,u)},Or.prototype.getCoordinates=function(){for(var n=new Array(this._end-this._start+1).fill(null),i=0,s=this._start;s<=this._end;s++)n[i++]=this._pts[s];return n},Or.prototype.computeOverlaps=function(n,i){this.computeOverlapsInternal(this._start,this._end,n,n._start,n._end,i)},Or.prototype.setId=function(n){this._id=n},Or.prototype.select=function(n,i){this.computeSelect(n,this._start,this._end,i)},Or.prototype.getEnvelope=function(){if(this._env===null){var n=this._pts[this._start],i=this._pts[this._end];this._env=new Pt(n,i)}return this._env},Or.prototype.getEndIndex=function(){return this._end},Or.prototype.getStartIndex=function(){return this._start},Or.prototype.getContext=function(){return this._context},Or.prototype.getId=function(){return this._id},Or.prototype.computeOverlapsInternal=function(n,i,s,u,c,m){var E=this._pts[n],A=this._pts[i],U=s._pts[u],Z=s._pts[c];if(i-n==1&&c-u==1)return m.overlap(this,n,s,u),null;if(m.tempEnv1.init(E,A),m.tempEnv2.init(U,Z),!m.tempEnv1.intersects(m.tempEnv2))return null;var ut=Math.trunc((n+i)/2),ht=Math.trunc((u+c)/2);n<ut&&(u<ht&&this.computeOverlapsInternal(n,ut,s,u,ht,m),ht<c&&this.computeOverlapsInternal(n,ut,s,ht,c,m)),ut<i&&(u<ht&&this.computeOverlapsInternal(ut,i,s,u,ht,m),ht<c&&this.computeOverlapsInternal(ut,i,s,ht,c,m))},Or.prototype.interfaces_=function(){return[]},Or.prototype.getClass=function(){return Or};var Ai=function(){};Ai.prototype.interfaces_=function(){return[]},Ai.prototype.getClass=function(){return Ai},Ai.getChainStartIndices=function(n){var i=0,s=new j;s.add(new et(i));do{var u=Ai.findChainEnd(n,i);s.add(new et(u)),i=u}while(i<n.length-1);return Ai.toIntArray(s)},Ai.findChainEnd=function(n,i){for(var s=i;s<n.length-1&&n[s].equals2D(n[s+1]);)s++;if(s>=n.length-1)return n.length-1;for(var u=ln.quadrant(n[s],n[s+1]),c=i+1;c<n.length&&!(!n[c-1].equals2D(n[c])&&ln.quadrant(n[c-1],n[c])!==u);)c++;return c-1},Ai.getChains=function(){if(arguments.length===1){var n=arguments[0];return Ai.getChains(n,null)}if(arguments.length===2){for(var i=arguments[0],s=arguments[1],u=new j,c=Ai.getChainStartIndices(i),m=0;m<c.length-1;m++){var E=new Or(i,c[m],c[m+1],s);u.add(E)}return u}},Ai.toIntArray=function(n){for(var i=new Array(n.size()).fill(null),s=0;s<i.length;s++)i[s]=n.get(s).intValue();return i};var $o=function(){};$o.prototype.computeNodes=function(n){},$o.prototype.getNodedSubstrings=function(){},$o.prototype.interfaces_=function(){return[]},$o.prototype.getClass=function(){return $o};var xu=function(){if(this._segInt=null,arguments.length!==0){if(arguments.length===1){var n=arguments[0];this.setSegmentIntersector(n)}}};xu.prototype.setSegmentIntersector=function(n){this._segInt=n},xu.prototype.interfaces_=function(){return[$o]},xu.prototype.getClass=function(){return xu};var Ef=function(n){function i(u){u?n.call(this,u):n.call(this),this._monoChains=new j,this._index=new Xd,this._idCounter=0,this._nodedSegStrings=null,this._nOverlaps=0}n&&(i.__proto__=n),(i.prototype=Object.create(n&&n.prototype)).constructor=i;var s={SegmentOverlapAction:{configurable:!0}};return i.prototype.getMonotoneChains=function(){return this._monoChains},i.prototype.getNodedSubstrings=function(){return wn.getNodedSubstrings(this._nodedSegStrings)},i.prototype.getIndex=function(){return this._index},i.prototype.add=function(u){for(var c=Ai.getChains(u.getCoordinates(),u).iterator();c.hasNext();){var m=c.next();m.setId(this._idCounter++),this._index.insert(m.getEnvelope(),m),this._monoChains.add(m)}},i.prototype.computeNodes=function(u){this._nodedSegStrings=u;for(var c=u.iterator();c.hasNext();)this.add(c.next());this.intersectChains()},i.prototype.intersectChains=function(){for(var u=new Jd(this._segInt),c=this._monoChains.iterator();c.hasNext();)for(var m=c.next(),E=this._index.query(m.getEnvelope()).iterator();E.hasNext();){var A=E.next();if(A.getId()>m.getId()&&(m.computeOverlaps(A,u),this._nOverlaps++),this._segInt.isDone())return null}},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},s.SegmentOverlapAction.get=function(){return Jd},Object.defineProperties(i,s),i}(xu),Jd=function(n){function i(){n.call(this),this._si=null;var s=arguments[0];this._si=s}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.overlap=function(){if(arguments.length!==4)return n.prototype.overlap.apply(this,arguments);var s=arguments[0],u=arguments[1],c=arguments[2],m=arguments[3],E=s.getContext(),A=c.getContext();this._si.processIntersections(E,u,A,m)},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i}(_u),We=function n(){if(this._quadrantSegments=n.DEFAULT_QUADRANT_SEGMENTS,this._endCapStyle=n.CAP_ROUND,this._joinStyle=n.JOIN_ROUND,this._mitreLimit=n.DEFAULT_MITRE_LIMIT,this._isSingleSided=!1,this._simplifyFactor=n.DEFAULT_SIMPLIFY_FACTOR,arguments.length!==0){if(arguments.length===1){var i=arguments[0];this.setQuadrantSegments(i)}else if(arguments.length===2){var s=arguments[0],u=arguments[1];this.setQuadrantSegments(s),this.setEndCapStyle(u)}else if(arguments.length===4){var c=arguments[0],m=arguments[1],E=arguments[2],A=arguments[3];this.setQuadrantSegments(c),this.setEndCapStyle(m),this.setJoinStyle(E),this.setMitreLimit(A)}}},ao={CAP_ROUND:{configurable:!0},CAP_FLAT:{configurable:!0},CAP_SQUARE:{configurable:!0},JOIN_ROUND:{configurable:!0},JOIN_MITRE:{configurable:!0},JOIN_BEVEL:{configurable:!0},DEFAULT_QUADRANT_SEGMENTS:{configurable:!0},DEFAULT_MITRE_LIMIT:{configurable:!0},DEFAULT_SIMPLIFY_FACTOR:{configurable:!0}};We.prototype.getEndCapStyle=function(){return this._endCapStyle},We.prototype.isSingleSided=function(){return this._isSingleSided},We.prototype.setQuadrantSegments=function(n){this._quadrantSegments=n,this._quadrantSegments===0&&(this._joinStyle=We.JOIN_BEVEL),this._quadrantSegments<0&&(this._joinStyle=We.JOIN_MITRE,this._mitreLimit=Math.abs(this._quadrantSegments)),n<=0&&(this._quadrantSegments=1),this._joinStyle!==We.JOIN_ROUND&&(this._quadrantSegments=We.DEFAULT_QUADRANT_SEGMENTS)},We.prototype.getJoinStyle=function(){return this._joinStyle},We.prototype.setJoinStyle=function(n){this._joinStyle=n},We.prototype.setSimplifyFactor=function(n){this._simplifyFactor=n<0?0:n},We.prototype.getSimplifyFactor=function(){return this._simplifyFactor},We.prototype.getQuadrantSegments=function(){return this._quadrantSegments},We.prototype.setEndCapStyle=function(n){this._endCapStyle=n},We.prototype.getMitreLimit=function(){return this._mitreLimit},We.prototype.setMitreLimit=function(n){this._mitreLimit=n},We.prototype.setSingleSided=function(n){this._isSingleSided=n},We.prototype.interfaces_=function(){return[]},We.prototype.getClass=function(){return We},We.bufferDistanceError=function(n){var i=Math.PI/2/n;return 1-Math.cos(i/2)},ao.CAP_ROUND.get=function(){return 1},ao.CAP_FLAT.get=function(){return 2},ao.CAP_SQUARE.get=function(){return 3},ao.JOIN_ROUND.get=function(){return 1},ao.JOIN_MITRE.get=function(){return 2},ao.JOIN_BEVEL.get=function(){return 3},ao.DEFAULT_QUADRANT_SEGMENTS.get=function(){return 8},ao.DEFAULT_MITRE_LIMIT.get=function(){return 5},ao.DEFAULT_SIMPLIFY_FACTOR.get=function(){return .01},Object.defineProperties(We,ao);var Mn=function(n){this._distanceTol=null,this._isDeleted=null,this._angleOrientation=B.COUNTERCLOCKWISE,this._inputLine=n||null},Eu={INIT:{configurable:!0},DELETE:{configurable:!0},KEEP:{configurable:!0},NUM_PTS_TO_CHECK:{configurable:!0}};Mn.prototype.isDeletable=function(n,i,s,u){var c=this._inputLine[n],m=this._inputLine[i],E=this._inputLine[s];return!!this.isConcave(c,m,E)&&!!this.isShallow(c,m,E,u)&&this.isShallowSampled(c,m,n,s,u)},Mn.prototype.deleteShallowConcavities=function(){for(var n=1,i=this.findNextNonDeletedIndex(n),s=this.findNextNonDeletedIndex(i),u=!1;s<this._inputLine.length;){var c=!1;this.isDeletable(n,i,s,this._distanceTol)&&(this._isDeleted[i]=Mn.DELETE,c=!0,u=!0),n=c?s:i,i=this.findNextNonDeletedIndex(n),s=this.findNextNonDeletedIndex(i)}return u},Mn.prototype.isShallowConcavity=function(n,i,s,u){return B.computeOrientation(n,i,s)!==this._angleOrientation?!1:B.distancePointLine(i,n,s)<u},Mn.prototype.isShallowSampled=function(n,i,s,u,c){var m=Math.trunc((u-s)/Mn.NUM_PTS_TO_CHECK);m<=0&&(m=1);for(var E=s;E<u;E+=m)if(!this.isShallow(n,i,this._inputLine[E],c))return!1;return!0},Mn.prototype.isConcave=function(n,i,s){var u=B.computeOrientation(n,i,s)===this._angleOrientation;return u},Mn.prototype.simplify=function(n){this._distanceTol=Math.abs(n),n<0&&(this._angleOrientation=B.CLOCKWISE),this._isDeleted=new Array(this._inputLine.length).fill(null);var i=!1;do i=this.deleteShallowConcavities();while(i);return this.collapseLine()},Mn.prototype.findNextNonDeletedIndex=function(n){for(var i=n+1;i<this._inputLine.length&&this._isDeleted[i]===Mn.DELETE;)i++;return i},Mn.prototype.isShallow=function(n,i,s,u){return B.distancePointLine(i,n,s)<u},Mn.prototype.collapseLine=function(){for(var n=new Dt,i=0;i<this._inputLine.length;i++)this._isDeleted[i]!==Mn.DELETE&&n.add(this._inputLine[i]);return n.toCoordinateArray()},Mn.prototype.interfaces_=function(){return[]},Mn.prototype.getClass=function(){return Mn},Mn.simplify=function(n,i){return new Mn(n).simplify(i)},Eu.INIT.get=function(){return 0},Eu.DELETE.get=function(){return 1},Eu.KEEP.get=function(){return 1},Eu.NUM_PTS_TO_CHECK.get=function(){return 10},Object.defineProperties(Mn,Eu);var Wr=function(){this._ptList=null,this._precisionModel=null,this._minimimVertexDistance=0,this._ptList=new j},$d={COORDINATE_ARRAY_TYPE:{configurable:!0}};Wr.prototype.getCoordinates=function(){return this._ptList.toArray(Wr.COORDINATE_ARRAY_TYPE)},Wr.prototype.setPrecisionModel=function(n){this._precisionModel=n},Wr.prototype.addPt=function(n){var i=new L(n);if(this._precisionModel.makePrecise(i),this.isRedundant(i))return null;this._ptList.add(i)},Wr.prototype.revere=function(){},Wr.prototype.addPts=function(n,i){if(i)for(var s=0;s<n.length;s++)this.addPt(n[s]);else for(var u=n.length-1;u>=0;u--)this.addPt(n[u])},Wr.prototype.isRedundant=function(n){if(this._ptList.size()<1)return!1;var i=this._ptList.get(this._ptList.size()-1);return n.distance(i)<this._minimimVertexDistance},Wr.prototype.toString=function(){return new le().createLineString(this.getCoordinates()).toString()},Wr.prototype.closeRing=function(){if(this._ptList.size()<1)return null;var n=new L(this._ptList.get(0)),i=this._ptList.get(this._ptList.size()-1);if(n.equals(i))return null;this._ptList.add(n)},Wr.prototype.setMinimumVertexDistance=function(n){this._minimimVertexDistance=n},Wr.prototype.interfaces_=function(){return[]},Wr.prototype.getClass=function(){return Wr},$d.COORDINATE_ARRAY_TYPE.get=function(){return new Array(0).fill(null)},Object.defineProperties(Wr,$d);var me=function(){},Ps={PI_TIMES_2:{configurable:!0},PI_OVER_2:{configurable:!0},PI_OVER_4:{configurable:!0},COUNTERCLOCKWISE:{configurable:!0},CLOCKWISE:{configurable:!0},NONE:{configurable:!0}};me.prototype.interfaces_=function(){return[]},me.prototype.getClass=function(){return me},me.toDegrees=function(n){return 180*n/Math.PI},me.normalize=function(n){for(;n>Math.PI;)n-=me.PI_TIMES_2;for(;n<=-Math.PI;)n+=me.PI_TIMES_2;return n},me.angle=function(){if(arguments.length===1){var n=arguments[0];return Math.atan2(n.y,n.x)}if(arguments.length===2){var i=arguments[0],s=arguments[1],u=s.x-i.x,c=s.y-i.y;return Math.atan2(c,u)}},me.isAcute=function(n,i,s){var u=n.x-i.x,c=n.y-i.y;return u*(s.x-i.x)+c*(s.y-i.y)>0},me.isObtuse=function(n,i,s){var u=n.x-i.x,c=n.y-i.y;return u*(s.x-i.x)+c*(s.y-i.y)<0},me.interiorAngle=function(n,i,s){var u=me.angle(i,n),c=me.angle(i,s);return Math.abs(c-u)},me.normalizePositive=function(n){if(n<0){for(;n<0;)n+=me.PI_TIMES_2;n>=me.PI_TIMES_2&&(n=0)}else{for(;n>=me.PI_TIMES_2;)n-=me.PI_TIMES_2;n<0&&(n=0)}return n},me.angleBetween=function(n,i,s){var u=me.angle(i,n),c=me.angle(i,s);return me.diff(u,c)},me.diff=function(n,i){var s=null;return(s=n<i?i-n:n-i)>Math.PI&&(s=2*Math.PI-s),s},me.toRadians=function(n){return n*Math.PI/180},me.getTurn=function(n,i){var s=Math.sin(i-n);return s>0?me.COUNTERCLOCKWISE:s<0?me.CLOCKWISE:me.NONE},me.angleBetweenOriented=function(n,i,s){var u=me.angle(i,n),c=me.angle(i,s)-u;return c<=-Math.PI?c+me.PI_TIMES_2:c>Math.PI?c-me.PI_TIMES_2:c},Ps.PI_TIMES_2.get=function(){return 2*Math.PI},Ps.PI_OVER_2.get=function(){return Math.PI/2},Ps.PI_OVER_4.get=function(){return Math.PI/4},Ps.COUNTERCLOCKWISE.get=function(){return B.COUNTERCLOCKWISE},Ps.CLOCKWISE.get=function(){return B.CLOCKWISE},Ps.NONE.get=function(){return B.COLLINEAR},Object.defineProperties(me,Ps);var pn=function n(){this._maxCurveSegmentError=0,this._filletAngleQuantum=null,this._closingSegLengthFactor=1,this._segList=null,this._distance=0,this._precisionModel=null,this._bufParams=null,this._li=null,this._s0=null,this._s1=null,this._s2=null,this._seg0=new Zt,this._seg1=new Zt,this._offset0=new Zt,this._offset1=new Zt,this._side=0,this._hasNarrowConcaveAngle=!1;var i=arguments[0],s=arguments[1],u=arguments[2];this._precisionModel=i,this._bufParams=s,this._li=new J,this._filletAngleQuantum=Math.PI/2/s.getQuadrantSegments(),s.getQuadrantSegments()>=8&&s.getJoinStyle()===We.JOIN_ROUND&&(this._closingSegLengthFactor=n.MAX_CLOSING_SEG_LEN_FACTOR),this.init(u)},Mu={OFFSET_SEGMENT_SEPARATION_FACTOR:{configurable:!0},INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR:{configurable:!0},CURVE_VERTEX_SNAP_DISTANCE_FACTOR:{configurable:!0},MAX_CLOSING_SEG_LEN_FACTOR:{configurable:!0}};pn.prototype.addNextSegment=function(n,i){if(this._s0=this._s1,this._s1=this._s2,this._s2=n,this._seg0.setCoordinates(this._s0,this._s1),this.computeOffsetSegment(this._seg0,this._side,this._distance,this._offset0),this._seg1.setCoordinates(this._s1,this._s2),this.computeOffsetSegment(this._seg1,this._side,this._distance,this._offset1),this._s1.equals(this._s2))return null;var s=B.computeOrientation(this._s0,this._s1,this._s2),u=s===B.CLOCKWISE&&this._side===bt.LEFT||s===B.COUNTERCLOCKWISE&&this._side===bt.RIGHT;s===0?this.addCollinear(i):u?this.addOutsideTurn(s,i):this.addInsideTurn(s,i)},pn.prototype.addLineEndCap=function(n,i){var s=new Zt(n,i),u=new Zt;this.computeOffsetSegment(s,bt.LEFT,this._distance,u);var c=new Zt;this.computeOffsetSegment(s,bt.RIGHT,this._distance,c);var m=i.x-n.x,E=i.y-n.y,A=Math.atan2(E,m);switch(this._bufParams.getEndCapStyle()){case We.CAP_ROUND:this._segList.addPt(u.p1),this.addFilletArc(i,A+Math.PI/2,A-Math.PI/2,B.CLOCKWISE,this._distance),this._segList.addPt(c.p1);break;case We.CAP_FLAT:this._segList.addPt(u.p1),this._segList.addPt(c.p1);break;case We.CAP_SQUARE:var U=new L;U.x=Math.abs(this._distance)*Math.cos(A),U.y=Math.abs(this._distance)*Math.sin(A);var Z=new L(u.p1.x+U.x,u.p1.y+U.y),ut=new L(c.p1.x+U.x,c.p1.y+U.y);this._segList.addPt(Z),this._segList.addPt(ut)}},pn.prototype.getCoordinates=function(){return this._segList.getCoordinates()},pn.prototype.addMitreJoin=function(n,i,s,u){var c=!0,m=null;try{m=ne.intersection(i.p0,i.p1,s.p0,s.p1),(u<=0?1:m.distance(n)/Math.abs(u))>this._bufParams.getMitreLimit()&&(c=!1)}catch(E){if(!(E instanceof Wt))throw E;m=new L(0,0),c=!1}c?this._segList.addPt(m):this.addLimitedMitreJoin(i,s,u,this._bufParams.getMitreLimit())},pn.prototype.addFilletCorner=function(n,i,s,u,c){var m=i.x-n.x,E=i.y-n.y,A=Math.atan2(E,m),U=s.x-n.x,Z=s.y-n.y,ut=Math.atan2(Z,U);u===B.CLOCKWISE?A<=ut&&(A+=2*Math.PI):A>=ut&&(A-=2*Math.PI),this._segList.addPt(i),this.addFilletArc(n,A,ut,u,c),this._segList.addPt(s)},pn.prototype.addOutsideTurn=function(n,i){if(this._offset0.p1.distance(this._offset1.p0)<this._distance*pn.OFFSET_SEGMENT_SEPARATION_FACTOR)return this._segList.addPt(this._offset0.p1),null;this._bufParams.getJoinStyle()===We.JOIN_MITRE?this.addMitreJoin(this._s1,this._offset0,this._offset1,this._distance):this._bufParams.getJoinStyle()===We.JOIN_BEVEL?this.addBevelJoin(this._offset0,this._offset1):(i&&this._segList.addPt(this._offset0.p1),this.addFilletCorner(this._s1,this._offset0.p1,this._offset1.p0,n,this._distance),this._segList.addPt(this._offset1.p0))},pn.prototype.createSquare=function(n){this._segList.addPt(new L(n.x+this._distance,n.y+this._distance)),this._segList.addPt(new L(n.x+this._distance,n.y-this._distance)),this._segList.addPt(new L(n.x-this._distance,n.y-this._distance)),this._segList.addPt(new L(n.x-this._distance,n.y+this._distance)),this._segList.closeRing()},pn.prototype.addSegments=function(n,i){this._segList.addPts(n,i)},pn.prototype.addFirstSegment=function(){this._segList.addPt(this._offset1.p0)},pn.prototype.addLastSegment=function(){this._segList.addPt(this._offset1.p1)},pn.prototype.initSideSegments=function(n,i,s){this._s1=n,this._s2=i,this._side=s,this._seg1.setCoordinates(n,i),this.computeOffsetSegment(this._seg1,s,this._distance,this._offset1)},pn.prototype.addLimitedMitreJoin=function(n,i,s,u){var c=this._seg0.p1,m=me.angle(c,this._seg0.p0),E=me.angleBetweenOriented(this._seg0.p0,c,this._seg1.p1)/2,A=me.normalize(m+E),U=me.normalize(A+Math.PI),Z=u*s,ut=s-Z*Math.abs(Math.sin(E)),ht=c.x+Z*Math.cos(U),At=c.y+Z*Math.sin(U),Rt=new L(ht,At),kt=new Zt(c,Rt),ee=kt.pointAlongOffset(1,ut),on=kt.pointAlongOffset(1,-ut);this._side===bt.LEFT?(this._segList.addPt(ee),this._segList.addPt(on)):(this._segList.addPt(on),this._segList.addPt(ee))},pn.prototype.computeOffsetSegment=function(n,i,s,u){var c=i===bt.LEFT?1:-1,m=n.p1.x-n.p0.x,E=n.p1.y-n.p0.y,A=Math.sqrt(m*m+E*E),U=c*s*m/A,Z=c*s*E/A;u.p0.x=n.p0.x-Z,u.p0.y=n.p0.y+U,u.p1.x=n.p1.x-Z,u.p1.y=n.p1.y+U},pn.prototype.addFilletArc=function(n,i,s,u,c){var m=u===B.CLOCKWISE?-1:1,E=Math.abs(i-s),A=Math.trunc(E/this._filletAngleQuantum+.5);if(A<1)return null;for(var U=E/A,Z=0,ut=new L;Z<E;){var ht=i+m*Z;ut.x=n.x+c*Math.cos(ht),ut.y=n.y+c*Math.sin(ht),this._segList.addPt(ut),Z+=U}},pn.prototype.addInsideTurn=function(n,i){if(this._li.computeIntersection(this._offset0.p0,this._offset0.p1,this._offset1.p0,this._offset1.p1),this._li.hasIntersection())this._segList.addPt(this._li.getIntersection(0));else if(this._hasNarrowConcaveAngle=!0,this._offset0.p1.distance(this._offset1.p0)<this._distance*pn.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR)this._segList.addPt(this._offset0.p1);else{if(this._segList.addPt(this._offset0.p1),this._closingSegLengthFactor>0){var s=new L((this._closingSegLengthFactor*this._offset0.p1.x+this._s1.x)/(this._closingSegLengthFactor+1),(this._closingSegLengthFactor*this._offset0.p1.y+this._s1.y)/(this._closingSegLengthFactor+1));this._segList.addPt(s);var u=new L((this._closingSegLengthFactor*this._offset1.p0.x+this._s1.x)/(this._closingSegLengthFactor+1),(this._closingSegLengthFactor*this._offset1.p0.y+this._s1.y)/(this._closingSegLengthFactor+1));this._segList.addPt(u)}else this._segList.addPt(this._s1);this._segList.addPt(this._offset1.p0)}},pn.prototype.createCircle=function(n){var i=new L(n.x+this._distance,n.y);this._segList.addPt(i),this.addFilletArc(n,0,2*Math.PI,-1,this._distance),this._segList.closeRing()},pn.prototype.addBevelJoin=function(n,i){this._segList.addPt(n.p1),this._segList.addPt(i.p0)},pn.prototype.init=function(n){this._distance=n,this._maxCurveSegmentError=n*(1-Math.cos(this._filletAngleQuantum/2)),this._segList=new Wr,this._segList.setPrecisionModel(this._precisionModel),this._segList.setMinimumVertexDistance(n*pn.CURVE_VERTEX_SNAP_DISTANCE_FACTOR)},pn.prototype.addCollinear=function(n){this._li.computeIntersection(this._s0,this._s1,this._s1,this._s2),this._li.getIntersectionNum()>=2&&(this._bufParams.getJoinStyle()===We.JOIN_BEVEL||this._bufParams.getJoinStyle()===We.JOIN_MITRE?(n&&this._segList.addPt(this._offset0.p1),this._segList.addPt(this._offset1.p0)):this.addFilletCorner(this._s1,this._offset0.p1,this._offset1.p0,B.CLOCKWISE,this._distance))},pn.prototype.closeRing=function(){this._segList.closeRing()},pn.prototype.hasNarrowConcaveAngle=function(){return this._hasNarrowConcaveAngle},pn.prototype.interfaces_=function(){return[]},pn.prototype.getClass=function(){return pn},Mu.OFFSET_SEGMENT_SEPARATION_FACTOR.get=function(){return .001},Mu.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR.get=function(){return .001},Mu.CURVE_VERTEX_SNAP_DISTANCE_FACTOR.get=function(){return 1e-6},Mu.MAX_CLOSING_SEG_LEN_FACTOR.get=function(){return 80},Object.defineProperties(pn,Mu);var Mr=function(){this._distance=0,this._precisionModel=null,this._bufParams=null;var n=arguments[0],i=arguments[1];this._precisionModel=n,this._bufParams=i};Mr.prototype.getOffsetCurve=function(n,i){if(this._distance=i,i===0)return null;var s=i<0,u=Math.abs(i),c=this.getSegGen(u);n.length<=1?this.computePointCurve(n[0],c):this.computeOffsetCurve(n,s,c);var m=c.getCoordinates();return s&&ft.reverse(m),m},Mr.prototype.computeSingleSidedBufferCurve=function(n,i,s){var u=this.simplifyTolerance(this._distance);if(i){s.addSegments(n,!0);var c=Mn.simplify(n,-u),m=c.length-1;s.initSideSegments(c[m],c[m-1],bt.LEFT),s.addFirstSegment();for(var E=m-2;E>=0;E--)s.addNextSegment(c[E],!0)}else{s.addSegments(n,!1);var A=Mn.simplify(n,u),U=A.length-1;s.initSideSegments(A[0],A[1],bt.LEFT),s.addFirstSegment();for(var Z=2;Z<=U;Z++)s.addNextSegment(A[Z],!0)}s.addLastSegment(),s.closeRing()},Mr.prototype.computeRingBufferCurve=function(n,i,s){var u=this.simplifyTolerance(this._distance);i===bt.RIGHT&&(u=-u);var c=Mn.simplify(n,u),m=c.length-1;s.initSideSegments(c[m-1],c[0],i);for(var E=1;E<=m;E++){var A=E!==1;s.addNextSegment(c[E],A)}s.closeRing()},Mr.prototype.computeLineBufferCurve=function(n,i){var s=this.simplifyTolerance(this._distance),u=Mn.simplify(n,s),c=u.length-1;i.initSideSegments(u[0],u[1],bt.LEFT);for(var m=2;m<=c;m++)i.addNextSegment(u[m],!0);i.addLastSegment(),i.addLineEndCap(u[c-1],u[c]);var E=Mn.simplify(n,-s),A=E.length-1;i.initSideSegments(E[A],E[A-1],bt.LEFT);for(var U=A-2;U>=0;U--)i.addNextSegment(E[U],!0);i.addLastSegment(),i.addLineEndCap(E[1],E[0]),i.closeRing()},Mr.prototype.computePointCurve=function(n,i){switch(this._bufParams.getEndCapStyle()){case We.CAP_ROUND:i.createCircle(n);break;case We.CAP_SQUARE:i.createSquare(n)}},Mr.prototype.getLineCurve=function(n,i){if(this._distance=i,i<0&&!this._bufParams.isSingleSided()||i===0)return null;var s=Math.abs(i),u=this.getSegGen(s);if(n.length<=1)this.computePointCurve(n[0],u);else if(this._bufParams.isSingleSided()){var c=i<0;this.computeSingleSidedBufferCurve(n,c,u)}else this.computeLineBufferCurve(n,u);return u.getCoordinates()},Mr.prototype.getBufferParameters=function(){return this._bufParams},Mr.prototype.simplifyTolerance=function(n){return n*this._bufParams.getSimplifyFactor()},Mr.prototype.getRingCurve=function(n,i,s){if(this._distance=s,n.length<=2)return this.getLineCurve(n,s);if(s===0)return Mr.copyCoordinates(n);var u=this.getSegGen(s);return this.computeRingBufferCurve(n,i,u),u.getCoordinates()},Mr.prototype.computeOffsetCurve=function(n,i,s){var u=this.simplifyTolerance(this._distance);if(i){var c=Mn.simplify(n,-u),m=c.length-1;s.initSideSegments(c[m],c[m-1],bt.LEFT),s.addFirstSegment();for(var E=m-2;E>=0;E--)s.addNextSegment(c[E],!0)}else{var A=Mn.simplify(n,u),U=A.length-1;s.initSideSegments(A[0],A[1],bt.LEFT),s.addFirstSegment();for(var Z=2;Z<=U;Z++)s.addNextSegment(A[Z],!0)}s.addLastSegment()},Mr.prototype.getSegGen=function(n){return new pn(this._precisionModel,this._bufParams,n)},Mr.prototype.interfaces_=function(){return[]},Mr.prototype.getClass=function(){return Mr},Mr.copyCoordinates=function(n){for(var i=new Array(n.length).fill(null),s=0;s<i.length;s++)i[s]=new L(n[s]);return i};var Is=function(){this._subgraphs=null,this._seg=new Zt,this._cga=new B;var n=arguments[0];this._subgraphs=n},Kd={DepthSegment:{configurable:!0}};Is.prototype.findStabbedSegments=function(){if(arguments.length===1){for(var n=arguments[0],i=new j,s=this._subgraphs.iterator();s.hasNext();){var u=s.next(),c=u.getEnvelope();n.y<c.getMinY()||n.y>c.getMaxY()||this.findStabbedSegments(n,u.getDirectedEdges(),i)}return i}if(arguments.length===3){if(X(arguments[2],wt)&&arguments[0]instanceof L&&arguments[1]instanceof xf){for(var m=arguments[0],E=arguments[1],A=arguments[2],U=E.getEdge().getCoordinates(),Z=0;Z<U.length-1;Z++)if(this._seg.p0=U[Z],this._seg.p1=U[Z+1],this._seg.p0.y>this._seg.p1.y&&this._seg.reverse(),!(Math.max(this._seg.p0.x,this._seg.p1.x)<m.x)&&!(this._seg.isHorizontal()||m.y<this._seg.p0.y||m.y>this._seg.p1.y||B.computeOrientation(this._seg.p0,this._seg.p1,m)===B.RIGHT)){var ut=E.getDepth(bt.LEFT);this._seg.p0.equals(U[Z])||(ut=E.getDepth(bt.RIGHT));var ht=new Ko(this._seg,ut);A.add(ht)}}else if(X(arguments[2],wt)&&arguments[0]instanceof L&&X(arguments[1],wt))for(var At=arguments[0],Rt=arguments[1],kt=arguments[2],ee=Rt.iterator();ee.hasNext();){var on=ee.next();on.isForward()&&this.findStabbedSegments(At,on,kt)}}},Is.prototype.getDepth=function(n){var i=this.findStabbedSegments(n);return i.size()===0?0:mi.min(i)._leftDepth},Is.prototype.interfaces_=function(){return[]},Is.prototype.getClass=function(){return Is},Kd.DepthSegment.get=function(){return Ko},Object.defineProperties(Is,Kd);var Ko=function(){this._upwardSeg=null,this._leftDepth=null;var n=arguments[0],i=arguments[1];this._upwardSeg=new Zt(n),this._leftDepth=i};Ko.prototype.compareTo=function(n){var i=n;if(this._upwardSeg.minX()>=i._upwardSeg.maxX())return 1;if(this._upwardSeg.maxX()<=i._upwardSeg.minX())return-1;var s=this._upwardSeg.orientationIndex(i._upwardSeg);return s!==0||(s=-1*i._upwardSeg.orientationIndex(this._upwardSeg))!=0?s:this._upwardSeg.compareTo(i._upwardSeg)},Ko.prototype.compareX=function(n,i){var s=n.p0.compareTo(i.p0);return s!==0?s:n.p1.compareTo(i.p1)},Ko.prototype.toString=function(){return this._upwardSeg.toString()},Ko.prototype.interfaces_=function(){return[F]},Ko.prototype.getClass=function(){return Ko};var qe=function(n,i,s){this.p0=n||null,this.p1=i||null,this.p2=s||null};qe.prototype.area=function(){return qe.area(this.p0,this.p1,this.p2)},qe.prototype.signedArea=function(){return qe.signedArea(this.p0,this.p1,this.p2)},qe.prototype.interpolateZ=function(n){if(n===null)throw new C(\\\"Supplied point is null.\\\");return qe.interpolateZ(n,this.p0,this.p1,this.p2)},qe.prototype.longestSideLength=function(){return qe.longestSideLength(this.p0,this.p1,this.p2)},qe.prototype.isAcute=function(){return qe.isAcute(this.p0,this.p1,this.p2)},qe.prototype.circumcentre=function(){return qe.circumcentre(this.p0,this.p1,this.p2)},qe.prototype.area3D=function(){return qe.area3D(this.p0,this.p1,this.p2)},qe.prototype.centroid=function(){return qe.centroid(this.p0,this.p1,this.p2)},qe.prototype.inCentre=function(){return qe.inCentre(this.p0,this.p1,this.p2)},qe.prototype.interfaces_=function(){return[]},qe.prototype.getClass=function(){return qe},qe.area=function(n,i,s){return Math.abs(((s.x-n.x)*(i.y-n.y)-(i.x-n.x)*(s.y-n.y))/2)},qe.signedArea=function(n,i,s){return((s.x-n.x)*(i.y-n.y)-(i.x-n.x)*(s.y-n.y))/2},qe.det=function(n,i,s,u){return n*u-i*s},qe.interpolateZ=function(n,i,s,u){var c=i.x,m=i.y,E=s.x-c,A=u.x-c,U=s.y-m,Z=u.y-m,ut=E*Z-A*U,ht=n.x-c,At=n.y-m,Rt=(Z*ht-A*At)/ut,kt=(-U*ht+E*At)/ut;return i.z+Rt*(s.z-i.z)+kt*(u.z-i.z)},qe.longestSideLength=function(n,i,s){var u=n.distance(i),c=i.distance(s),m=s.distance(n),E=u;return c>E&&(E=c),m>E&&(E=m),E},qe.isAcute=function(n,i,s){return!!me.isAcute(n,i,s)&&!!me.isAcute(i,s,n)&&!!me.isAcute(s,n,i)},qe.circumcentre=function(n,i,s){var u=s.x,c=s.y,m=n.x-u,E=n.y-c,A=i.x-u,U=i.y-c,Z=2*qe.det(m,E,A,U),ut=qe.det(E,m*m+E*E,U,A*A+U*U),ht=qe.det(m,m*m+E*E,A,A*A+U*U);return new L(u-ut/Z,c+ht/Z)},qe.perpendicularBisector=function(n,i){var s=i.x-n.x,u=i.y-n.y,c=new ne(n.x+s/2,n.y+u/2,1),m=new ne(n.x-u+s/2,n.y+s+u/2,1);return new ne(c,m)},qe.angleBisector=function(n,i,s){var u=i.distance(n),c=u/(u+i.distance(s)),m=s.x-n.x,E=s.y-n.y;return new L(n.x+c*m,n.y+c*E)},qe.area3D=function(n,i,s){var u=i.x-n.x,c=i.y-n.y,m=i.z-n.z,E=s.x-n.x,A=s.y-n.y,U=s.z-n.z,Z=c*U-m*A,ut=m*E-u*U,ht=u*A-c*E,At=Z*Z+ut*ut+ht*ht,Rt=Math.sqrt(At)/2;return Rt},qe.centroid=function(n,i,s){var u=(n.x+i.x+s.x)/3,c=(n.y+i.y+s.y)/3;return new L(u,c)},qe.inCentre=function(n,i,s){var u=i.distance(s),c=n.distance(s),m=n.distance(i),E=u+c+m,A=(u*n.x+c*i.x+m*s.x)/E,U=(u*n.y+c*i.y+m*s.y)/E;return new L(A,U)};var ii=function(){this._inputGeom=null,this._distance=null,this._curveBuilder=null,this._curveList=new j;var n=arguments[0],i=arguments[1],s=arguments[2];this._inputGeom=n,this._distance=i,this._curveBuilder=s};ii.prototype.addPoint=function(n){if(this._distance<=0)return null;var i=n.getCoordinates(),s=this._curveBuilder.getLineCurve(i,this._distance);this.addCurve(s,k.EXTERIOR,k.INTERIOR)},ii.prototype.addPolygon=function(n){var i=this._distance,s=bt.LEFT;this._distance<0&&(i=-this._distance,s=bt.RIGHT);var u=n.getExteriorRing(),c=ft.removeRepeatedPoints(u.getCoordinates());if(this._distance<0&&this.isErodedCompletely(u,this._distance)||this._distance<=0&&c.length<3)return null;this.addPolygonRing(c,i,s,k.EXTERIOR,k.INTERIOR);for(var m=0;m<n.getNumInteriorRing();m++){var E=n.getInteriorRingN(m),A=ft.removeRepeatedPoints(E.getCoordinates());this._distance>0&&this.isErodedCompletely(E,-this._distance)||this.addPolygonRing(A,i,bt.opposite(s),k.INTERIOR,k.EXTERIOR)}},ii.prototype.isTriangleErodedCompletely=function(n,i){var s=new qe(n[0],n[1],n[2]),u=s.inCentre();return B.distancePointLine(u,s.p0,s.p1)<Math.abs(i)},ii.prototype.addLineString=function(n){if(this._distance<=0&&!this._curveBuilder.getBufferParameters().isSingleSided())return null;var i=ft.removeRepeatedPoints(n.getCoordinates()),s=this._curveBuilder.getLineCurve(i,this._distance);this.addCurve(s,k.EXTERIOR,k.INTERIOR)},ii.prototype.addCurve=function(n,i,s){if(n===null||n.length<2)return null;var u=new wn(n,new rn(0,k.BOUNDARY,i,s));this._curveList.add(u)},ii.prototype.getCurves=function(){return this.add(this._inputGeom),this._curveList},ii.prototype.addPolygonRing=function(n,i,s,u,c){if(i===0&&n.length<sn.MINIMUM_VALID_SIZE)return null;var m=u,E=c;n.length>=sn.MINIMUM_VALID_SIZE&&B.isCCW(n)&&(m=c,E=u,s=bt.opposite(s));var A=this._curveBuilder.getRingCurve(n,s,i);this.addCurve(A,m,E)},ii.prototype.add=function(n){if(n.isEmpty())return null;n instanceof Vt?this.addPolygon(n):n instanceof Bt?this.addLineString(n):n instanceof Qt?this.addPoint(n):n instanceof fe?this.addCollection(n):n instanceof H?this.addCollection(n):n instanceof un?this.addCollection(n):n instanceof Vn&&this.addCollection(n)},ii.prototype.isErodedCompletely=function(n,i){var s=n.getCoordinates();if(s.length<4)return i<0;if(s.length===4)return this.isTriangleErodedCompletely(s,i);var u=n.getEnvelopeInternal(),c=Math.min(u.getHeight(),u.getWidth());return i<0&&2*Math.abs(i)>c},ii.prototype.addCollection=function(n){for(var i=0;i<n.getNumGeometries();i++){var s=n.getGeometryN(i);this.add(s)}},ii.prototype.interfaces_=function(){return[]},ii.prototype.getClass=function(){return ii};var ca=function(){};ca.prototype.locate=function(n){},ca.prototype.interfaces_=function(){return[]},ca.prototype.getClass=function(){return ca};var ki=function(){this._parent=null,this._atStart=null,this._max=null,this._index=null,this._subcollectionIterator=null;var n=arguments[0];this._parent=n,this._atStart=!0,this._index=0,this._max=n.getNumGeometries()};ki.prototype.next=function(){if(this._atStart)return this._atStart=!1,ki.isAtomic(this._parent)&&this._index++,this._parent;if(this._subcollectionIterator!==null){if(this._subcollectionIterator.hasNext())return this._subcollectionIterator.next();this._subcollectionIterator=null}if(this._index>=this._max)throw new o;var n=this._parent.getGeometryN(this._index++);return n instanceof Vn?(this._subcollectionIterator=new ki(n),this._subcollectionIterator.next()):n},ki.prototype.remove=function(){throw new Error(this.getClass().getName())},ki.prototype.hasNext=function(){if(this._atStart)return!0;if(this._subcollectionIterator!==null){if(this._subcollectionIterator.hasNext())return!0;this._subcollectionIterator=null}return!(this._index>=this._max)},ki.prototype.interfaces_=function(){return[Y]},ki.prototype.getClass=function(){return ki},ki.isAtomic=function(n){return!(n instanceof Vn)};var qr=function(){this._geom=null;var n=arguments[0];this._geom=n};qr.prototype.locate=function(n){return qr.locate(n,this._geom)},qr.prototype.interfaces_=function(){return[ca]},qr.prototype.getClass=function(){return qr},qr.isPointInRing=function(n,i){return!!i.getEnvelopeInternal().intersects(n)&&B.isPointInRing(n,i.getCoordinates())},qr.containsPointInPolygon=function(n,i){if(i.isEmpty())return!1;var s=i.getExteriorRing();if(!qr.isPointInRing(n,s))return!1;for(var u=0;u<i.getNumInteriorRing();u++){var c=i.getInteriorRingN(u);if(qr.isPointInRing(n,c))return!1}return!0},qr.containsPoint=function(n,i){if(i instanceof Vt)return qr.containsPointInPolygon(n,i);if(i instanceof Vn)for(var s=new ki(i);s.hasNext();){var u=s.next();if(u!==i&&qr.containsPoint(n,u))return!0}return!1},qr.locate=function(n,i){return i.isEmpty()?k.EXTERIOR:qr.containsPoint(n,i)?k.INTERIOR:k.EXTERIOR};var jn=function(){this._edgeMap=new _,this._edgeList=null,this._ptInAreaLocation=[k.NONE,k.NONE]};jn.prototype.getNextCW=function(n){this.getEdges();var i=this._edgeList.indexOf(n),s=i-1;return i===0&&(s=this._edgeList.size()-1),this._edgeList.get(s)},jn.prototype.propagateSideLabels=function(n){for(var i=k.NONE,s=this.iterator();s.hasNext();){var u=s.next().getLabel();u.isArea(n)&&u.getLocation(n,bt.LEFT)!==k.NONE&&(i=u.getLocation(n,bt.LEFT))}if(i===k.NONE)return null;for(var c=i,m=this.iterator();m.hasNext();){var E=m.next(),A=E.getLabel();if(A.getLocation(n,bt.ON)===k.NONE&&A.setLocation(n,bt.ON,c),A.isArea(n)){var U=A.getLocation(n,bt.LEFT),Z=A.getLocation(n,bt.RIGHT);if(Z!==k.NONE){if(Z!==c)throw new oo(\\\"side location conflict\\\",E.getCoordinate());U===k.NONE&&b.shouldNeverReachHere(\\\"found single null side (at \\\"+E.getCoordinate()+\\\")\\\"),c=U}else b.isTrue(A.getLocation(n,bt.LEFT)===k.NONE,\\\"found single null side\\\"),A.setLocation(n,bt.RIGHT,c),A.setLocation(n,bt.LEFT,c)}}},jn.prototype.getCoordinate=function(){var n=this.iterator();return n.hasNext()?n.next().getCoordinate():null},jn.prototype.print=function(n){Nt.out.println(\\\"EdgeEndStar: \\\"+this.getCoordinate());for(var i=this.iterator();i.hasNext();)i.next().print(n)},jn.prototype.isAreaLabelsConsistent=function(n){return this.computeEdgeEndLabels(n.getBoundaryNodeRule()),this.checkAreaLabelsConsistent(0)},jn.prototype.checkAreaLabelsConsistent=function(n){var i=this.getEdges();if(i.size()<=0)return!0;var s=i.size()-1,u=i.get(s).getLabel().getLocation(n,bt.LEFT);b.isTrue(u!==k.NONE,\\\"Found unlabelled area edge\\\");for(var c=u,m=this.iterator();m.hasNext();){var E=m.next().getLabel();b.isTrue(E.isArea(n),\\\"Found non-area edge\\\");var A=E.getLocation(n,bt.LEFT),U=E.getLocation(n,bt.RIGHT);if(A===U||U!==c)return!1;c=A}return!0},jn.prototype.findIndex=function(n){this.iterator();for(var i=0;i<this._edgeList.size();i++)if(this._edgeList.get(i)===n)return i;return-1},jn.prototype.iterator=function(){return this.getEdges().iterator()},jn.prototype.getEdges=function(){return this._edgeList===null&&(this._edgeList=new j(this._edgeMap.values())),this._edgeList},jn.prototype.getLocation=function(n,i,s){return this._ptInAreaLocation[n]===k.NONE&&(this._ptInAreaLocation[n]=qr.locate(i,s[n].getGeometry())),this._ptInAreaLocation[n]},jn.prototype.toString=function(){var n=new pt;n.append(\\\"EdgeEndStar: \\\"+this.getCoordinate()),n.append(`\\n`);for(var i=this.iterator();i.hasNext();){var s=i.next();n.append(s),n.append(`\\n`)}return n.toString()},jn.prototype.computeEdgeEndLabels=function(n){for(var i=this.iterator();i.hasNext();)i.next().computeLabel(n)},jn.prototype.computeLabelling=function(n){this.computeEdgeEndLabels(n[0].getBoundaryNodeRule()),this.propagateSideLabels(0),this.propagateSideLabels(1);for(var i=[!1,!1],s=this.iterator();s.hasNext();)for(var u=s.next().getLabel(),c=0;c<2;c++)u.isLine(c)&&u.getLocation(c)===k.BOUNDARY&&(i[c]=!0);for(var m=this.iterator();m.hasNext();)for(var E=m.next(),A=E.getLabel(),U=0;U<2;U++)if(A.isAnyNull(U)){var Z=k.NONE;if(i[U])Z=k.EXTERIOR;else{var ut=E.getCoordinate();Z=this.getLocation(U,ut,n)}A.setAllLocationsIfNull(U,Z)}},jn.prototype.getDegree=function(){return this._edgeMap.size()},jn.prototype.insertEdgeEnd=function(n,i){this._edgeMap.put(n,i),this._edgeList=null},jn.prototype.interfaces_=function(){return[]},jn.prototype.getClass=function(){return jn};var I1=function(n){function i(){n.call(this),this._resultAreaEdgeList=null,this._label=null,this._SCANNING_FOR_INCOMING=1,this._LINKING_TO_OUTGOING=2}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.linkResultDirectedEdges=function(){this.getResultAreaEdges();for(var s=null,u=null,c=this._SCANNING_FOR_INCOMING,m=0;m<this._resultAreaEdgeList.size();m++){var E=this._resultAreaEdgeList.get(m),A=E.getSym();if(E.getLabel().isArea())switch(s===null&&E.isInResult()&&(s=E),c){case this._SCANNING_FOR_INCOMING:if(!A.isInResult())continue;u=A,c=this._LINKING_TO_OUTGOING;break;case this._LINKING_TO_OUTGOING:if(!E.isInResult())continue;u.setNext(E),c=this._SCANNING_FOR_INCOMING}}if(c===this._LINKING_TO_OUTGOING){if(s===null)throw new oo(\\\"no outgoing dirEdge found\\\",this.getCoordinate());b.isTrue(s.isInResult(),\\\"unable to link last incoming dirEdge\\\"),u.setNext(s)}},i.prototype.insert=function(s){var u=s;this.insertEdgeEnd(u,u)},i.prototype.getRightmostEdge=function(){var s=this.getEdges(),u=s.size();if(u<1)return null;var c=s.get(0);if(u===1)return c;var m=s.get(u-1),E=c.getQuadrant(),A=m.getQuadrant();return ln.isNorthern(E)&&ln.isNorthern(A)?c:ln.isNorthern(E)||ln.isNorthern(A)?c.getDy()!==0?c:m.getDy()!==0?m:(b.shouldNeverReachHere(\\\"found two horizontal edges incident on node\\\"),null):m},i.prototype.print=function(s){Nt.out.println(\\\"DirectedEdgeStar: \\\"+this.getCoordinate());for(var u=this.iterator();u.hasNext();){var c=u.next();s.print(\\\"out \\\"),c.print(s),s.println(),s.print(\\\"in \\\"),c.getSym().print(s),s.println()}},i.prototype.getResultAreaEdges=function(){if(this._resultAreaEdgeList!==null)return this._resultAreaEdgeList;this._resultAreaEdgeList=new j;for(var s=this.iterator();s.hasNext();){var u=s.next();(u.isInResult()||u.getSym().isInResult())&&this._resultAreaEdgeList.add(u)}return this._resultAreaEdgeList},i.prototype.updateLabelling=function(s){for(var u=this.iterator();u.hasNext();){var c=u.next().getLabel();c.setAllLocationsIfNull(0,s.getLocation(0)),c.setAllLocationsIfNull(1,s.getLocation(1))}},i.prototype.linkAllDirectedEdges=function(){this.getEdges();for(var s=null,u=null,c=this._edgeList.size()-1;c>=0;c--){var m=this._edgeList.get(c),E=m.getSym();u===null&&(u=E),s!==null&&E.setNext(s),s=m}u.setNext(s)},i.prototype.computeDepths=function(){if(arguments.length===1){var s=arguments[0],u=this.findIndex(s),c=s.getDepth(bt.LEFT),m=s.getDepth(bt.RIGHT),E=this.computeDepths(u+1,this._edgeList.size(),c);if(this.computeDepths(0,u,E)!==m)throw new oo(\\\"depth mismatch at \\\"+s.getCoordinate())}else if(arguments.length===3){for(var A=arguments[0],U=arguments[1],Z=arguments[2],ut=A;ut<U;ut++){var ht=this._edgeList.get(ut);ht.setEdgeDepths(bt.RIGHT,Z),Z=ht.getDepth(bt.LEFT)}return Z}},i.prototype.mergeSymLabels=function(){for(var s=this.iterator();s.hasNext();){var u=s.next();u.getLabel().merge(u.getSym().getLabel())}},i.prototype.linkMinimalDirectedEdges=function(s){for(var u=null,c=null,m=this._SCANNING_FOR_INCOMING,E=this._resultAreaEdgeList.size()-1;E>=0;E--){var A=this._resultAreaEdgeList.get(E),U=A.getSym();switch(u===null&&A.getEdgeRing()===s&&(u=A),m){case this._SCANNING_FOR_INCOMING:if(U.getEdgeRing()!==s)continue;c=U,m=this._LINKING_TO_OUTGOING;break;case this._LINKING_TO_OUTGOING:if(A.getEdgeRing()!==s)continue;c.setNextMin(A),m=this._SCANNING_FOR_INCOMING}}m===this._LINKING_TO_OUTGOING&&(b.isTrue(u!==null,\\\"found null for first outgoing dirEdge\\\"),b.isTrue(u.getEdgeRing()===s,\\\"unable to link last incoming dirEdge\\\"),c.setNextMin(u))},i.prototype.getOutgoingDegree=function(){if(arguments.length===0){for(var s=0,u=this.iterator();u.hasNext();)u.next().isInResult()&&s++;return s}if(arguments.length===1){for(var c=arguments[0],m=0,E=this.iterator();E.hasNext();)E.next().getEdgeRing()===c&&m++;return m}},i.prototype.getLabel=function(){return this._label},i.prototype.findCoveredLineEdges=function(){for(var s=k.NONE,u=this.iterator();u.hasNext();){var c=u.next(),m=c.getSym();if(!c.isLineEdge()){if(c.isInResult()){s=k.INTERIOR;break}if(m.isInResult()){s=k.EXTERIOR;break}}}if(s===k.NONE)return null;for(var E=s,A=this.iterator();A.hasNext();){var U=A.next(),Z=U.getSym();U.isLineEdge()?U.getEdge().setCovered(E===k.INTERIOR):(U.isInResult()&&(E=k.EXTERIOR),Z.isInResult()&&(E=k.INTERIOR))}},i.prototype.computeLabelling=function(s){n.prototype.computeLabelling.call(this,s),this._label=new rn(k.NONE);for(var u=this.iterator();u.hasNext();)for(var c=u.next().getEdge().getLabel(),m=0;m<2;m++){var E=c.getLocation(m);E!==k.INTERIOR&&E!==k.BOUNDARY||this._label.setLocation(m,k.INTERIOR)}},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i}(jn),jd=function(n){function i(){n.apply(this,arguments)}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.createNode=function(s){return new El(s,new I1)},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i}(aa),To=function n(){this._pts=null,this._orientation=null;var i=arguments[0];this._pts=i,this._orientation=n.orientation(i)};To.prototype.compareTo=function(n){var i=n;return To.compareOriented(this._pts,this._orientation,i._pts,i._orientation)},To.prototype.interfaces_=function(){return[F]},To.prototype.getClass=function(){return To},To.orientation=function(n){return ft.increasingDirection(n)===1},To.compareOriented=function(n,i,s,u){for(var c=i?1:-1,m=u?1:-1,E=i?n.length:-1,A=u?s.length:-1,U=i?0:n.length-1,Z=u?0:s.length-1;;){var ut=n[U].compareTo(s[Z]);if(ut!==0)return ut;var ht=(U+=c)===E,At=(Z+=m)===A;if(ht&&!At)return-1;if(!ht&&At)return 1;if(ht&&At)return 0}};var gi=function(){this._edges=new j,this._ocaMap=new _};gi.prototype.print=function(n){n.print(\\\"MULTILINESTRING ( \\\");for(var i=0;i<this._edges.size();i++){var s=this._edges.get(i);i>0&&n.print(\\\",\\\"),n.print(\\\"(\\\");for(var u=s.getCoordinates(),c=0;c<u.length;c++)c>0&&n.print(\\\",\\\"),n.print(u[c].x+\\\" \\\"+u[c].y);n.println(\\\")\\\")}n.print(\\\") \\\")},gi.prototype.addAll=function(n){for(var i=n.iterator();i.hasNext();)this.add(i.next())},gi.prototype.findEdgeIndex=function(n){for(var i=0;i<this._edges.size();i++)if(this._edges.get(i).equals(n))return i;return-1},gi.prototype.iterator=function(){return this._edges.iterator()},gi.prototype.getEdges=function(){return this._edges},gi.prototype.get=function(n){return this._edges.get(n)},gi.prototype.findEqualEdge=function(n){var i=new To(n.getCoordinates());return this._ocaMap.get(i)},gi.prototype.add=function(n){this._edges.add(n);var i=new To(n.getCoordinates());this._ocaMap.put(i,n)},gi.prototype.interfaces_=function(){return[]},gi.prototype.getClass=function(){return gi};var jo=function(){};jo.prototype.processIntersections=function(n,i,s,u){},jo.prototype.isDone=function(){},jo.prototype.interfaces_=function(){return[]},jo.prototype.getClass=function(){return jo};var Xr=function(){this._hasIntersection=!1,this._hasProper=!1,this._hasProperInterior=!1,this._hasInterior=!1,this._properIntersectionPoint=null,this._li=null,this._isSelfIntersection=null,this.numIntersections=0,this.numInteriorIntersections=0,this.numProperIntersections=0,this.numTests=0;var n=arguments[0];this._li=n};Xr.prototype.isTrivialIntersection=function(n,i,s,u){if(n===s&&this._li.getIntersectionNum()===1){if(Xr.isAdjacentSegments(i,u))return!0;if(n.isClosed()){var c=n.size()-1;if(i===0&&u===c||u===0&&i===c)return!0}}return!1},Xr.prototype.getProperIntersectionPoint=function(){return this._properIntersectionPoint},Xr.prototype.hasProperInteriorIntersection=function(){return this._hasProperInterior},Xr.prototype.getLineIntersector=function(){return this._li},Xr.prototype.hasProperIntersection=function(){return this._hasProper},Xr.prototype.processIntersections=function(n,i,s,u){if(n===s&&i===u)return null;this.numTests++;var c=n.getCoordinates()[i],m=n.getCoordinates()[i+1],E=s.getCoordinates()[u],A=s.getCoordinates()[u+1];this._li.computeIntersection(c,m,E,A),this._li.hasIntersection()&&(this.numIntersections++,this._li.isInteriorIntersection()&&(this.numInteriorIntersections++,this._hasInterior=!0),this.isTrivialIntersection(n,i,s,u)||(this._hasIntersection=!0,n.addIntersections(this._li,i,0),s.addIntersections(this._li,u,1),this._li.isProper()&&(this.numProperIntersections++,this._hasProper=!0,this._hasProperInterior=!0)))},Xr.prototype.hasIntersection=function(){return this._hasIntersection},Xr.prototype.isDone=function(){return!1},Xr.prototype.hasInteriorIntersection=function(){return this._hasInterior},Xr.prototype.interfaces_=function(){return[jo]},Xr.prototype.getClass=function(){return Xr},Xr.isAdjacentSegments=function(n,i){return Math.abs(n-i)===1};var Ci=function(){this.coord=null,this.segmentIndex=null,this.dist=null;var n=arguments[0],i=arguments[1],s=arguments[2];this.coord=new L(n),this.segmentIndex=i,this.dist=s};Ci.prototype.getSegmentIndex=function(){return this.segmentIndex},Ci.prototype.getCoordinate=function(){return this.coord},Ci.prototype.print=function(n){n.print(this.coord),n.print(\\\" seg # = \\\"+this.segmentIndex),n.println(\\\" dist = \\\"+this.dist)},Ci.prototype.compareTo=function(n){var i=n;return this.compare(i.segmentIndex,i.dist)},Ci.prototype.isEndPoint=function(n){return this.segmentIndex===0&&this.dist===0||this.segmentIndex===n},Ci.prototype.toString=function(){return this.coord+\\\" seg # = \\\"+this.segmentIndex+\\\" dist = \\\"+this.dist},Ci.prototype.getDistance=function(){return this.dist},Ci.prototype.compare=function(n,i){return this.segmentIndex<n?-1:this.segmentIndex>n?1:this.dist<i?-1:this.dist>i?1:0},Ci.prototype.interfaces_=function(){return[F]},Ci.prototype.getClass=function(){return Ci};var Gi=function(){this._nodeMap=new _,this.edge=null;var n=arguments[0];this.edge=n};Gi.prototype.print=function(n){n.println(\\\"Intersections:\\\");for(var i=this.iterator();i.hasNext();)i.next().print(n)},Gi.prototype.iterator=function(){return this._nodeMap.values().iterator()},Gi.prototype.addSplitEdges=function(n){this.addEndpoints();for(var i=this.iterator(),s=i.next();i.hasNext();){var u=i.next(),c=this.createSplitEdge(s,u);n.add(c),s=u}},Gi.prototype.addEndpoints=function(){var n=this.edge.pts.length-1;this.add(this.edge.pts[0],0,0),this.add(this.edge.pts[n],n,0)},Gi.prototype.createSplitEdge=function(n,i){var s=i.segmentIndex-n.segmentIndex+2,u=this.edge.pts[i.segmentIndex],c=i.dist>0||!i.coord.equals2D(u);c||s--;var m=new Array(s).fill(null),E=0;m[E++]=new L(n.coord);for(var A=n.segmentIndex+1;A<=i.segmentIndex;A++)m[E++]=this.edge.pts[A];return c&&(m[E]=i.coord),new Sl(m,new rn(this.edge._label))},Gi.prototype.add=function(n,i,s){var u=new Ci(n,i,s),c=this._nodeMap.get(u);return c!==null?c:(this._nodeMap.put(u,u),u)},Gi.prototype.isIntersection=function(n){for(var i=this.iterator();i.hasNext();)if(i.next().coord.equals(n))return!0;return!1},Gi.prototype.interfaces_=function(){return[]},Gi.prototype.getClass=function(){return Gi};var Qo=function(){};Qo.prototype.getChainStartIndices=function(n){var i=0,s=new j;s.add(new et(i));do{var u=this.findChainEnd(n,i);s.add(new et(u)),i=u}while(i<n.length-1);return Qo.toIntArray(s)},Qo.prototype.findChainEnd=function(n,i){for(var s=ln.quadrant(n[i],n[i+1]),u=i+1;u<n.length&&ln.quadrant(n[u-1],n[u])===s;)u++;return u-1},Qo.prototype.interfaces_=function(){return[]},Qo.prototype.getClass=function(){return Qo},Qo.toIntArray=function(n){for(var i=new Array(n.size()).fill(null),s=0;s<i.length;s++)i[s]=n.get(s).intValue();return i};var uo=function(){this.e=null,this.pts=null,this.startIndex=null,this.env1=new Pt,this.env2=new Pt;var n=arguments[0];this.e=n,this.pts=n.getCoordinates();var i=new Qo;this.startIndex=i.getChainStartIndices(this.pts)};uo.prototype.getCoordinates=function(){return this.pts},uo.prototype.getMaxX=function(n){var i=this.pts[this.startIndex[n]].x,s=this.pts[this.startIndex[n+1]].x;return i>s?i:s},uo.prototype.getMinX=function(n){var i=this.pts[this.startIndex[n]].x,s=this.pts[this.startIndex[n+1]].x;return i<s?i:s},uo.prototype.computeIntersectsForChain=function(){if(arguments.length===4){var n=arguments[0],i=arguments[1],s=arguments[2],u=arguments[3];this.computeIntersectsForChain(this.startIndex[n],this.startIndex[n+1],i,i.startIndex[s],i.startIndex[s+1],u)}else if(arguments.length===6){var c=arguments[0],m=arguments[1],E=arguments[2],A=arguments[3],U=arguments[4],Z=arguments[5],ut=this.pts[c],ht=this.pts[m],At=E.pts[A],Rt=E.pts[U];if(m-c==1&&U-A==1)return Z.addIntersections(this.e,c,E.e,A),null;if(this.env1.init(ut,ht),this.env2.init(At,Rt),!this.env1.intersects(this.env2))return null;var kt=Math.trunc((c+m)/2),ee=Math.trunc((A+U)/2);c<kt&&(A<ee&&this.computeIntersectsForChain(c,kt,E,A,ee,Z),ee<U&&this.computeIntersectsForChain(c,kt,E,ee,U,Z)),kt<m&&(A<ee&&this.computeIntersectsForChain(kt,m,E,A,ee,Z),ee<U&&this.computeIntersectsForChain(kt,m,E,ee,U,Z))}},uo.prototype.getStartIndexes=function(){return this.startIndex},uo.prototype.computeIntersects=function(n,i){for(var s=0;s<this.startIndex.length-1;s++)for(var u=0;u<n.startIndex.length-1;u++)this.computeIntersectsForChain(s,n,u,i)},uo.prototype.interfaces_=function(){return[]},uo.prototype.getClass=function(){return uo};var Hn=function n(){this._depth=Array(2).fill().map(function(){return Array(3)});for(var i=0;i<2;i++)for(var s=0;s<3;s++)this._depth[i][s]=n.NULL_VALUE},Qd={NULL_VALUE:{configurable:!0}};Hn.prototype.getDepth=function(n,i){return this._depth[n][i]},Hn.prototype.setDepth=function(n,i,s){this._depth[n][i]=s},Hn.prototype.isNull=function(){if(arguments.length===0){for(var n=0;n<2;n++)for(var i=0;i<3;i++)if(this._depth[n][i]!==Hn.NULL_VALUE)return!1;return!0}if(arguments.length===1){var s=arguments[0];return this._depth[s][1]===Hn.NULL_VALUE}if(arguments.length===2){var u=arguments[0],c=arguments[1];return this._depth[u][c]===Hn.NULL_VALUE}},Hn.prototype.normalize=function(){for(var n=0;n<2;n++)if(!this.isNull(n)){var i=this._depth[n][1];this._depth[n][2]<i&&(i=this._depth[n][2]),i<0&&(i=0);for(var s=1;s<3;s++){var u=0;this._depth[n][s]>i&&(u=1),this._depth[n][s]=u}}},Hn.prototype.getDelta=function(n){return this._depth[n][bt.RIGHT]-this._depth[n][bt.LEFT]},Hn.prototype.getLocation=function(n,i){return this._depth[n][i]<=0?k.EXTERIOR:k.INTERIOR},Hn.prototype.toString=function(){return\\\"A: \\\"+this._depth[0][1]+\\\",\\\"+this._depth[0][2]+\\\" B: \\\"+this._depth[1][1]+\\\",\\\"+this._depth[1][2]},Hn.prototype.add=function(){if(arguments.length===1)for(var n=arguments[0],i=0;i<2;i++)for(var s=1;s<3;s++){var u=n.getLocation(i,s);u!==k.EXTERIOR&&u!==k.INTERIOR||(this.isNull(i,s)?this._depth[i][s]=Hn.depthAtLocation(u):this._depth[i][s]+=Hn.depthAtLocation(u))}else if(arguments.length===3){var c=arguments[0],m=arguments[1];arguments[2]===k.INTERIOR&&this._depth[c][m]++}},Hn.prototype.interfaces_=function(){return[]},Hn.prototype.getClass=function(){return Hn},Hn.depthAtLocation=function(n){return n===k.EXTERIOR?0:n===k.INTERIOR?1:Hn.NULL_VALUE},Qd.NULL_VALUE.get=function(){return-1},Object.defineProperties(Hn,Qd);var Sl=function(n){function i(){if(n.call(this),this.pts=null,this._env=null,this.eiList=new Gi(this),this._name=null,this._mce=null,this._isIsolated=!0,this._depth=new Hn,this._depthDelta=0,arguments.length===1){var s=arguments[0];i.call(this,s,null)}else if(arguments.length===2){var u=arguments[0],c=arguments[1];this.pts=u,this._label=c}}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.getDepth=function(){return this._depth},i.prototype.getCollapsedEdge=function(){var s=new Array(2).fill(null);return s[0]=this.pts[0],s[1]=this.pts[1],new i(s,rn.toLineLabel(this._label))},i.prototype.isIsolated=function(){return this._isIsolated},i.prototype.getCoordinates=function(){return this.pts},i.prototype.setIsolated=function(s){this._isIsolated=s},i.prototype.setName=function(s){this._name=s},i.prototype.equals=function(s){if(!(s instanceof i))return!1;var u=s;if(this.pts.length!==u.pts.length)return!1;for(var c=!0,m=!0,E=this.pts.length,A=0;A<this.pts.length;A++)if(this.pts[A].equals2D(u.pts[A])||(c=!1),this.pts[A].equals2D(u.pts[--E])||(m=!1),!c&&!m)return!1;return!0},i.prototype.getCoordinate=function(){if(arguments.length===0)return this.pts.length>0?this.pts[0]:null;if(arguments.length===1){var s=arguments[0];return this.pts[s]}},i.prototype.print=function(s){s.print(\\\"edge \\\"+this._name+\\\": \\\"),s.print(\\\"LINESTRING (\\\");for(var u=0;u<this.pts.length;u++)u>0&&s.print(\\\",\\\"),s.print(this.pts[u].x+\\\" \\\"+this.pts[u].y);s.print(\\\") \\\"+this._label+\\\" \\\"+this._depthDelta)},i.prototype.computeIM=function(s){i.updateIM(this._label,s)},i.prototype.isCollapsed=function(){return!!this._label.isArea()&&this.pts.length===3&&!!this.pts[0].equals(this.pts[2])},i.prototype.isClosed=function(){return this.pts[0].equals(this.pts[this.pts.length-1])},i.prototype.getMaximumSegmentIndex=function(){return this.pts.length-1},i.prototype.getDepthDelta=function(){return this._depthDelta},i.prototype.getNumPoints=function(){return this.pts.length},i.prototype.printReverse=function(s){s.print(\\\"edge \\\"+this._name+\\\": \\\");for(var u=this.pts.length-1;u>=0;u--)s.print(this.pts[u]+\\\" \\\");s.println(\\\"\\\")},i.prototype.getMonotoneChainEdge=function(){return this._mce===null&&(this._mce=new uo(this)),this._mce},i.prototype.getEnvelope=function(){if(this._env===null){this._env=new Pt;for(var s=0;s<this.pts.length;s++)this._env.expandToInclude(this.pts[s])}return this._env},i.prototype.addIntersection=function(s,u,c,m){var E=new L(s.getIntersection(m)),A=u,U=s.getEdgeDistance(c,m),Z=A+1;if(Z<this.pts.length){var ut=this.pts[Z];E.equals2D(ut)&&(A=Z,U=0)}this.eiList.add(E,A,U)},i.prototype.toString=function(){var s=new pt;s.append(\\\"edge \\\"+this._name+\\\": \\\"),s.append(\\\"LINESTRING (\\\");for(var u=0;u<this.pts.length;u++)u>0&&s.append(\\\",\\\"),s.append(this.pts[u].x+\\\" \\\"+this.pts[u].y);return s.append(\\\") \\\"+this._label+\\\" \\\"+this._depthDelta),s.toString()},i.prototype.isPointwiseEqual=function(s){if(this.pts.length!==s.pts.length)return!1;for(var u=0;u<this.pts.length;u++)if(!this.pts[u].equals2D(s.pts[u]))return!1;return!0},i.prototype.setDepthDelta=function(s){this._depthDelta=s},i.prototype.getEdgeIntersectionList=function(){return this.eiList},i.prototype.addIntersections=function(s,u,c){for(var m=0;m<s.getIntersectionNum();m++)this.addIntersection(s,u,c,m)},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i.updateIM=function(){if(arguments.length!==2)return n.prototype.updateIM.apply(this,arguments);var s=arguments[0],u=arguments[1];u.setAtLeastIfValid(s.getLocation(0,bt.ON),s.getLocation(1,bt.ON),1),s.isArea()&&(u.setAtLeastIfValid(s.getLocation(0,bt.LEFT),s.getLocation(1,bt.LEFT),2),u.setAtLeastIfValid(s.getLocation(0,bt.RIGHT),s.getLocation(1,bt.RIGHT),2))},i}(Hr),ur=function(n){this._workingPrecisionModel=null,this._workingNoder=null,this._geomFact=null,this._graph=null,this._edgeList=new gi,this._bufParams=n||null};ur.prototype.setWorkingPrecisionModel=function(n){this._workingPrecisionModel=n},ur.prototype.insertUniqueEdge=function(n){var i=this._edgeList.findEqualEdge(n);if(i!==null){var s=i.getLabel(),u=n.getLabel();i.isPointwiseEqual(n)||(u=new rn(n.getLabel())).flip(),s.merge(u);var c=ur.depthDelta(u),m=i.getDepthDelta()+c;i.setDepthDelta(m)}else this._edgeList.add(n),n.setDepthDelta(ur.depthDelta(n.getLabel()))},ur.prototype.buildSubgraphs=function(n,i){for(var s=new j,u=n.iterator();u.hasNext();){var c=u.next(),m=c.getRightmostCoordinate(),E=new Is(s).getDepth(m);c.computeDepth(E),c.findResultEdges(),s.add(c),i.add(c.getDirectedEdges(),c.getNodes())}},ur.prototype.createSubgraphs=function(n){for(var i=new j,s=n.getNodes().iterator();s.hasNext();){var u=s.next();if(!u.isVisited()){var c=new sr;c.create(u),i.add(c)}}return mi.sort(i,mi.reverseOrder()),i},ur.prototype.createEmptyResultGeometry=function(){return this._geomFact.createPolygon()},ur.prototype.getNoder=function(n){if(this._workingNoder!==null)return this._workingNoder;var i=new Ef,s=new J;return s.setPrecisionModel(n),i.setSegmentIntersector(new Xr(s)),i},ur.prototype.buffer=function(n,i){var s=this._workingPrecisionModel;s===null&&(s=n.getPrecisionModel()),this._geomFact=n.getFactory();var u=new Mr(s,this._bufParams),c=new ii(n,i,u).getCurves();if(c.size()<=0)return this.createEmptyResultGeometry();this.computeNodedEdges(c,s),this._graph=new _n(new jd),this._graph.addEdges(this._edgeList.getEdges());var m=this.createSubgraphs(this._graph),E=new Nr(this._geomFact);this.buildSubgraphs(m,E);var A=E.getPolygons();return A.size()<=0?this.createEmptyResultGeometry():this._geomFact.buildGeometry(A)},ur.prototype.computeNodedEdges=function(n,i){var s=this.getNoder(i);s.computeNodes(n);for(var u=s.getNodedSubstrings().iterator();u.hasNext();){var c=u.next(),m=c.getCoordinates();if(m.length!==2||!m[0].equals2D(m[1])){var E=c.getData(),A=new Sl(c.getCoordinates(),new rn(E));this.insertUniqueEdge(A)}}},ur.prototype.setNoder=function(n){this._workingNoder=n},ur.prototype.interfaces_=function(){return[]},ur.prototype.getClass=function(){return ur},ur.depthDelta=function(n){var i=n.getLocation(0,bt.LEFT),s=n.getLocation(0,bt.RIGHT);return i===k.INTERIOR&&s===k.EXTERIOR?1:i===k.EXTERIOR&&s===k.INTERIOR?-1:0},ur.convertSegStrings=function(n){for(var i=new le,s=new j;n.hasNext();){var u=n.next(),c=i.createLineString(u.getCoordinates());s.add(c)}return i.buildGeometry(s)};var Ao=function(){if(this._noder=null,this._scaleFactor=null,this._offsetX=null,this._offsetY=null,this._isScaled=!1,arguments.length===2){var n=arguments[0],i=arguments[1];this._noder=n,this._scaleFactor=i,this._offsetX=0,this._offsetY=0,this._isScaled=!this.isIntegerPrecision()}else if(arguments.length===4){var s=arguments[0],u=arguments[1],c=arguments[2],m=arguments[3];this._noder=s,this._scaleFactor=u,this._offsetX=c,this._offsetY=m,this._isScaled=!this.isIntegerPrecision()}};Ao.prototype.rescale=function(){if(X(arguments[0],Ot))for(var n=arguments[0].iterator();n.hasNext();){var i=n.next();this.rescale(i.getCoordinates())}else if(arguments[0]instanceof Array){for(var s=arguments[0],u=0;u<s.length;u++)s[u].x=s[u].x/this._scaleFactor+this._offsetX,s[u].y=s[u].y/this._scaleFactor+this._offsetY;s.length===2&&s[0].equals2D(s[1])&&Nt.out.println(s)}},Ao.prototype.scale=function(){if(X(arguments[0],Ot)){for(var n=arguments[0],i=new j,s=n.iterator();s.hasNext();){var u=s.next();i.add(new wn(this.scale(u.getCoordinates()),u.getData()))}return i}if(arguments[0]instanceof Array){for(var c=arguments[0],m=new Array(c.length).fill(null),E=0;E<c.length;E++)m[E]=new L(Math.round((c[E].x-this._offsetX)*this._scaleFactor),Math.round((c[E].y-this._offsetY)*this._scaleFactor),c[E].z);return ft.removeRepeatedPoints(m)}},Ao.prototype.isIntegerPrecision=function(){return this._scaleFactor===1},Ao.prototype.getNodedSubstrings=function(){var n=this._noder.getNodedSubstrings();return this._isScaled&&this.rescale(n),n},Ao.prototype.computeNodes=function(n){var i=n;this._isScaled&&(i=this.scale(n)),this._noder.computeNodes(i)},Ao.prototype.interfaces_=function(){return[$o]},Ao.prototype.getClass=function(){return Ao};var Pi=function(){this._li=new J,this._segStrings=null;var n=arguments[0];this._segStrings=n},tm={fact:{configurable:!0}};Pi.prototype.checkEndPtVertexIntersections=function(){if(arguments.length===0)for(var n=this._segStrings.iterator();n.hasNext();){var i=n.next().getCoordinates();this.checkEndPtVertexIntersections(i[0],this._segStrings),this.checkEndPtVertexIntersections(i[i.length-1],this._segStrings)}else if(arguments.length===2){for(var s=arguments[0],u=arguments[1].iterator();u.hasNext();)for(var c=u.next().getCoordinates(),m=1;m<c.length-1;m++)if(c[m].equals(s))throw new $(\\\"found endpt/interior pt intersection at index \\\"+m+\\\" :pt \\\"+s)}},Pi.prototype.checkInteriorIntersections=function(){if(arguments.length===0)for(var n=this._segStrings.iterator();n.hasNext();)for(var i=n.next(),s=this._segStrings.iterator();s.hasNext();){var u=s.next();this.checkInteriorIntersections(i,u)}else if(arguments.length===2)for(var c=arguments[0],m=arguments[1],E=c.getCoordinates(),A=m.getCoordinates(),U=0;U<E.length-1;U++)for(var Z=0;Z<A.length-1;Z++)this.checkInteriorIntersections(c,U,m,Z);else if(arguments.length===4){var ut=arguments[0],ht=arguments[1],At=arguments[2],Rt=arguments[3];if(ut===At&&ht===Rt)return null;var kt=ut.getCoordinates()[ht],ee=ut.getCoordinates()[ht+1],on=At.getCoordinates()[Rt],In=At.getCoordinates()[Rt+1];if(this._li.computeIntersection(kt,ee,on,In),this._li.hasIntersection()&&(this._li.isProper()||this.hasInteriorIntersection(this._li,kt,ee)||this.hasInteriorIntersection(this._li,on,In)))throw new $(\\\"found non-noded intersection at \\\"+kt+\\\"-\\\"+ee+\\\" and \\\"+on+\\\"-\\\"+In)}},Pi.prototype.checkValid=function(){this.checkEndPtVertexIntersections(),this.checkInteriorIntersections(),this.checkCollapses()},Pi.prototype.checkCollapses=function(){if(arguments.length===0)for(var n=this._segStrings.iterator();n.hasNext();){var i=n.next();this.checkCollapses(i)}else if(arguments.length===1)for(var s=arguments[0].getCoordinates(),u=0;u<s.length-2;u++)this.checkCollapse(s[u],s[u+1],s[u+2])},Pi.prototype.hasInteriorIntersection=function(n,i,s){for(var u=0;u<n.getIntersectionNum();u++){var c=n.getIntersection(u);if(!c.equals(i)&&!c.equals(s))return!0}return!1},Pi.prototype.checkCollapse=function(n,i,s){if(n.equals(s))throw new $(\\\"found non-noded collapse at \\\"+Pi.fact.createLineString([n,i,s]))},Pi.prototype.interfaces_=function(){return[]},Pi.prototype.getClass=function(){return Pi},tm.fact.get=function(){return new le},Object.defineProperties(Pi,tm);var Sr=function(){this._li=null,this._pt=null,this._originalPt=null,this._ptScaled=null,this._p0Scaled=null,this._p1Scaled=null,this._scaleFactor=null,this._minx=null,this._maxx=null,this._miny=null,this._maxy=null,this._corner=new Array(4).fill(null),this._safeEnv=null;var n=arguments[0],i=arguments[1],s=arguments[2];if(this._originalPt=n,this._pt=n,this._scaleFactor=i,this._li=s,i<=0)throw new C(\\\"Scale factor must be non-zero\\\");i!==1&&(this._pt=new L(this.scale(n.x),this.scale(n.y)),this._p0Scaled=new L,this._p1Scaled=new L),this.initCorners(this._pt)},em={SAFE_ENV_EXPANSION_FACTOR:{configurable:!0}};Sr.prototype.intersectsScaled=function(n,i){var s=Math.min(n.x,i.x),u=Math.max(n.x,i.x),c=Math.min(n.y,i.y),m=Math.max(n.y,i.y),E=this._maxx<s||this._minx>u||this._maxy<c||this._miny>m;if(E)return!1;var A=this.intersectsToleranceSquare(n,i);return b.isTrue(!(E&&A),\\\"Found bad envelope test\\\"),A},Sr.prototype.initCorners=function(n){this._minx=n.x-.5,this._maxx=n.x+.5,this._miny=n.y-.5,this._maxy=n.y+.5,this._corner[0]=new L(this._maxx,this._maxy),this._corner[1]=new L(this._minx,this._maxy),this._corner[2]=new L(this._minx,this._miny),this._corner[3]=new L(this._maxx,this._miny)},Sr.prototype.intersects=function(n,i){return this._scaleFactor===1?this.intersectsScaled(n,i):(this.copyScaled(n,this._p0Scaled),this.copyScaled(i,this._p1Scaled),this.intersectsScaled(this._p0Scaled,this._p1Scaled))},Sr.prototype.scale=function(n){return Math.round(n*this._scaleFactor)},Sr.prototype.getCoordinate=function(){return this._originalPt},Sr.prototype.copyScaled=function(n,i){i.x=this.scale(n.x),i.y=this.scale(n.y)},Sr.prototype.getSafeEnvelope=function(){if(this._safeEnv===null){var n=Sr.SAFE_ENV_EXPANSION_FACTOR/this._scaleFactor;this._safeEnv=new Pt(this._originalPt.x-n,this._originalPt.x+n,this._originalPt.y-n,this._originalPt.y+n)}return this._safeEnv},Sr.prototype.intersectsPixelClosure=function(n,i){return this._li.computeIntersection(n,i,this._corner[0],this._corner[1]),!!this._li.hasIntersection()||(this._li.computeIntersection(n,i,this._corner[1],this._corner[2]),!!this._li.hasIntersection()||(this._li.computeIntersection(n,i,this._corner[2],this._corner[3]),!!this._li.hasIntersection()||(this._li.computeIntersection(n,i,this._corner[3],this._corner[0]),!!this._li.hasIntersection())))},Sr.prototype.intersectsToleranceSquare=function(n,i){var s=!1,u=!1;return this._li.computeIntersection(n,i,this._corner[0],this._corner[1]),!!this._li.isProper()||(this._li.computeIntersection(n,i,this._corner[1],this._corner[2]),!!this._li.isProper()||(this._li.hasIntersection()&&(s=!0),this._li.computeIntersection(n,i,this._corner[2],this._corner[3]),!!this._li.isProper()||(this._li.hasIntersection()&&(u=!0),this._li.computeIntersection(n,i,this._corner[3],this._corner[0]),!!this._li.isProper()||!(!s||!u)||!!n.equals(this._pt)||!!i.equals(this._pt))))},Sr.prototype.addSnappedNode=function(n,i){var s=n.getCoordinate(i),u=n.getCoordinate(i+1);return!!this.intersects(s,u)&&(n.addIntersection(this.getCoordinate(),i),!0)},Sr.prototype.interfaces_=function(){return[]},Sr.prototype.getClass=function(){return Sr},em.SAFE_ENV_EXPANSION_FACTOR.get=function(){return .75},Object.defineProperties(Sr,em);var Su=function(){this.tempEnv1=new Pt,this.selectedSegment=new Zt};Su.prototype.select=function(){if(arguments.length!==1){if(arguments.length===2){var n=arguments[0],i=arguments[1];n.getLineSegment(i,this.selectedSegment),this.select(this.selectedSegment)}}},Su.prototype.interfaces_=function(){return[]},Su.prototype.getClass=function(){return Su};var fa=function(){this._index=null;var n=arguments[0];this._index=n},nm={HotPixelSnapAction:{configurable:!0}};fa.prototype.snap=function(){if(arguments.length===1){var n=arguments[0];return this.snap(n,null,-1)}if(arguments.length===3){var i=arguments[0],s=arguments[1],u=arguments[2],c=i.getSafeEnvelope(),m=new rm(i,s,u);return this._index.query(c,{interfaces_:function(){return[wo]},visitItem:function(E){E.select(c,m)}}),m.isNodeAdded()}},fa.prototype.interfaces_=function(){return[]},fa.prototype.getClass=function(){return fa},nm.HotPixelSnapAction.get=function(){return rm},Object.defineProperties(fa,nm);var rm=function(n){function i(){n.call(this),this._hotPixel=null,this._parentEdge=null,this._hotPixelVertexIndex=null,this._isNodeAdded=!1;var s=arguments[0],u=arguments[1],c=arguments[2];this._hotPixel=s,this._parentEdge=u,this._hotPixelVertexIndex=c}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.isNodeAdded=function(){return this._isNodeAdded},i.prototype.select=function(){if(arguments.length!==2)return n.prototype.select.apply(this,arguments);var s=arguments[0],u=arguments[1],c=s.getContext();if(this._parentEdge!==null&&c===this._parentEdge&&u===this._hotPixelVertexIndex)return null;this._isNodeAdded=this._hotPixel.addSnappedNode(c,u)},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i}(Su),Rs=function(){this._li=null,this._interiorIntersections=null;var n=arguments[0];this._li=n,this._interiorIntersections=new j};Rs.prototype.processIntersections=function(n,i,s,u){if(n===s&&i===u)return null;var c=n.getCoordinates()[i],m=n.getCoordinates()[i+1],E=s.getCoordinates()[u],A=s.getCoordinates()[u+1];if(this._li.computeIntersection(c,m,E,A),this._li.hasIntersection()&&this._li.isInteriorIntersection()){for(var U=0;U<this._li.getIntersectionNum();U++)this._interiorIntersections.add(this._li.getIntersection(U));n.addIntersections(this._li,i,0),s.addIntersections(this._li,u,1)}},Rs.prototype.isDone=function(){return!1},Rs.prototype.getInteriorIntersections=function(){return this._interiorIntersections},Rs.prototype.interfaces_=function(){return[jo]},Rs.prototype.getClass=function(){return Rs};var Vi=function(){this._pm=null,this._li=null,this._scaleFactor=null,this._noder=null,this._pointSnapper=null,this._nodedSegStrings=null;var n=arguments[0];this._pm=n,this._li=new J,this._li.setPrecisionModel(n),this._scaleFactor=n.getScale()};Vi.prototype.checkCorrectness=function(n){var i=wn.getNodedSubstrings(n),s=new Pi(i);try{s.checkValid()}catch(u){if(!(u instanceof Yt))throw u;u.printStackTrace()}},Vi.prototype.getNodedSubstrings=function(){return wn.getNodedSubstrings(this._nodedSegStrings)},Vi.prototype.snapRound=function(n,i){var s=this.findInteriorIntersections(n,i);this.computeIntersectionSnaps(s),this.computeVertexSnaps(n)},Vi.prototype.findInteriorIntersections=function(n,i){var s=new Rs(i);return this._noder.setSegmentIntersector(s),this._noder.computeNodes(n),s.getInteriorIntersections()},Vi.prototype.computeVertexSnaps=function(){if(X(arguments[0],Ot))for(var n=arguments[0].iterator();n.hasNext();){var i=n.next();this.computeVertexSnaps(i)}else if(arguments[0]instanceof wn)for(var s=arguments[0],u=s.getCoordinates(),c=0;c<u.length;c++){var m=new Sr(u[c],this._scaleFactor,this._li);this._pointSnapper.snap(m,s,c)&&s.addIntersection(u[c],c)}},Vi.prototype.computeNodes=function(n){this._nodedSegStrings=n,this._noder=new Ef,this._pointSnapper=new fa(this._noder.getIndex()),this.snapRound(n,this._li)},Vi.prototype.computeIntersectionSnaps=function(n){for(var i=n.iterator();i.hasNext();){var s=i.next(),u=new Sr(s,this._scaleFactor,this._li);this._pointSnapper.snap(u)}},Vi.prototype.interfaces_=function(){return[$o]},Vi.prototype.getClass=function(){return Vi};var Wn=function(){if(this._argGeom=null,this._distance=null,this._bufParams=new We,this._resultGeometry=null,this._saveException=null,arguments.length===1){var n=arguments[0];this._argGeom=n}else if(arguments.length===2){var i=arguments[0],s=arguments[1];this._argGeom=i,this._bufParams=s}},ha={CAP_ROUND:{configurable:!0},CAP_BUTT:{configurable:!0},CAP_FLAT:{configurable:!0},CAP_SQUARE:{configurable:!0},MAX_PRECISION_DIGITS:{configurable:!0}};Wn.prototype.bufferFixedPrecision=function(n){var i=new Ao(new Vi(new ie(1)),n.getScale()),s=new ur(this._bufParams);s.setWorkingPrecisionModel(n),s.setNoder(i),this._resultGeometry=s.buffer(this._argGeom,this._distance)},Wn.prototype.bufferReducedPrecision=function(){var n=this;if(arguments.length===0){for(var i=Wn.MAX_PRECISION_DIGITS;i>=0;i--){try{n.bufferReducedPrecision(i)}catch(m){if(!(m instanceof oo))throw m;n._saveException=m}if(n._resultGeometry!==null)return null}throw this._saveException}if(arguments.length===1){var s=arguments[0],u=Wn.precisionScaleFactor(this._argGeom,this._distance,s),c=new ie(u);this.bufferFixedPrecision(c)}},Wn.prototype.computeGeometry=function(){if(this.bufferOriginalPrecision(),this._resultGeometry!==null)return null;var n=this._argGeom.getFactory().getPrecisionModel();n.getType()===ie.FIXED?this.bufferFixedPrecision(n):this.bufferReducedPrecision()},Wn.prototype.setQuadrantSegments=function(n){this._bufParams.setQuadrantSegments(n)},Wn.prototype.bufferOriginalPrecision=function(){try{var n=new ur(this._bufParams);this._resultGeometry=n.buffer(this._argGeom,this._distance)}catch(i){if(!(i instanceof $))throw i;this._saveException=i}},Wn.prototype.getResultGeometry=function(n){return this._distance=n,this.computeGeometry(),this._resultGeometry},Wn.prototype.setEndCapStyle=function(n){this._bufParams.setEndCapStyle(n)},Wn.prototype.interfaces_=function(){return[]},Wn.prototype.getClass=function(){return Wn},Wn.bufferOp=function(){if(arguments.length===2){var n=arguments[0],i=arguments[1];return new Wn(n).getResultGeometry(i)}if(arguments.length===3){if(Number.isInteger(arguments[2])&&arguments[0]instanceof Q&&typeof arguments[1]==\\\"number\\\"){var s=arguments[0],u=arguments[1],c=arguments[2],m=new Wn(s);return m.setQuadrantSegments(c),m.getResultGeometry(u)}if(arguments[2]instanceof We&&arguments[0]instanceof Q&&typeof arguments[1]==\\\"number\\\"){var E=arguments[0],A=arguments[1],U=arguments[2];return new Wn(E,U).getResultGeometry(A)}}else if(arguments.length===4){var Z=arguments[0],ut=arguments[1],ht=arguments[2],At=arguments[3],Rt=new Wn(Z);return Rt.setQuadrantSegments(ht),Rt.setEndCapStyle(At),Rt.getResultGeometry(ut)}},Wn.precisionScaleFactor=function(n,i,s){var u=n.getEnvelopeInternal(),c=it.max(Math.abs(u.getMaxX()),Math.abs(u.getMaxY()),Math.abs(u.getMinX()),Math.abs(u.getMinY()))+2*(i>0?i:0),m=s-Math.trunc(Math.log(c)/Math.log(10)+1);return Math.pow(10,m)},ha.CAP_ROUND.get=function(){return We.CAP_ROUND},ha.CAP_BUTT.get=function(){return We.CAP_FLAT},ha.CAP_FLAT.get=function(){return We.CAP_FLAT},ha.CAP_SQUARE.get=function(){return We.CAP_SQUARE},ha.MAX_PRECISION_DIGITS.get=function(){return 12},Object.defineProperties(Wn,ha);var lr=function(){this._pt=[new L,new L],this._distance=S.NaN,this._isNull=!0};lr.prototype.getCoordinates=function(){return this._pt},lr.prototype.getCoordinate=function(n){return this._pt[n]},lr.prototype.setMinimum=function(){if(arguments.length===1){var n=arguments[0];this.setMinimum(n._pt[0],n._pt[1])}else if(arguments.length===2){var i=arguments[0],s=arguments[1];if(this._isNull)return this.initialize(i,s),null;var u=i.distance(s);u<this._distance&&this.initialize(i,s,u)}},lr.prototype.initialize=function(){if(arguments.length===0)this._isNull=!0;else if(arguments.length===2){var n=arguments[0],i=arguments[1];this._pt[0].setCoordinate(n),this._pt[1].setCoordinate(i),this._distance=n.distance(i),this._isNull=!1}else if(arguments.length===3){var s=arguments[0],u=arguments[1],c=arguments[2];this._pt[0].setCoordinate(s),this._pt[1].setCoordinate(u),this._distance=c,this._isNull=!1}},lr.prototype.getDistance=function(){return this._distance},lr.prototype.setMaximum=function(){if(arguments.length===1){var n=arguments[0];this.setMaximum(n._pt[0],n._pt[1])}else if(arguments.length===2){var i=arguments[0],s=arguments[1];if(this._isNull)return this.initialize(i,s),null;var u=i.distance(s);u>this._distance&&this.initialize(i,s,u)}},lr.prototype.interfaces_=function(){return[]},lr.prototype.getClass=function(){return lr};var Hi=function(){};Hi.prototype.interfaces_=function(){return[]},Hi.prototype.getClass=function(){return Hi},Hi.computeDistance=function(){if(arguments[2]instanceof lr&&arguments[0]instanceof Bt&&arguments[1]instanceof L)for(var n=arguments[0],i=arguments[1],s=arguments[2],u=n.getCoordinates(),c=new Zt,m=0;m<u.length-1;m++){c.setCoordinates(u[m],u[m+1]);var E=c.closestPoint(i);s.setMinimum(E,i)}else if(arguments[2]instanceof lr&&arguments[0]instanceof Vt&&arguments[1]instanceof L){var A=arguments[0],U=arguments[1],Z=arguments[2];Hi.computeDistance(A.getExteriorRing(),U,Z);for(var ut=0;ut<A.getNumInteriorRing();ut++)Hi.computeDistance(A.getInteriorRingN(ut),U,Z)}else if(arguments[2]instanceof lr&&arguments[0]instanceof Q&&arguments[1]instanceof L){var ht=arguments[0],At=arguments[1],Rt=arguments[2];if(ht instanceof Bt)Hi.computeDistance(ht,At,Rt);else if(ht instanceof Vt)Hi.computeDistance(ht,At,Rt);else if(ht instanceof Vn)for(var kt=ht,ee=0;ee<kt.getNumGeometries();ee++){var on=kt.getGeometryN(ee);Hi.computeDistance(on,At,Rt)}else Rt.setMinimum(ht.getCoordinate(),At)}else if(arguments[2]instanceof lr&&arguments[0]instanceof Zt&&arguments[1]instanceof L){var In=arguments[0],pr=arguments[1],Yi=arguments[2],Oo=In.closestPoint(pr);Yi.setMinimum(Oo,pr)}};var ts=function(n){this._maxPtDist=new lr,this._inputGeom=n||null},Mf={MaxPointDistanceFilter:{configurable:!0},MaxMidpointDistanceFilter:{configurable:!0}};ts.prototype.computeMaxMidpointDistance=function(n){var i=new Co(this._inputGeom);n.apply(i),this._maxPtDist.setMaximum(i.getMaxPointDistance())},ts.prototype.computeMaxVertexDistance=function(n){var i=new Ls(this._inputGeom);n.apply(i),this._maxPtDist.setMaximum(i.getMaxPointDistance())},ts.prototype.findDistance=function(n){return this.computeMaxVertexDistance(n),this.computeMaxMidpointDistance(n),this._maxPtDist.getDistance()},ts.prototype.getDistancePoints=function(){return this._maxPtDist},ts.prototype.interfaces_=function(){return[]},ts.prototype.getClass=function(){return ts},Mf.MaxPointDistanceFilter.get=function(){return Ls},Mf.MaxMidpointDistanceFilter.get=function(){return Co},Object.defineProperties(ts,Mf);var Ls=function(n){this._maxPtDist=new lr,this._minPtDist=new lr,this._geom=n||null};Ls.prototype.filter=function(n){this._minPtDist.initialize(),Hi.computeDistance(this._geom,n,this._minPtDist),this._maxPtDist.setMaximum(this._minPtDist)},Ls.prototype.getMaxPointDistance=function(){return this._maxPtDist},Ls.prototype.interfaces_=function(){return[Mt]},Ls.prototype.getClass=function(){return Ls};var Co=function(n){this._maxPtDist=new lr,this._minPtDist=new lr,this._geom=n||null};Co.prototype.filter=function(n,i){if(i===0)return null;var s=n.getCoordinate(i-1),u=n.getCoordinate(i),c=new L((s.x+u.x)/2,(s.y+u.y)/2);this._minPtDist.initialize(),Hi.computeDistance(this._geom,c,this._minPtDist),this._maxPtDist.setMaximum(this._minPtDist)},Co.prototype.isDone=function(){return!1},Co.prototype.isGeometryChanged=function(){return!1},Co.prototype.getMaxPointDistance=function(){return this._maxPtDist},Co.prototype.interfaces_=function(){return[Vr]},Co.prototype.getClass=function(){return Co};var lo=function(n){this._comps=n||null};lo.prototype.filter=function(n){n instanceof Vt&&this._comps.add(n)},lo.prototype.interfaces_=function(){return[ei]},lo.prototype.getClass=function(){return lo},lo.getPolygons=function(){if(arguments.length===1){var n=arguments[0];return lo.getPolygons(n,new j)}if(arguments.length===2){var i=arguments[0],s=arguments[1];return i instanceof Vt?s.add(i):i instanceof Vn&&i.apply(new lo(s)),s}};var qn=function(){if(this._lines=null,this._isForcedToLineString=!1,arguments.length===1){var n=arguments[0];this._lines=n}else if(arguments.length===2){var i=arguments[0],s=arguments[1];this._lines=i,this._isForcedToLineString=s}};qn.prototype.filter=function(n){if(this._isForcedToLineString&&n instanceof sn){var i=n.getFactory().createLineString(n.getCoordinateSequence());return this._lines.add(i),null}n instanceof Bt&&this._lines.add(n)},qn.prototype.setForceToLineString=function(n){this._isForcedToLineString=n},qn.prototype.interfaces_=function(){return[ct]},qn.prototype.getClass=function(){return qn},qn.getGeometry=function(){if(arguments.length===1){var n=arguments[0];return n.getFactory().buildGeometry(qn.getLines(n))}if(arguments.length===2){var i=arguments[0],s=arguments[1];return i.getFactory().buildGeometry(qn.getLines(i,s))}},qn.getLines=function(){if(arguments.length===1){var n=arguments[0];return qn.getLines(n,!1)}if(arguments.length===2){if(X(arguments[0],Ot)&&X(arguments[1],Ot)){for(var i=arguments[0],s=arguments[1],u=i.iterator();u.hasNext();){var c=u.next();qn.getLines(c,s)}return s}if(arguments[0]instanceof Q&&typeof arguments[1]==\\\"boolean\\\"){var m=arguments[0],E=arguments[1],A=new j;return m.apply(new qn(A,E)),A}if(arguments[0]instanceof Q&&X(arguments[1],Ot)){var U=arguments[0],Z=arguments[1];return U instanceof Bt?Z.add(U):U.apply(new qn(Z)),Z}}else if(arguments.length===3){if(typeof arguments[2]==\\\"boolean\\\"&&X(arguments[0],Ot)&&X(arguments[1],Ot)){for(var ut=arguments[0],ht=arguments[1],At=arguments[2],Rt=ut.iterator();Rt.hasNext();){var kt=Rt.next();qn.getLines(kt,ht,At)}return ht}if(typeof arguments[2]==\\\"boolean\\\"&&arguments[0]instanceof Q&&X(arguments[1],Ot)){var ee=arguments[0],on=arguments[1],In=arguments[2];return ee.apply(new qn(on,In)),on}}};var yi=function(){if(this._boundaryRule=Lt.OGC_SFS_BOUNDARY_RULE,this._isIn=null,this._numBoundaries=null,arguments.length!==0){if(arguments.length===1){var n=arguments[0];if(n===null)throw new C(\\\"Rule must be non-null\\\");this._boundaryRule=n}}};yi.prototype.locateInternal=function(){if(arguments[0]instanceof L&&arguments[1]instanceof Vt){var n=arguments[0],i=arguments[1];if(i.isEmpty())return k.EXTERIOR;var s=i.getExteriorRing(),u=this.locateInPolygonRing(n,s);if(u===k.EXTERIOR)return k.EXTERIOR;if(u===k.BOUNDARY)return k.BOUNDARY;for(var c=0;c<i.getNumInteriorRing();c++){var m=i.getInteriorRingN(c),E=this.locateInPolygonRing(n,m);if(E===k.INTERIOR)return k.EXTERIOR;if(E===k.BOUNDARY)return k.BOUNDARY}return k.INTERIOR}if(arguments[0]instanceof L&&arguments[1]instanceof Bt){var A=arguments[0],U=arguments[1];if(!U.getEnvelopeInternal().intersects(A))return k.EXTERIOR;var Z=U.getCoordinates();return U.isClosed()||!A.equals(Z[0])&&!A.equals(Z[Z.length-1])?B.isOnLine(A,Z)?k.INTERIOR:k.EXTERIOR:k.BOUNDARY}if(arguments[0]instanceof L&&arguments[1]instanceof Qt){var ut=arguments[0];return arguments[1].getCoordinate().equals2D(ut)?k.INTERIOR:k.EXTERIOR}},yi.prototype.locateInPolygonRing=function(n,i){return i.getEnvelopeInternal().intersects(n)?B.locatePointInRing(n,i.getCoordinates()):k.EXTERIOR},yi.prototype.intersects=function(n,i){return this.locate(n,i)!==k.EXTERIOR},yi.prototype.updateLocationInfo=function(n){n===k.INTERIOR&&(this._isIn=!0),n===k.BOUNDARY&&this._numBoundaries++},yi.prototype.computeLocation=function(n,i){if(i instanceof Qt&&this.updateLocationInfo(this.locateInternal(n,i)),i instanceof Bt)this.updateLocationInfo(this.locateInternal(n,i));else if(i instanceof Vt)this.updateLocationInfo(this.locateInternal(n,i));else if(i instanceof H)for(var s=i,u=0;u<s.getNumGeometries();u++){var c=s.getGeometryN(u);this.updateLocationInfo(this.locateInternal(n,c))}else if(i instanceof un)for(var m=i,E=0;E<m.getNumGeometries();E++){var A=m.getGeometryN(E);this.updateLocationInfo(this.locateInternal(n,A))}else if(i instanceof Vn)for(var U=new ki(i);U.hasNext();){var Z=U.next();Z!==i&&this.computeLocation(n,Z)}},yi.prototype.locate=function(n,i){return i.isEmpty()?k.EXTERIOR:i instanceof Bt?this.locateInternal(n,i):i instanceof Vt?this.locateInternal(n,i):(this._isIn=!1,this._numBoundaries=0,this.computeLocation(n,i),this._boundaryRule.isInBoundary(this._numBoundaries)?k.BOUNDARY:this._numBoundaries>0||this._isIn?k.INTERIOR:k.EXTERIOR)},yi.prototype.interfaces_=function(){return[]},yi.prototype.getClass=function(){return yi};var cr=function n(){if(this._component=null,this._segIndex=null,this._pt=null,arguments.length===2){var i=arguments[0],s=arguments[1];n.call(this,i,n.INSIDE_AREA,s)}else if(arguments.length===3){var u=arguments[0],c=arguments[1],m=arguments[2];this._component=u,this._segIndex=c,this._pt=m}},im={INSIDE_AREA:{configurable:!0}};cr.prototype.isInsideArea=function(){return this._segIndex===cr.INSIDE_AREA},cr.prototype.getCoordinate=function(){return this._pt},cr.prototype.getGeometryComponent=function(){return this._component},cr.prototype.getSegmentIndex=function(){return this._segIndex},cr.prototype.interfaces_=function(){return[]},cr.prototype.getClass=function(){return cr},im.INSIDE_AREA.get=function(){return-1},Object.defineProperties(cr,im);var Po=function(n){this._pts=n||null};Po.prototype.filter=function(n){n instanceof Qt&&this._pts.add(n)},Po.prototype.interfaces_=function(){return[ei]},Po.prototype.getClass=function(){return Po},Po.getPoints=function(){if(arguments.length===1){var n=arguments[0];return n instanceof Qt?mi.singletonList(n):Po.getPoints(n,new j)}if(arguments.length===2){var i=arguments[0],s=arguments[1];return i instanceof Qt?s.add(i):i instanceof Vn&&i.apply(new Po(s)),s}};var Ns=function(){this._locations=null;var n=arguments[0];this._locations=n};Ns.prototype.filter=function(n){(n instanceof Qt||n instanceof Bt||n instanceof Vt)&&this._locations.add(new cr(n,0,n.getCoordinate()))},Ns.prototype.interfaces_=function(){return[ei]},Ns.prototype.getClass=function(){return Ns},Ns.getLocations=function(n){var i=new j;return n.apply(new Ns(i)),i};var Xn=function(){if(this._geom=null,this._terminateDistance=0,this._ptLocator=new yi,this._minDistanceLocation=null,this._minDistance=S.MAX_VALUE,arguments.length===2){var n=arguments[0],i=arguments[1];this._geom=[n,i],this._terminateDistance=0}else if(arguments.length===3){var s=arguments[0],u=arguments[1],c=arguments[2];this._geom=new Array(2).fill(null),this._geom[0]=s,this._geom[1]=u,this._terminateDistance=c}};Xn.prototype.computeContainmentDistance=function(){if(arguments.length===0){var n=new Array(2).fill(null);if(this.computeContainmentDistance(0,n),this._minDistance<=this._terminateDistance)return null;this.computeContainmentDistance(1,n)}else if(arguments.length===2){var i=arguments[0],s=arguments[1],u=1-i,c=lo.getPolygons(this._geom[i]);if(c.size()>0){var m=Ns.getLocations(this._geom[u]);if(this.computeContainmentDistance(m,c,s),this._minDistance<=this._terminateDistance)return this._minDistanceLocation[u]=s[0],this._minDistanceLocation[i]=s[1],null}}else if(arguments.length===3){if(arguments[2]instanceof Array&&X(arguments[0],wt)&&X(arguments[1],wt)){for(var E=arguments[0],A=arguments[1],U=arguments[2],Z=0;Z<E.size();Z++)for(var ut=E.get(Z),ht=0;ht<A.size();ht++)if(this.computeContainmentDistance(ut,A.get(ht),U),this._minDistance<=this._terminateDistance)return null}else if(arguments[2]instanceof Array&&arguments[0]instanceof cr&&arguments[1]instanceof Vt){var At=arguments[0],Rt=arguments[1],kt=arguments[2],ee=At.getCoordinate();if(k.EXTERIOR!==this._ptLocator.locate(ee,Rt))return this._minDistance=0,kt[0]=At,kt[1]=new cr(Rt,ee),null}}},Xn.prototype.computeMinDistanceLinesPoints=function(n,i,s){for(var u=0;u<n.size();u++)for(var c=n.get(u),m=0;m<i.size();m++){var E=i.get(m);if(this.computeMinDistance(c,E,s),this._minDistance<=this._terminateDistance)return null}},Xn.prototype.computeFacetDistance=function(){var n=new Array(2).fill(null),i=qn.getLines(this._geom[0]),s=qn.getLines(this._geom[1]),u=Po.getPoints(this._geom[0]),c=Po.getPoints(this._geom[1]);return this.computeMinDistanceLines(i,s,n),this.updateMinDistance(n,!1),this._minDistance<=this._terminateDistance?null:(n[0]=null,n[1]=null,this.computeMinDistanceLinesPoints(i,c,n),this.updateMinDistance(n,!1),this._minDistance<=this._terminateDistance?null:(n[0]=null,n[1]=null,this.computeMinDistanceLinesPoints(s,u,n),this.updateMinDistance(n,!0),this._minDistance<=this._terminateDistance?null:(n[0]=null,n[1]=null,this.computeMinDistancePoints(u,c,n),void this.updateMinDistance(n,!1))))},Xn.prototype.nearestLocations=function(){return this.computeMinDistance(),this._minDistanceLocation},Xn.prototype.updateMinDistance=function(n,i){if(n[0]===null)return null;i?(this._minDistanceLocation[0]=n[1],this._minDistanceLocation[1]=n[0]):(this._minDistanceLocation[0]=n[0],this._minDistanceLocation[1]=n[1])},Xn.prototype.nearestPoints=function(){return this.computeMinDistance(),[this._minDistanceLocation[0].getCoordinate(),this._minDistanceLocation[1].getCoordinate()]},Xn.prototype.computeMinDistance=function(){if(arguments.length===0){if(this._minDistanceLocation!==null||(this._minDistanceLocation=new Array(2).fill(null),this.computeContainmentDistance(),this._minDistance<=this._terminateDistance))return null;this.computeFacetDistance()}else if(arguments.length===3){if(arguments[2]instanceof Array&&arguments[0]instanceof Bt&&arguments[1]instanceof Qt){var n=arguments[0],i=arguments[1],s=arguments[2];if(n.getEnvelopeInternal().distance(i.getEnvelopeInternal())>this._minDistance)return null;for(var u=n.getCoordinates(),c=i.getCoordinate(),m=0;m<u.length-1;m++){var E=B.distancePointLine(c,u[m],u[m+1]);if(E<this._minDistance){this._minDistance=E;var A=new Zt(u[m],u[m+1]).closestPoint(c);s[0]=new cr(n,m,A),s[1]=new cr(i,0,c)}if(this._minDistance<=this._terminateDistance)return null}}else if(arguments[2]instanceof Array&&arguments[0]instanceof Bt&&arguments[1]instanceof Bt){var U=arguments[0],Z=arguments[1],ut=arguments[2];if(U.getEnvelopeInternal().distance(Z.getEnvelopeInternal())>this._minDistance)return null;for(var ht=U.getCoordinates(),At=Z.getCoordinates(),Rt=0;Rt<ht.length-1;Rt++)for(var kt=0;kt<At.length-1;kt++){var ee=B.distanceLineLine(ht[Rt],ht[Rt+1],At[kt],At[kt+1]);if(ee<this._minDistance){this._minDistance=ee;var on=new Zt(ht[Rt],ht[Rt+1]),In=new Zt(At[kt],At[kt+1]),pr=on.closestPoints(In);ut[0]=new cr(U,Rt,pr[0]),ut[1]=new cr(Z,kt,pr[1])}if(this._minDistance<=this._terminateDistance)return null}}}},Xn.prototype.computeMinDistancePoints=function(n,i,s){for(var u=0;u<n.size();u++)for(var c=n.get(u),m=0;m<i.size();m++){var E=i.get(m),A=c.getCoordinate().distance(E.getCoordinate());if(A<this._minDistance&&(this._minDistance=A,s[0]=new cr(c,0,c.getCoordinate()),s[1]=new cr(E,0,E.getCoordinate())),this._minDistance<=this._terminateDistance)return null}},Xn.prototype.distance=function(){if(this._geom[0]===null||this._geom[1]===null)throw new C(\\\"null geometries are not supported\\\");return this._geom[0].isEmpty()||this._geom[1].isEmpty()?0:(this.computeMinDistance(),this._minDistance)},Xn.prototype.computeMinDistanceLines=function(n,i,s){for(var u=0;u<n.size();u++)for(var c=n.get(u),m=0;m<i.size();m++){var E=i.get(m);if(this.computeMinDistance(c,E,s),this._minDistance<=this._terminateDistance)return null}},Xn.prototype.interfaces_=function(){return[]},Xn.prototype.getClass=function(){return Xn},Xn.distance=function(n,i){return new Xn(n,i).distance()},Xn.isWithinDistance=function(n,i,s){return new Xn(n,i,s).distance()<=s},Xn.nearestPoints=function(n,i){return new Xn(n,i).nearestPoints()};var Qn=function(){this._pt=[new L,new L],this._distance=S.NaN,this._isNull=!0};Qn.prototype.getCoordinates=function(){return this._pt},Qn.prototype.getCoordinate=function(n){return this._pt[n]},Qn.prototype.setMinimum=function(){if(arguments.length===1){var n=arguments[0];this.setMinimum(n._pt[0],n._pt[1])}else if(arguments.length===2){var i=arguments[0],s=arguments[1];if(this._isNull)return this.initialize(i,s),null;var u=i.distance(s);u<this._distance&&this.initialize(i,s,u)}},Qn.prototype.initialize=function(){if(arguments.length===0)this._isNull=!0;else if(arguments.length===2){var n=arguments[0],i=arguments[1];this._pt[0].setCoordinate(n),this._pt[1].setCoordinate(i),this._distance=n.distance(i),this._isNull=!1}else if(arguments.length===3){var s=arguments[0],u=arguments[1],c=arguments[2];this._pt[0].setCoordinate(s),this._pt[1].setCoordinate(u),this._distance=c,this._isNull=!1}},Qn.prototype.toString=function(){return qt.toLineString(this._pt[0],this._pt[1])},Qn.prototype.getDistance=function(){return this._distance},Qn.prototype.setMaximum=function(){if(arguments.length===1){var n=arguments[0];this.setMaximum(n._pt[0],n._pt[1])}else if(arguments.length===2){var i=arguments[0],s=arguments[1];if(this._isNull)return this.initialize(i,s),null;var u=i.distance(s);u>this._distance&&this.initialize(i,s,u)}},Qn.prototype.interfaces_=function(){return[]},Qn.prototype.getClass=function(){return Qn};var Ii=function(){};Ii.prototype.interfaces_=function(){return[]},Ii.prototype.getClass=function(){return Ii},Ii.computeDistance=function(){if(arguments[2]instanceof Qn&&arguments[0]instanceof Bt&&arguments[1]instanceof L)for(var n=arguments[0],i=arguments[1],s=arguments[2],u=new Zt,c=n.getCoordinates(),m=0;m<c.length-1;m++){u.setCoordinates(c[m],c[m+1]);var E=u.closestPoint(i);s.setMinimum(E,i)}else if(arguments[2]instanceof Qn&&arguments[0]instanceof Vt&&arguments[1]instanceof L){var A=arguments[0],U=arguments[1],Z=arguments[2];Ii.computeDistance(A.getExteriorRing(),U,Z);for(var ut=0;ut<A.getNumInteriorRing();ut++)Ii.computeDistance(A.getInteriorRingN(ut),U,Z)}else if(arguments[2]instanceof Qn&&arguments[0]instanceof Q&&arguments[1]instanceof L){var ht=arguments[0],At=arguments[1],Rt=arguments[2];if(ht instanceof Bt)Ii.computeDistance(ht,At,Rt);else if(ht instanceof Vt)Ii.computeDistance(ht,At,Rt);else if(ht instanceof Vn)for(var kt=ht,ee=0;ee<kt.getNumGeometries();ee++){var on=kt.getGeometryN(ee);Ii.computeDistance(on,At,Rt)}else Rt.setMinimum(ht.getCoordinate(),At)}else if(arguments[2]instanceof Qn&&arguments[0]instanceof Zt&&arguments[1]instanceof L){var In=arguments[0],pr=arguments[1],Yi=arguments[2],Oo=In.closestPoint(pr);Yi.setMinimum(Oo,pr)}};var oi=function(){this._g0=null,this._g1=null,this._ptDist=new Qn,this._densifyFrac=0;var n=arguments[0],i=arguments[1];this._g0=n,this._g1=i},Sf={MaxPointDistanceFilter:{configurable:!0},MaxDensifiedByFractionDistanceFilter:{configurable:!0}};oi.prototype.getCoordinates=function(){return this._ptDist.getCoordinates()},oi.prototype.setDensifyFraction=function(n){if(n>1||n<=0)throw new C(\\\"Fraction is not in range (0.0 - 1.0]\\\");this._densifyFrac=n},oi.prototype.compute=function(n,i){this.computeOrientedDistance(n,i,this._ptDist),this.computeOrientedDistance(i,n,this._ptDist)},oi.prototype.distance=function(){return this.compute(this._g0,this._g1),this._ptDist.getDistance()},oi.prototype.computeOrientedDistance=function(n,i,s){var u=new Os(i);if(n.apply(u),s.setMaximum(u.getMaxPointDistance()),this._densifyFrac>0){var c=new Io(i,this._densifyFrac);n.apply(c),s.setMaximum(c.getMaxPointDistance())}},oi.prototype.orientedDistance=function(){return this.computeOrientedDistance(this._g0,this._g1,this._ptDist),this._ptDist.getDistance()},oi.prototype.interfaces_=function(){return[]},oi.prototype.getClass=function(){return oi},oi.distance=function(){if(arguments.length===2){var n=arguments[0],i=arguments[1];return new oi(n,i).distance()}if(arguments.length===3){var s=arguments[0],u=arguments[1],c=arguments[2],m=new oi(s,u);return m.setDensifyFraction(c),m.distance()}},Sf.MaxPointDistanceFilter.get=function(){return Os},Sf.MaxDensifiedByFractionDistanceFilter.get=function(){return Io},Object.defineProperties(oi,Sf);var Os=function(){this._maxPtDist=new Qn,this._minPtDist=new Qn,this._euclideanDist=new Ii,this._geom=null;var n=arguments[0];this._geom=n};Os.prototype.filter=function(n){this._minPtDist.initialize(),Ii.computeDistance(this._geom,n,this._minPtDist),this._maxPtDist.setMaximum(this._minPtDist)},Os.prototype.getMaxPointDistance=function(){return this._maxPtDist},Os.prototype.interfaces_=function(){return[Mt]},Os.prototype.getClass=function(){return Os};var Io=function(){this._maxPtDist=new Qn,this._minPtDist=new Qn,this._geom=null,this._numSubSegs=0;var n=arguments[0],i=arguments[1];this._geom=n,this._numSubSegs=Math.trunc(Math.round(1/i))};Io.prototype.filter=function(n,i){if(i===0)return null;for(var s=n.getCoordinate(i-1),u=n.getCoordinate(i),c=(u.x-s.x)/this._numSubSegs,m=(u.y-s.y)/this._numSubSegs,E=0;E<this._numSubSegs;E++){var A=s.x+E*c,U=s.y+E*m,Z=new L(A,U);this._minPtDist.initialize(),Ii.computeDistance(this._geom,Z,this._minPtDist),this._maxPtDist.setMaximum(this._minPtDist)}},Io.prototype.isDone=function(){return!1},Io.prototype.isGeometryChanged=function(){return!1},Io.prototype.getMaxPointDistance=function(){return this._maxPtDist},Io.prototype.interfaces_=function(){return[Vr]},Io.prototype.getClass=function(){return Io};var Dr=function(n,i,s){this._minValidDistance=null,this._maxValidDistance=null,this._minDistanceFound=null,this._maxDistanceFound=null,this._isValid=!0,this._errMsg=null,this._errorLocation=null,this._errorIndicator=null,this._input=n||null,this._bufDistance=i||null,this._result=s||null},wf={VERBOSE:{configurable:!0},MAX_DISTANCE_DIFF_FRAC:{configurable:!0}};Dr.prototype.checkMaximumDistance=function(n,i,s){var u=new oi(i,n);if(u.setDensifyFraction(.25),this._maxDistanceFound=u.orientedDistance(),this._maxDistanceFound>s){this._isValid=!1;var c=u.getCoordinates();this._errorLocation=c[1],this._errorIndicator=n.getFactory().createLineString(c),this._errMsg=\\\"Distance between buffer curve and input is too large (\\\"+this._maxDistanceFound+\\\" at \\\"+qt.toLineString(c[0],c[1])+\\\")\\\"}},Dr.prototype.isValid=function(){var n=Math.abs(this._bufDistance),i=Dr.MAX_DISTANCE_DIFF_FRAC*n;return this._minValidDistance=n-i,this._maxValidDistance=n+i,!(!this._input.isEmpty()&&!this._result.isEmpty())||(this._bufDistance>0?this.checkPositiveValid():this.checkNegativeValid(),Dr.VERBOSE&&Nt.out.println(\\\"Min Dist= \\\"+this._minDistanceFound+\\\" err= \\\"+(1-this._minDistanceFound/this._bufDistance)+\\\" Max Dist= \\\"+this._maxDistanceFound+\\\" err= \\\"+(this._maxDistanceFound/this._bufDistance-1)),this._isValid)},Dr.prototype.checkNegativeValid=function(){if(!(this._input instanceof Vt||this._input instanceof un||this._input instanceof Vn))return null;var n=this.getPolygonLines(this._input);if(this.checkMinimumDistance(n,this._result,this._minValidDistance),!this._isValid)return null;this.checkMaximumDistance(n,this._result,this._maxValidDistance)},Dr.prototype.getErrorIndicator=function(){return this._errorIndicator},Dr.prototype.checkMinimumDistance=function(n,i,s){var u=new Xn(n,i,s);if(this._minDistanceFound=u.distance(),this._minDistanceFound<s){this._isValid=!1;var c=u.nearestPoints();this._errorLocation=u.nearestPoints()[1],this._errorIndicator=n.getFactory().createLineString(c),this._errMsg=\\\"Distance between buffer curve and input is too small (\\\"+this._minDistanceFound+\\\" at \\\"+qt.toLineString(c[0],c[1])+\\\" )\\\"}},Dr.prototype.checkPositiveValid=function(){var n=this._result.getBoundary();if(this.checkMinimumDistance(this._input,n,this._minValidDistance),!this._isValid)return null;this.checkMaximumDistance(this._input,n,this._maxValidDistance)},Dr.prototype.getErrorLocation=function(){return this._errorLocation},Dr.prototype.getPolygonLines=function(n){for(var i=new j,s=new qn(i),u=lo.getPolygons(n).iterator();u.hasNext();)u.next().apply(s);return n.getFactory().buildGeometry(i)},Dr.prototype.getErrorMessage=function(){return this._errMsg},Dr.prototype.interfaces_=function(){return[]},Dr.prototype.getClass=function(){return Dr},wf.VERBOSE.get=function(){return!1},wf.MAX_DISTANCE_DIFF_FRAC.get=function(){return .012},Object.defineProperties(Dr,wf);var Yn=function(n,i,s){this._isValid=!0,this._errorMsg=null,this._errorLocation=null,this._errorIndicator=null,this._input=n||null,this._distance=i||null,this._result=s||null},bf={VERBOSE:{configurable:!0},MAX_ENV_DIFF_FRAC:{configurable:!0}};Yn.prototype.isValid=function(){return this.checkPolygonal(),this._isValid?(this.checkExpectedEmpty(),this._isValid?(this.checkEnvelope(),this._isValid?(this.checkArea(),this._isValid?(this.checkDistance(),this._isValid):this._isValid):this._isValid):this._isValid):this._isValid},Yn.prototype.checkEnvelope=function(){if(this._distance<0)return null;var n=this._distance*Yn.MAX_ENV_DIFF_FRAC;n===0&&(n=.001);var i=new Pt(this._input.getEnvelopeInternal());i.expandBy(this._distance);var s=new Pt(this._result.getEnvelopeInternal());s.expandBy(n),s.contains(i)||(this._isValid=!1,this._errorMsg=\\\"Buffer envelope is incorrect\\\",this._errorIndicator=this._input.getFactory().toGeometry(s)),this.report(\\\"Envelope\\\")},Yn.prototype.checkDistance=function(){var n=new Dr(this._input,this._distance,this._result);n.isValid()||(this._isValid=!1,this._errorMsg=n.getErrorMessage(),this._errorLocation=n.getErrorLocation(),this._errorIndicator=n.getErrorIndicator()),this.report(\\\"Distance\\\")},Yn.prototype.checkArea=function(){var n=this._input.getArea(),i=this._result.getArea();this._distance>0&&n>i&&(this._isValid=!1,this._errorMsg=\\\"Area of positive buffer is smaller than input\\\",this._errorIndicator=this._result),this._distance<0&&n<i&&(this._isValid=!1,this._errorMsg=\\\"Area of negative buffer is larger than input\\\",this._errorIndicator=this._result),this.report(\\\"Area\\\")},Yn.prototype.checkPolygonal=function(){this._result instanceof Vt||this._result instanceof un||(this._isValid=!1),this._errorMsg=\\\"Result is not polygonal\\\",this._errorIndicator=this._result,this.report(\\\"Polygonal\\\")},Yn.prototype.getErrorIndicator=function(){return this._errorIndicator},Yn.prototype.getErrorLocation=function(){return this._errorLocation},Yn.prototype.checkExpectedEmpty=function(){return this._input.getDimension()>=2||this._distance>0?null:(this._result.isEmpty()||(this._isValid=!1,this._errorMsg=\\\"Result is non-empty\\\",this._errorIndicator=this._result),void this.report(\\\"ExpectedEmpty\\\"))},Yn.prototype.report=function(n){if(!Yn.VERBOSE)return null;Nt.out.println(\\\"Check \\\"+n+\\\": \\\"+(this._isValid?\\\"passed\\\":\\\"FAILED\\\"))},Yn.prototype.getErrorMessage=function(){return this._errorMsg},Yn.prototype.interfaces_=function(){return[]},Yn.prototype.getClass=function(){return Yn},Yn.isValidMsg=function(n,i,s){var u=new Yn(n,i,s);return u.isValid()?null:u.getErrorMessage()},Yn.isValid=function(n,i,s){return!!new Yn(n,i,s).isValid()},bf.VERBOSE.get=function(){return!1},bf.MAX_ENV_DIFF_FRAC.get=function(){return .012},Object.defineProperties(Yn,bf);var Ri=function(){this._pts=null,this._data=null;var n=arguments[0],i=arguments[1];this._pts=n,this._data=i};Ri.prototype.getCoordinates=function(){return this._pts},Ri.prototype.size=function(){return this._pts.length},Ri.prototype.getCoordinate=function(n){return this._pts[n]},Ri.prototype.isClosed=function(){return this._pts[0].equals(this._pts[this._pts.length-1])},Ri.prototype.getSegmentOctant=function(n){return n===this._pts.length-1?-1:Cs.octant(this.getCoordinate(n),this.getCoordinate(n+1))},Ri.prototype.setData=function(n){this._data=n},Ri.prototype.getData=function(){return this._data},Ri.prototype.toString=function(){return qt.toLineString(new he(this._pts))},Ri.prototype.interfaces_=function(){return[zi]},Ri.prototype.getClass=function(){return Ri};var kn=function(){this._findAllIntersections=!1,this._isCheckEndSegmentsOnly=!1,this._li=null,this._interiorIntersection=null,this._intSegments=null,this._intersections=new j,this._intersectionCount=0,this._keepIntersections=!0;var n=arguments[0];this._li=n,this._interiorIntersection=null};kn.prototype.getInteriorIntersection=function(){return this._interiorIntersection},kn.prototype.setCheckEndSegmentsOnly=function(n){this._isCheckEndSegmentsOnly=n},kn.prototype.getIntersectionSegments=function(){return this._intSegments},kn.prototype.count=function(){return this._intersectionCount},kn.prototype.getIntersections=function(){return this._intersections},kn.prototype.setFindAllIntersections=function(n){this._findAllIntersections=n},kn.prototype.setKeepIntersections=function(n){this._keepIntersections=n},kn.prototype.processIntersections=function(n,i,s,u){if(!this._findAllIntersections&&this.hasIntersection()||n===s&&i===u||this._isCheckEndSegmentsOnly&&!(this.isEndSegment(n,i)||this.isEndSegment(s,u)))return null;var c=n.getCoordinates()[i],m=n.getCoordinates()[i+1],E=s.getCoordinates()[u],A=s.getCoordinates()[u+1];this._li.computeIntersection(c,m,E,A),this._li.hasIntersection()&&this._li.isInteriorIntersection()&&(this._intSegments=new Array(4).fill(null),this._intSegments[0]=c,this._intSegments[1]=m,this._intSegments[2]=E,this._intSegments[3]=A,this._interiorIntersection=this._li.getIntersection(0),this._keepIntersections&&this._intersections.add(this._interiorIntersection),this._intersectionCount++)},kn.prototype.isEndSegment=function(n,i){return i===0||i>=n.size()-2},kn.prototype.hasIntersection=function(){return this._interiorIntersection!==null},kn.prototype.isDone=function(){return!this._findAllIntersections&&this._interiorIntersection!==null},kn.prototype.interfaces_=function(){return[jo]},kn.prototype.getClass=function(){return kn},kn.createAllIntersectionsFinder=function(n){var i=new kn(n);return i.setFindAllIntersections(!0),i},kn.createAnyIntersectionFinder=function(n){return new kn(n)},kn.createIntersectionCounter=function(n){var i=new kn(n);return i.setFindAllIntersections(!0),i.setKeepIntersections(!1),i};var vi=function(){this._li=new J,this._segStrings=null,this._findAllIntersections=!1,this._segInt=null,this._isValid=!0;var n=arguments[0];this._segStrings=n};vi.prototype.execute=function(){if(this._segInt!==null)return null;this.checkInteriorIntersections()},vi.prototype.getIntersections=function(){return this._segInt.getIntersections()},vi.prototype.isValid=function(){return this.execute(),this._isValid},vi.prototype.setFindAllIntersections=function(n){this._findAllIntersections=n},vi.prototype.checkInteriorIntersections=function(){this._isValid=!0,this._segInt=new kn(this._li),this._segInt.setFindAllIntersections(this._findAllIntersections);var n=new Ef;if(n.setSegmentIntersector(this._segInt),n.computeNodes(this._segStrings),this._segInt.hasIntersection())return this._isValid=!1,null},vi.prototype.checkValid=function(){if(this.execute(),!this._isValid)throw new oo(this.getErrorMessage(),this._segInt.getInteriorIntersection())},vi.prototype.getErrorMessage=function(){if(this._isValid)return\\\"no intersections found\\\";var n=this._segInt.getIntersectionSegments();return\\\"found non-noded intersection between \\\"+qt.toLineString(n[0],n[1])+\\\" and \\\"+qt.toLineString(n[2],n[3])},vi.prototype.interfaces_=function(){return[]},vi.prototype.getClass=function(){return vi},vi.computeIntersections=function(n){var i=new vi(n);return i.setFindAllIntersections(!0),i.isValid(),i.getIntersections()};var es=function n(){this._nv=null;var i=arguments[0];this._nv=new vi(n.toSegmentStrings(i))};es.prototype.checkValid=function(){this._nv.checkValid()},es.prototype.interfaces_=function(){return[]},es.prototype.getClass=function(){return es},es.toSegmentStrings=function(n){for(var i=new j,s=n.iterator();s.hasNext();){var u=s.next();i.add(new Ri(u.getCoordinates(),u))}return i},es.checkValid=function(n){new es(n).checkValid()};var Ds=function(n){this._mapOp=n};Ds.prototype.map=function(n){for(var i=new j,s=0;s<n.getNumGeometries();s++){var u=this._mapOp.map(n.getGeometryN(s));u.isEmpty()||i.add(u)}return n.getFactory().createGeometryCollection(le.toGeometryArray(i))},Ds.prototype.interfaces_=function(){return[]},Ds.prototype.getClass=function(){return Ds},Ds.map=function(n,i){return new Ds(i).map(n)};var Li=function(){this._op=null,this._geometryFactory=null,this._ptLocator=null,this._lineEdgesList=new j,this._resultLineList=new j;var n=arguments[0],i=arguments[1],s=arguments[2];this._op=n,this._geometryFactory=i,this._ptLocator=s};Li.prototype.collectLines=function(n){for(var i=this._op.getGraph().getEdgeEnds().iterator();i.hasNext();){var s=i.next();this.collectLineEdge(s,n,this._lineEdgesList),this.collectBoundaryTouchEdge(s,n,this._lineEdgesList)}},Li.prototype.labelIsolatedLine=function(n,i){var s=this._ptLocator.locate(n.getCoordinate(),this._op.getArgGeometry(i));n.getLabel().setLocation(i,s)},Li.prototype.build=function(n){return this.findCoveredLineEdges(),this.collectLines(n),this.buildLines(n),this._resultLineList},Li.prototype.collectLineEdge=function(n,i,s){var u=n.getLabel(),c=n.getEdge();n.isLineEdge()&&(n.isVisited()||!ae.isResultOfOp(u,i)||c.isCovered()||(s.add(c),n.setVisitedEdge(!0)))},Li.prototype.findCoveredLineEdges=function(){for(var n=this._op.getGraph().getNodes().iterator();n.hasNext();)n.next().getEdges().findCoveredLineEdges();for(var i=this._op.getGraph().getEdgeEnds().iterator();i.hasNext();){var s=i.next(),u=s.getEdge();if(s.isLineEdge()&&!u.isCoveredSet()){var c=this._op.isCoveredByA(s.getCoordinate());u.setCovered(c)}}},Li.prototype.labelIsolatedLines=function(n){for(var i=n.iterator();i.hasNext();){var s=i.next(),u=s.getLabel();s.isIsolated()&&(u.isNull(0)?this.labelIsolatedLine(s,0):this.labelIsolatedLine(s,1))}},Li.prototype.buildLines=function(n){for(var i=this._lineEdgesList.iterator();i.hasNext();){var s=i.next(),u=this._geometryFactory.createLineString(s.getCoordinates());this._resultLineList.add(u),s.setInResult(!0)}},Li.prototype.collectBoundaryTouchEdge=function(n,i,s){var u=n.getLabel();return n.isLineEdge()||n.isVisited()||n.isInteriorAreaEdge()||n.getEdge().isInResult()?null:(b.isTrue(!(n.isInResult()||n.getSym().isInResult())||!n.getEdge().isInResult()),void(ae.isResultOfOp(u,i)&&i===ae.INTERSECTION&&(s.add(n.getEdge()),n.setVisitedEdge(!0))))},Li.prototype.interfaces_=function(){return[]},Li.prototype.getClass=function(){return Li};var Fs=function(){this._op=null,this._geometryFactory=null,this._resultPointList=new j;var n=arguments[0],i=arguments[1];this._op=n,this._geometryFactory=i};Fs.prototype.filterCoveredNodeToPoint=function(n){var i=n.getCoordinate();if(!this._op.isCoveredByLA(i)){var s=this._geometryFactory.createPoint(i);this._resultPointList.add(s)}},Fs.prototype.extractNonCoveredResultNodes=function(n){for(var i=this._op.getGraph().getNodes().iterator();i.hasNext();){var s=i.next();if(!s.isInResult()&&!s.isIncidentEdgeInResult()&&(s.getEdges().getDegree()===0||n===ae.INTERSECTION)){var u=s.getLabel();ae.isResultOfOp(u,n)&&this.filterCoveredNodeToPoint(s)}}},Fs.prototype.build=function(n){return this.extractNonCoveredResultNodes(n),this._resultPointList},Fs.prototype.interfaces_=function(){return[]},Fs.prototype.getClass=function(){return Fs};var wr=function(){this._inputGeom=null,this._factory=null,this._pruneEmptyGeometry=!0,this._preserveGeometryCollectionType=!0,this._preserveCollections=!1,this._preserveType=!1};wr.prototype.transformPoint=function(n,i){return this._factory.createPoint(this.transformCoordinates(n.getCoordinateSequence(),n))},wr.prototype.transformPolygon=function(n,i){var s=!0,u=this.transformLinearRing(n.getExteriorRing(),n);u!==null&&u instanceof sn&&!u.isEmpty()||(s=!1);for(var c=new j,m=0;m<n.getNumInteriorRing();m++){var E=this.transformLinearRing(n.getInteriorRingN(m),n);E===null||E.isEmpty()||(E instanceof sn||(s=!1),c.add(E))}if(s)return this._factory.createPolygon(u,c.toArray([]));var A=new j;return u!==null&&A.add(u),A.addAll(c),this._factory.buildGeometry(A)},wr.prototype.createCoordinateSequence=function(n){return this._factory.getCoordinateSequenceFactory().create(n)},wr.prototype.getInputGeometry=function(){return this._inputGeom},wr.prototype.transformMultiLineString=function(n,i){for(var s=new j,u=0;u<n.getNumGeometries();u++){var c=this.transformLineString(n.getGeometryN(u),n);c!==null&&(c.isEmpty()||s.add(c))}return this._factory.buildGeometry(s)},wr.prototype.transformCoordinates=function(n,i){return this.copy(n)},wr.prototype.transformLineString=function(n,i){return this._factory.createLineString(this.transformCoordinates(n.getCoordinateSequence(),n))},wr.prototype.transformMultiPoint=function(n,i){for(var s=new j,u=0;u<n.getNumGeometries();u++){var c=this.transformPoint(n.getGeometryN(u),n);c!==null&&(c.isEmpty()||s.add(c))}return this._factory.buildGeometry(s)},wr.prototype.transformMultiPolygon=function(n,i){for(var s=new j,u=0;u<n.getNumGeometries();u++){var c=this.transformPolygon(n.getGeometryN(u),n);c!==null&&(c.isEmpty()||s.add(c))}return this._factory.buildGeometry(s)},wr.prototype.copy=function(n){return n.copy()},wr.prototype.transformGeometryCollection=function(n,i){for(var s=new j,u=0;u<n.getNumGeometries();u++){var c=this.transform(n.getGeometryN(u));c!==null&&(this._pruneEmptyGeometry&&c.isEmpty()||s.add(c))}return this._preserveGeometryCollectionType?this._factory.createGeometryCollection(le.toGeometryArray(s)):this._factory.buildGeometry(s)},wr.prototype.transform=function(n){if(this._inputGeom=n,this._factory=n.getFactory(),n instanceof Qt)return this.transformPoint(n,null);if(n instanceof fe)return this.transformMultiPoint(n,null);if(n instanceof sn)return this.transformLinearRing(n,null);if(n instanceof Bt)return this.transformLineString(n,null);if(n instanceof H)return this.transformMultiLineString(n,null);if(n instanceof Vt)return this.transformPolygon(n,null);if(n instanceof un)return this.transformMultiPolygon(n,null);if(n instanceof Vn)return this.transformGeometryCollection(n,null);throw new C(\\\"Unknown Geometry subtype: \\\"+n.getClass().getName())},wr.prototype.transformLinearRing=function(n,i){var s=this.transformCoordinates(n.getCoordinateSequence(),n);if(s===null)return this._factory.createLinearRing(null);var u=s.size();return u>0&&u<4&&!this._preserveType?this._factory.createLineString(s):this._factory.createLinearRing(s)},wr.prototype.interfaces_=function(){return[]},wr.prototype.getClass=function(){return wr};var Wi=function n(){if(this._snapTolerance=0,this._srcPts=null,this._seg=new Zt,this._allowSnappingToSourceVertices=!1,this._isClosed=!1,arguments[0]instanceof Bt&&typeof arguments[1]==\\\"number\\\"){var i=arguments[0],s=arguments[1];n.call(this,i.getCoordinates(),s)}else if(arguments[0]instanceof Array&&typeof arguments[1]==\\\"number\\\"){var u=arguments[0],c=arguments[1];this._srcPts=u,this._isClosed=n.isClosed(u),this._snapTolerance=c}};Wi.prototype.snapVertices=function(n,i){for(var s=this._isClosed?n.size()-1:n.size(),u=0;u<s;u++){var c=n.get(u),m=this.findSnapForVertex(c,i);m!==null&&(n.set(u,new L(m)),u===0&&this._isClosed&&n.set(n.size()-1,new L(m)))}},Wi.prototype.findSnapForVertex=function(n,i){for(var s=0;s<i.length;s++){if(n.equals2D(i[s]))return null;if(n.distance(i[s])<this._snapTolerance)return i[s]}return null},Wi.prototype.snapTo=function(n){var i=new Dt(this._srcPts);return this.snapVertices(i,n),this.snapSegments(i,n),i.toCoordinateArray()},Wi.prototype.snapSegments=function(n,i){if(i.length===0)return null;var s=i.length;i[0].equals2D(i[i.length-1])&&(s=i.length-1);for(var u=0;u<s;u++){var c=i[u],m=this.findSegmentIndexToSnap(c,n);m>=0&&n.add(m+1,new L(c),!1)}},Wi.prototype.findSegmentIndexToSnap=function(n,i){for(var s=S.MAX_VALUE,u=-1,c=0;c<i.size()-1;c++){if(this._seg.p0=i.get(c),this._seg.p1=i.get(c+1),this._seg.p0.equals2D(n)||this._seg.p1.equals2D(n)){if(this._allowSnappingToSourceVertices)continue;return-1}var m=this._seg.distance(n);m<this._snapTolerance&&m<s&&(s=m,u=c)}return u},Wi.prototype.setAllowSnappingToSourceVertices=function(n){this._allowSnappingToSourceVertices=n},Wi.prototype.interfaces_=function(){return[]},Wi.prototype.getClass=function(){return Wi},Wi.isClosed=function(n){return!(n.length<=1)&&n[0].equals2D(n[n.length-1])};var bn=function(n){this._srcGeom=n||null},om={SNAP_PRECISION_FACTOR:{configurable:!0}};bn.prototype.snapTo=function(n,i){var s=this.extractTargetCoordinates(n);return new sm(i,s).transform(this._srcGeom)},bn.prototype.snapToSelf=function(n,i){var s=this.extractTargetCoordinates(this._srcGeom),u=new sm(n,s,!0).transform(this._srcGeom),c=u;return i&&X(c,ce)&&(c=u.buffer(0)),c},bn.prototype.computeSnapTolerance=function(n){return this.computeMinimumSegmentLength(n)/10},bn.prototype.extractTargetCoordinates=function(n){for(var i=new M,s=n.getCoordinates(),u=0;u<s.length;u++)i.add(s[u]);return i.toArray(new Array(0).fill(null))},bn.prototype.computeMinimumSegmentLength=function(n){for(var i=S.MAX_VALUE,s=0;s<n.length-1;s++){var u=n[s].distance(n[s+1]);u<i&&(i=u)}return i},bn.prototype.interfaces_=function(){return[]},bn.prototype.getClass=function(){return bn},bn.snap=function(n,i,s){var u=new Array(2).fill(null),c=new bn(n);u[0]=c.snapTo(i,s);var m=new bn(i);return u[1]=m.snapTo(u[0],s),u},bn.computeOverlaySnapTolerance=function(){if(arguments.length===1){var n=arguments[0],i=bn.computeSizeBasedSnapTolerance(n),s=n.getPrecisionModel();if(s.getType()===ie.FIXED){var u=1/s.getScale()*2/1.415;u>i&&(i=u)}return i}if(arguments.length===2){var c=arguments[0],m=arguments[1];return Math.min(bn.computeOverlaySnapTolerance(c),bn.computeOverlaySnapTolerance(m))}},bn.computeSizeBasedSnapTolerance=function(n){var i=n.getEnvelopeInternal();return Math.min(i.getHeight(),i.getWidth())*bn.SNAP_PRECISION_FACTOR},bn.snapToSelf=function(n,i,s){return new bn(n).snapToSelf(i,s)},om.SNAP_PRECISION_FACTOR.get=function(){return 1e-9},Object.defineProperties(bn,om);var sm=function(n){function i(s,u,c){n.call(this),this._snapTolerance=s||null,this._snapPts=u||null,this._isSelfSnap=c!==void 0&&c}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.snapLine=function(s,u){var c=new Wi(s,this._snapTolerance);return c.setAllowSnappingToSourceVertices(this._isSelfSnap),c.snapTo(u)},i.prototype.transformCoordinates=function(s,u){var c=s.toCoordinateArray(),m=this.snapLine(c,this._snapPts);return this._factory.getCoordinateSequenceFactory().create(m)},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i}(wr),fr=function(){this._isFirst=!0,this._commonMantissaBitsCount=53,this._commonBits=0,this._commonSignExp=null};fr.prototype.getCommon=function(){return S.longBitsToDouble(this._commonBits)},fr.prototype.add=function(n){var i=S.doubleToLongBits(n);if(this._isFirst)return this._commonBits=i,this._commonSignExp=fr.signExpBits(this._commonBits),this._isFirst=!1,null;if(fr.signExpBits(i)!==this._commonSignExp)return this._commonBits=0,null;this._commonMantissaBitsCount=fr.numCommonMostSigMantissaBits(this._commonBits,i),this._commonBits=fr.zeroLowerBits(this._commonBits,64-(12+this._commonMantissaBitsCount))},fr.prototype.toString=function(){if(arguments.length===1){var n=arguments[0],i=S.longBitsToDouble(n),s=\\\"0000000000000000000000000000000000000000000000000000000000000000\\\"+S.toBinaryString(n),u=s.substring(s.length-64);return u.substring(0,1)+\\\" \\\"+u.substring(1,12)+\\\"(exp) \\\"+u.substring(12)+\\\" [ \\\"+i+\\\" ]\\\"}},fr.prototype.interfaces_=function(){return[]},fr.prototype.getClass=function(){return fr},fr.getBit=function(n,i){return n&1<<i?1:0},fr.signExpBits=function(n){return n>>52},fr.zeroLowerBits=function(n,i){return n&~((1<<i)-1)},fr.numCommonMostSigMantissaBits=function(n,i){for(var s=0,u=52;u>=0;u--){if(fr.getBit(n,u)!==fr.getBit(i,u))return s;s++}return 52};var Ro=function(){this._commonCoord=null,this._ccFilter=new Us},Tf={CommonCoordinateFilter:{configurable:!0},Translater:{configurable:!0}};Ro.prototype.addCommonBits=function(n){var i=new Lo(this._commonCoord);n.apply(i),n.geometryChanged()},Ro.prototype.removeCommonBits=function(n){if(this._commonCoord.x===0&&this._commonCoord.y===0)return n;var i=new L(this._commonCoord);i.x=-i.x,i.y=-i.y;var s=new Lo(i);return n.apply(s),n.geometryChanged(),n},Ro.prototype.getCommonCoordinate=function(){return this._commonCoord},Ro.prototype.add=function(n){n.apply(this._ccFilter),this._commonCoord=this._ccFilter.getCommonCoordinate()},Ro.prototype.interfaces_=function(){return[]},Ro.prototype.getClass=function(){return Ro},Tf.CommonCoordinateFilter.get=function(){return Us},Tf.Translater.get=function(){return Lo},Object.defineProperties(Ro,Tf);var Us=function(){this._commonBitsX=new fr,this._commonBitsY=new fr};Us.prototype.filter=function(n){this._commonBitsX.add(n.x),this._commonBitsY.add(n.y)},Us.prototype.getCommonCoordinate=function(){return new L(this._commonBitsX.getCommon(),this._commonBitsY.getCommon())},Us.prototype.interfaces_=function(){return[Mt]},Us.prototype.getClass=function(){return Us};var Lo=function(){this.trans=null;var n=arguments[0];this.trans=n};Lo.prototype.filter=function(n,i){var s=n.getOrdinate(i,0)+this.trans.x,u=n.getOrdinate(i,1)+this.trans.y;n.setOrdinate(i,0,s),n.setOrdinate(i,1,u)},Lo.prototype.isDone=function(){return!1},Lo.prototype.isGeometryChanged=function(){return!0},Lo.prototype.interfaces_=function(){return[Vr]},Lo.prototype.getClass=function(){return Lo};var Gn=function(n,i){this._geom=new Array(2).fill(null),this._snapTolerance=null,this._cbr=null,this._geom[0]=n,this._geom[1]=i,this.computeSnapTolerance()};Gn.prototype.selfSnap=function(n){return new bn(n).snapTo(n,this._snapTolerance)},Gn.prototype.removeCommonBits=function(n){this._cbr=new Ro,this._cbr.add(n[0]),this._cbr.add(n[1]);var i=new Array(2).fill(null);return i[0]=this._cbr.removeCommonBits(n[0].copy()),i[1]=this._cbr.removeCommonBits(n[1].copy()),i},Gn.prototype.prepareResult=function(n){return this._cbr.addCommonBits(n),n},Gn.prototype.getResultGeometry=function(n){var i=this.snap(this._geom),s=ae.overlayOp(i[0],i[1],n);return this.prepareResult(s)},Gn.prototype.checkValid=function(n){n.isValid()||Nt.out.println(\\\"Snapped geometry is invalid\\\")},Gn.prototype.computeSnapTolerance=function(){this._snapTolerance=bn.computeOverlaySnapTolerance(this._geom[0],this._geom[1])},Gn.prototype.snap=function(n){var i=this.removeCommonBits(n);return bn.snap(i[0],i[1],this._snapTolerance)},Gn.prototype.interfaces_=function(){return[]},Gn.prototype.getClass=function(){return Gn},Gn.overlayOp=function(n,i,s){return new Gn(n,i).getResultGeometry(s)},Gn.union=function(n,i){return Gn.overlayOp(n,i,ae.UNION)},Gn.intersection=function(n,i){return Gn.overlayOp(n,i,ae.INTERSECTION)},Gn.symDifference=function(n,i){return Gn.overlayOp(n,i,ae.SYMDIFFERENCE)},Gn.difference=function(n,i){return Gn.overlayOp(n,i,ae.DIFFERENCE)};var hr=function(n,i){this._geom=new Array(2).fill(null),this._geom[0]=n,this._geom[1]=i};hr.prototype.getResultGeometry=function(n){var i=null,s=!1,u=null;try{i=ae.overlayOp(this._geom[0],this._geom[1],n),s=!0}catch(c){if(!(c instanceof $))throw c;u=c}if(!s)try{i=Gn.overlayOp(this._geom[0],this._geom[1],n)}catch(c){throw c instanceof $?u:c}return i},hr.prototype.interfaces_=function(){return[]},hr.prototype.getClass=function(){return hr},hr.overlayOp=function(n,i,s){return new hr(n,i).getResultGeometry(s)},hr.union=function(n,i){return hr.overlayOp(n,i,ae.UNION)},hr.intersection=function(n,i){return hr.overlayOp(n,i,ae.INTERSECTION)},hr.symDifference=function(n,i){return hr.overlayOp(n,i,ae.SYMDIFFERENCE)},hr.difference=function(n,i){return hr.overlayOp(n,i,ae.DIFFERENCE)};var wu=function(){this.mce=null,this.chainIndex=null;var n=arguments[0],i=arguments[1];this.mce=n,this.chainIndex=i};wu.prototype.computeIntersections=function(n,i){this.mce.computeIntersectsForChain(this.chainIndex,n.mce,n.chainIndex,i)},wu.prototype.interfaces_=function(){return[]},wu.prototype.getClass=function(){return wu};var Fr=function n(){if(this._label=null,this._xValue=null,this._eventType=null,this._insertEvent=null,this._deleteEventIndex=null,this._obj=null,arguments.length===2){var i=arguments[0],s=arguments[1];this._eventType=n.DELETE,this._xValue=i,this._insertEvent=s}else if(arguments.length===3){var u=arguments[0],c=arguments[1],m=arguments[2];this._eventType=n.INSERT,this._label=u,this._xValue=c,this._obj=m}},Af={INSERT:{configurable:!0},DELETE:{configurable:!0}};Fr.prototype.isDelete=function(){return this._eventType===Fr.DELETE},Fr.prototype.setDeleteEventIndex=function(n){this._deleteEventIndex=n},Fr.prototype.getObject=function(){return this._obj},Fr.prototype.compareTo=function(n){var i=n;return this._xValue<i._xValue?-1:this._xValue>i._xValue?1:this._eventType<i._eventType?-1:this._eventType>i._eventType?1:0},Fr.prototype.getInsertEvent=function(){return this._insertEvent},Fr.prototype.isInsert=function(){return this._eventType===Fr.INSERT},Fr.prototype.isSameLabel=function(n){return this._label!==null&&this._label===n._label},Fr.prototype.getDeleteEventIndex=function(){return this._deleteEventIndex},Fr.prototype.interfaces_=function(){return[F]},Fr.prototype.getClass=function(){return Fr},Af.INSERT.get=function(){return 1},Af.DELETE.get=function(){return 2},Object.defineProperties(Fr,Af);var wl=function(){};wl.prototype.interfaces_=function(){return[]},wl.prototype.getClass=function(){return wl};var Zn=function(){this._hasIntersection=!1,this._hasProper=!1,this._hasProperInterior=!1,this._properIntersectionPoint=null,this._li=null,this._includeProper=null,this._recordIsolated=null,this._isSelfIntersection=null,this._numIntersections=0,this.numTests=0,this._bdyNodes=null,this._isDone=!1,this._isDoneWhenProperInt=!1;var n=arguments[0],i=arguments[1],s=arguments[2];this._li=n,this._includeProper=i,this._recordIsolated=s};Zn.prototype.isTrivialIntersection=function(n,i,s,u){if(n===s&&this._li.getIntersectionNum()===1){if(Zn.isAdjacentSegments(i,u))return!0;if(n.isClosed()){var c=n.getNumPoints()-1;if(i===0&&u===c||u===0&&i===c)return!0}}return!1},Zn.prototype.getProperIntersectionPoint=function(){return this._properIntersectionPoint},Zn.prototype.setIsDoneIfProperInt=function(n){this._isDoneWhenProperInt=n},Zn.prototype.hasProperInteriorIntersection=function(){return this._hasProperInterior},Zn.prototype.isBoundaryPointInternal=function(n,i){for(var s=i.iterator();s.hasNext();){var u=s.next().getCoordinate();if(n.isIntersection(u))return!0}return!1},Zn.prototype.hasProperIntersection=function(){return this._hasProper},Zn.prototype.hasIntersection=function(){return this._hasIntersection},Zn.prototype.isDone=function(){return this._isDone},Zn.prototype.isBoundaryPoint=function(n,i){return i!==null&&(!!this.isBoundaryPointInternal(n,i[0])||!!this.isBoundaryPointInternal(n,i[1]))},Zn.prototype.setBoundaryNodes=function(n,i){this._bdyNodes=new Array(2).fill(null),this._bdyNodes[0]=n,this._bdyNodes[1]=i},Zn.prototype.addIntersections=function(n,i,s,u){if(n===s&&i===u)return null;this.numTests++;var c=n.getCoordinates()[i],m=n.getCoordinates()[i+1],E=s.getCoordinates()[u],A=s.getCoordinates()[u+1];this._li.computeIntersection(c,m,E,A),this._li.hasIntersection()&&(this._recordIsolated&&(n.setIsolated(!1),s.setIsolated(!1)),this._numIntersections++,this.isTrivialIntersection(n,i,s,u)||(this._hasIntersection=!0,!this._includeProper&&this._li.isProper()||(n.addIntersections(this._li,i,0),s.addIntersections(this._li,u,1)),this._li.isProper()&&(this._properIntersectionPoint=this._li.getIntersection(0).copy(),this._hasProper=!0,this._isDoneWhenProperInt&&(this._isDone=!0),this.isBoundaryPoint(this._li,this._bdyNodes)||(this._hasProperInterior=!0))))},Zn.prototype.interfaces_=function(){return[]},Zn.prototype.getClass=function(){return Zn},Zn.isAdjacentSegments=function(n,i){return Math.abs(n-i)===1};var R1=function(n){function i(){n.call(this),this.events=new j,this.nOverlaps=null}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.prepareEvents=function(){mi.sort(this.events);for(var s=0;s<this.events.size();s++){var u=this.events.get(s);u.isDelete()&&u.getInsertEvent().setDeleteEventIndex(s)}},i.prototype.computeIntersections=function(){if(arguments.length===1){var s=arguments[0];this.nOverlaps=0,this.prepareEvents();for(var u=0;u<this.events.size();u++){var c=this.events.get(u);if(c.isInsert()&&this.processOverlaps(u,c.getDeleteEventIndex(),c,s),s.isDone())break}}else if(arguments.length===3){if(arguments[2]instanceof Zn&&X(arguments[0],wt)&&X(arguments[1],wt)){var m=arguments[0],E=arguments[1],A=arguments[2];this.addEdges(m,m),this.addEdges(E,E),this.computeIntersections(A)}else if(typeof arguments[2]==\\\"boolean\\\"&&X(arguments[0],wt)&&arguments[1]instanceof Zn){var U=arguments[0],Z=arguments[1];arguments[2]?this.addEdges(U,null):this.addEdges(U),this.computeIntersections(Z)}}},i.prototype.addEdge=function(s,u){for(var c=s.getMonotoneChainEdge(),m=c.getStartIndexes(),E=0;E<m.length-1;E++){var A=new wu(c,E),U=new Fr(u,c.getMinX(E),A);this.events.add(U),this.events.add(new Fr(c.getMaxX(E),U))}},i.prototype.processOverlaps=function(s,u,c,m){for(var E=c.getObject(),A=s;A<u;A++){var U=this.events.get(A);if(U.isInsert()){var Z=U.getObject();c.isSameLabel(U)||(E.computeIntersections(Z,m),this.nOverlaps++)}}},i.prototype.addEdges=function(){if(arguments.length===1)for(var s=arguments[0].iterator();s.hasNext();){var u=s.next();this.addEdge(u,u)}else if(arguments.length===2)for(var c=arguments[0],m=arguments[1],E=c.iterator();E.hasNext();){var A=E.next();this.addEdge(A,m)}},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i}(wl),qi=function(){this._min=S.POSITIVE_INFINITY,this._max=S.NEGATIVE_INFINITY},am={NodeComparator:{configurable:!0}};qi.prototype.getMin=function(){return this._min},qi.prototype.intersects=function(n,i){return!(this._min>i||this._max<n)},qi.prototype.getMax=function(){return this._max},qi.prototype.toString=function(){return qt.toLineString(new L(this._min,0),new L(this._max,0))},qi.prototype.interfaces_=function(){return[]},qi.prototype.getClass=function(){return qi},am.NodeComparator.get=function(){return bu},Object.defineProperties(qi,am);var bu=function(){};bu.prototype.compare=function(n,i){var s=n,u=i,c=(s._min+s._max)/2,m=(u._min+u._max)/2;return c<m?-1:c>m?1:0},bu.prototype.interfaces_=function(){return[z]},bu.prototype.getClass=function(){return bu};var L1=function(n){function i(){n.call(this),this._item=null;var s=arguments[0],u=arguments[1],c=arguments[2];this._min=s,this._max=u,this._item=c}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.query=function(s,u,c){if(!this.intersects(s,u))return null;c.visitItem(this._item)},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i}(qi),N1=function(n){function i(){n.call(this),this._node1=null,this._node2=null;var s=arguments[0],u=arguments[1];this._node1=s,this._node2=u,this.buildExtent(this._node1,this._node2)}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.buildExtent=function(s,u){this._min=Math.min(s._min,u._min),this._max=Math.max(s._max,u._max)},i.prototype.query=function(s,u,c){if(!this.intersects(s,u))return null;this._node1!==null&&this._node1.query(s,u,c),this._node2!==null&&this._node2.query(s,u,c)},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i}(qi),Xi=function(){this._leaves=new j,this._root=null,this._level=0};Xi.prototype.buildTree=function(){mi.sort(this._leaves,new qi.NodeComparator);for(var n=this._leaves,i=null,s=new j;;){if(this.buildLevel(n,s),s.size()===1)return s.get(0);i=n,n=s,s=i}},Xi.prototype.insert=function(n,i,s){if(this._root!==null)throw new Error(\\\"Index cannot be added to once it has been queried\\\");this._leaves.add(new L1(n,i,s))},Xi.prototype.query=function(n,i,s){this.init(),this._root.query(n,i,s)},Xi.prototype.buildRoot=function(){if(this._root!==null)return null;this._root=this.buildTree()},Xi.prototype.printNode=function(n){Nt.out.println(qt.toLineString(new L(n._min,this._level),new L(n._max,this._level)))},Xi.prototype.init=function(){if(this._root!==null)return null;this.buildRoot()},Xi.prototype.buildLevel=function(n,i){this._level++,i.clear();for(var s=0;s<n.size();s+=2){var u=n.get(s);if((s+1<n.size()?n.get(s):null)===null)i.add(u);else{var c=new N1(n.get(s),n.get(s+1));i.add(c)}}},Xi.prototype.interfaces_=function(){return[]},Xi.prototype.getClass=function(){return Xi};var pa=function(){this._items=new j};pa.prototype.visitItem=function(n){this._items.add(n)},pa.prototype.getItems=function(){return this._items},pa.prototype.interfaces_=function(){return[wo]},pa.prototype.getClass=function(){return pa};var da=function(){this._index=null;var n=arguments[0];if(!X(n,ce))throw new C(\\\"Argument must be Polygonal\\\");this._index=new ns(n)},Cf={SegmentVisitor:{configurable:!0},IntervalIndexedGeometry:{configurable:!0}};da.prototype.locate=function(n){var i=new P(n),s=new ma(i);return this._index.query(n.y,n.y,s),i.getLocation()},da.prototype.interfaces_=function(){return[ca]},da.prototype.getClass=function(){return da},Cf.SegmentVisitor.get=function(){return ma},Cf.IntervalIndexedGeometry.get=function(){return ns},Object.defineProperties(da,Cf);var ma=function(){this._counter=null;var n=arguments[0];this._counter=n};ma.prototype.visitItem=function(n){var i=n;this._counter.countSegment(i.getCoordinate(0),i.getCoordinate(1))},ma.prototype.interfaces_=function(){return[wo]},ma.prototype.getClass=function(){return ma};var ns=function(){this._index=new Xi;var n=arguments[0];this.init(n)};ns.prototype.init=function(n){for(var i=qn.getLines(n).iterator();i.hasNext();){var s=i.next().getCoordinates();this.addLine(s)}},ns.prototype.addLine=function(n){for(var i=1;i<n.length;i++){var s=new Zt(n[i-1],n[i]),u=Math.min(s.p0.y,s.p1.y),c=Math.max(s.p0.y,s.p1.y);this._index.insert(u,c,s)}},ns.prototype.query=function(){if(arguments.length===2){var n=arguments[0],i=arguments[1],s=new pa;return this._index.query(n,i,s),s.getItems()}if(arguments.length===3){var u=arguments[0],c=arguments[1],m=arguments[2];this._index.query(u,c,m)}},ns.prototype.interfaces_=function(){return[]},ns.prototype.getClass=function(){return ns};var Tu=function(n){function i(){if(n.call(this),this._parentGeom=null,this._lineEdgeMap=new sa,this._boundaryNodeRule=null,this._useBoundaryDeterminationRule=!0,this._argIndex=null,this._boundaryNodes=null,this._hasTooFewPoints=!1,this._invalidPoint=null,this._areaPtLocator=null,this._ptLocator=new yi,arguments.length===2){var s=arguments[0],u=arguments[1],c=Lt.OGC_SFS_BOUNDARY_RULE;this._argIndex=s,this._parentGeom=u,this._boundaryNodeRule=c,u!==null&&this.add(u)}else if(arguments.length===3){var m=arguments[0],E=arguments[1],A=arguments[2];this._argIndex=m,this._parentGeom=E,this._boundaryNodeRule=A,E!==null&&this.add(E)}}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.insertBoundaryPoint=function(s,u){var c=this._nodes.addNode(u).getLabel(),m=1;k.NONE,c.getLocation(s,bt.ON)===k.BOUNDARY&&m++;var E=i.determineBoundary(this._boundaryNodeRule,m);c.setLocation(s,E)},i.prototype.computeSelfNodes=function(){if(arguments.length===2){var s=arguments[0],u=arguments[1];return this.computeSelfNodes(s,u,!1)}if(arguments.length===3){var c=arguments[0],m=arguments[1],E=arguments[2],A=new Zn(c,!0,!1);A.setIsDoneIfProperInt(E);var U=this.createEdgeSetIntersector(),Z=this._parentGeom instanceof sn||this._parentGeom instanceof Vt||this._parentGeom instanceof un,ut=m||!Z;return U.computeIntersections(this._edges,A,ut),this.addSelfIntersectionNodes(this._argIndex),A}},i.prototype.computeSplitEdges=function(s){for(var u=this._edges.iterator();u.hasNext();)u.next().eiList.addSplitEdges(s)},i.prototype.computeEdgeIntersections=function(s,u,c){var m=new Zn(u,c,!0);return m.setBoundaryNodes(this.getBoundaryNodes(),s.getBoundaryNodes()),this.createEdgeSetIntersector().computeIntersections(this._edges,s._edges,m),m},i.prototype.getGeometry=function(){return this._parentGeom},i.prototype.getBoundaryNodeRule=function(){return this._boundaryNodeRule},i.prototype.hasTooFewPoints=function(){return this._hasTooFewPoints},i.prototype.addPoint=function(){if(arguments[0]instanceof Qt){var s=arguments[0].getCoordinate();this.insertPoint(this._argIndex,s,k.INTERIOR)}else if(arguments[0]instanceof L){var u=arguments[0];this.insertPoint(this._argIndex,u,k.INTERIOR)}},i.prototype.addPolygon=function(s){this.addPolygonRing(s.getExteriorRing(),k.EXTERIOR,k.INTERIOR);for(var u=0;u<s.getNumInteriorRing();u++){var c=s.getInteriorRingN(u);this.addPolygonRing(c,k.INTERIOR,k.EXTERIOR)}},i.prototype.addEdge=function(s){this.insertEdge(s);var u=s.getCoordinates();this.insertPoint(this._argIndex,u[0],k.BOUNDARY),this.insertPoint(this._argIndex,u[u.length-1],k.BOUNDARY)},i.prototype.addLineString=function(s){var u=ft.removeRepeatedPoints(s.getCoordinates());if(u.length<2)return this._hasTooFewPoints=!0,this._invalidPoint=u[0],null;var c=new Sl(u,new rn(this._argIndex,k.INTERIOR));this._lineEdgeMap.put(s,c),this.insertEdge(c),b.isTrue(u.length>=2,\\\"found LineString with single point\\\"),this.insertBoundaryPoint(this._argIndex,u[0]),this.insertBoundaryPoint(this._argIndex,u[u.length-1])},i.prototype.getInvalidPoint=function(){return this._invalidPoint},i.prototype.getBoundaryPoints=function(){for(var s=this.getBoundaryNodes(),u=new Array(s.size()).fill(null),c=0,m=s.iterator();m.hasNext();){var E=m.next();u[c++]=E.getCoordinate().copy()}return u},i.prototype.getBoundaryNodes=function(){return this._boundaryNodes===null&&(this._boundaryNodes=this._nodes.getBoundaryNodes(this._argIndex)),this._boundaryNodes},i.prototype.addSelfIntersectionNode=function(s,u,c){if(this.isBoundaryNode(s,u))return null;c===k.BOUNDARY&&this._useBoundaryDeterminationRule?this.insertBoundaryPoint(s,u):this.insertPoint(s,u,c)},i.prototype.addPolygonRing=function(s,u,c){if(s.isEmpty())return null;var m=ft.removeRepeatedPoints(s.getCoordinates());if(m.length<4)return this._hasTooFewPoints=!0,this._invalidPoint=m[0],null;var E=u,A=c;B.isCCW(m)&&(E=c,A=u);var U=new Sl(m,new rn(this._argIndex,k.BOUNDARY,E,A));this._lineEdgeMap.put(s,U),this.insertEdge(U),this.insertPoint(this._argIndex,m[0],k.BOUNDARY)},i.prototype.insertPoint=function(s,u,c){var m=this._nodes.addNode(u),E=m.getLabel();E===null?m._label=new rn(s,c):E.setLocation(s,c)},i.prototype.createEdgeSetIntersector=function(){return new R1},i.prototype.addSelfIntersectionNodes=function(s){for(var u=this._edges.iterator();u.hasNext();)for(var c=u.next(),m=c.getLabel().getLocation(s),E=c.eiList.iterator();E.hasNext();){var A=E.next();this.addSelfIntersectionNode(s,A.coord,m)}},i.prototype.add=function(){if(arguments.length!==1)return n.prototype.add.apply(this,arguments);var s=arguments[0];if(s.isEmpty())return null;if(s instanceof un&&(this._useBoundaryDeterminationRule=!1),s instanceof Vt)this.addPolygon(s);else if(s instanceof Bt)this.addLineString(s);else if(s instanceof Qt)this.addPoint(s);else if(s instanceof fe)this.addCollection(s);else if(s instanceof H)this.addCollection(s);else if(s instanceof un)this.addCollection(s);else{if(!(s instanceof Vn))throw new Error(s.getClass().getName());this.addCollection(s)}},i.prototype.addCollection=function(s){for(var u=0;u<s.getNumGeometries();u++){var c=s.getGeometryN(u);this.add(c)}},i.prototype.locate=function(s){return X(this._parentGeom,ce)&&this._parentGeom.getNumGeometries()>50?(this._areaPtLocator===null&&(this._areaPtLocator=new da(this._parentGeom)),this._areaPtLocator.locate(s)):this._ptLocator.locate(s,this._parentGeom)},i.prototype.findEdge=function(){if(arguments.length===1){var s=arguments[0];return this._lineEdgeMap.get(s)}return n.prototype.findEdge.apply(this,arguments)},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i.determineBoundary=function(s,u){return s.isInBoundary(u)?k.BOUNDARY:k.INTERIOR},i}(_n),ga=function(){if(this._li=new J,this._resultPrecisionModel=null,this._arg=null,arguments.length===1){var n=arguments[0];this.setComputationPrecision(n.getPrecisionModel()),this._arg=new Array(1).fill(null),this._arg[0]=new Tu(0,n)}else if(arguments.length===2){var i=arguments[0],s=arguments[1],u=Lt.OGC_SFS_BOUNDARY_RULE;i.getPrecisionModel().compareTo(s.getPrecisionModel())>=0?this.setComputationPrecision(i.getPrecisionModel()):this.setComputationPrecision(s.getPrecisionModel()),this._arg=new Array(2).fill(null),this._arg[0]=new Tu(0,i,u),this._arg[1]=new Tu(1,s,u)}else if(arguments.length===3){var c=arguments[0],m=arguments[1],E=arguments[2];c.getPrecisionModel().compareTo(m.getPrecisionModel())>=0?this.setComputationPrecision(c.getPrecisionModel()):this.setComputationPrecision(m.getPrecisionModel()),this._arg=new Array(2).fill(null),this._arg[0]=new Tu(0,c,E),this._arg[1]=new Tu(1,m,E)}};ga.prototype.getArgGeometry=function(n){return this._arg[n].getGeometry()},ga.prototype.setComputationPrecision=function(n){this._resultPrecisionModel=n,this._li.setPrecisionModel(this._resultPrecisionModel)},ga.prototype.interfaces_=function(){return[]},ga.prototype.getClass=function(){return ga};var rs=function(){};rs.prototype.interfaces_=function(){return[]},rs.prototype.getClass=function(){return rs},rs.map=function(){if(arguments[0]instanceof Q&&X(arguments[1],rs.MapOp)){for(var n=arguments[0],i=arguments[1],s=new j,u=0;u<n.getNumGeometries();u++){var c=i.map(n.getGeometryN(u));c!==null&&s.add(c)}return n.getFactory().buildGeometry(s)}if(X(arguments[0],Ot)&&X(arguments[1],rs.MapOp)){for(var m=arguments[0],E=arguments[1],A=new j,U=m.iterator();U.hasNext();){var Z=U.next(),ut=E.map(Z);ut!==null&&A.add(ut)}return A}},rs.MapOp=function(){};var ae=function(n){function i(){var s=arguments[0],u=arguments[1];n.call(this,s,u),this._ptLocator=new yi,this._geomFact=null,this._resultGeom=null,this._graph=null,this._edgeList=new gi,this._resultPolyList=new j,this._resultLineList=new j,this._resultPointList=new j,this._graph=new _n(new jd),this._geomFact=s.getFactory()}return n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i,i.prototype.insertUniqueEdge=function(s){var u=this._edgeList.findEqualEdge(s);if(u!==null){var c=u.getLabel(),m=s.getLabel();u.isPointwiseEqual(s)||(m=new rn(s.getLabel())).flip();var E=u.getDepth();E.isNull()&&E.add(c),E.add(m),c.merge(m)}else this._edgeList.add(s)},i.prototype.getGraph=function(){return this._graph},i.prototype.cancelDuplicateResultEdges=function(){for(var s=this._graph.getEdgeEnds().iterator();s.hasNext();){var u=s.next(),c=u.getSym();u.isInResult()&&c.isInResult()&&(u.setInResult(!1),c.setInResult(!1))}},i.prototype.isCoveredByLA=function(s){return!!this.isCovered(s,this._resultLineList)||!!this.isCovered(s,this._resultPolyList)},i.prototype.computeGeometry=function(s,u,c,m){var E=new j;return E.addAll(s),E.addAll(u),E.addAll(c),E.isEmpty()?i.createEmptyResult(m,this._arg[0].getGeometry(),this._arg[1].getGeometry(),this._geomFact):this._geomFact.buildGeometry(E)},i.prototype.mergeSymLabels=function(){for(var s=this._graph.getNodes().iterator();s.hasNext();)s.next().getEdges().mergeSymLabels()},i.prototype.isCovered=function(s,u){for(var c=u.iterator();c.hasNext();){var m=c.next();if(this._ptLocator.locate(s,m)!==k.EXTERIOR)return!0}return!1},i.prototype.replaceCollapsedEdges=function(){for(var s=new j,u=this._edgeList.iterator();u.hasNext();){var c=u.next();c.isCollapsed()&&(u.remove(),s.add(c.getCollapsedEdge()))}this._edgeList.addAll(s)},i.prototype.updateNodeLabelling=function(){for(var s=this._graph.getNodes().iterator();s.hasNext();){var u=s.next(),c=u.getEdges().getLabel();u.getLabel().merge(c)}},i.prototype.getResultGeometry=function(s){return this.computeOverlay(s),this._resultGeom},i.prototype.insertUniqueEdges=function(s){for(var u=s.iterator();u.hasNext();){var c=u.next();this.insertUniqueEdge(c)}},i.prototype.computeOverlay=function(s){this.copyPoints(0),this.copyPoints(1),this._arg[0].computeSelfNodes(this._li,!1),this._arg[1].computeSelfNodes(this._li,!1),this._arg[0].computeEdgeIntersections(this._arg[1],this._li,!0);var u=new j;this._arg[0].computeSplitEdges(u),this._arg[1].computeSplitEdges(u),this.insertUniqueEdges(u),this.computeLabelsFromDepths(),this.replaceCollapsedEdges(),es.checkValid(this._edgeList.getEdges()),this._graph.addEdges(this._edgeList.getEdges()),this.computeLabelling(),this.labelIncompleteNodes(),this.findResultAreaEdges(s),this.cancelDuplicateResultEdges();var c=new Nr(this._geomFact);c.add(this._graph),this._resultPolyList=c.getPolygons();var m=new Li(this,this._geomFact,this._ptLocator);this._resultLineList=m.build(s);var E=new Fs(this,this._geomFact,this._ptLocator);this._resultPointList=E.build(s),this._resultGeom=this.computeGeometry(this._resultPointList,this._resultLineList,this._resultPolyList,s)},i.prototype.labelIncompleteNode=function(s,u){var c=this._ptLocator.locate(s.getCoordinate(),this._arg[u].getGeometry());s.getLabel().setLocation(u,c)},i.prototype.copyPoints=function(s){for(var u=this._arg[s].getNodeIterator();u.hasNext();){var c=u.next();this._graph.addNode(c.getCoordinate()).setLabel(s,c.getLabel().getLocation(s))}},i.prototype.findResultAreaEdges=function(s){for(var u=this._graph.getEdgeEnds().iterator();u.hasNext();){var c=u.next(),m=c.getLabel();m.isArea()&&!c.isInteriorAreaEdge()&&i.isResultOfOp(m.getLocation(0,bt.RIGHT),m.getLocation(1,bt.RIGHT),s)&&c.setInResult(!0)}},i.prototype.computeLabelsFromDepths=function(){for(var s=this._edgeList.iterator();s.hasNext();){var u=s.next(),c=u.getLabel(),m=u.getDepth();if(!m.isNull()){m.normalize();for(var E=0;E<2;E++)c.isNull(E)||!c.isArea()||m.isNull(E)||(m.getDelta(E)===0?c.toLine(E):(b.isTrue(!m.isNull(E,bt.LEFT),\\\"depth of LEFT side has not been initialized\\\"),c.setLocation(E,bt.LEFT,m.getLocation(E,bt.LEFT)),b.isTrue(!m.isNull(E,bt.RIGHT),\\\"depth of RIGHT side has not been initialized\\\"),c.setLocation(E,bt.RIGHT,m.getLocation(E,bt.RIGHT))))}}},i.prototype.computeLabelling=function(){for(var s=this._graph.getNodes().iterator();s.hasNext();)s.next().getEdges().computeLabelling(this._arg);this.mergeSymLabels(),this.updateNodeLabelling()},i.prototype.labelIncompleteNodes=function(){for(var s=this._graph.getNodes().iterator();s.hasNext();){var u=s.next(),c=u.getLabel();u.isIsolated()&&(c.isNull(0)?this.labelIncompleteNode(u,0):this.labelIncompleteNode(u,1)),u.getEdges().updateLabelling(c)}},i.prototype.isCoveredByA=function(s){return!!this.isCovered(s,this._resultPolyList)},i.prototype.interfaces_=function(){return[]},i.prototype.getClass=function(){return i},i}(ga);ae.overlayOp=function(n,i,s){return new ae(n,i).getResultGeometry(s)},ae.intersection=function(n,i){if(n.isEmpty()||i.isEmpty())return ae.createEmptyResult(ae.INTERSECTION,n,i,n.getFactory());if(n.isGeometryCollection()){var s=i;return Ds.map(n,{interfaces_:function(){return[rs.MapOp]},map:function(u){return u.intersection(s)}})}return n.checkNotGeometryCollection(n),n.checkNotGeometryCollection(i),hr.overlayOp(n,i,ae.INTERSECTION)},ae.symDifference=function(n,i){if(n.isEmpty()||i.isEmpty()){if(n.isEmpty()&&i.isEmpty())return ae.createEmptyResult(ae.SYMDIFFERENCE,n,i,n.getFactory());if(n.isEmpty())return i.copy();if(i.isEmpty())return n.copy()}return n.checkNotGeometryCollection(n),n.checkNotGeometryCollection(i),hr.overlayOp(n,i,ae.SYMDIFFERENCE)},ae.resultDimension=function(n,i,s){var u=i.getDimension(),c=s.getDimension(),m=-1;switch(n){case ae.INTERSECTION:m=Math.min(u,c);break;case ae.UNION:m=Math.max(u,c);break;case ae.DIFFERENCE:m=u;break;case ae.SYMDIFFERENCE:m=Math.max(u,c)}return m},ae.createEmptyResult=function(n,i,s,u){var c=null;switch(ae.resultDimension(n,i,s)){case-1:c=u.createGeometryCollection(new Array(0).fill(null));break;case 0:c=u.createPoint();break;case 1:c=u.createLineString();break;case 2:c=u.createPolygon()}return c},ae.difference=function(n,i){return n.isEmpty()?ae.createEmptyResult(ae.DIFFERENCE,n,i,n.getFactory()):i.isEmpty()?n.copy():(n.checkNotGeometryCollection(n),n.checkNotGeometryCollection(i),hr.overlayOp(n,i,ae.DIFFERENCE))},ae.isResultOfOp=function(){if(arguments.length===2){var n=arguments[0],i=arguments[1],s=n.getLocation(0),u=n.getLocation(1);return ae.isResultOfOp(s,u,i)}if(arguments.length===3){var c=arguments[0],m=arguments[1],E=arguments[2];switch(c===k.BOUNDARY&&(c=k.INTERIOR),m===k.BOUNDARY&&(m=k.INTERIOR),E){case ae.INTERSECTION:return c===k.INTERIOR&&m===k.INTERIOR;case ae.UNION:return c===k.INTERIOR||m===k.INTERIOR;case ae.DIFFERENCE:return c===k.INTERIOR&&m!==k.INTERIOR;case ae.SYMDIFFERENCE:return c===k.INTERIOR&&m!==k.INTERIOR||c!==k.INTERIOR&&m===k.INTERIOR}return!1}},ae.INTERSECTION=1,ae.UNION=2,ae.DIFFERENCE=3,ae.SYMDIFFERENCE=4;var No=function(){this._g=null,this._boundaryDistanceTolerance=null,this._linework=null,this._ptLocator=new yi,this._seg=new Zt;var n=arguments[0],i=arguments[1];this._g=n,this._boundaryDistanceTolerance=i,this._linework=this.extractLinework(n)};No.prototype.isWithinToleranceOfBoundary=function(n){for(var i=0;i<this._linework.getNumGeometries();i++)for(var s=this._linework.getGeometryN(i).getCoordinateSequence(),u=0;u<s.size()-1;u++)if(s.getCoordinate(u,this._seg.p0),s.getCoordinate(u+1,this._seg.p1),this._seg.distance(n)<=this._boundaryDistanceTolerance)return!0;return!1},No.prototype.getLocation=function(n){return this.isWithinToleranceOfBoundary(n)?k.BOUNDARY:this._ptLocator.locate(n,this._g)},No.prototype.extractLinework=function(n){var i=new ya;n.apply(i);var s=i.getLinework(),u=le.toLineStringArray(s);return n.getFactory().createMultiLineString(u)},No.prototype.interfaces_=function(){return[]},No.prototype.getClass=function(){return No};var ya=function(){this._linework=null,this._linework=new j};ya.prototype.getLinework=function(){return this._linework},ya.prototype.filter=function(n){if(n instanceof Vt){var i=n;this._linework.add(i.getExteriorRing());for(var s=0;s<i.getNumInteriorRing();s++)this._linework.add(i.getInteriorRingN(s))}},ya.prototype.interfaces_=function(){return[ei]},ya.prototype.getClass=function(){return ya};var is=function(){this._g=null,this._doLeft=!0,this._doRight=!0;var n=arguments[0];this._g=n};is.prototype.extractPoints=function(n,i,s){for(var u=n.getCoordinates(),c=0;c<u.length-1;c++)this.computeOffsetPoints(u[c],u[c+1],i,s)},is.prototype.setSidesToGenerate=function(n,i){this._doLeft=n,this._doRight=i},is.prototype.getPoints=function(n){for(var i=new j,s=qn.getLines(this._g).iterator();s.hasNext();){var u=s.next();this.extractPoints(u,n,i)}return i},is.prototype.computeOffsetPoints=function(n,i,s,u){var c=i.x-n.x,m=i.y-n.y,E=Math.sqrt(c*c+m*m),A=s*c/E,U=s*m/E,Z=(i.x+n.x)/2,ut=(i.y+n.y)/2;if(this._doLeft){var ht=new L(Z-U,ut+A);u.add(ht)}if(this._doRight){var At=new L(Z+U,ut-A);u.add(At)}},is.prototype.interfaces_=function(){return[]},is.prototype.getClass=function(){return is};var Yr=function n(){this._geom=null,this._locFinder=null,this._location=new Array(3).fill(null),this._invalidLocation=null,this._boundaryDistanceTolerance=n.TOLERANCE,this._testCoords=new j;var i=arguments[0],s=arguments[1],u=arguments[2];this._boundaryDistanceTolerance=n.computeBoundaryDistanceTolerance(i,s),this._geom=[i,s,u],this._locFinder=[new No(this._geom[0],this._boundaryDistanceTolerance),new No(this._geom[1],this._boundaryDistanceTolerance),new No(this._geom[2],this._boundaryDistanceTolerance)]},um={TOLERANCE:{configurable:!0}};Yr.prototype.reportResult=function(n,i,s){Nt.out.println(\\\"Overlay result invalid - A:\\\"+k.toLocationSymbol(i[0])+\\\" B:\\\"+k.toLocationSymbol(i[1])+\\\" expected:\\\"+(s?\\\"i\\\":\\\"e\\\")+\\\" actual:\\\"+k.toLocationSymbol(i[2]))},Yr.prototype.isValid=function(n){this.addTestPts(this._geom[0]),this.addTestPts(this._geom[1]);var i=this.checkValid(n);return i},Yr.prototype.checkValid=function(){if(arguments.length===1){for(var n=arguments[0],i=0;i<this._testCoords.size();i++){var s=this._testCoords.get(i);if(!this.checkValid(n,s))return this._invalidLocation=s,!1}return!0}if(arguments.length===2){var u=arguments[0],c=arguments[1];return this._location[0]=this._locFinder[0].getLocation(c),this._location[1]=this._locFinder[1].getLocation(c),this._location[2]=this._locFinder[2].getLocation(c),!!Yr.hasLocation(this._location,k.BOUNDARY)||this.isValidResult(u,this._location)}},Yr.prototype.addTestPts=function(n){var i=new is(n);this._testCoords.addAll(i.getPoints(5*this._boundaryDistanceTolerance))},Yr.prototype.isValidResult=function(n,i){var s=ae.isResultOfOp(i[0],i[1],n),u=!(s^i[2]===k.INTERIOR);return u||this.reportResult(n,i,s),u},Yr.prototype.getInvalidLocation=function(){return this._invalidLocation},Yr.prototype.interfaces_=function(){return[]},Yr.prototype.getClass=function(){return Yr},Yr.hasLocation=function(n,i){for(var s=0;s<3;s++)if(n[s]===i)return!0;return!1},Yr.computeBoundaryDistanceTolerance=function(n,i){return Math.min(bn.computeSizeBasedSnapTolerance(n),bn.computeSizeBasedSnapTolerance(i))},Yr.isValid=function(n,i,s,u){return new Yr(n,i,u).isValid(s)},um.TOLERANCE.get=function(){return 1e-6},Object.defineProperties(Yr,um);var Zr=function n(i){this._geomFactory=null,this._skipEmpty=!1,this._inputGeoms=null,this._geomFactory=n.extractFactory(i),this._inputGeoms=i};Zr.prototype.extractElements=function(n,i){if(n===null)return null;for(var s=0;s<n.getNumGeometries();s++){var u=n.getGeometryN(s);this._skipEmpty&&u.isEmpty()||i.add(u)}},Zr.prototype.combine=function(){for(var n=new j,i=this._inputGeoms.iterator();i.hasNext();){var s=i.next();this.extractElements(s,n)}return n.size()===0?this._geomFactory!==null?this._geomFactory.createGeometryCollection(null):null:this._geomFactory.buildGeometry(n)},Zr.prototype.interfaces_=function(){return[]},Zr.prototype.getClass=function(){return Zr},Zr.combine=function(){if(arguments.length===1){var n=arguments[0];return new Zr(n).combine()}if(arguments.length===2){var i=arguments[0],s=arguments[1];return new Zr(Zr.createList(i,s)).combine()}if(arguments.length===3){var u=arguments[0],c=arguments[1],m=arguments[2];return new Zr(Zr.createList(u,c,m)).combine()}},Zr.extractFactory=function(n){return n.isEmpty()?null:n.iterator().next().getFactory()},Zr.createList=function(){if(arguments.length===2){var n=arguments[0],i=arguments[1],s=new j;return s.add(n),s.add(i),s}if(arguments.length===3){var u=arguments[0],c=arguments[1],m=arguments[2],E=new j;return E.add(u),E.add(c),E.add(m),E}};var Pn=function(){this._inputPolys=null,this._geomFactory=null;var n=arguments[0];this._inputPolys=n,this._inputPolys===null&&(this._inputPolys=new j)},lm={STRTREE_NODE_CAPACITY:{configurable:!0}};Pn.prototype.reduceToGeometries=function(n){for(var i=new j,s=n.iterator();s.hasNext();){var u=s.next(),c=null;X(u,wt)?c=this.unionTree(u):u instanceof Q&&(c=u),i.add(c)}return i},Pn.prototype.extractByEnvelope=function(n,i,s){for(var u=new j,c=0;c<i.getNumGeometries();c++){var m=i.getGeometryN(c);m.getEnvelopeInternal().intersects(n)?u.add(m):s.add(m)}return this._geomFactory.buildGeometry(u)},Pn.prototype.unionOptimized=function(n,i){var s=n.getEnvelopeInternal(),u=i.getEnvelopeInternal();if(!s.intersects(u))return Zr.combine(n,i);if(n.getNumGeometries()<=1&&i.getNumGeometries()<=1)return this.unionActual(n,i);var c=s.intersection(u);return this.unionUsingEnvelopeIntersection(n,i,c)},Pn.prototype.union=function(){if(this._inputPolys===null)throw new Error(\\\"union() method cannot be called twice\\\");if(this._inputPolys.isEmpty())return null;this._geomFactory=this._inputPolys.iterator().next().getFactory();for(var n=new Xd(Pn.STRTREE_NODE_CAPACITY),i=this._inputPolys.iterator();i.hasNext();){var s=i.next();n.insert(s.getEnvelopeInternal(),s)}this._inputPolys=null;var u=n.itemsTree();return this.unionTree(u)},Pn.prototype.binaryUnion=function(){if(arguments.length===1){var n=arguments[0];return this.binaryUnion(n,0,n.size())}if(arguments.length===3){var i=arguments[0],s=arguments[1],u=arguments[2];if(u-s<=1){var c=Pn.getGeometry(i,s);return this.unionSafe(c,null)}if(u-s==2)return this.unionSafe(Pn.getGeometry(i,s),Pn.getGeometry(i,s+1));var m=Math.trunc((u+s)/2),E=this.binaryUnion(i,s,m),A=this.binaryUnion(i,m,u);return this.unionSafe(E,A)}},Pn.prototype.repeatedUnion=function(n){for(var i=null,s=n.iterator();s.hasNext();){var u=s.next();i=i===null?u.copy():i.union(u)}return i},Pn.prototype.unionSafe=function(n,i){return n===null&&i===null?null:n===null?i.copy():i===null?n.copy():this.unionOptimized(n,i)},Pn.prototype.unionActual=function(n,i){return Pn.restrictToPolygons(n.union(i))},Pn.prototype.unionTree=function(n){var i=this.reduceToGeometries(n);return this.binaryUnion(i)},Pn.prototype.unionUsingEnvelopeIntersection=function(n,i,s){var u=new j,c=this.extractByEnvelope(s,n,u),m=this.extractByEnvelope(s,i,u),E=this.unionActual(c,m);return u.add(E),Zr.combine(u)},Pn.prototype.bufferUnion=function(){if(arguments.length===1){var n=arguments[0];return n.get(0).getFactory().buildGeometry(n).buffer(0)}if(arguments.length===2){var i=arguments[0],s=arguments[1];return i.getFactory().createGeometryCollection([i,s]).buffer(0)}},Pn.prototype.interfaces_=function(){return[]},Pn.prototype.getClass=function(){return Pn},Pn.restrictToPolygons=function(n){if(X(n,ce))return n;var i=lo.getPolygons(n);return i.size()===1?i.get(0):n.getFactory().createMultiPolygon(le.toPolygonArray(i))},Pn.getGeometry=function(n,i){return i>=n.size()?null:n.get(i)},Pn.union=function(n){return new Pn(n).union()},lm.STRTREE_NODE_CAPACITY.get=function(){return 4},Object.defineProperties(Pn,lm);var Au=function(){};Au.prototype.interfaces_=function(){return[]},Au.prototype.getClass=function(){return Au},Au.union=function(n,i){if(n.isEmpty()||i.isEmpty()){if(n.isEmpty()&&i.isEmpty())return ae.createEmptyResult(ae.UNION,n,i,n.getFactory());if(n.isEmpty())return i.copy();if(i.isEmpty())return n.copy()}return n.checkNotGeometryCollection(n),n.checkNotGeometryCollection(i),hr.overlayOp(n,i,ae.UNION)},r.GeoJSONReader=_f,r.GeoJSONWriter=Wd,r.OverlayOp=ae,r.UnionOp=Au,r.BufferOp=Wn,Object.defineProperty(r,\\\"__esModule\\\",{value:!0})})});var f1=Jt((R9,c1)=>{var Gd=class{constructor(){this.keys=new Set,this.queue=[]}sort(){this.queue.sort((t,e)=>t.priority-e.priority)}set(t,e){let o=Number(e);if(isNaN(o))throw new TypeError('\\\"priority\\\" must be a number');return this.keys.has(t)?this.queue.map(a=>(a.key===t&&Object.assign(a,{priority:o}),a)):(this.keys.add(t),this.queue.push({key:t,priority:o})),this.sort(),this.queue.length}next(){let t=this.queue.shift();return this.keys.delete(t.key),t}isEmpty(){return this.queue.length===0}has(t){return this.keys.has(t)}get(t){return this.queue.find(e=>e.key===t)}};c1.exports=Gd});var d1=Jt((L9,p1)=>{function h1(r,t){let e=new Map;for(let[o,a]of r)o!==t&&a instanceof Map?e.set(o,h1(a,t)):o!==t&&e.set(o,a);return e}p1.exports=h1});var y1=Jt((N9,g1)=>{function sR(r){let t=Number(r);return!(isNaN(t)||t<=0)}function m1(r){let t=new Map;return Object.keys(r).forEach(o=>{let a=r[o];if(a!==null&&typeof a==\\\"object\\\"&&!Array.isArray(a))return t.set(o,m1(a));if(!sR(a))throw new Error(`Could not add node at key \\\"${o}\\\", make sure it's a valid node`,a);return t.set(o,Number(a))}),t}g1.exports=m1});var x1=Jt((O9,_1)=>{function v1(r){if(!(r instanceof Map))throw new Error(`Invalid graph: Expected Map instead found ${typeof r}`);r.forEach((t,e)=>{if(typeof t==\\\"object\\\"&&t instanceof Map){v1(t);return}if(typeof t!=\\\"number\\\"||t<=0)throw new Error(`Values must be numbers greater than 0. Found value ${t} at ${e}`)})}_1.exports=v1});var w1=Jt((D9,S1)=>{var aR=f1(),uR=d1(),E1=y1(),M1=x1(),Vd=class{constructor(t){t instanceof Map?(M1(t),this.graph=t):t?this.graph=E1(t):this.graph=new Map}addNode(t,e){let o;return e instanceof Map?(M1(e),o=e):o=E1(e),this.graph.set(t,o),this}addVertex(t,e){return this.addNode(t,e)}removeNode(t){return this.graph=uR(this.graph,t),this}path(t,e,o={}){if(!this.graph.size)return o.cost?{path:null,cost:0}:null;let a=new Set,l=new aR,f=new Map,h=[],p=0,d=[];if(o.avoid&&(d=[].concat(o.avoid)),d.includes(t))throw new Error(`Starting node (${t}) cannot be avoided`);if(d.includes(e))throw new Error(`Ending node (${e}) cannot be avoided`);for(l.set(t,0);!l.isEmpty();){let g=l.next();if(g.key===e){p=g.priority;let y=g.key;for(;f.has(y);)h.push(y),y=f.get(y);break}a.add(g.key),(this.graph.get(g.key)||new Map).forEach((y,M)=>{if(a.has(M)||d.includes(M))return null;if(!l.has(M))return f.set(M,g.key),l.set(M,g.priority+y);let w=l.get(M).priority,T=g.priority+y;return T<w?(f.set(M,g.key),l.set(M,T)):null})}return h.length?(o.trim?h.shift():h=h.concat([t]),o.reverse||(h=h.reverse()),o.cost?{path:h,cost:p}:h):o.cost?{path:null,cost:0}:null}shortestPath(...t){return this.path(...t)}};S1.exports=Vd});function hm(r,t){return new Promise((e,o)=>{let a=new XMLHttpRequest;a.open(\\\"GET\\\",r,!0),Object.keys(t.headers||{}).forEach(l=>{a.setRequestHeader(l,t.headers[l])}),t.responseType&&(a.responseType=t.responseType),a.onload=()=>{if(a.status>=200&&a.status<300)if(t.responseType===\\\"arraybuffer\\\")e(a.response);else try{let l=JSON.parse(a.responseText);e(l)}catch(l){o(l)}else o(a.statusText)},a.onerror=()=>{o(a.statusText)},a.send()})}var Xh=\\\"157\\\";var k1=0,pm=1,G1=2;var Og=1,V1=2,Go=3,ms=0,li=1,Ho=2;var hs=0,Ba=1,dm=2,mm=3,gm=4,H1=5,Oa=100,W1=101,q1=102,ym=103,vm=104,X1=200,Y1=201,Z1=202,J1=203,Dg=204,Fg=205,$1=206,K1=207,j1=208,Q1=209,tx=210,ex=0,nx=1,rx=2,uh=3,ix=4,ox=5,sx=6,ax=7,Ug=0,ux=1,lx=2,ps=0,cx=1,fx=2,hx=3,px=4,dx=5,Bg=300,Ga=301,Va=302,lh=303,ch=304,pc=306,fh=1e3,$i=1001,hh=1002,$r=1003,_m=1004;var Lf=1005;var Oi=1006,mx=1007;var Fu=1008;var ds=1009,gx=1010,yx=1011,Yh=1012,zg=1013,cs=1014,fs=1015,Uu=1016,kg=1017,Gg=1018,Ws=1020,vx=1021,Ki=1023,_x=1024,xx=1025,qs=1026,Ha=1027,Ex=1028,Vg=1029,Mx=1030,Hg=1031,Wg=1033,Nf=33776,Of=33777,Df=33778,Ff=33779,xm=35840,Em=35841,Mm=35842,Sm=35843,Sx=36196,wm=37492,bm=37496,Tm=37808,Am=37809,Cm=37810,Pm=37811,Im=37812,Rm=37813,Lm=37814,Nm=37815,Om=37816,Dm=37817,Fm=37818,Um=37819,Bm=37820,zm=37821,Uf=36492,km=36494,Gm=36495,wx=36283,Vm=36284,Hm=36285,Wm=36286;var Zl=2300,Jl=2301,Bf=2302,qm=2400,Xm=2401,Ym=2402;var qg=3e3,Xs=3001,bx=3200,Tx=3201,Ax=0,Cx=1,Di=\\\"\\\",br=\\\"srgb\\\",Xo=\\\"srgb-linear\\\",Zh=\\\"display-p3\\\",dc=\\\"display-p3-linear\\\",$l=\\\"linear\\\",Tn=\\\"srgb\\\",Kl=\\\"rec709\\\",jl=\\\"p3\\\";var zf=7680;var Px=519,Ix=512,Rx=513,Lx=514,Nx=515,Ox=516,Dx=517,Fx=518,Ux=519,Zm=35044;var Jm=\\\"300 es\\\",ph=1035,Wo=2e3,Ql=2001,gs=class{addEventListener(t,e){this._listeners===void 0&&(this._listeners={});let o=this._listeners;o[t]===void 0&&(o[t]=[]),o[t].indexOf(e)===-1&&o[t].push(e)}hasEventListener(t,e){if(this._listeners===void 0)return!1;let o=this._listeners;return o[t]!==void 0&&o[t].indexOf(e)!==-1}removeEventListener(t,e){if(this._listeners===void 0)return;let a=this._listeners[t];if(a!==void 0){let l=a.indexOf(e);l!==-1&&a.splice(l,1)}}dispatchEvent(t){if(this._listeners===void 0)return;let o=this._listeners[t.type];if(o!==void 0){t.target=this;let a=o.slice(0);for(let l=0,f=a.length;l<f;l++)a[l].call(this,t);t.target=null}}},Ur=[\\\"00\\\",\\\"01\\\",\\\"02\\\",\\\"03\\\",\\\"04\\\",\\\"05\\\",\\\"06\\\",\\\"07\\\",\\\"08\\\",\\\"09\\\",\\\"0a\\\",\\\"0b\\\",\\\"0c\\\",\\\"0d\\\",\\\"0e\\\",\\\"0f\\\",\\\"10\\\",\\\"11\\\",\\\"12\\\",\\\"13\\\",\\\"14\\\",\\\"15\\\",\\\"16\\\",\\\"17\\\",\\\"18\\\",\\\"19\\\",\\\"1a\\\",\\\"1b\\\",\\\"1c\\\",\\\"1d\\\",\\\"1e\\\",\\\"1f\\\",\\\"20\\\",\\\"21\\\",\\\"22\\\",\\\"23\\\",\\\"24\\\",\\\"25\\\",\\\"26\\\",\\\"27\\\",\\\"28\\\",\\\"29\\\",\\\"2a\\\",\\\"2b\\\",\\\"2c\\\",\\\"2d\\\",\\\"2e\\\",\\\"2f\\\",\\\"30\\\",\\\"31\\\",\\\"32\\\",\\\"33\\\",\\\"34\\\",\\\"35\\\",\\\"36\\\",\\\"37\\\",\\\"38\\\",\\\"39\\\",\\\"3a\\\",\\\"3b\\\",\\\"3c\\\",\\\"3d\\\",\\\"3e\\\",\\\"3f\\\",\\\"40\\\",\\\"41\\\",\\\"42\\\",\\\"43\\\",\\\"44\\\",\\\"45\\\",\\\"46\\\",\\\"47\\\",\\\"48\\\",\\\"49\\\",\\\"4a\\\",\\\"4b\\\",\\\"4c\\\",\\\"4d\\\",\\\"4e\\\",\\\"4f\\\",\\\"50\\\",\\\"51\\\",\\\"52\\\",\\\"53\\\",\\\"54\\\",\\\"55\\\",\\\"56\\\",\\\"57\\\",\\\"58\\\",\\\"59\\\",\\\"5a\\\",\\\"5b\\\",\\\"5c\\\",\\\"5d\\\",\\\"5e\\\",\\\"5f\\\",\\\"60\\\",\\\"61\\\",\\\"62\\\",\\\"63\\\",\\\"64\\\",\\\"65\\\",\\\"66\\\",\\\"67\\\",\\\"68\\\",\\\"69\\\",\\\"6a\\\",\\\"6b\\\",\\\"6c\\\",\\\"6d\\\",\\\"6e\\\",\\\"6f\\\",\\\"70\\\",\\\"71\\\",\\\"72\\\",\\\"73\\\",\\\"74\\\",\\\"75\\\",\\\"76\\\",\\\"77\\\",\\\"78\\\",\\\"79\\\",\\\"7a\\\",\\\"7b\\\",\\\"7c\\\",\\\"7d\\\",\\\"7e\\\",\\\"7f\\\",\\\"80\\\",\\\"81\\\",\\\"82\\\",\\\"83\\\",\\\"84\\\",\\\"85\\\",\\\"86\\\",\\\"87\\\",\\\"88\\\",\\\"89\\\",\\\"8a\\\",\\\"8b\\\",\\\"8c\\\",\\\"8d\\\",\\\"8e\\\",\\\"8f\\\",\\\"90\\\",\\\"91\\\",\\\"92\\\",\\\"93\\\",\\\"94\\\",\\\"95\\\",\\\"96\\\",\\\"97\\\",\\\"98\\\",\\\"99\\\",\\\"9a\\\",\\\"9b\\\",\\\"9c\\\",\\\"9d\\\",\\\"9e\\\",\\\"9f\\\",\\\"a0\\\",\\\"a1\\\",\\\"a2\\\",\\\"a3\\\",\\\"a4\\\",\\\"a5\\\",\\\"a6\\\",\\\"a7\\\",\\\"a8\\\",\\\"a9\\\",\\\"aa\\\",\\\"ab\\\",\\\"ac\\\",\\\"ad\\\",\\\"ae\\\",\\\"af\\\",\\\"b0\\\",\\\"b1\\\",\\\"b2\\\",\\\"b3\\\",\\\"b4\\\",\\\"b5\\\",\\\"b6\\\",\\\"b7\\\",\\\"b8\\\",\\\"b9\\\",\\\"ba\\\",\\\"bb\\\",\\\"bc\\\",\\\"bd\\\",\\\"be\\\",\\\"bf\\\",\\\"c0\\\",\\\"c1\\\",\\\"c2\\\",\\\"c3\\\",\\\"c4\\\",\\\"c5\\\",\\\"c6\\\",\\\"c7\\\",\\\"c8\\\",\\\"c9\\\",\\\"ca\\\",\\\"cb\\\",\\\"cc\\\",\\\"cd\\\",\\\"ce\\\",\\\"cf\\\",\\\"d0\\\",\\\"d1\\\",\\\"d2\\\",\\\"d3\\\",\\\"d4\\\",\\\"d5\\\",\\\"d6\\\",\\\"d7\\\",\\\"d8\\\",\\\"d9\\\",\\\"da\\\",\\\"db\\\",\\\"dc\\\",\\\"dd\\\",\\\"de\\\",\\\"df\\\",\\\"e0\\\",\\\"e1\\\",\\\"e2\\\",\\\"e3\\\",\\\"e4\\\",\\\"e5\\\",\\\"e6\\\",\\\"e7\\\",\\\"e8\\\",\\\"e9\\\",\\\"ea\\\",\\\"eb\\\",\\\"ec\\\",\\\"ed\\\",\\\"ee\\\",\\\"ef\\\",\\\"f0\\\",\\\"f1\\\",\\\"f2\\\",\\\"f3\\\",\\\"f4\\\",\\\"f5\\\",\\\"f6\\\",\\\"f7\\\",\\\"f8\\\",\\\"f9\\\",\\\"fa\\\",\\\"fb\\\",\\\"fc\\\",\\\"fd\\\",\\\"fe\\\",\\\"ff\\\"];var kf=Math.PI/180,dh=180/Math.PI;function Gu(){let r=Math.random()*4294967295|0,t=Math.random()*4294967295|0,e=Math.random()*4294967295|0,o=Math.random()*4294967295|0;return(Ur[r&255]+Ur[r>>8&255]+Ur[r>>16&255]+Ur[r>>24&255]+\\\"-\\\"+Ur[t&255]+Ur[t>>8&255]+\\\"-\\\"+Ur[t>>16&15|64]+Ur[t>>24&255]+\\\"-\\\"+Ur[e&63|128]+Ur[e>>8&255]+\\\"-\\\"+Ur[e>>16&255]+Ur[e>>24&255]+Ur[o&255]+Ur[o>>8&255]+Ur[o>>16&255]+Ur[o>>24&255]).toLowerCase()}function ui(r,t,e){return Math.max(t,Math.min(e,r))}function Bx(r,t){return(r%t+t)%t}function Gf(r,t,e){return(1-e)*r+e*t}function $m(r){return(r&r-1)===0&&r!==0}function mh(r){return Math.pow(2,Math.floor(Math.log(r)/Math.LN2))}function Cu(r,t){switch(t.constructor){case Float32Array:return r;case Uint32Array:return r/4294967295;case Uint16Array:return r/65535;case Uint8Array:return r/255;case Int32Array:return Math.max(r/2147483647,-1);case Int16Array:return Math.max(r/32767,-1);case Int8Array:return Math.max(r/127,-1);default:throw new Error(\\\"Invalid component type.\\\")}}function ai(r,t){switch(t.constructor){case Float32Array:return r;case Uint32Array:return Math.round(r*4294967295);case Uint16Array:return Math.round(r*65535);case Uint8Array:return Math.round(r*255);case Int32Array:return Math.round(r*2147483647);case Int16Array:return Math.round(r*32767);case Int8Array:return Math.round(r*127);default:throw new Error(\\\"Invalid component type.\\\")}}var fn=class r{constructor(t=0,e=0){r.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error(\\\"index is out of range: \\\"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error(\\\"index is out of range: \\\"+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){let e=this.x,o=this.y,a=t.elements;return this.x=a[0]*e+a[3]*o+a[6],this.y=a[1]*e+a[4]*o+a[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){let o=this.length();return this.divideScalar(o||1).multiplyScalar(Math.max(t,Math.min(e,o)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){let e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;let o=this.dot(t)/e;return Math.acos(ui(o,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){let e=this.x-t.x,o=this.y-t.y;return e*e+o*o}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,o){return this.x=t.x+(e.x-t.x)*o,this.y=t.y+(e.y-t.y)*o,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){let o=Math.cos(e),a=Math.sin(e),l=this.x-t.x,f=this.y-t.y;return this.x=l*o-f*a+t.x,this.y=l*a+f*o+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},ve=class r{constructor(t,e,o,a,l,f,h,p,d){r.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,e,o,a,l,f,h,p,d)}set(t,e,o,a,l,f,h,p,d){let g=this.elements;return g[0]=t,g[1]=a,g[2]=h,g[3]=e,g[4]=l,g[5]=p,g[6]=o,g[7]=f,g[8]=d,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){let e=this.elements,o=t.elements;return e[0]=o[0],e[1]=o[1],e[2]=o[2],e[3]=o[3],e[4]=o[4],e[5]=o[5],e[6]=o[6],e[7]=o[7],e[8]=o[8],this}extractBasis(t,e,o){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),o.setFromMatrix3Column(this,2),this}setFromMatrix4(t){let e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){let o=t.elements,a=e.elements,l=this.elements,f=o[0],h=o[3],p=o[6],d=o[1],g=o[4],_=o[7],y=o[2],M=o[5],w=o[8],T=a[0],x=a[3],v=a[6],C=a[1],S=a[4],O=a[7],F=a[2],G=a[5],z=a[8];return l[0]=f*T+h*C+p*F,l[3]=f*x+h*S+p*G,l[6]=f*v+h*O+p*z,l[1]=d*T+g*C+_*F,l[4]=d*x+g*S+_*G,l[7]=d*v+g*O+_*z,l[2]=y*T+M*C+w*F,l[5]=y*x+M*S+w*G,l[8]=y*v+M*O+w*z,this}multiplyScalar(t){let e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){let t=this.elements,e=t[0],o=t[1],a=t[2],l=t[3],f=t[4],h=t[5],p=t[6],d=t[7],g=t[8];return e*f*g-e*h*d-o*l*g+o*h*p+a*l*d-a*f*p}invert(){let t=this.elements,e=t[0],o=t[1],a=t[2],l=t[3],f=t[4],h=t[5],p=t[6],d=t[7],g=t[8],_=g*f-h*d,y=h*p-g*l,M=d*l-f*p,w=e*_+o*y+a*M;if(w===0)return this.set(0,0,0,0,0,0,0,0,0);let T=1/w;return t[0]=_*T,t[1]=(a*d-g*o)*T,t[2]=(h*o-a*f)*T,t[3]=y*T,t[4]=(g*e-a*p)*T,t[5]=(a*l-h*e)*T,t[6]=M*T,t[7]=(o*p-d*e)*T,t[8]=(f*e-o*l)*T,this}transpose(){let t,e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){let e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,o,a,l,f,h){let p=Math.cos(l),d=Math.sin(l);return this.set(o*p,o*d,-o*(p*f+d*h)+f+t,-a*d,a*p,-a*(-d*f+p*h)+h+e,0,0,1),this}scale(t,e){return this.premultiply(Vf.makeScale(t,e)),this}rotate(t){return this.premultiply(Vf.makeRotation(-t)),this}translate(t,e){return this.premultiply(Vf.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){let e=Math.cos(t),o=Math.sin(t);return this.set(e,-o,0,o,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){let e=this.elements,o=t.elements;for(let a=0;a<9;a++)if(e[a]!==o[a])return!1;return!0}fromArray(t,e=0){for(let o=0;o<9;o++)this.elements[o]=t[o+e];return this}toArray(t=[],e=0){let o=this.elements;return t[e]=o[0],t[e+1]=o[1],t[e+2]=o[2],t[e+3]=o[3],t[e+4]=o[4],t[e+5]=o[5],t[e+6]=o[6],t[e+7]=o[7],t[e+8]=o[8],t}clone(){return new this.constructor().fromArray(this.elements)}},Vf=new ve;function Xg(r){for(let t=r.length-1;t>=0;--t)if(r[t]>=65535)return!0;return!1}function tc(r){return document.createElementNS(\\\"http://www.w3.org/1999/xhtml\\\",r)}function zx(){let r=tc(\\\"canvas\\\");return r.style.display=\\\"block\\\",r}var Km={};function Ou(r){r in Km||(Km[r]=!0,console.warn(r))}var jm=new ve().set(.8224621,.177538,0,.0331941,.9668058,0,.0170827,.0723974,.9105199),Qm=new ve().set(1.2249401,-.2249404,0,-.0420569,1.0420571,0,-.0196376,-.0786361,1.0982735),Tl={[Xo]:{transfer:$l,primaries:Kl,toReference:r=>r,fromReference:r=>r},[br]:{transfer:Tn,primaries:Kl,toReference:r=>r.convertSRGBToLinear(),fromReference:r=>r.convertLinearToSRGB()},[dc]:{transfer:$l,primaries:jl,toReference:r=>r.applyMatrix3(Qm),fromReference:r=>r.applyMatrix3(jm)},[Zh]:{transfer:Tn,primaries:jl,toReference:r=>r.convertSRGBToLinear().applyMatrix3(Qm),fromReference:r=>r.applyMatrix3(jm).convertLinearToSRGB()}},kx=new Set([Xo,dc]),gn={enabled:!0,_workingColorSpace:Xo,get legacyMode(){return console.warn(\\\"THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150.\\\"),!this.enabled},set legacyMode(r){console.warn(\\\"THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150.\\\"),this.enabled=!r},get workingColorSpace(){return this._workingColorSpace},set workingColorSpace(r){if(!kx.has(r))throw new Error(`Unsupported working color space, \\\"${r}\\\".`);this._workingColorSpace=r},convert:function(r,t,e){if(this.enabled===!1||t===e||!t||!e)return r;let o=Tl[t].toReference,a=Tl[e].fromReference;return a(o(r))},fromWorkingColorSpace:function(r,t){return this.convert(r,this._workingColorSpace,t)},toWorkingColorSpace:function(r,t){return this.convert(r,t,this._workingColorSpace)},getPrimaries:function(r){return Tl[r].primaries},getTransfer:function(r){return r===Di?$l:Tl[r].transfer}};function za(r){return r<.04045?r*.0773993808:Math.pow(r*.9478672986+.0521327014,2.4)}function Hf(r){return r<.0031308?r*12.92:1.055*Math.pow(r,.41666)-.055}var va,ec=class{static getDataURL(t){if(/^data:/i.test(t.src)||typeof HTMLCanvasElement==\\\"undefined\\\")return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{va===void 0&&(va=tc(\\\"canvas\\\")),va.width=t.width,va.height=t.height;let o=va.getContext(\\\"2d\\\");t instanceof ImageData?o.putImageData(t,0,0):o.drawImage(t,0,0,t.width,t.height),e=va}return e.width>2048||e.height>2048?(console.warn(\\\"THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons\\\",t),e.toDataURL(\\\"image/jpeg\\\",.6)):e.toDataURL(\\\"image/png\\\")}static sRGBToLinear(t){if(typeof HTMLImageElement!=\\\"undefined\\\"&&t instanceof HTMLImageElement||typeof HTMLCanvasElement!=\\\"undefined\\\"&&t instanceof HTMLCanvasElement||typeof ImageBitmap!=\\\"undefined\\\"&&t instanceof ImageBitmap){let e=tc(\\\"canvas\\\");e.width=t.width,e.height=t.height;let o=e.getContext(\\\"2d\\\");o.drawImage(t,0,0,t.width,t.height);let a=o.getImageData(0,0,t.width,t.height),l=a.data;for(let f=0;f<l.length;f++)l[f]=za(l[f]/255)*255;return o.putImageData(a,0,0),e}else if(t.data){let e=t.data.slice(0);for(let o=0;o<e.length;o++)e instanceof Uint8Array||e instanceof Uint8ClampedArray?e[o]=Math.floor(za(e[o]/255)*255):e[o]=za(e[o]);return{data:e,width:t.width,height:t.height}}else return console.warn(\\\"THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.\\\"),t}},Gx=0,nc=class{constructor(t=null){this.isSource=!0,Object.defineProperty(this,\\\"id\\\",{value:Gx++}),this.uuid=Gu(),this.data=t,this.version=0}set needsUpdate(t){t===!0&&this.version++}toJSON(t){let e=t===void 0||typeof t==\\\"string\\\";if(!e&&t.images[this.uuid]!==void 0)return t.images[this.uuid];let o={uuid:this.uuid,url:\\\"\\\"},a=this.data;if(a!==null){let l;if(Array.isArray(a)){l=[];for(let f=0,h=a.length;f<h;f++)a[f].isDataTexture?l.push(Wf(a[f].image)):l.push(Wf(a[f]))}else l=Wf(a);o.url=l}return e||(t.images[this.uuid]=o),o}};function Wf(r){return typeof HTMLImageElement!=\\\"undefined\\\"&&r instanceof HTMLImageElement||typeof HTMLCanvasElement!=\\\"undefined\\\"&&r instanceof HTMLCanvasElement||typeof ImageBitmap!=\\\"undefined\\\"&&r instanceof ImageBitmap?ec.getDataURL(r):r.data?{data:Array.from(r.data),width:r.width,height:r.height,type:r.data.constructor.name}:(console.warn(\\\"THREE.Texture: Unable to serialize Texture.\\\"),{})}var Vx=0,ji=class r extends gs{constructor(t=r.DEFAULT_IMAGE,e=r.DEFAULT_MAPPING,o=$i,a=$i,l=Oi,f=Fu,h=Ki,p=ds,d=r.DEFAULT_ANISOTROPY,g=Di){super(),this.isTexture=!0,Object.defineProperty(this,\\\"id\\\",{value:Vx++}),this.uuid=Gu(),this.name=\\\"\\\",this.source=new nc(t),this.mipmaps=[],this.mapping=e,this.channel=0,this.wrapS=o,this.wrapT=a,this.magFilter=l,this.minFilter=f,this.anisotropy=d,this.format=h,this.internalFormat=null,this.type=p,this.offset=new fn(0,0),this.repeat=new fn(1,1),this.center=new fn(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new ve,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,typeof g==\\\"string\\\"?this.colorSpace=g:(Ou(\\\"THREE.Texture: Property .encoding has been replaced by .colorSpace.\\\"),this.colorSpace=g===Xs?br:Di),this.userData={},this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1,this.needsPMREMUpdate=!1}get image(){return this.source.data}set image(t=null){this.source.data=t}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return new this.constructor().copy(this)}copy(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.channel=t.channel,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.colorSpace=t.colorSpace,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}toJSON(t){let e=t===void 0||typeof t==\\\"string\\\";if(!e&&t.textures[this.uuid]!==void 0)return t.textures[this.uuid];let o={metadata:{version:4.6,type:\\\"Texture\\\",generator:\\\"Texture.toJSON\\\"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(o.userData=this.userData),e||(t.textures[this.uuid]=o),o}dispose(){this.dispatchEvent({type:\\\"dispose\\\"})}transformUv(t){if(this.mapping!==Bg)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case fh:t.x=t.x-Math.floor(t.x);break;case $i:t.x=t.x<0?0:1;break;case hh:Math.abs(Math.floor(t.x)%2)===1?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x);break}if(t.y<0||t.y>1)switch(this.wrapT){case fh:t.y=t.y-Math.floor(t.y);break;case $i:t.y=t.y<0?0:1;break;case hh:Math.abs(Math.floor(t.y)%2)===1?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y);break}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){t===!0&&(this.version++,this.source.needsUpdate=!0)}get encoding(){return Ou(\\\"THREE.Texture: Property .encoding has been replaced by .colorSpace.\\\"),this.colorSpace===br?Xs:qg}set encoding(t){Ou(\\\"THREE.Texture: Property .encoding has been replaced by .colorSpace.\\\"),this.colorSpace=t===Xs?br:Di}};ji.DEFAULT_IMAGE=null;ji.DEFAULT_MAPPING=Bg;ji.DEFAULT_ANISOTROPY=1;var Tr=class r{constructor(t=0,e=0,o=0,a=1){r.prototype.isVector4=!0,this.x=t,this.y=e,this.z=o,this.w=a}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,o,a){return this.x=t,this.y=e,this.z=o,this.w=a,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error(\\\"index is out of range: \\\"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error(\\\"index is out of range: \\\"+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w!==void 0?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){let e=this.x,o=this.y,a=this.z,l=this.w,f=t.elements;return this.x=f[0]*e+f[4]*o+f[8]*a+f[12]*l,this.y=f[1]*e+f[5]*o+f[9]*a+f[13]*l,this.z=f[2]*e+f[6]*o+f[10]*a+f[14]*l,this.w=f[3]*e+f[7]*o+f[11]*a+f[15]*l,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);let e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,o,a,l,p=t.elements,d=p[0],g=p[4],_=p[8],y=p[1],M=p[5],w=p[9],T=p[2],x=p[6],v=p[10];if(Math.abs(g-y)<.01&&Math.abs(_-T)<.01&&Math.abs(w-x)<.01){if(Math.abs(g+y)<.1&&Math.abs(_+T)<.1&&Math.abs(w+x)<.1&&Math.abs(d+M+v-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;let S=(d+1)/2,O=(M+1)/2,F=(v+1)/2,G=(g+y)/4,z=(_+T)/4,L=(w+x)/4;return S>O&&S>F?S<.01?(o=0,a=.707106781,l=.707106781):(o=Math.sqrt(S),a=G/o,l=z/o):O>F?O<.01?(o=.707106781,a=0,l=.707106781):(a=Math.sqrt(O),o=G/a,l=L/a):F<.01?(o=.707106781,a=.707106781,l=0):(l=Math.sqrt(F),o=z/l,a=L/l),this.set(o,a,l,e),this}let C=Math.sqrt((x-w)*(x-w)+(_-T)*(_-T)+(y-g)*(y-g));return Math.abs(C)<.001&&(C=1),this.x=(x-w)/C,this.y=(_-T)/C,this.z=(y-g)/C,this.w=Math.acos((d+M+v-1)/2),this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this.w=Math.max(t,Math.min(e,this.w)),this}clampLength(t,e){let o=this.length();return this.divideScalar(o||1).multiplyScalar(Math.max(t,Math.min(e,o)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,o){return this.x=t.x+(e.x-t.x)*o,this.y=t.y+(e.y-t.y)*o,this.z=t.z+(e.z-t.z)*o,this.w=t.w+(e.w-t.w)*o,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}},gh=class extends gs{constructor(t=1,e=1,o={}){super(),this.isRenderTarget=!0,this.width=t,this.height=e,this.depth=1,this.scissor=new Tr(0,0,t,e),this.scissorTest=!1,this.viewport=new Tr(0,0,t,e);let a={width:t,height:e,depth:1};o.encoding!==void 0&&(Ou(\\\"THREE.WebGLRenderTarget: option.encoding has been replaced by option.colorSpace.\\\"),o.colorSpace=o.encoding===Xs?br:Di),o=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:Oi,depthBuffer:!0,stencilBuffer:!1,depthTexture:null,samples:0},o),this.texture=new ji(a,o.mapping,o.wrapS,o.wrapT,o.magFilter,o.minFilter,o.format,o.type,o.anisotropy,o.colorSpace),this.texture.isRenderTargetTexture=!0,this.texture.flipY=!1,this.texture.generateMipmaps=o.generateMipmaps,this.texture.internalFormat=o.internalFormat,this.depthBuffer=o.depthBuffer,this.stencilBuffer=o.stencilBuffer,this.depthTexture=o.depthTexture,this.samples=o.samples}setSize(t,e,o=1){(this.width!==t||this.height!==e||this.depth!==o)&&(this.width=t,this.height=e,this.depth=o,this.texture.image.width=t,this.texture.image.height=e,this.texture.image.depth=o,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return new this.constructor().copy(this)}copy(t){this.width=t.width,this.height=t.height,this.depth=t.depth,this.scissor.copy(t.scissor),this.scissorTest=t.scissorTest,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.texture.isRenderTargetTexture=!0;let e=Object.assign({},t.texture.image);return this.texture.source=new nc(e),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,t.depthTexture!==null&&(this.depthTexture=t.depthTexture.clone()),this.samples=t.samples,this}dispose(){this.dispatchEvent({type:\\\"dispose\\\"})}},Yo=class extends gh{constructor(t=1,e=1,o={}){super(t,e,o),this.isWebGLRenderTarget=!0}},rc=class extends ji{constructor(t=null,e=1,o=1,a=1){super(null),this.isDataArrayTexture=!0,this.image={data:t,width:e,height:o,depth:a},this.magFilter=$r,this.minFilter=$r,this.wrapR=$i,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}};var yh=class extends ji{constructor(t=null,e=1,o=1,a=1){super(null),this.isData3DTexture=!0,this.image={data:t,width:e,height:o,depth:a},this.magFilter=$r,this.minFilter=$r,this.wrapR=$i,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}};var ys=class{constructor(t=0,e=0,o=0,a=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=o,this._w=a}static slerpFlat(t,e,o,a,l,f,h){let p=o[a+0],d=o[a+1],g=o[a+2],_=o[a+3],y=l[f+0],M=l[f+1],w=l[f+2],T=l[f+3];if(h===0){t[e+0]=p,t[e+1]=d,t[e+2]=g,t[e+3]=_;return}if(h===1){t[e+0]=y,t[e+1]=M,t[e+2]=w,t[e+3]=T;return}if(_!==T||p!==y||d!==M||g!==w){let x=1-h,v=p*y+d*M+g*w+_*T,C=v>=0?1:-1,S=1-v*v;if(S>Number.EPSILON){let F=Math.sqrt(S),G=Math.atan2(F,v*C);x=Math.sin(x*G)/F,h=Math.sin(h*G)/F}let O=h*C;if(p=p*x+y*O,d=d*x+M*O,g=g*x+w*O,_=_*x+T*O,x===1-h){let F=1/Math.sqrt(p*p+d*d+g*g+_*_);p*=F,d*=F,g*=F,_*=F}}t[e]=p,t[e+1]=d,t[e+2]=g,t[e+3]=_}static multiplyQuaternionsFlat(t,e,o,a,l,f){let h=o[a],p=o[a+1],d=o[a+2],g=o[a+3],_=l[f],y=l[f+1],M=l[f+2],w=l[f+3];return t[e]=h*w+g*_+p*M-d*y,t[e+1]=p*w+g*y+d*_-h*M,t[e+2]=d*w+g*M+h*y-p*_,t[e+3]=g*w-h*_-p*y-d*M,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,o,a){return this._x=t,this._y=e,this._z=o,this._w=a,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){let o=t._x,a=t._y,l=t._z,f=t._order,h=Math.cos,p=Math.sin,d=h(o/2),g=h(a/2),_=h(l/2),y=p(o/2),M=p(a/2),w=p(l/2);switch(f){case\\\"XYZ\\\":this._x=y*g*_+d*M*w,this._y=d*M*_-y*g*w,this._z=d*g*w+y*M*_,this._w=d*g*_-y*M*w;break;case\\\"YXZ\\\":this._x=y*g*_+d*M*w,this._y=d*M*_-y*g*w,this._z=d*g*w-y*M*_,this._w=d*g*_+y*M*w;break;case\\\"ZXY\\\":this._x=y*g*_-d*M*w,this._y=d*M*_+y*g*w,this._z=d*g*w+y*M*_,this._w=d*g*_-y*M*w;break;case\\\"ZYX\\\":this._x=y*g*_-d*M*w,this._y=d*M*_+y*g*w,this._z=d*g*w-y*M*_,this._w=d*g*_+y*M*w;break;case\\\"YZX\\\":this._x=y*g*_+d*M*w,this._y=d*M*_+y*g*w,this._z=d*g*w-y*M*_,this._w=d*g*_-y*M*w;break;case\\\"XZY\\\":this._x=y*g*_-d*M*w,this._y=d*M*_-y*g*w,this._z=d*g*w+y*M*_,this._w=d*g*_+y*M*w;break;default:console.warn(\\\"THREE.Quaternion: .setFromEuler() encountered an unknown order: \\\"+f)}return e!==!1&&this._onChangeCallback(),this}setFromAxisAngle(t,e){let o=e/2,a=Math.sin(o);return this._x=t.x*a,this._y=t.y*a,this._z=t.z*a,this._w=Math.cos(o),this._onChangeCallback(),this}setFromRotationMatrix(t){let e=t.elements,o=e[0],a=e[4],l=e[8],f=e[1],h=e[5],p=e[9],d=e[2],g=e[6],_=e[10],y=o+h+_;if(y>0){let M=.5/Math.sqrt(y+1);this._w=.25/M,this._x=(g-p)*M,this._y=(l-d)*M,this._z=(f-a)*M}else if(o>h&&o>_){let M=2*Math.sqrt(1+o-h-_);this._w=(g-p)/M,this._x=.25*M,this._y=(a+f)/M,this._z=(l+d)/M}else if(h>_){let M=2*Math.sqrt(1+h-o-_);this._w=(l-d)/M,this._x=(a+f)/M,this._y=.25*M,this._z=(p+g)/M}else{let M=2*Math.sqrt(1+_-o-h);this._w=(f-a)/M,this._x=(l+d)/M,this._y=(p+g)/M,this._z=.25*M}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let o=t.dot(e)+1;return o<Number.EPSILON?(o=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=o):(this._x=0,this._y=-t.z,this._z=t.y,this._w=o)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=o),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(ui(this.dot(t),-1,1)))}rotateTowards(t,e){let o=this.angleTo(t);if(o===0)return this;let a=Math.min(1,e/o);return this.slerp(t,a),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return t===0?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){let o=t._x,a=t._y,l=t._z,f=t._w,h=e._x,p=e._y,d=e._z,g=e._w;return this._x=o*g+f*h+a*d-l*p,this._y=a*g+f*p+l*h-o*d,this._z=l*g+f*d+o*p-a*h,this._w=f*g-o*h-a*p-l*d,this._onChangeCallback(),this}slerp(t,e){if(e===0)return this;if(e===1)return this.copy(t);let o=this._x,a=this._y,l=this._z,f=this._w,h=f*t._w+o*t._x+a*t._y+l*t._z;if(h<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,h=-h):this.copy(t),h>=1)return this._w=f,this._x=o,this._y=a,this._z=l,this;let p=1-h*h;if(p<=Number.EPSILON){let M=1-e;return this._w=M*f+e*this._w,this._x=M*o+e*this._x,this._y=M*a+e*this._y,this._z=M*l+e*this._z,this.normalize(),this._onChangeCallback(),this}let d=Math.sqrt(p),g=Math.atan2(d,h),_=Math.sin((1-e)*g)/d,y=Math.sin(e*g)/d;return this._w=f*_+this._w*y,this._x=o*_+this._x*y,this._y=a*_+this._y*y,this._z=l*_+this._z*y,this._onChangeCallback(),this}slerpQuaternions(t,e,o){return this.copy(t).slerp(e,o)}random(){let t=Math.random(),e=Math.sqrt(1-t),o=Math.sqrt(t),a=2*Math.PI*Math.random(),l=2*Math.PI*Math.random();return this.set(e*Math.cos(a),o*Math.sin(l),o*Math.cos(l),e*Math.sin(a))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},mt=class r{constructor(t=0,e=0,o=0){r.prototype.isVector3=!0,this.x=t,this.y=e,this.z=o}set(t,e,o){return o===void 0&&(o=this.z),this.x=t,this.y=e,this.z=o,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error(\\\"index is out of range: \\\"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error(\\\"index is out of range: \\\"+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(tg.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(tg.setFromAxisAngle(t,e))}applyMatrix3(t){let e=this.x,o=this.y,a=this.z,l=t.elements;return this.x=l[0]*e+l[3]*o+l[6]*a,this.y=l[1]*e+l[4]*o+l[7]*a,this.z=l[2]*e+l[5]*o+l[8]*a,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){let e=this.x,o=this.y,a=this.z,l=t.elements,f=1/(l[3]*e+l[7]*o+l[11]*a+l[15]);return this.x=(l[0]*e+l[4]*o+l[8]*a+l[12])*f,this.y=(l[1]*e+l[5]*o+l[9]*a+l[13])*f,this.z=(l[2]*e+l[6]*o+l[10]*a+l[14])*f,this}applyQuaternion(t){let e=this.x,o=this.y,a=this.z,l=t.x,f=t.y,h=t.z,p=t.w,d=p*e+f*a-h*o,g=p*o+h*e-l*a,_=p*a+l*o-f*e,y=-l*e-f*o-h*a;return this.x=d*p+y*-l+g*-h-_*-f,this.y=g*p+y*-f+_*-l-d*-h,this.z=_*p+y*-h+d*-f-g*-l,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){let e=this.x,o=this.y,a=this.z,l=t.elements;return this.x=l[0]*e+l[4]*o+l[8]*a,this.y=l[1]*e+l[5]*o+l[9]*a,this.z=l[2]*e+l[6]*o+l[10]*a,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){let o=this.length();return this.divideScalar(o||1).multiplyScalar(Math.max(t,Math.min(e,o)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,o){return this.x=t.x+(e.x-t.x)*o,this.y=t.y+(e.y-t.y)*o,this.z=t.z+(e.z-t.z)*o,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){let o=t.x,a=t.y,l=t.z,f=e.x,h=e.y,p=e.z;return this.x=a*p-l*h,this.y=l*f-o*p,this.z=o*h-a*f,this}projectOnVector(t){let e=t.lengthSq();if(e===0)return this.set(0,0,0);let o=t.dot(this)/e;return this.copy(t).multiplyScalar(o)}projectOnPlane(t){return qf.copy(this).projectOnVector(t),this.sub(qf)}reflect(t){return this.sub(qf.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){let e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;let o=this.dot(t)/e;return Math.acos(ui(o,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){let e=this.x-t.x,o=this.y-t.y,a=this.z-t.z;return e*e+o*o+a*a}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,o){let a=Math.sin(e)*t;return this.x=a*Math.sin(o),this.y=Math.cos(e)*t,this.z=a*Math.cos(o),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,o){return this.x=t*Math.sin(e),this.y=o,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){let e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){let e=this.setFromMatrixColumn(t,0).length(),o=this.setFromMatrixColumn(t,1).length(),a=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=o,this.z=a,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,e*4)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,e*3)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let t=(Math.random()-.5)*2,e=Math.random()*Math.PI*2,o=Math.sqrt(1-t**2);return this.x=o*Math.cos(e),this.y=o*Math.sin(e),this.z=t,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},qf=new mt,tg=new ys,Ys=class{constructor(t=new mt(1/0,1/0,1/0),e=new mt(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,o=t.length;e<o;e+=3)this.expandByPoint(Fo.fromArray(t,e));return this}setFromBufferAttribute(t){this.makeEmpty();for(let e=0,o=t.count;e<o;e++)this.expandByPoint(Fo.fromBufferAttribute(t,e));return this}setFromPoints(t){this.makeEmpty();for(let e=0,o=t.length;e<o;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){let o=Fo.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(o),this.max.copy(t).add(o),this}setFromObject(t,e=!1){return this.makeEmpty(),this.expandByObject(t,e)}clone(){return new this.constructor().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t,e=!1){if(t.updateWorldMatrix(!1,!1),t.boundingBox!==void 0)t.boundingBox===null&&t.computeBoundingBox(),_a.copy(t.boundingBox),_a.applyMatrix4(t.matrixWorld),this.union(_a);else{let a=t.geometry;if(a!==void 0)if(e&&a.attributes!==void 0&&a.attributes.position!==void 0){let l=a.attributes.position;for(let f=0,h=l.count;f<h;f++)Fo.fromBufferAttribute(l,f).applyMatrix4(t.matrixWorld),this.expandByPoint(Fo)}else a.boundingBox===null&&a.computeBoundingBox(),_a.copy(a.boundingBox),_a.applyMatrix4(t.matrixWorld),this.union(_a)}let o=t.children;for(let a=0,l=o.length;a<l;a++)this.expandByObject(o[a],e);return this}containsPoint(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y||t.z<this.min.z||t.z>this.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y||t.max.z<this.min.z||t.min.z>this.max.z)}intersectsSphere(t){return this.clampPoint(t.center,Fo),Fo.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,o;return t.normal.x>0?(e=t.normal.x*this.min.x,o=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,o=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,o+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,o+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,o+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,o+=t.normal.z*this.min.z),e<=-t.constant&&o>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Pu),Al.subVectors(this.max,Pu),xa.subVectors(t.a,Pu),Ea.subVectors(t.b,Pu),Ma.subVectors(t.c,Pu),os.subVectors(Ea,xa),ss.subVectors(Ma,Ea),Bs.subVectors(xa,Ma);let e=[0,-os.z,os.y,0,-ss.z,ss.y,0,-Bs.z,Bs.y,os.z,0,-os.x,ss.z,0,-ss.x,Bs.z,0,-Bs.x,-os.y,os.x,0,-ss.y,ss.x,0,-Bs.y,Bs.x,0];return!Xf(e,xa,Ea,Ma,Al)||(e=[1,0,0,0,1,0,0,0,1],!Xf(e,xa,Ea,Ma,Al))?!1:(Cl.crossVectors(os,ss),e=[Cl.x,Cl.y,Cl.z],Xf(e,xa,Ea,Ma,Al))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,Fo).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=this.getSize(Fo).length()*.5),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()?this:(Do[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Do[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Do[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Do[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Do[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Do[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Do[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Do[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Do),this)}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}},Do=[new mt,new mt,new mt,new mt,new mt,new mt,new mt,new mt],Fo=new mt,_a=new Ys,xa=new mt,Ea=new mt,Ma=new mt,os=new mt,ss=new mt,Bs=new mt,Pu=new mt,Al=new mt,Cl=new mt,zs=new mt;function Xf(r,t,e,o,a){for(let l=0,f=r.length-3;l<=f;l+=3){zs.fromArray(r,l);let h=a.x*Math.abs(zs.x)+a.y*Math.abs(zs.y)+a.z*Math.abs(zs.z),p=t.dot(zs),d=e.dot(zs),g=o.dot(zs);if(Math.max(-Math.max(p,d,g),Math.min(p,d,g))>h)return!1}return!0}var Hx=new Ys,Iu=new mt,Yf=new mt,Bu=class{constructor(t=new mt,e=-1){this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){let o=this.center;e!==void 0?o.copy(e):Hx.setFromPoints(t).getCenter(o);let a=0;for(let l=0,f=t.length;l<f;l++)a=Math.max(a,o.distanceToSquared(t[l]));return this.radius=Math.sqrt(a),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){let e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){let o=this.center.distanceToSquared(t);return e.copy(t),o>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;Iu.subVectors(t,this.center);let e=Iu.lengthSq();if(e>this.radius*this.radius){let o=Math.sqrt(e),a=(o-this.radius)*.5;this.center.addScaledVector(Iu,a/o),this.radius+=a}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(this.center.equals(t.center)===!0?this.radius=Math.max(this.radius,t.radius):(Yf.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(Iu.copy(t.center).add(Yf)),this.expandByPoint(Iu.copy(t.center).sub(Yf))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return new this.constructor().copy(this)}},Uo=new mt,Zf=new mt,Pl=new mt,as=new mt,Jf=new mt,Il=new mt,$f=new mt,vh=class{constructor(t=new mt,e=new mt(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.origin).addScaledVector(this.direction,t)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Uo)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);let o=e.dot(this.direction);return o<0?e.copy(this.origin):e.copy(this.origin).addScaledVector(this.direction,o)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){let e=Uo.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Uo.copy(this.origin).addScaledVector(this.direction,e),Uo.distanceToSquared(t))}distanceSqToSegment(t,e,o,a){Zf.copy(t).add(e).multiplyScalar(.5),Pl.copy(e).sub(t).normalize(),as.copy(this.origin).sub(Zf);let l=t.distanceTo(e)*.5,f=-this.direction.dot(Pl),h=as.dot(this.direction),p=-as.dot(Pl),d=as.lengthSq(),g=Math.abs(1-f*f),_,y,M,w;if(g>0)if(_=f*p-h,y=f*h-p,w=l*g,_>=0)if(y>=-w)if(y<=w){let T=1/g;_*=T,y*=T,M=_*(_+f*y+2*h)+y*(f*_+y+2*p)+d}else y=l,_=Math.max(0,-(f*y+h)),M=-_*_+y*(y+2*p)+d;else y=-l,_=Math.max(0,-(f*y+h)),M=-_*_+y*(y+2*p)+d;else y<=-w?(_=Math.max(0,-(-f*l+h)),y=_>0?-l:Math.min(Math.max(-l,-p),l),M=-_*_+y*(y+2*p)+d):y<=w?(_=0,y=Math.min(Math.max(-l,-p),l),M=y*(y+2*p)+d):(_=Math.max(0,-(f*l+h)),y=_>0?l:Math.min(Math.max(-l,-p),l),M=-_*_+y*(y+2*p)+d);else y=f>0?-l:l,_=Math.max(0,-(f*y+h)),M=-_*_+y*(y+2*p)+d;return o&&o.copy(this.origin).addScaledVector(this.direction,_),a&&a.copy(Zf).addScaledVector(Pl,y),M}intersectSphere(t,e){Uo.subVectors(t.center,this.origin);let o=Uo.dot(this.direction),a=Uo.dot(Uo)-o*o,l=t.radius*t.radius;if(a>l)return null;let f=Math.sqrt(l-a),h=o-f,p=o+f;return p<0?null:h<0?this.at(p,e):this.at(h,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){let e=t.normal.dot(this.direction);if(e===0)return t.distanceToPoint(this.origin)===0?0:null;let o=-(this.origin.dot(t.normal)+t.constant)/e;return o>=0?o:null}intersectPlane(t,e){let o=this.distanceToPlane(t);return o===null?null:this.at(o,e)}intersectsPlane(t){let e=t.distanceToPoint(this.origin);return e===0||t.normal.dot(this.direction)*e<0}intersectBox(t,e){let o,a,l,f,h,p,d=1/this.direction.x,g=1/this.direction.y,_=1/this.direction.z,y=this.origin;return d>=0?(o=(t.min.x-y.x)*d,a=(t.max.x-y.x)*d):(o=(t.max.x-y.x)*d,a=(t.min.x-y.x)*d),g>=0?(l=(t.min.y-y.y)*g,f=(t.max.y-y.y)*g):(l=(t.max.y-y.y)*g,f=(t.min.y-y.y)*g),o>f||l>a||((l>o||isNaN(o))&&(o=l),(f<a||isNaN(a))&&(a=f),_>=0?(h=(t.min.z-y.z)*_,p=(t.max.z-y.z)*_):(h=(t.max.z-y.z)*_,p=(t.min.z-y.z)*_),o>p||h>a)||((h>o||o!==o)&&(o=h),(p<a||a!==a)&&(a=p),a<0)?null:this.at(o>=0?o:a,e)}intersectsBox(t){return this.intersectBox(t,Uo)!==null}intersectTriangle(t,e,o,a,l){Jf.subVectors(e,t),Il.subVectors(o,t),$f.crossVectors(Jf,Il);let f=this.direction.dot($f),h;if(f>0){if(a)return null;h=1}else if(f<0)h=-1,f=-f;else return null;as.subVectors(this.origin,t);let p=h*this.direction.dot(Il.crossVectors(as,Il));if(p<0)return null;let d=h*this.direction.dot(Jf.cross(as));if(d<0||p+d>f)return null;let g=-h*as.dot($f);return g<0?null:this.at(g/f,l)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},zr=class r{constructor(t,e,o,a,l,f,h,p,d,g,_,y,M,w,T,x){r.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,e,o,a,l,f,h,p,d,g,_,y,M,w,T,x)}set(t,e,o,a,l,f,h,p,d,g,_,y,M,w,T,x){let v=this.elements;return v[0]=t,v[4]=e,v[8]=o,v[12]=a,v[1]=l,v[5]=f,v[9]=h,v[13]=p,v[2]=d,v[6]=g,v[10]=_,v[14]=y,v[3]=M,v[7]=w,v[11]=T,v[15]=x,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new r().fromArray(this.elements)}copy(t){let e=this.elements,o=t.elements;return e[0]=o[0],e[1]=o[1],e[2]=o[2],e[3]=o[3],e[4]=o[4],e[5]=o[5],e[6]=o[6],e[7]=o[7],e[8]=o[8],e[9]=o[9],e[10]=o[10],e[11]=o[11],e[12]=o[12],e[13]=o[13],e[14]=o[14],e[15]=o[15],this}copyPosition(t){let e=this.elements,o=t.elements;return e[12]=o[12],e[13]=o[13],e[14]=o[14],this}setFromMatrix3(t){let e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,o){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),o.setFromMatrixColumn(this,2),this}makeBasis(t,e,o){return this.set(t.x,e.x,o.x,0,t.y,e.y,o.y,0,t.z,e.z,o.z,0,0,0,0,1),this}extractRotation(t){let e=this.elements,o=t.elements,a=1/Sa.setFromMatrixColumn(t,0).length(),l=1/Sa.setFromMatrixColumn(t,1).length(),f=1/Sa.setFromMatrixColumn(t,2).length();return e[0]=o[0]*a,e[1]=o[1]*a,e[2]=o[2]*a,e[3]=0,e[4]=o[4]*l,e[5]=o[5]*l,e[6]=o[6]*l,e[7]=0,e[8]=o[8]*f,e[9]=o[9]*f,e[10]=o[10]*f,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){let e=this.elements,o=t.x,a=t.y,l=t.z,f=Math.cos(o),h=Math.sin(o),p=Math.cos(a),d=Math.sin(a),g=Math.cos(l),_=Math.sin(l);if(t.order===\\\"XYZ\\\"){let y=f*g,M=f*_,w=h*g,T=h*_;e[0]=p*g,e[4]=-p*_,e[8]=d,e[1]=M+w*d,e[5]=y-T*d,e[9]=-h*p,e[2]=T-y*d,e[6]=w+M*d,e[10]=f*p}else if(t.order===\\\"YXZ\\\"){let y=p*g,M=p*_,w=d*g,T=d*_;e[0]=y+T*h,e[4]=w*h-M,e[8]=f*d,e[1]=f*_,e[5]=f*g,e[9]=-h,e[2]=M*h-w,e[6]=T+y*h,e[10]=f*p}else if(t.order===\\\"ZXY\\\"){let y=p*g,M=p*_,w=d*g,T=d*_;e[0]=y-T*h,e[4]=-f*_,e[8]=w+M*h,e[1]=M+w*h,e[5]=f*g,e[9]=T-y*h,e[2]=-f*d,e[6]=h,e[10]=f*p}else if(t.order===\\\"ZYX\\\"){let y=f*g,M=f*_,w=h*g,T=h*_;e[0]=p*g,e[4]=w*d-M,e[8]=y*d+T,e[1]=p*_,e[5]=T*d+y,e[9]=M*d-w,e[2]=-d,e[6]=h*p,e[10]=f*p}else if(t.order===\\\"YZX\\\"){let y=f*p,M=f*d,w=h*p,T=h*d;e[0]=p*g,e[4]=T-y*_,e[8]=w*_+M,e[1]=_,e[5]=f*g,e[9]=-h*g,e[2]=-d*g,e[6]=M*_+w,e[10]=y-T*_}else if(t.order===\\\"XZY\\\"){let y=f*p,M=f*d,w=h*p,T=h*d;e[0]=p*g,e[4]=-_,e[8]=d*g,e[1]=y*_+T,e[5]=f*g,e[9]=M*_-w,e[2]=w*_-M,e[6]=h*g,e[10]=T*_+y}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Wx,t,qx)}lookAt(t,e,o){let a=this.elements;return _i.subVectors(t,e),_i.lengthSq()===0&&(_i.z=1),_i.normalize(),us.crossVectors(o,_i),us.lengthSq()===0&&(Math.abs(o.z)===1?_i.x+=1e-4:_i.z+=1e-4,_i.normalize(),us.crossVectors(o,_i)),us.normalize(),Rl.crossVectors(_i,us),a[0]=us.x,a[4]=Rl.x,a[8]=_i.x,a[1]=us.y,a[5]=Rl.y,a[9]=_i.y,a[2]=us.z,a[6]=Rl.z,a[10]=_i.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){let o=t.elements,a=e.elements,l=this.elements,f=o[0],h=o[4],p=o[8],d=o[12],g=o[1],_=o[5],y=o[9],M=o[13],w=o[2],T=o[6],x=o[10],v=o[14],C=o[3],S=o[7],O=o[11],F=o[15],G=a[0],z=a[4],L=a[8],D=a[12],q=a[1],nt=a[5],k=a[9],xt=a[13],X=a[2],it=a[6],vt=a[10],pt=a[14],et=a[3],ot=a[7],V=a[11],K=a[15];return l[0]=f*G+h*q+p*X+d*et,l[4]=f*z+h*nt+p*it+d*ot,l[8]=f*L+h*k+p*vt+d*V,l[12]=f*D+h*xt+p*pt+d*K,l[1]=g*G+_*q+y*X+M*et,l[5]=g*z+_*nt+y*it+M*ot,l[9]=g*L+_*k+y*vt+M*V,l[13]=g*D+_*xt+y*pt+M*K,l[2]=w*G+T*q+x*X+v*et,l[6]=w*z+T*nt+x*it+v*ot,l[10]=w*L+T*k+x*vt+v*V,l[14]=w*D+T*xt+x*pt+v*K,l[3]=C*G+S*q+O*X+F*et,l[7]=C*z+S*nt+O*it+F*ot,l[11]=C*L+S*k+O*vt+F*V,l[15]=C*D+S*xt+O*pt+F*K,this}multiplyScalar(t){let e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){let t=this.elements,e=t[0],o=t[4],a=t[8],l=t[12],f=t[1],h=t[5],p=t[9],d=t[13],g=t[2],_=t[6],y=t[10],M=t[14],w=t[3],T=t[7],x=t[11],v=t[15];return w*(+l*p*_-a*d*_-l*h*y+o*d*y+a*h*M-o*p*M)+T*(+e*p*M-e*d*y+l*f*y-a*f*M+a*d*g-l*p*g)+x*(+e*d*_-e*h*M-l*f*_+o*f*M+l*h*g-o*d*g)+v*(-a*h*g-e*p*_+e*h*y+a*f*_-o*f*y+o*p*g)}transpose(){let t=this.elements,e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,o){let a=this.elements;return t.isVector3?(a[12]=t.x,a[13]=t.y,a[14]=t.z):(a[12]=t,a[13]=e,a[14]=o),this}invert(){let t=this.elements,e=t[0],o=t[1],a=t[2],l=t[3],f=t[4],h=t[5],p=t[6],d=t[7],g=t[8],_=t[9],y=t[10],M=t[11],w=t[12],T=t[13],x=t[14],v=t[15],C=_*x*d-T*y*d+T*p*M-h*x*M-_*p*v+h*y*v,S=w*y*d-g*x*d-w*p*M+f*x*M+g*p*v-f*y*v,O=g*T*d-w*_*d+w*h*M-f*T*M-g*h*v+f*_*v,F=w*_*p-g*T*p-w*h*y+f*T*y+g*h*x-f*_*x,G=e*C+o*S+a*O+l*F;if(G===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let z=1/G;return t[0]=C*z,t[1]=(T*y*l-_*x*l-T*a*M+o*x*M+_*a*v-o*y*v)*z,t[2]=(h*x*l-T*p*l+T*a*d-o*x*d-h*a*v+o*p*v)*z,t[3]=(_*p*l-h*y*l-_*a*d+o*y*d+h*a*M-o*p*M)*z,t[4]=S*z,t[5]=(g*x*l-w*y*l+w*a*M-e*x*M-g*a*v+e*y*v)*z,t[6]=(w*p*l-f*x*l-w*a*d+e*x*d+f*a*v-e*p*v)*z,t[7]=(f*y*l-g*p*l+g*a*d-e*y*d-f*a*M+e*p*M)*z,t[8]=O*z,t[9]=(w*_*l-g*T*l-w*o*M+e*T*M+g*o*v-e*_*v)*z,t[10]=(f*T*l-w*h*l+w*o*d-e*T*d-f*o*v+e*h*v)*z,t[11]=(g*h*l-f*_*l-g*o*d+e*_*d+f*o*M-e*h*M)*z,t[12]=F*z,t[13]=(g*T*a-w*_*a+w*o*y-e*T*y-g*o*x+e*_*x)*z,t[14]=(w*h*a-f*T*a-w*o*p+e*T*p+f*o*x-e*h*x)*z,t[15]=(f*_*a-g*h*a+g*o*p-e*_*p-f*o*y+e*h*y)*z,this}scale(t){let e=this.elements,o=t.x,a=t.y,l=t.z;return e[0]*=o,e[4]*=a,e[8]*=l,e[1]*=o,e[5]*=a,e[9]*=l,e[2]*=o,e[6]*=a,e[10]*=l,e[3]*=o,e[7]*=a,e[11]*=l,this}getMaxScaleOnAxis(){let t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],o=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],a=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,o,a))}makeTranslation(t,e,o){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,o,0,0,0,1),this}makeRotationX(t){let e=Math.cos(t),o=Math.sin(t);return this.set(1,0,0,0,0,e,-o,0,0,o,e,0,0,0,0,1),this}makeRotationY(t){let e=Math.cos(t),o=Math.sin(t);return this.set(e,0,o,0,0,1,0,0,-o,0,e,0,0,0,0,1),this}makeRotationZ(t){let e=Math.cos(t),o=Math.sin(t);return this.set(e,-o,0,0,o,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){let o=Math.cos(e),a=Math.sin(e),l=1-o,f=t.x,h=t.y,p=t.z,d=l*f,g=l*h;return this.set(d*f+o,d*h-a*p,d*p+a*h,0,d*h+a*p,g*h+o,g*p-a*f,0,d*p-a*h,g*p+a*f,l*p*p+o,0,0,0,0,1),this}makeScale(t,e,o){return this.set(t,0,0,0,0,e,0,0,0,0,o,0,0,0,0,1),this}makeShear(t,e,o,a,l,f){return this.set(1,o,l,0,t,1,f,0,e,a,1,0,0,0,0,1),this}compose(t,e,o){let a=this.elements,l=e._x,f=e._y,h=e._z,p=e._w,d=l+l,g=f+f,_=h+h,y=l*d,M=l*g,w=l*_,T=f*g,x=f*_,v=h*_,C=p*d,S=p*g,O=p*_,F=o.x,G=o.y,z=o.z;return a[0]=(1-(T+v))*F,a[1]=(M+O)*F,a[2]=(w-S)*F,a[3]=0,a[4]=(M-O)*G,a[5]=(1-(y+v))*G,a[6]=(x+C)*G,a[7]=0,a[8]=(w+S)*z,a[9]=(x-C)*z,a[10]=(1-(y+T))*z,a[11]=0,a[12]=t.x,a[13]=t.y,a[14]=t.z,a[15]=1,this}decompose(t,e,o){let a=this.elements,l=Sa.set(a[0],a[1],a[2]).length(),f=Sa.set(a[4],a[5],a[6]).length(),h=Sa.set(a[8],a[9],a[10]).length();this.determinant()<0&&(l=-l),t.x=a[12],t.y=a[13],t.z=a[14],Zi.copy(this);let d=1/l,g=1/f,_=1/h;return Zi.elements[0]*=d,Zi.elements[1]*=d,Zi.elements[2]*=d,Zi.elements[4]*=g,Zi.elements[5]*=g,Zi.elements[6]*=g,Zi.elements[8]*=_,Zi.elements[9]*=_,Zi.elements[10]*=_,e.setFromRotationMatrix(Zi),o.x=l,o.y=f,o.z=h,this}makePerspective(t,e,o,a,l,f,h=Wo){let p=this.elements,d=2*l/(e-t),g=2*l/(o-a),_=(e+t)/(e-t),y=(o+a)/(o-a),M,w;if(h===Wo)M=-(f+l)/(f-l),w=-2*f*l/(f-l);else if(h===Ql)M=-f/(f-l),w=-f*l/(f-l);else throw new Error(\\\"THREE.Matrix4.makePerspective(): Invalid coordinate system: \\\"+h);return p[0]=d,p[4]=0,p[8]=_,p[12]=0,p[1]=0,p[5]=g,p[9]=y,p[13]=0,p[2]=0,p[6]=0,p[10]=M,p[14]=w,p[3]=0,p[7]=0,p[11]=-1,p[15]=0,this}makeOrthographic(t,e,o,a,l,f,h=Wo){let p=this.elements,d=1/(e-t),g=1/(o-a),_=1/(f-l),y=(e+t)*d,M=(o+a)*g,w,T;if(h===Wo)w=(f+l)*_,T=-2*_;else if(h===Ql)w=l*_,T=-1*_;else throw new Error(\\\"THREE.Matrix4.makeOrthographic(): Invalid coordinate system: \\\"+h);return p[0]=2*d,p[4]=0,p[8]=0,p[12]=-y,p[1]=0,p[5]=2*g,p[9]=0,p[13]=-M,p[2]=0,p[6]=0,p[10]=T,p[14]=-w,p[3]=0,p[7]=0,p[11]=0,p[15]=1,this}equals(t){let e=this.elements,o=t.elements;for(let a=0;a<16;a++)if(e[a]!==o[a])return!1;return!0}fromArray(t,e=0){for(let o=0;o<16;o++)this.elements[o]=t[o+e];return this}toArray(t=[],e=0){let o=this.elements;return t[e]=o[0],t[e+1]=o[1],t[e+2]=o[2],t[e+3]=o[3],t[e+4]=o[4],t[e+5]=o[5],t[e+6]=o[6],t[e+7]=o[7],t[e+8]=o[8],t[e+9]=o[9],t[e+10]=o[10],t[e+11]=o[11],t[e+12]=o[12],t[e+13]=o[13],t[e+14]=o[14],t[e+15]=o[15],t}},Sa=new mt,Zi=new zr,Wx=new mt(0,0,0),qx=new mt(1,1,1),us=new mt,Rl=new mt,_i=new mt,eg=new zr,ng=new ys,ic=class r{constructor(t=0,e=0,o=0,a=r.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=o,this._order=a}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,o,a=this._order){return this._x=t,this._y=e,this._z=o,this._order=a,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,o=!0){let a=t.elements,l=a[0],f=a[4],h=a[8],p=a[1],d=a[5],g=a[9],_=a[2],y=a[6],M=a[10];switch(e){case\\\"XYZ\\\":this._y=Math.asin(ui(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(-g,M),this._z=Math.atan2(-f,l)):(this._x=Math.atan2(y,d),this._z=0);break;case\\\"YXZ\\\":this._x=Math.asin(-ui(g,-1,1)),Math.abs(g)<.9999999?(this._y=Math.atan2(h,M),this._z=Math.atan2(p,d)):(this._y=Math.atan2(-_,l),this._z=0);break;case\\\"ZXY\\\":this._x=Math.asin(ui(y,-1,1)),Math.abs(y)<.9999999?(this._y=Math.atan2(-_,M),this._z=Math.atan2(-f,d)):(this._y=0,this._z=Math.atan2(p,l));break;case\\\"ZYX\\\":this._y=Math.asin(-ui(_,-1,1)),Math.abs(_)<.9999999?(this._x=Math.atan2(y,M),this._z=Math.atan2(p,l)):(this._x=0,this._z=Math.atan2(-f,d));break;case\\\"YZX\\\":this._z=Math.asin(ui(p,-1,1)),Math.abs(p)<.9999999?(this._x=Math.atan2(-g,d),this._y=Math.atan2(-_,l)):(this._x=0,this._y=Math.atan2(h,M));break;case\\\"XZY\\\":this._z=Math.asin(-ui(f,-1,1)),Math.abs(f)<.9999999?(this._x=Math.atan2(y,d),this._y=Math.atan2(h,l)):(this._x=Math.atan2(-g,M),this._y=0);break;default:console.warn(\\\"THREE.Euler: .setFromRotationMatrix() encountered an unknown order: \\\"+e)}return this._order=e,o===!0&&this._onChangeCallback(),this}setFromQuaternion(t,e,o){return eg.makeRotationFromQuaternion(t),this.setFromRotationMatrix(eg,e,o)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return ng.setFromEuler(this),this.setFromQuaternion(ng,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],t[3]!==void 0&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};ic.DEFAULT_ORDER=\\\"XYZ\\\";var oc=class{constructor(){this.mask=1}set(t){this.mask=(1<<t|0)>>>0}enable(t){this.mask|=1<<t|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1<<t|0}disable(t){this.mask&=~(1<<t|0)}disableAll(){this.mask=0}test(t){return(this.mask&t.mask)!==0}isEnabled(t){return(this.mask&(1<<t|0))!==0}},Xx=0,rg=new mt,wa=new ys,Bo=new zr,Ll=new mt,Ru=new mt,Yx=new mt,Zx=new ys,ig=new mt(1,0,0),og=new mt(0,1,0),sg=new mt(0,0,1),Jx={type:\\\"added\\\"},$x={type:\\\"removed\\\"},ho=class r extends gs{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,\\\"id\\\",{value:Xx++}),this.uuid=Gu(),this.name=\\\"\\\",this.type=\\\"Object3D\\\",this.parent=null,this.children=[],this.up=r.DEFAULT_UP.clone();let t=new mt,e=new ic,o=new ys,a=new mt(1,1,1);function l(){o.setFromEuler(e,!1)}function f(){e.setFromQuaternion(o,void 0,!1)}e._onChange(l),o._onChange(f),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:o},scale:{configurable:!0,enumerable:!0,value:a},modelViewMatrix:{value:new zr},normalMatrix:{value:new ve}}),this.matrix=new zr,this.matrixWorld=new zr,this.matrixAutoUpdate=r.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.matrixWorldAutoUpdate=r.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.layers=new oc,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return wa.setFromAxisAngle(t,e),this.quaternion.multiply(wa),this}rotateOnWorldAxis(t,e){return wa.setFromAxisAngle(t,e),this.quaternion.premultiply(wa),this}rotateX(t){return this.rotateOnAxis(ig,t)}rotateY(t){return this.rotateOnAxis(og,t)}rotateZ(t){return this.rotateOnAxis(sg,t)}translateOnAxis(t,e){return rg.copy(t).applyQuaternion(this.quaternion),this.position.add(rg.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(ig,t)}translateY(t){return this.translateOnAxis(og,t)}translateZ(t){return this.translateOnAxis(sg,t)}localToWorld(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(Bo.copy(this.matrixWorld).invert())}lookAt(t,e,o){t.isVector3?Ll.copy(t):Ll.set(t,e,o);let a=this.parent;this.updateWorldMatrix(!0,!1),Ru.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?Bo.lookAt(Ru,Ll,this.up):Bo.lookAt(Ll,Ru,this.up),this.quaternion.setFromRotationMatrix(Bo),a&&(Bo.extractRotation(a.matrixWorld),wa.setFromRotationMatrix(Bo),this.quaternion.premultiply(wa.invert()))}add(t){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return t===this?(console.error(\\\"THREE.Object3D.add: object can't be added as a child of itself.\\\",t),this):(t&&t.isObject3D?(t.parent!==null&&t.parent.remove(t),t.parent=this,this.children.push(t),t.dispatchEvent(Jx)):console.error(\\\"THREE.Object3D.add: object not an instance of THREE.Object3D.\\\",t),this)}remove(t){if(arguments.length>1){for(let o=0;o<arguments.length;o++)this.remove(arguments[o]);return this}let e=this.children.indexOf(t);return e!==-1&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent($x)),this}removeFromParent(){let t=this.parent;return t!==null&&t.remove(this),this}clear(){return this.remove(...this.children)}attach(t){return this.updateWorldMatrix(!0,!1),Bo.copy(this.matrixWorld).invert(),t.parent!==null&&(t.parent.updateWorldMatrix(!0,!1),Bo.multiply(t.parent.matrixWorld)),t.applyMatrix4(Bo),this.add(t),t.updateWorldMatrix(!1,!0),this}getObjectById(t){return this.getObjectByProperty(\\\"id\\\",t)}getObjectByName(t){return this.getObjectByProperty(\\\"name\\\",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let o=0,a=this.children.length;o<a;o++){let f=this.children[o].getObjectByProperty(t,e);if(f!==void 0)return f}}getObjectsByProperty(t,e){let o=[];this[t]===e&&o.push(this);for(let a=0,l=this.children.length;a<l;a++){let f=this.children[a].getObjectsByProperty(t,e);f.length>0&&(o=o.concat(f))}return o}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Ru,t,Yx),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Ru,Zx,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);let e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);let e=this.children;for(let o=0,a=e.length;o<a;o++)e[o].traverse(t)}traverseVisible(t){if(this.visible===!1)return;t(this);let e=this.children;for(let o=0,a=e.length;o<a;o++)e[o].traverseVisible(t)}traverseAncestors(t){let e=this.parent;e!==null&&(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,t=!0);let e=this.children;for(let o=0,a=e.length;o<a;o++){let l=e[o];(l.matrixWorldAutoUpdate===!0||t===!0)&&l.updateMatrixWorld(t)}}updateWorldMatrix(t,e){let o=this.parent;if(t===!0&&o!==null&&o.matrixWorldAutoUpdate===!0&&o.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),e===!0){let a=this.children;for(let l=0,f=a.length;l<f;l++){let h=a[l];h.matrixWorldAutoUpdate===!0&&h.updateWorldMatrix(!1,!0)}}}toJSON(t){let e=t===void 0||typeof t==\\\"string\\\",o={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},o.metadata={version:4.6,type:\\\"Object\\\",generator:\\\"Object3D.toJSON\\\"});let a={};a.uuid=this.uuid,a.type=this.type,this.name!==\\\"\\\"&&(a.name=this.name),this.castShadow===!0&&(a.castShadow=!0),this.receiveShadow===!0&&(a.receiveShadow=!0),this.visible===!1&&(a.visible=!1),this.frustumCulled===!1&&(a.frustumCulled=!1),this.renderOrder!==0&&(a.renderOrder=this.renderOrder),Object.keys(this.userData).length>0&&(a.userData=this.userData),a.layers=this.layers.mask,a.matrix=this.matrix.toArray(),a.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(a.matrixAutoUpdate=!1),this.isInstancedMesh&&(a.type=\\\"InstancedMesh\\\",a.count=this.count,a.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(a.instanceColor=this.instanceColor.toJSON()));function l(h,p){return h[p.uuid]===void 0&&(h[p.uuid]=p.toJSON(t)),p.uuid}if(this.isScene)this.background&&(this.background.isColor?a.background=this.background.toJSON():this.background.isTexture&&(a.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(a.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){a.geometry=l(t.geometries,this.geometry);let h=this.geometry.parameters;if(h!==void 0&&h.shapes!==void 0){let p=h.shapes;if(Array.isArray(p))for(let d=0,g=p.length;d<g;d++){let _=p[d];l(t.shapes,_)}else l(t.shapes,p)}}if(this.isSkinnedMesh&&(a.bindMode=this.bindMode,a.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(l(t.skeletons,this.skeleton),a.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){let h=[];for(let p=0,d=this.material.length;p<d;p++)h.push(l(t.materials,this.material[p]));a.material=h}else a.material=l(t.materials,this.material);if(this.children.length>0){a.children=[];for(let h=0;h<this.children.length;h++)a.children.push(this.children[h].toJSON(t).object)}if(this.animations.length>0){a.animations=[];for(let h=0;h<this.animations.length;h++){let p=this.animations[h];a.animations.push(l(t.animations,p))}}if(e){let h=f(t.geometries),p=f(t.materials),d=f(t.textures),g=f(t.images),_=f(t.shapes),y=f(t.skeletons),M=f(t.animations),w=f(t.nodes);h.length>0&&(o.geometries=h),p.length>0&&(o.materials=p),d.length>0&&(o.textures=d),g.length>0&&(o.images=g),_.length>0&&(o.shapes=_),y.length>0&&(o.skeletons=y),M.length>0&&(o.animations=M),w.length>0&&(o.nodes=w)}return o.object=a,o;function f(h){let p=[];for(let d in h){let g=h[d];delete g.metadata,p.push(g)}return p}}clone(t){return new this.constructor().copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),e===!0)for(let o=0;o<t.children.length;o++){let a=t.children[o];this.add(a.clone())}return this}};ho.DEFAULT_UP=new mt(0,1,0);ho.DEFAULT_MATRIX_AUTO_UPDATE=!0;ho.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;var Ji=new mt,zo=new mt,Kf=new mt,ko=new mt,ba=new mt,Ta=new mt,ag=new mt,jf=new mt,Qf=new mt,th=new mt,Nl=!1,Da=class r{constructor(t=new mt,e=new mt,o=new mt){this.a=t,this.b=e,this.c=o}static getNormal(t,e,o,a){a.subVectors(o,e),Ji.subVectors(t,e),a.cross(Ji);let l=a.lengthSq();return l>0?a.multiplyScalar(1/Math.sqrt(l)):a.set(0,0,0)}static getBarycoord(t,e,o,a,l){Ji.subVectors(a,e),zo.subVectors(o,e),Kf.subVectors(t,e);let f=Ji.dot(Ji),h=Ji.dot(zo),p=Ji.dot(Kf),d=zo.dot(zo),g=zo.dot(Kf),_=f*d-h*h;if(_===0)return l.set(-2,-1,-1);let y=1/_,M=(d*p-h*g)*y,w=(f*g-h*p)*y;return l.set(1-M-w,w,M)}static containsPoint(t,e,o,a){return this.getBarycoord(t,e,o,a,ko),ko.x>=0&&ko.y>=0&&ko.x+ko.y<=1}static getUV(t,e,o,a,l,f,h,p){return Nl===!1&&(console.warn(\\\"THREE.Triangle.getUV() has been renamed to THREE.Triangle.getInterpolation().\\\"),Nl=!0),this.getInterpolation(t,e,o,a,l,f,h,p)}static getInterpolation(t,e,o,a,l,f,h,p){return this.getBarycoord(t,e,o,a,ko),p.setScalar(0),p.addScaledVector(l,ko.x),p.addScaledVector(f,ko.y),p.addScaledVector(h,ko.z),p}static isFrontFacing(t,e,o,a){return Ji.subVectors(o,e),zo.subVectors(t,e),Ji.cross(zo).dot(a)<0}set(t,e,o){return this.a.copy(t),this.b.copy(e),this.c.copy(o),this}setFromPointsAndIndices(t,e,o,a){return this.a.copy(t[e]),this.b.copy(t[o]),this.c.copy(t[a]),this}setFromAttributeAndIndices(t,e,o,a){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,o),this.c.fromBufferAttribute(t,a),this}clone(){return new this.constructor().copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return Ji.subVectors(this.c,this.b),zo.subVectors(this.a,this.b),Ji.cross(zo).length()*.5}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return r.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return r.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,o,a,l){return Nl===!1&&(console.warn(\\\"THREE.Triangle.getUV() has been renamed to THREE.Triangle.getInterpolation().\\\"),Nl=!0),r.getInterpolation(t,this.a,this.b,this.c,e,o,a,l)}getInterpolation(t,e,o,a,l){return r.getInterpolation(t,this.a,this.b,this.c,e,o,a,l)}containsPoint(t){return r.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return r.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){let o=this.a,a=this.b,l=this.c,f,h;ba.subVectors(a,o),Ta.subVectors(l,o),jf.subVectors(t,o);let p=ba.dot(jf),d=Ta.dot(jf);if(p<=0&&d<=0)return e.copy(o);Qf.subVectors(t,a);let g=ba.dot(Qf),_=Ta.dot(Qf);if(g>=0&&_<=g)return e.copy(a);let y=p*_-g*d;if(y<=0&&p>=0&&g<=0)return f=p/(p-g),e.copy(o).addScaledVector(ba,f);th.subVectors(t,l);let M=ba.dot(th),w=Ta.dot(th);if(w>=0&&M<=w)return e.copy(l);let T=M*d-p*w;if(T<=0&&d>=0&&w<=0)return h=d/(d-w),e.copy(o).addScaledVector(Ta,h);let x=g*w-M*_;if(x<=0&&_-g>=0&&M-w>=0)return ag.subVectors(l,a),h=(_-g)/(_-g+(M-w)),e.copy(a).addScaledVector(ag,h);let v=1/(x+T+y);return f=T*v,h=y*v,e.copy(o).addScaledVector(ba,f).addScaledVector(Ta,h)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}},Kx=0,Wa=class extends gs{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,\\\"id\\\",{value:Kx++}),this.uuid=Gu(),this.name=\\\"\\\",this.type=\\\"Material\\\",this.blending=Ba,this.side=ms,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=Dg,this.blendDst=Fg,this.blendEquation=Oa,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=uh,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=Px,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=zf,this.stencilZFail=zf,this.stencilZPass=zf,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(t!==void 0)for(let e in t){let o=t[e];if(o===void 0){console.warn(`THREE.Material: parameter '${e}' has value of undefined.`);continue}let a=this[e];if(a===void 0){console.warn(`THREE.Material: '${e}' is not a property of THREE.${this.type}.`);continue}a&&a.isColor?a.set(o):a&&a.isVector3&&o&&o.isVector3?a.copy(o):this[e]=o}}toJSON(t){let e=t===void 0||typeof t==\\\"string\\\";e&&(t={textures:{},images:{}});let o={metadata:{version:4.6,type:\\\"Material\\\",generator:\\\"Material.toJSON\\\"}};o.uuid=this.uuid,o.type=this.type,this.name!==\\\"\\\"&&(o.name=this.name),this.color&&this.color.isColor&&(o.color=this.color.getHex()),this.roughness!==void 0&&(o.roughness=this.roughness),this.metalness!==void 0&&(o.metalness=this.metalness),this.sheen!==void 0&&(o.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(o.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(o.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(o.emissive=this.emissive.getHex()),this.emissiveIntensity&&this.emissiveIntensity!==1&&(o.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(o.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(o.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(o.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(o.shininess=this.shininess),this.clearcoat!==void 0&&(o.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(o.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(o.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(o.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(o.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,o.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.iridescence!==void 0&&(o.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(o.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(o.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(o.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(o.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),this.anisotropy!==void 0&&(o.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(o.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(o.anisotropyMap=this.anisotropyMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(o.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(o.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(o.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(o.lightMap=this.lightMap.toJSON(t).uuid,o.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(o.aoMap=this.aoMap.toJSON(t).uuid,o.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(o.bumpMap=this.bumpMap.toJSON(t).uuid,o.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(o.normalMap=this.normalMap.toJSON(t).uuid,o.normalMapType=this.normalMapType,o.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(o.displacementMap=this.displacementMap.toJSON(t).uuid,o.displacementScale=this.displacementScale,o.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(o.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(o.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(o.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(o.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(o.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(o.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(o.envMap=this.envMap.toJSON(t).uuid,this.combine!==void 0&&(o.combine=this.combine)),this.envMapIntensity!==void 0&&(o.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(o.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(o.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(o.gradientMap=this.gradientMap.toJSON(t).uuid),this.transmission!==void 0&&(o.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(o.transmissionMap=this.transmissionMap.toJSON(t).uuid),this.thickness!==void 0&&(o.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(o.thicknessMap=this.thicknessMap.toJSON(t).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(o.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(o.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(o.size=this.size),this.shadowSide!==null&&(o.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(o.sizeAttenuation=this.sizeAttenuation),this.blending!==Ba&&(o.blending=this.blending),this.side!==ms&&(o.side=this.side),this.vertexColors===!0&&(o.vertexColors=!0),this.opacity<1&&(o.opacity=this.opacity),this.transparent===!0&&(o.transparent=!0),o.depthFunc=this.depthFunc,o.depthTest=this.depthTest,o.depthWrite=this.depthWrite,o.colorWrite=this.colorWrite,o.stencilWrite=this.stencilWrite,o.stencilWriteMask=this.stencilWriteMask,o.stencilFunc=this.stencilFunc,o.stencilRef=this.stencilRef,o.stencilFuncMask=this.stencilFuncMask,o.stencilFail=this.stencilFail,o.stencilZFail=this.stencilZFail,o.stencilZPass=this.stencilZPass,this.rotation!==void 0&&this.rotation!==0&&(o.rotation=this.rotation),this.polygonOffset===!0&&(o.polygonOffset=!0),this.polygonOffsetFactor!==0&&(o.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(o.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(o.linewidth=this.linewidth),this.dashSize!==void 0&&(o.dashSize=this.dashSize),this.gapSize!==void 0&&(o.gapSize=this.gapSize),this.scale!==void 0&&(o.scale=this.scale),this.dithering===!0&&(o.dithering=!0),this.alphaTest>0&&(o.alphaTest=this.alphaTest),this.alphaHash===!0&&(o.alphaHash=!0),this.alphaToCoverage===!0&&(o.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(o.premultipliedAlpha=!0),this.forceSinglePass===!0&&(o.forceSinglePass=!0),this.wireframe===!0&&(o.wireframe=!0),this.wireframeLinewidth>1&&(o.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!==\\\"round\\\"&&(o.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!==\\\"round\\\"&&(o.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(o.flatShading=!0),this.visible===!1&&(o.visible=!1),this.toneMapped===!1&&(o.toneMapped=!1),this.fog===!1&&(o.fog=!1),Object.keys(this.userData).length>0&&(o.userData=this.userData);function a(l){let f=[];for(let h in l){let p=l[h];delete p.metadata,f.push(p)}return f}if(e){let l=a(t.textures),f=a(t.images);l.length>0&&(o.textures=l),f.length>0&&(o.images=f)}return o}clone(){return new this.constructor().copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;let e=t.clippingPlanes,o=null;if(e!==null){let a=e.length;o=new Array(a);for(let l=0;l!==a;++l)o[l]=e[l].clone()}return this.clippingPlanes=o,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaHash=t.alphaHash,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:\\\"dispose\\\"})}set needsUpdate(t){t===!0&&this.version++}},Yg={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},ls={h:0,s:0,l:0},Ol={h:0,s:0,l:0};function eh(r,t,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?r+(t-r)*6*e:e<1/2?t:e<2/3?r+(t-r)*6*(2/3-e):r}var xn=class{constructor(t,e,o){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,o)}set(t,e,o){if(e===void 0&&o===void 0){let a=t;a&&a.isColor?this.copy(a):typeof a==\\\"number\\\"?this.setHex(a):typeof a==\\\"string\\\"&&this.setStyle(a)}else this.setRGB(t,e,o);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=br){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(t&255)/255,gn.toWorkingColorSpace(this,e),this}setRGB(t,e,o,a=gn.workingColorSpace){return this.r=t,this.g=e,this.b=o,gn.toWorkingColorSpace(this,a),this}setHSL(t,e,o,a=gn.workingColorSpace){if(t=Bx(t,1),e=ui(e,0,1),o=ui(o,0,1),e===0)this.r=this.g=this.b=o;else{let l=o<=.5?o*(1+e):o+e-o*e,f=2*o-l;this.r=eh(f,l,t+1/3),this.g=eh(f,l,t),this.b=eh(f,l,t-1/3)}return gn.toWorkingColorSpace(this,a),this}setStyle(t,e=br){function o(l){l!==void 0&&parseFloat(l)<1&&console.warn(\\\"THREE.Color: Alpha component of \\\"+t+\\\" will be ignored.\\\")}let a;if(a=/^(\\\\w+)\\\\(([^\\\\)]*)\\\\)/.exec(t)){let l,f=a[1],h=a[2];switch(f){case\\\"rgb\\\":case\\\"rgba\\\":if(l=/^\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\s*(?:,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*)?$/.exec(h))return o(l[4]),this.setRGB(Math.min(255,parseInt(l[1],10))/255,Math.min(255,parseInt(l[2],10))/255,Math.min(255,parseInt(l[3],10))/255,e);if(l=/^\\\\s*(\\\\d+)\\\\%\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*(?:,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*)?$/.exec(h))return o(l[4]),this.setRGB(Math.min(100,parseInt(l[1],10))/100,Math.min(100,parseInt(l[2],10))/100,Math.min(100,parseInt(l[3],10))/100,e);break;case\\\"hsl\\\":case\\\"hsla\\\":if(l=/^\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\%\\\\s*,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\%\\\\s*(?:,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*)?$/.exec(h))return o(l[4]),this.setHSL(parseFloat(l[1])/360,parseFloat(l[2])/100,parseFloat(l[3])/100,e);break;default:console.warn(\\\"THREE.Color: Unknown color model \\\"+t)}}else if(a=/^\\\\#([A-Fa-f\\\\d]+)$/.exec(t)){let l=a[1],f=l.length;if(f===3)return this.setRGB(parseInt(l.charAt(0),16)/15,parseInt(l.charAt(1),16)/15,parseInt(l.charAt(2),16)/15,e);if(f===6)return this.setHex(parseInt(l,16),e);console.warn(\\\"THREE.Color: Invalid hex color \\\"+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=br){let o=Yg[t.toLowerCase()];return o!==void 0?this.setHex(o,e):console.warn(\\\"THREE.Color: Unknown color \\\"+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=za(t.r),this.g=za(t.g),this.b=za(t.b),this}copyLinearToSRGB(t){return this.r=Hf(t.r),this.g=Hf(t.g),this.b=Hf(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=br){return gn.fromWorkingColorSpace(Br.copy(this),t),Math.round(ui(Br.r*255,0,255))*65536+Math.round(ui(Br.g*255,0,255))*256+Math.round(ui(Br.b*255,0,255))}getHexString(t=br){return(\\\"000000\\\"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=gn.workingColorSpace){gn.fromWorkingColorSpace(Br.copy(this),e);let o=Br.r,a=Br.g,l=Br.b,f=Math.max(o,a,l),h=Math.min(o,a,l),p,d,g=(h+f)/2;if(h===f)p=0,d=0;else{let _=f-h;switch(d=g<=.5?_/(f+h):_/(2-f-h),f){case o:p=(a-l)/_+(a<l?6:0);break;case a:p=(l-o)/_+2;break;case l:p=(o-a)/_+4;break}p/=6}return t.h=p,t.s=d,t.l=g,t}getRGB(t,e=gn.workingColorSpace){return gn.fromWorkingColorSpace(Br.copy(this),e),t.r=Br.r,t.g=Br.g,t.b=Br.b,t}getStyle(t=br){gn.fromWorkingColorSpace(Br.copy(this),t);let e=Br.r,o=Br.g,a=Br.b;return t!==br?`color(${t} ${e.toFixed(3)} ${o.toFixed(3)} ${a.toFixed(3)})`:`rgb(${Math.round(e*255)},${Math.round(o*255)},${Math.round(a*255)})`}offsetHSL(t,e,o){return this.getHSL(ls),this.setHSL(ls.h+t,ls.s+e,ls.l+o)}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,o){return this.r=t.r+(e.r-t.r)*o,this.g=t.g+(e.g-t.g)*o,this.b=t.b+(e.b-t.b)*o,this}lerpHSL(t,e){this.getHSL(ls),t.getHSL(Ol);let o=Gf(ls.h,Ol.h,e),a=Gf(ls.s,Ol.s,e),l=Gf(ls.l,Ol.l,e);return this.setHSL(o,a,l),this}setFromVector3(t){return this.r=t.x,this.g=t.y,this.b=t.z,this}applyMatrix3(t){let e=this.r,o=this.g,a=this.b,l=t.elements;return this.r=l[0]*e+l[3]*o+l[6]*a,this.g=l[1]*e+l[4]*o+l[7]*a,this.b=l[2]*e+l[5]*o+l[8]*a,this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}},Br=new xn;xn.NAMES=Yg;var sc=class extends Wa{constructor(t){super(),this.isMeshBasicMaterial=!0,this.type=\\\"MeshBasicMaterial\\\",this.color=new xn(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=Ug,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\\\"round\\\",this.wireframeLinejoin=\\\"round\\\",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}};var Jn=new mt,Dl=new fn,Fi=class{constructor(t,e,o=!1){if(Array.isArray(t))throw new TypeError(\\\"THREE.BufferAttribute: array should be a Typed Array.\\\");this.isBufferAttribute=!0,this.name=\\\"\\\",this.array=t,this.itemSize=e,this.count=t!==void 0?t.length/e:0,this.normalized=o,this.usage=Zm,this.updateRange={offset:0,count:-1},this.gpuType=fs,this.version=0}onUploadCallback(){}set needsUpdate(t){t===!0&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,o){t*=this.itemSize,o*=e.itemSize;for(let a=0,l=this.itemSize;a<l;a++)this.array[t+a]=e.array[o+a];return this}copyArray(t){return this.array.set(t),this}applyMatrix3(t){if(this.itemSize===2)for(let e=0,o=this.count;e<o;e++)Dl.fromBufferAttribute(this,e),Dl.applyMatrix3(t),this.setXY(e,Dl.x,Dl.y);else if(this.itemSize===3)for(let e=0,o=this.count;e<o;e++)Jn.fromBufferAttribute(this,e),Jn.applyMatrix3(t),this.setXYZ(e,Jn.x,Jn.y,Jn.z);return this}applyMatrix4(t){for(let e=0,o=this.count;e<o;e++)Jn.fromBufferAttribute(this,e),Jn.applyMatrix4(t),this.setXYZ(e,Jn.x,Jn.y,Jn.z);return this}applyNormalMatrix(t){for(let e=0,o=this.count;e<o;e++)Jn.fromBufferAttribute(this,e),Jn.applyNormalMatrix(t),this.setXYZ(e,Jn.x,Jn.y,Jn.z);return this}transformDirection(t){for(let e=0,o=this.count;e<o;e++)Jn.fromBufferAttribute(this,e),Jn.transformDirection(t),this.setXYZ(e,Jn.x,Jn.y,Jn.z);return this}set(t,e=0){return this.array.set(t,e),this}getComponent(t,e){let o=this.array[t*this.itemSize+e];return this.normalized&&(o=Cu(o,this.array)),o}setComponent(t,e,o){return this.normalized&&(o=ai(o,this.array)),this.array[t*this.itemSize+e]=o,this}getX(t){let e=this.array[t*this.itemSize];return this.normalized&&(e=Cu(e,this.array)),e}setX(t,e){return this.normalized&&(e=ai(e,this.array)),this.array[t*this.itemSize]=e,this}getY(t){let e=this.array[t*this.itemSize+1];return this.normalized&&(e=Cu(e,this.array)),e}setY(t,e){return this.normalized&&(e=ai(e,this.array)),this.array[t*this.itemSize+1]=e,this}getZ(t){let e=this.array[t*this.itemSize+2];return this.normalized&&(e=Cu(e,this.array)),e}setZ(t,e){return this.normalized&&(e=ai(e,this.array)),this.array[t*this.itemSize+2]=e,this}getW(t){let e=this.array[t*this.itemSize+3];return this.normalized&&(e=Cu(e,this.array)),e}setW(t,e){return this.normalized&&(e=ai(e,this.array)),this.array[t*this.itemSize+3]=e,this}setXY(t,e,o){return t*=this.itemSize,this.normalized&&(e=ai(e,this.array),o=ai(o,this.array)),this.array[t+0]=e,this.array[t+1]=o,this}setXYZ(t,e,o,a){return t*=this.itemSize,this.normalized&&(e=ai(e,this.array),o=ai(o,this.array),a=ai(a,this.array)),this.array[t+0]=e,this.array[t+1]=o,this.array[t+2]=a,this}setXYZW(t,e,o,a,l){return t*=this.itemSize,this.normalized&&(e=ai(e,this.array),o=ai(o,this.array),a=ai(a,this.array),l=ai(l,this.array)),this.array[t+0]=e,this.array[t+1]=o,this.array[t+2]=a,this.array[t+3]=l,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){let t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return this.name!==\\\"\\\"&&(t.name=this.name),this.usage!==Zm&&(t.usage=this.usage),(this.updateRange.offset!==0||this.updateRange.count!==-1)&&(t.updateRange=this.updateRange),t}};var ac=class extends Fi{constructor(t,e,o){super(new Uint16Array(t),e,o)}};var uc=class extends Fi{constructor(t,e,o){super(new Uint32Array(t),e,o)}};var qo=class extends Fi{constructor(t,e,o){super(new Float32Array(t),e,o)}};var jx=0,Ni=new zr,nh=new ho,Aa=new mt,xi=new Ys,Lu=new Ys,dr=new mt,Zs=class r extends gs{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,\\\"id\\\",{value:jx++}),this.uuid=Gu(),this.name=\\\"\\\",this.type=\\\"BufferGeometry\\\",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(Xg(t)?uc:ac)(t,1):this.index=t,this}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return this.attributes[t]!==void 0}addGroup(t,e,o=0){this.groups.push({start:t,count:e,materialIndex:o})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){let e=this.attributes.position;e!==void 0&&(e.applyMatrix4(t),e.needsUpdate=!0);let o=this.attributes.normal;if(o!==void 0){let l=new ve().getNormalMatrix(t);o.applyNormalMatrix(l),o.needsUpdate=!0}let a=this.attributes.tangent;return a!==void 0&&(a.transformDirection(t),a.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(t){return Ni.makeRotationFromQuaternion(t),this.applyMatrix4(Ni),this}rotateX(t){return Ni.makeRotationX(t),this.applyMatrix4(Ni),this}rotateY(t){return Ni.makeRotationY(t),this.applyMatrix4(Ni),this}rotateZ(t){return Ni.makeRotationZ(t),this.applyMatrix4(Ni),this}translate(t,e,o){return Ni.makeTranslation(t,e,o),this.applyMatrix4(Ni),this}scale(t,e,o){return Ni.makeScale(t,e,o),this.applyMatrix4(Ni),this}lookAt(t){return nh.lookAt(t),nh.updateMatrix(),this.applyMatrix4(nh.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Aa).negate(),this.translate(Aa.x,Aa.y,Aa.z),this}setFromPoints(t){let e=[];for(let o=0,a=t.length;o<a;o++){let l=t[o];e.push(l.x,l.y,l.z||0)}return this.setAttribute(\\\"position\\\",new qo(e,3)),this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new Ys);let t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \\\"mesh.frustumCulled\\\" to \\\"false\\\".',this),this.boundingBox.set(new mt(-1/0,-1/0,-1/0),new mt(1/0,1/0,1/0));return}if(t!==void 0){if(this.boundingBox.setFromBufferAttribute(t),e)for(let o=0,a=e.length;o<a;o++){let l=e[o];xi.setFromBufferAttribute(l),this.morphTargetsRelative?(dr.addVectors(this.boundingBox.min,xi.min),this.boundingBox.expandByPoint(dr),dr.addVectors(this.boundingBox.max,xi.max),this.boundingBox.expandByPoint(dr)):(this.boundingBox.expandByPoint(xi.min),this.boundingBox.expandByPoint(xi.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \\\"position\\\" attribute is likely to have NaN values.',this)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new Bu);let t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \\\"mesh.frustumCulled\\\" to \\\"false\\\".',this),this.boundingSphere.set(new mt,1/0);return}if(t){let o=this.boundingSphere.center;if(xi.setFromBufferAttribute(t),e)for(let l=0,f=e.length;l<f;l++){let h=e[l];Lu.setFromBufferAttribute(h),this.morphTargetsRelative?(dr.addVectors(xi.min,Lu.min),xi.expandByPoint(dr),dr.addVectors(xi.max,Lu.max),xi.expandByPoint(dr)):(xi.expandByPoint(Lu.min),xi.expandByPoint(Lu.max))}xi.getCenter(o);let a=0;for(let l=0,f=t.count;l<f;l++)dr.fromBufferAttribute(t,l),a=Math.max(a,o.distanceToSquared(dr));if(e)for(let l=0,f=e.length;l<f;l++){let h=e[l],p=this.morphTargetsRelative;for(let d=0,g=h.count;d<g;d++)dr.fromBufferAttribute(h,d),p&&(Aa.fromBufferAttribute(t,d),dr.add(Aa)),a=Math.max(a,o.distanceToSquared(dr))}this.boundingSphere.radius=Math.sqrt(a),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \\\"position\\\" attribute is likely to have NaN values.',this)}}computeTangents(){let t=this.index,e=this.attributes;if(t===null||e.position===void 0||e.normal===void 0||e.uv===void 0){console.error(\\\"THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)\\\");return}let o=t.array,a=e.position.array,l=e.normal.array,f=e.uv.array,h=a.length/3;this.hasAttribute(\\\"tangent\\\")===!1&&this.setAttribute(\\\"tangent\\\",new Fi(new Float32Array(4*h),4));let p=this.getAttribute(\\\"tangent\\\").array,d=[],g=[];for(let q=0;q<h;q++)d[q]=new mt,g[q]=new mt;let _=new mt,y=new mt,M=new mt,w=new fn,T=new fn,x=new fn,v=new mt,C=new mt;function S(q,nt,k){_.fromArray(a,q*3),y.fromArray(a,nt*3),M.fromArray(a,k*3),w.fromArray(f,q*2),T.fromArray(f,nt*2),x.fromArray(f,k*2),y.sub(_),M.sub(_),T.sub(w),x.sub(w);let xt=1/(T.x*x.y-x.x*T.y);isFinite(xt)&&(v.copy(y).multiplyScalar(x.y).addScaledVector(M,-T.y).multiplyScalar(xt),C.copy(M).multiplyScalar(T.x).addScaledVector(y,-x.x).multiplyScalar(xt),d[q].add(v),d[nt].add(v),d[k].add(v),g[q].add(C),g[nt].add(C),g[k].add(C))}let O=this.groups;O.length===0&&(O=[{start:0,count:o.length}]);for(let q=0,nt=O.length;q<nt;++q){let k=O[q],xt=k.start,X=k.count;for(let it=xt,vt=xt+X;it<vt;it+=3)S(o[it+0],o[it+1],o[it+2])}let F=new mt,G=new mt,z=new mt,L=new mt;function D(q){z.fromArray(l,q*3),L.copy(z);let nt=d[q];F.copy(nt),F.sub(z.multiplyScalar(z.dot(nt))).normalize(),G.crossVectors(L,nt);let xt=G.dot(g[q])<0?-1:1;p[q*4]=F.x,p[q*4+1]=F.y,p[q*4+2]=F.z,p[q*4+3]=xt}for(let q=0,nt=O.length;q<nt;++q){let k=O[q],xt=k.start,X=k.count;for(let it=xt,vt=xt+X;it<vt;it+=3)D(o[it+0]),D(o[it+1]),D(o[it+2])}}computeVertexNormals(){let t=this.index,e=this.getAttribute(\\\"position\\\");if(e!==void 0){let o=this.getAttribute(\\\"normal\\\");if(o===void 0)o=new Fi(new Float32Array(e.count*3),3),this.setAttribute(\\\"normal\\\",o);else for(let y=0,M=o.count;y<M;y++)o.setXYZ(y,0,0,0);let a=new mt,l=new mt,f=new mt,h=new mt,p=new mt,d=new mt,g=new mt,_=new mt;if(t)for(let y=0,M=t.count;y<M;y+=3){let w=t.getX(y+0),T=t.getX(y+1),x=t.getX(y+2);a.fromBufferAttribute(e,w),l.fromBufferAttribute(e,T),f.fromBufferAttribute(e,x),g.subVectors(f,l),_.subVectors(a,l),g.cross(_),h.fromBufferAttribute(o,w),p.fromBufferAttribute(o,T),d.fromBufferAttribute(o,x),h.add(g),p.add(g),d.add(g),o.setXYZ(w,h.x,h.y,h.z),o.setXYZ(T,p.x,p.y,p.z),o.setXYZ(x,d.x,d.y,d.z)}else for(let y=0,M=e.count;y<M;y+=3)a.fromBufferAttribute(e,y+0),l.fromBufferAttribute(e,y+1),f.fromBufferAttribute(e,y+2),g.subVectors(f,l),_.subVectors(a,l),g.cross(_),o.setXYZ(y+0,g.x,g.y,g.z),o.setXYZ(y+1,g.x,g.y,g.z),o.setXYZ(y+2,g.x,g.y,g.z);this.normalizeNormals(),o.needsUpdate=!0}}normalizeNormals(){let t=this.attributes.normal;for(let e=0,o=t.count;e<o;e++)dr.fromBufferAttribute(t,e),dr.normalize(),t.setXYZ(e,dr.x,dr.y,dr.z)}toNonIndexed(){function t(h,p){let d=h.array,g=h.itemSize,_=h.normalized,y=new d.constructor(p.length*g),M=0,w=0;for(let T=0,x=p.length;T<x;T++){h.isInterleavedBufferAttribute?M=p[T]*h.data.stride+h.offset:M=p[T]*g;for(let v=0;v<g;v++)y[w++]=d[M++]}return new Fi(y,g,_)}if(this.index===null)return console.warn(\\\"THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.\\\"),this;let e=new r,o=this.index.array,a=this.attributes;for(let h in a){let p=a[h],d=t(p,o);e.setAttribute(h,d)}let l=this.morphAttributes;for(let h in l){let p=[],d=l[h];for(let g=0,_=d.length;g<_;g++){let y=d[g],M=t(y,o);p.push(M)}e.morphAttributes[h]=p}e.morphTargetsRelative=this.morphTargetsRelative;let f=this.groups;for(let h=0,p=f.length;h<p;h++){let d=f[h];e.addGroup(d.start,d.count,d.materialIndex)}return e}toJSON(){let t={metadata:{version:4.6,type:\\\"BufferGeometry\\\",generator:\\\"BufferGeometry.toJSON\\\"}};if(t.uuid=this.uuid,t.type=this.type,this.name!==\\\"\\\"&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),this.parameters!==void 0){let p=this.parameters;for(let d in p)p[d]!==void 0&&(t[d]=p[d]);return t}t.data={attributes:{}};let e=this.index;e!==null&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});let o=this.attributes;for(let p in o){let d=o[p];t.data.attributes[p]=d.toJSON(t.data)}let a={},l=!1;for(let p in this.morphAttributes){let d=this.morphAttributes[p],g=[];for(let _=0,y=d.length;_<y;_++){let M=d[_];g.push(M.toJSON(t.data))}g.length>0&&(a[p]=g,l=!0)}l&&(t.data.morphAttributes=a,t.data.morphTargetsRelative=this.morphTargetsRelative);let f=this.groups;f.length>0&&(t.data.groups=JSON.parse(JSON.stringify(f)));let h=this.boundingSphere;return h!==null&&(t.data.boundingSphere={center:h.center.toArray(),radius:h.radius}),t}clone(){return new this.constructor().copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let e={};this.name=t.name;let o=t.index;o!==null&&this.setIndex(o.clone(e));let a=t.attributes;for(let d in a){let g=a[d];this.setAttribute(d,g.clone(e))}let l=t.morphAttributes;for(let d in l){let g=[],_=l[d];for(let y=0,M=_.length;y<M;y++)g.push(_[y].clone(e));this.morphAttributes[d]=g}this.morphTargetsRelative=t.morphTargetsRelative;let f=t.groups;for(let d=0,g=f.length;d<g;d++){let _=f[d];this.addGroup(_.start,_.count,_.materialIndex)}let h=t.boundingBox;h!==null&&(this.boundingBox=h.clone());let p=t.boundingSphere;return p!==null&&(this.boundingSphere=p.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,this}dispose(){this.dispatchEvent({type:\\\"dispose\\\"})}},ug=new zr,ks=new vh,Fl=new Bu,lg=new mt,Ca=new mt,Pa=new mt,Ia=new mt,rh=new mt,Ul=new mt,Bl=new fn,zl=new fn,kl=new fn,cg=new mt,fg=new mt,hg=new mt,Gl=new mt,Vl=new mt,fo=class extends ho{constructor(t=new Zs,e=new sc){super(),this.isMesh=!0,this.type=\\\"Mesh\\\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t,e){return super.copy(t,e),t.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),t.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}updateMorphTargets(){let e=this.geometry.morphAttributes,o=Object.keys(e);if(o.length>0){let a=e[o[0]];if(a!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let l=0,f=a.length;l<f;l++){let h=a[l].name||String(l);this.morphTargetInfluences.push(0),this.morphTargetDictionary[h]=l}}}}getVertexPosition(t,e){let o=this.geometry,a=o.attributes.position,l=o.morphAttributes.position,f=o.morphTargetsRelative;e.fromBufferAttribute(a,t);let h=this.morphTargetInfluences;if(l&&h){Ul.set(0,0,0);for(let p=0,d=l.length;p<d;p++){let g=h[p],_=l[p];g!==0&&(rh.fromBufferAttribute(_,t),f?Ul.addScaledVector(rh,g):Ul.addScaledVector(rh.sub(e),g))}e.add(Ul)}return e}raycast(t,e){let o=this.geometry,a=this.material,l=this.matrixWorld;a!==void 0&&(o.boundingSphere===null&&o.computeBoundingSphere(),Fl.copy(o.boundingSphere),Fl.applyMatrix4(l),ks.copy(t.ray).recast(t.near),!(Fl.containsPoint(ks.origin)===!1&&(ks.intersectSphere(Fl,lg)===null||ks.origin.distanceToSquared(lg)>(t.far-t.near)**2))&&(ug.copy(l).invert(),ks.copy(t.ray).applyMatrix4(ug),!(o.boundingBox!==null&&ks.intersectsBox(o.boundingBox)===!1)&&this._computeIntersections(t,e,ks)))}_computeIntersections(t,e,o){let a,l=this.geometry,f=this.material,h=l.index,p=l.attributes.position,d=l.attributes.uv,g=l.attributes.uv1,_=l.attributes.normal,y=l.groups,M=l.drawRange;if(h!==null)if(Array.isArray(f))for(let w=0,T=y.length;w<T;w++){let x=y[w],v=f[x.materialIndex],C=Math.max(x.start,M.start),S=Math.min(h.count,Math.min(x.start+x.count,M.start+M.count));for(let O=C,F=S;O<F;O+=3){let G=h.getX(O),z=h.getX(O+1),L=h.getX(O+2);a=Hl(this,v,t,o,d,g,_,G,z,L),a&&(a.faceIndex=Math.floor(O/3),a.face.materialIndex=x.materialIndex,e.push(a))}}else{let w=Math.max(0,M.start),T=Math.min(h.count,M.start+M.count);for(let x=w,v=T;x<v;x+=3){let C=h.getX(x),S=h.getX(x+1),O=h.getX(x+2);a=Hl(this,f,t,o,d,g,_,C,S,O),a&&(a.faceIndex=Math.floor(x/3),e.push(a))}}else if(p!==void 0)if(Array.isArray(f))for(let w=0,T=y.length;w<T;w++){let x=y[w],v=f[x.materialIndex],C=Math.max(x.start,M.start),S=Math.min(p.count,Math.min(x.start+x.count,M.start+M.count));for(let O=C,F=S;O<F;O+=3){let G=O,z=O+1,L=O+2;a=Hl(this,v,t,o,d,g,_,G,z,L),a&&(a.faceIndex=Math.floor(O/3),a.face.materialIndex=x.materialIndex,e.push(a))}}else{let w=Math.max(0,M.start),T=Math.min(p.count,M.start+M.count);for(let x=w,v=T;x<v;x+=3){let C=x,S=x+1,O=x+2;a=Hl(this,f,t,o,d,g,_,C,S,O),a&&(a.faceIndex=Math.floor(x/3),e.push(a))}}}};function Qx(r,t,e,o,a,l,f,h){let p;if(t.side===li?p=o.intersectTriangle(f,l,a,!0,h):p=o.intersectTriangle(a,l,f,t.side===ms,h),p===null)return null;Vl.copy(h),Vl.applyMatrix4(r.matrixWorld);let d=e.ray.origin.distanceTo(Vl);return d<e.near||d>e.far?null:{distance:d,point:Vl.clone(),object:r}}function Hl(r,t,e,o,a,l,f,h,p,d){r.getVertexPosition(h,Ca),r.getVertexPosition(p,Pa),r.getVertexPosition(d,Ia);let g=Qx(r,t,e,o,Ca,Pa,Ia,Gl);if(g){a&&(Bl.fromBufferAttribute(a,h),zl.fromBufferAttribute(a,p),kl.fromBufferAttribute(a,d),g.uv=Da.getInterpolation(Gl,Ca,Pa,Ia,Bl,zl,kl,new fn)),l&&(Bl.fromBufferAttribute(l,h),zl.fromBufferAttribute(l,p),kl.fromBufferAttribute(l,d),g.uv1=Da.getInterpolation(Gl,Ca,Pa,Ia,Bl,zl,kl,new fn),g.uv2=g.uv1),f&&(cg.fromBufferAttribute(f,h),fg.fromBufferAttribute(f,p),hg.fromBufferAttribute(f,d),g.normal=Da.getInterpolation(Gl,Ca,Pa,Ia,cg,fg,hg,new mt),g.normal.dot(o.direction)>0&&g.normal.multiplyScalar(-1));let _={a:h,b:p,c:d,normal:new mt,materialIndex:0};Da.getNormal(Ca,Pa,Ia,_.normal),g.face=_}return g}var zu=class r extends Zs{constructor(t=1,e=1,o=1,a=1,l=1,f=1){super(),this.type=\\\"BoxGeometry\\\",this.parameters={width:t,height:e,depth:o,widthSegments:a,heightSegments:l,depthSegments:f};let h=this;a=Math.floor(a),l=Math.floor(l),f=Math.floor(f);let p=[],d=[],g=[],_=[],y=0,M=0;w(\\\"z\\\",\\\"y\\\",\\\"x\\\",-1,-1,o,e,t,f,l,0),w(\\\"z\\\",\\\"y\\\",\\\"x\\\",1,-1,o,e,-t,f,l,1),w(\\\"x\\\",\\\"z\\\",\\\"y\\\",1,1,t,o,e,a,f,2),w(\\\"x\\\",\\\"z\\\",\\\"y\\\",1,-1,t,o,-e,a,f,3),w(\\\"x\\\",\\\"y\\\",\\\"z\\\",1,-1,t,e,o,a,l,4),w(\\\"x\\\",\\\"y\\\",\\\"z\\\",-1,-1,t,e,-o,a,l,5),this.setIndex(p),this.setAttribute(\\\"position\\\",new qo(d,3)),this.setAttribute(\\\"normal\\\",new qo(g,3)),this.setAttribute(\\\"uv\\\",new qo(_,2));function w(T,x,v,C,S,O,F,G,z,L,D){let q=O/z,nt=F/L,k=O/2,xt=F/2,X=G/2,it=z+1,vt=L+1,pt=0,et=0,ot=new mt;for(let V=0;V<vt;V++){let K=V*nt-xt;for(let at=0;at<it;at++){let Tt=at*q-k;ot[T]=Tt*C,ot[x]=K*S,ot[v]=X,d.push(ot.x,ot.y,ot.z),ot[T]=0,ot[x]=0,ot[v]=G>0?1:-1,g.push(ot.x,ot.y,ot.z),_.push(at/z),_.push(1-V/L),pt+=1}}for(let V=0;V<L;V++)for(let K=0;K<z;K++){let at=y+K+it*V,Tt=y+K+it*(V+1),dt=y+(K+1)+it*(V+1),Ct=y+(K+1)+it*V;p.push(at,Tt,Ct),p.push(Tt,dt,Ct),et+=6}h.addGroup(M,et,D),M+=et,y+=pt}}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new r(t.width,t.height,t.depth,t.widthSegments,t.heightSegments,t.depthSegments)}};function qa(r){let t={};for(let e in r){t[e]={};for(let o in r[e]){let a=r[e][o];a&&(a.isColor||a.isMatrix3||a.isMatrix4||a.isVector2||a.isVector3||a.isVector4||a.isTexture||a.isQuaternion)?a.isRenderTargetTexture?(console.warn(\\\"UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms().\\\"),t[e][o]=null):t[e][o]=a.clone():Array.isArray(a)?t[e][o]=a.slice():t[e][o]=a}}return t}function Jr(r){let t={};for(let e=0;e<r.length;e++){let o=qa(r[e]);for(let a in o)t[a]=o[a]}return t}function tE(r){let t=[];for(let e=0;e<r.length;e++)t.push(r[e].clone());return t}function Zg(r){return r.getRenderTarget()===null?r.outputColorSpace:gn.workingColorSpace}var eE={clone:qa,merge:Jr},nE=`void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}`,rE=`void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}`,Zo=class extends Wa{constructor(t){super(),this.isShaderMaterial=!0,this.type=\\\"ShaderMaterial\\\",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=nE,this.fragmentShader=rE,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.forceSinglePass=!0,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv1:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,t!==void 0&&this.setValues(t)}copy(t){return super.copy(t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=qa(t.uniforms),this.uniformsGroups=tE(t.uniformsGroups),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.fog=t.fog,this.lights=t.lights,this.clipping=t.clipping,this.extensions=Object.assign({},t.extensions),this.glslVersion=t.glslVersion,this}toJSON(t){let e=super.toJSON(t);e.glslVersion=this.glslVersion,e.uniforms={};for(let a in this.uniforms){let f=this.uniforms[a].value;f&&f.isTexture?e.uniforms[a]={type:\\\"t\\\",value:f.toJSON(t).uuid}:f&&f.isColor?e.uniforms[a]={type:\\\"c\\\",value:f.getHex()}:f&&f.isVector2?e.uniforms[a]={type:\\\"v2\\\",value:f.toArray()}:f&&f.isVector3?e.uniforms[a]={type:\\\"v3\\\",value:f.toArray()}:f&&f.isVector4?e.uniforms[a]={type:\\\"v4\\\",value:f.toArray()}:f&&f.isMatrix3?e.uniforms[a]={type:\\\"m3\\\",value:f.toArray()}:f&&f.isMatrix4?e.uniforms[a]={type:\\\"m4\\\",value:f.toArray()}:e.uniforms[a]={value:f}}Object.keys(this.defines).length>0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e.lights=this.lights,e.clipping=this.clipping;let o={};for(let a in this.extensions)this.extensions[a]===!0&&(o[a]=!0);return Object.keys(o).length>0&&(e.extensions=o),e}},lc=class extends ho{constructor(){super(),this.isCamera=!0,this.type=\\\"Camera\\\",this.matrixWorldInverse=new zr,this.projectionMatrix=new zr,this.projectionMatrixInverse=new zr,this.coordinateSystem=Wo}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this.coordinateSystem=t.coordinateSystem,this}getWorldDirection(t){return super.getWorldDirection(t).negate()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}},Ei=class extends lc{constructor(t=50,e=1,o=.1,a=2e3){super(),this.isPerspectiveCamera=!0,this.type=\\\"PerspectiveCamera\\\",this.fov=t,this.zoom=1,this.near=o,this.far=a,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=t.view===null?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){let e=.5*this.getFilmHeight()/t;this.fov=dh*2*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){let t=Math.tan(kf*.5*this.fov);return .5*this.getFilmHeight()/t}getEffectiveFOV(){return dh*2*Math.atan(Math.tan(kf*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(t,e,o,a,l,f){this.aspect=t/e,this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=o,this.view.offsetY=a,this.view.width=l,this.view.height=f,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let t=this.near,e=t*Math.tan(kf*.5*this.fov)/this.zoom,o=2*e,a=this.aspect*o,l=-.5*a,f=this.view;if(this.view!==null&&this.view.enabled){let p=f.fullWidth,d=f.fullHeight;l+=f.offsetX*a/p,e-=f.offsetY*o/d,a*=f.width/p,o*=f.height/d}let h=this.filmOffset;h!==0&&(l+=t*h/this.getFilmWidth()),this.projectionMatrix.makePerspective(l,l+a,e,e-o,t,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){let e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,this.view!==null&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}},Ra=-90,La=1,_h=class extends ho{constructor(t,e,o){super(),this.type=\\\"CubeCamera\\\",this.renderTarget=o,this.coordinateSystem=null,this.activeMipmapLevel=0;let a=new Ei(Ra,La,t,e);a.layers=this.layers,this.add(a);let l=new Ei(Ra,La,t,e);l.layers=this.layers,this.add(l);let f=new Ei(Ra,La,t,e);f.layers=this.layers,this.add(f);let h=new Ei(Ra,La,t,e);h.layers=this.layers,this.add(h);let p=new Ei(Ra,La,t,e);p.layers=this.layers,this.add(p);let d=new Ei(Ra,La,t,e);d.layers=this.layers,this.add(d)}updateCoordinateSystem(){let t=this.coordinateSystem,e=this.children.concat(),[o,a,l,f,h,p]=e;for(let d of e)this.remove(d);if(t===Wo)o.up.set(0,1,0),o.lookAt(1,0,0),a.up.set(0,1,0),a.lookAt(-1,0,0),l.up.set(0,0,-1),l.lookAt(0,1,0),f.up.set(0,0,1),f.lookAt(0,-1,0),h.up.set(0,1,0),h.lookAt(0,0,1),p.up.set(0,1,0),p.lookAt(0,0,-1);else if(t===Ql)o.up.set(0,-1,0),o.lookAt(-1,0,0),a.up.set(0,-1,0),a.lookAt(1,0,0),l.up.set(0,0,1),l.lookAt(0,1,0),f.up.set(0,0,-1),f.lookAt(0,-1,0),h.up.set(0,-1,0),h.lookAt(0,0,1),p.up.set(0,-1,0),p.lookAt(0,0,-1);else throw new Error(\\\"THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: \\\"+t);for(let d of e)this.add(d),d.updateMatrixWorld()}update(t,e){this.parent===null&&this.updateMatrixWorld();let{renderTarget:o,activeMipmapLevel:a}=this;this.coordinateSystem!==t.coordinateSystem&&(this.coordinateSystem=t.coordinateSystem,this.updateCoordinateSystem());let[l,f,h,p,d,g]=this.children,_=t.getRenderTarget(),y=t.getActiveCubeFace(),M=t.getActiveMipmapLevel(),w=t.xr.enabled;t.xr.enabled=!1;let T=o.texture.generateMipmaps;o.texture.generateMipmaps=!1,t.setRenderTarget(o,0,a),t.render(e,l),t.setRenderTarget(o,1,a),t.render(e,f),t.setRenderTarget(o,2,a),t.render(e,h),t.setRenderTarget(o,3,a),t.render(e,p),t.setRenderTarget(o,4,a),t.render(e,d),o.texture.generateMipmaps=T,t.setRenderTarget(o,5,a),t.render(e,g),t.setRenderTarget(_,y,M),t.xr.enabled=w,o.texture.needsPMREMUpdate=!0}},cc=class extends ji{constructor(t,e,o,a,l,f,h,p,d,g){t=t!==void 0?t:[],e=e!==void 0?e:Ga,super(t,e,o,a,l,f,h,p,d,g),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(t){this.image=t}},xh=class extends Yo{constructor(t=1,e={}){super(t,t,e),this.isWebGLCubeRenderTarget=!0;let o={width:t,height:t,depth:1},a=[o,o,o,o,o,o];e.encoding!==void 0&&(Ou(\\\"THREE.WebGLCubeRenderTarget: option.encoding has been replaced by option.colorSpace.\\\"),e.colorSpace=e.encoding===Xs?br:Di),this.texture=new cc(a,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.colorSpace),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=e.generateMipmaps!==void 0?e.generateMipmaps:!1,this.texture.minFilter=e.minFilter!==void 0?e.minFilter:Oi}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.colorSpace=e.colorSpace,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;let o={uniforms:{tEquirect:{value:null}},vertexShader:`\\n\\n\\t\\t\\t\\tvarying vec3 vWorldDirection;\\n\\n\\t\\t\\t\\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\n\\t\\t\\t\\t\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\t\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\n\\t\\t\\t\\t\\t#include <begin_vertex>\\n\\t\\t\\t\\t\\t#include <project_vertex>\\n\\n\\t\\t\\t\\t}\\n\\t\\t\\t`,fragmentShader:`\\n\\n\\t\\t\\t\\tuniform sampler2D tEquirect;\\n\\n\\t\\t\\t\\tvarying vec3 vWorldDirection;\\n\\n\\t\\t\\t\\t#include <common>\\n\\n\\t\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\t\\tvec3 direction = normalize( vWorldDirection );\\n\\n\\t\\t\\t\\t\\tvec2 sampleUV = equirectUv( direction );\\n\\n\\t\\t\\t\\t\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n\\n\\t\\t\\t\\t}\\n\\t\\t\\t`},a=new zu(5,5,5),l=new Zo({name:\\\"CubemapFromEquirect\\\",uniforms:qa(o.uniforms),vertexShader:o.vertexShader,fragmentShader:o.fragmentShader,side:li,blending:hs});l.uniforms.tEquirect.value=e;let f=new fo(a,l),h=e.minFilter;return e.minFilter===Fu&&(e.minFilter=Oi),new _h(1,10,this).update(t,f),e.minFilter=h,f.geometry.dispose(),f.material.dispose(),this}clear(t,e,o,a){let l=t.getRenderTarget();for(let f=0;f<6;f++)t.setRenderTarget(this,f),t.clear(e,o,a);t.setRenderTarget(l)}},ih=new mt,iE=new mt,oE=new ve,Vo=class{constructor(t=new mt(1,0,0),e=0){this.isPlane=!0,this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,o,a){return this.normal.set(t,e,o),this.constant=a,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,o){let a=ih.subVectors(o,e).cross(iE.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(a,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){let t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(t).addScaledVector(this.normal,-this.distanceToPoint(t))}intersectLine(t,e){let o=t.delta(ih),a=this.normal.dot(o);if(a===0)return this.distanceToPoint(t.start)===0?e.copy(t.start):null;let l=-(t.start.dot(this.normal)+this.constant)/a;return l<0||l>1?null:e.copy(t.start).addScaledVector(o,l)}intersectsLine(t){let e=this.distanceToPoint(t.start),o=this.distanceToPoint(t.end);return e<0&&o>0||o<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){let o=e||oE.getNormalMatrix(t),a=this.coplanarPoint(ih).applyMatrix4(t),l=this.normal.applyMatrix3(o).normalize();return this.constant=-a.dot(l),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return new this.constructor().copy(this)}},Gs=new Bu,Wl=new mt,fc=class{constructor(t=new Vo,e=new Vo,o=new Vo,a=new Vo,l=new Vo,f=new Vo){this.planes=[t,e,o,a,l,f]}set(t,e,o,a,l,f){let h=this.planes;return h[0].copy(t),h[1].copy(e),h[2].copy(o),h[3].copy(a),h[4].copy(l),h[5].copy(f),this}copy(t){let e=this.planes;for(let o=0;o<6;o++)e[o].copy(t.planes[o]);return this}setFromProjectionMatrix(t,e=Wo){let o=this.planes,a=t.elements,l=a[0],f=a[1],h=a[2],p=a[3],d=a[4],g=a[5],_=a[6],y=a[7],M=a[8],w=a[9],T=a[10],x=a[11],v=a[12],C=a[13],S=a[14],O=a[15];if(o[0].setComponents(p-l,y-d,x-M,O-v).normalize(),o[1].setComponents(p+l,y+d,x+M,O+v).normalize(),o[2].setComponents(p+f,y+g,x+w,O+C).normalize(),o[3].setComponents(p-f,y-g,x-w,O-C).normalize(),o[4].setComponents(p-h,y-_,x-T,O-S).normalize(),e===Wo)o[5].setComponents(p+h,y+_,x+T,O+S).normalize();else if(e===Ql)o[5].setComponents(h,_,T,S).normalize();else throw new Error(\\\"THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: \\\"+e);return this}intersectsObject(t){if(t.boundingSphere!==void 0)t.boundingSphere===null&&t.computeBoundingSphere(),Gs.copy(t.boundingSphere).applyMatrix4(t.matrixWorld);else{let e=t.geometry;e.boundingSphere===null&&e.computeBoundingSphere(),Gs.copy(e.boundingSphere).applyMatrix4(t.matrixWorld)}return this.intersectsSphere(Gs)}intersectsSprite(t){return Gs.center.set(0,0,0),Gs.radius=.7071067811865476,Gs.applyMatrix4(t.matrixWorld),this.intersectsSphere(Gs)}intersectsSphere(t){let e=this.planes,o=t.center,a=-t.radius;for(let l=0;l<6;l++)if(e[l].distanceToPoint(o)<a)return!1;return!0}intersectsBox(t){let e=this.planes;for(let o=0;o<6;o++){let a=e[o];if(Wl.x=a.normal.x>0?t.max.x:t.min.x,Wl.y=a.normal.y>0?t.max.y:t.min.y,Wl.z=a.normal.z>0?t.max.z:t.min.z,a.distanceToPoint(Wl)<0)return!1}return!0}containsPoint(t){let e=this.planes;for(let o=0;o<6;o++)if(e[o].distanceToPoint(t)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}};function Jg(){let r=null,t=!1,e=null,o=null;function a(l,f){e(l,f),o=r.requestAnimationFrame(a)}return{start:function(){t!==!0&&e!==null&&(o=r.requestAnimationFrame(a),t=!0)},stop:function(){r.cancelAnimationFrame(o),t=!1},setAnimationLoop:function(l){e=l},setContext:function(l){r=l}}}function sE(r,t){let e=t.isWebGL2,o=new WeakMap;function a(d,g){let _=d.array,y=d.usage,M=r.createBuffer();r.bindBuffer(g,M),r.bufferData(g,_,y),d.onUploadCallback();let w;if(_ instanceof Float32Array)w=r.FLOAT;else if(_ instanceof Uint16Array)if(d.isFloat16BufferAttribute)if(e)w=r.HALF_FLOAT;else throw new Error(\\\"THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.\\\");else w=r.UNSIGNED_SHORT;else if(_ instanceof Int16Array)w=r.SHORT;else if(_ instanceof Uint32Array)w=r.UNSIGNED_INT;else if(_ instanceof Int32Array)w=r.INT;else if(_ instanceof Int8Array)w=r.BYTE;else if(_ instanceof Uint8Array)w=r.UNSIGNED_BYTE;else if(_ instanceof Uint8ClampedArray)w=r.UNSIGNED_BYTE;else throw new Error(\\\"THREE.WebGLAttributes: Unsupported buffer data format: \\\"+_);return{buffer:M,type:w,bytesPerElement:_.BYTES_PER_ELEMENT,version:d.version}}function l(d,g,_){let y=g.array,M=g.updateRange;r.bindBuffer(_,d),M.count===-1?r.bufferSubData(_,0,y):(e?r.bufferSubData(_,M.offset*y.BYTES_PER_ELEMENT,y,M.offset,M.count):r.bufferSubData(_,M.offset*y.BYTES_PER_ELEMENT,y.subarray(M.offset,M.offset+M.count)),M.count=-1),g.onUploadCallback()}function f(d){return d.isInterleavedBufferAttribute&&(d=d.data),o.get(d)}function h(d){d.isInterleavedBufferAttribute&&(d=d.data);let g=o.get(d);g&&(r.deleteBuffer(g.buffer),o.delete(d))}function p(d,g){if(d.isGLBufferAttribute){let y=o.get(d);(!y||y.version<d.version)&&o.set(d,{buffer:d.buffer,type:d.type,bytesPerElement:d.elementSize,version:d.version});return}d.isInterleavedBufferAttribute&&(d=d.data);let _=o.get(d);_===void 0?o.set(d,a(d,g)):_.version<d.version&&(l(_.buffer,d,g),_.version=d.version)}return{get:f,remove:h,update:p}}var Eh=class r extends Zs{constructor(t=1,e=1,o=1,a=1){super(),this.type=\\\"PlaneGeometry\\\",this.parameters={width:t,height:e,widthSegments:o,heightSegments:a};let l=t/2,f=e/2,h=Math.floor(o),p=Math.floor(a),d=h+1,g=p+1,_=t/h,y=e/p,M=[],w=[],T=[],x=[];for(let v=0;v<g;v++){let C=v*y-f;for(let S=0;S<d;S++){let O=S*_-l;w.push(O,-C,0),T.push(0,0,1),x.push(S/h),x.push(1-v/p)}}for(let v=0;v<p;v++)for(let C=0;C<h;C++){let S=C+d*v,O=C+d*(v+1),F=C+1+d*(v+1),G=C+1+d*v;M.push(S,O,G),M.push(O,F,G)}this.setIndex(M),this.setAttribute(\\\"position\\\",new qo(w,3)),this.setAttribute(\\\"normal\\\",new qo(T,3)),this.setAttribute(\\\"uv\\\",new qo(x,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new r(t.width,t.height,t.widthSegments,t.heightSegments)}},aE=`#ifdef USE_ALPHAHASH\\n\\tif ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\\n#endif`,uE=`#ifdef USE_ALPHAHASH\\n\\tconst float ALPHA_HASH_SCALE = 0.05;\\n\\tfloat hash2D( vec2 value ) {\\n\\t\\treturn fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\\n\\t}\\n\\tfloat hash3D( vec3 value ) {\\n\\t\\treturn hash2D( vec2( hash2D( value.xy ), value.z ) );\\n\\t}\\n\\tfloat getAlphaHashThreshold( vec3 position ) {\\n\\t\\tfloat maxDeriv = max(\\n\\t\\t\\tlength( dFdx( position.xyz ) ),\\n\\t\\t\\tlength( dFdy( position.xyz ) )\\n\\t\\t);\\n\\t\\tfloat pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\\n\\t\\tvec2 pixScales = vec2(\\n\\t\\t\\texp2( floor( log2( pixScale ) ) ),\\n\\t\\t\\texp2( ceil( log2( pixScale ) ) )\\n\\t\\t);\\n\\t\\tvec2 alpha = vec2(\\n\\t\\t\\thash3D( floor( pixScales.x * position.xyz ) ),\\n\\t\\t\\thash3D( floor( pixScales.y * position.xyz ) )\\n\\t\\t);\\n\\t\\tfloat lerpFactor = fract( log2( pixScale ) );\\n\\t\\tfloat x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\\n\\t\\tfloat a = min( lerpFactor, 1.0 - lerpFactor );\\n\\t\\tvec3 cases = vec3(\\n\\t\\t\\tx * x / ( 2.0 * a * ( 1.0 - a ) ),\\n\\t\\t\\t( x - 0.5 * a ) / ( 1.0 - a ),\\n\\t\\t\\t1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\\n\\t\\t);\\n\\t\\tfloat threshold = ( x < ( 1.0 - a ) )\\n\\t\\t\\t? ( ( x < a ) ? cases.x : cases.y )\\n\\t\\t\\t: cases.z;\\n\\t\\treturn clamp( threshold , 1.0e-6, 1.0 );\\n\\t}\\n#endif`,lE=`#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\\n#endif`,cE=`#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif`,fE=`#ifdef USE_ALPHATEST\\n\\tif ( diffuseColor.a < alphaTest ) discard;\\n#endif`,hE=`#ifdef USE_ALPHATEST\\n\\tuniform float alphaTest;\\n#endif`,pE=`#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\\n\\t#endif\\n#endif`,dE=`#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif`,mE=`vec3 transformed = vec3( position );\\n#ifdef USE_ALPHAHASH\\n\\tvPosition = vec3( position );\\n#endif`,gE=`vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif`,yE=`float G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n} // validated`,vE=`#ifdef USE_IRIDESCENCE\\n\\tconst mat3 XYZ_TO_REC709 = mat3(\\n\\t\\t 3.2404542, -0.9692660, 0.0556434,\\n\\t\\t-1.5371385, 1.8760108, -0.2040259,\\n\\t\\t-0.4985314, 0.0415560, 1.0572252\\n\\t);\\n\\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\\n\\t\\tvec3 sqrtF0 = sqrt( fresnel0 );\\n\\t\\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\\n\\t}\\n\\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\\n\\t\\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\\n\\t}\\n\\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\\n\\t\\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\\n\\t}\\n\\tvec3 evalSensitivity( float OPD, vec3 shift ) {\\n\\t\\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\\n\\t\\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\\n\\t\\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\\n\\t\\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\\n\\t\\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\\n\\t\\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\\n\\t\\txyz /= 1.0685e-7;\\n\\t\\tvec3 rgb = XYZ_TO_REC709 * xyz;\\n\\t\\treturn rgb;\\n\\t}\\n\\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\\n\\t\\tvec3 I;\\n\\t\\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\\n\\t\\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\\n\\t\\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\\n\\t\\tif ( cosTheta2Sq < 0.0 ) {\\n\\t\\t\\treturn vec3( 1.0 );\\n\\t\\t}\\n\\t\\tfloat cosTheta2 = sqrt( cosTheta2Sq );\\n\\t\\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\\n\\t\\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\\n\\t\\tfloat T121 = 1.0 - R12;\\n\\t\\tfloat phi12 = 0.0;\\n\\t\\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\\n\\t\\tfloat phi21 = PI - phi12;\\n\\t\\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\\t\\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\\n\\t\\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\\n\\t\\tvec3 phi23 = vec3( 0.0 );\\n\\t\\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\\n\\t\\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\\n\\t\\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\\n\\t\\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\\n\\t\\tvec3 phi = vec3( phi21 ) + phi23;\\n\\t\\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\\n\\t\\tvec3 r123 = sqrt( R123 );\\n\\t\\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\\n\\t\\tvec3 C0 = R12 + Rs;\\n\\t\\tI = C0;\\n\\t\\tvec3 Cm = Rs - T121;\\n\\t\\tfor ( int m = 1; m <= 2; ++ m ) {\\n\\t\\t\\tCm *= r123;\\n\\t\\t\\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\\n\\t\\t\\tI += Cm * Sm;\\n\\t\\t}\\n\\t\\treturn max( I, vec3( 0.0 ) );\\n\\t}\\n#endif`,_E=`#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vBumpMapUv );\\n\\t\\tvec2 dSTdy = dFdy( vBumpMapUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\\n\\t\\tvec3 vSigmaX = dFdx( surf_pos.xyz );\\n\\t\\tvec3 vSigmaY = dFdy( surf_pos.xyz );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif`,xE=`#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif`,EE=`#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif`,ME=`#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif`,SE=`#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif`,wE=`#if defined( USE_COLOR_ALPHA )\\n\\tdiffuseColor *= vColor;\\n#elif defined( USE_COLOR )\\n\\tdiffuseColor.rgb *= vColor;\\n#endif`,bE=`#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR )\\n\\tvarying vec3 vColor;\\n#endif`,TE=`#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif`,AE=`#if defined( USE_COLOR_ALPHA )\\n\\tvColor = vec4( 1.0 );\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvColor = vec3( 1.0 );\\n#endif\\n#ifdef USE_COLOR\\n\\tvColor *= color;\\n#endif\\n#ifdef USE_INSTANCING_COLOR\\n\\tvColor.xyz *= instanceColor.xyz;\\n#endif`,CE=`#define PI 3.141592653589793\\n#define PI2 6.283185307179586\\n#define PI_HALF 1.5707963267948966\\n#define RECIPROCAL_PI 0.3183098861837907\\n#define RECIPROCAL_PI2 0.15915494309189535\\n#define EPSILON 1e-6\\n#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nvec3 pow2( const in vec3 x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract( sin( sn ) * c );\\n}\\n#ifdef HIGH_PRECISION\\n\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\n#else\\n\\tfloat precisionSafeLength( vec3 v ) {\\n\\t\\tfloat maxComponent = max3( abs( v ) );\\n\\t\\treturn length( v / maxComponent ) * maxComponent;\\n\\t}\\n#endif\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\n#ifdef USE_ALPHAHASH\\n\\tvarying vec3 vPosition;\\n#endif\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nfloat luminance( const in vec3 rgb ) {\\n\\tconst vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 );\\n\\treturn dot( weights, rgb );\\n}\\nbool isPerspectiveMatrix( mat4 m ) {\\n\\treturn m[ 2 ][ 3 ] == - 1.0;\\n}\\nvec2 equirectUv( in vec3 dir ) {\\n\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\treturn vec2( u, v );\\n}\\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n}\\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n} // validated`,PE=`#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_minTileSize 16.0\\n\\tfloat getFace( vec3 direction ) {\\n\\t\\tvec3 absDirection = abs( direction );\\n\\t\\tfloat face = - 1.0;\\n\\t\\tif ( absDirection.x > absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x > absDirection.y )\\n\\t\\t\\t\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z > absDirection.y )\\n\\t\\t\\t\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t}\\n\\t\\treturn face;\\n\\t}\\n\\tvec2 getUV( vec3 direction, float face ) {\\n\\t\\tvec2 uv;\\n\\t\\tif ( face == 0.0 ) {\\n\\t\\t\\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 1.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\\n\\t\\t} else if ( face == 2.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\\n\\t\\t} else if ( face == 3.0 ) {\\n\\t\\t\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 4.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\\n\\t\\t} else {\\n\\t\\t\\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\\n\\t\\t}\\n\\t\\treturn 0.5 * ( uv + 1.0 );\\n\\t}\\n\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\n\\t\\tfloat face = getFace( direction );\\n\\t\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\n\\t\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\n\\t\\tfloat faceSize = exp2( mipInt );\\n\\t\\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\\n\\t\\tif ( face > 2.0 ) {\\n\\t\\t\\tuv.y += faceSize;\\n\\t\\t\\tface -= 3.0;\\n\\t\\t}\\n\\t\\tuv.x += face * faceSize;\\n\\t\\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\\n\\t\\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\\n\\t\\tuv.x *= CUBEUV_TEXEL_WIDTH;\\n\\t\\tuv.y *= CUBEUV_TEXEL_HEIGHT;\\n\\t\\t#ifdef texture2DGradEXT\\n\\t\\t\\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\\n\\t\\t#else\\n\\t\\t\\treturn texture2D( envMap, uv ).rgb;\\n\\t\\t#endif\\n\\t}\\n\\t#define cubeUV_r0 1.0\\n\\t#define cubeUV_v0 0.339\\n\\t#define cubeUV_m0 - 2.0\\n\\t#define cubeUV_r1 0.8\\n\\t#define cubeUV_v1 0.276\\n\\t#define cubeUV_m1 - 1.0\\n\\t#define cubeUV_r4 0.4\\n\\t#define cubeUV_v4 0.046\\n\\t#define cubeUV_m4 2.0\\n\\t#define cubeUV_r5 0.305\\n\\t#define cubeUV_v5 0.016\\n\\t#define cubeUV_m5 3.0\\n\\t#define cubeUV_r6 0.21\\n\\t#define cubeUV_v6 0.0038\\n\\t#define cubeUV_m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= cubeUV_r1 ) {\\n\\t\\t\\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\\n\\t\\t} else if ( roughness >= cubeUV_r4 ) {\\n\\t\\t\\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\\n\\t\\t} else if ( roughness >= cubeUV_r5 ) {\\n\\t\\t\\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\\n\\t\\t} else if ( roughness >= cubeUV_r6 ) {\\n\\t\\t\\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\\n\\t\\t} else {\\n\\t\\t\\tmip = - 2.0 * log2( 1.16 * roughness );\\t\\t}\\n\\t\\treturn mip;\\n\\t}\\n\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\n\\t\\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\\n\\t\\tfloat mipF = fract( mip );\\n\\t\\tfloat mipInt = floor( mip );\\n\\t\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\n\\t\\tif ( mipF == 0.0 ) {\\n\\t\\t\\treturn vec4( color0, 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\n\\t\\t\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\n\\t\\t}\\n\\t}\\n#endif`,IE=`vec3 transformedNormal = objectNormal;\\n#ifdef USE_INSTANCING\\n\\tmat3 m = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\n\\ttransformedNormal = m * transformedNormal;\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif`,RE=`#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif`,LE=`#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\\n#endif`,NE=`#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif`,OE=`#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif`,DE=\\\"gl_FragColor = linearToOutputTexel( gl_FragColor );\\\",FE=`\\nconst mat3 LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = mat3(\\n\\tvec3( 0.8224621, 0.177538, 0.0 ),\\n\\tvec3( 0.0331941, 0.9668058, 0.0 ),\\n\\tvec3( 0.0170827, 0.0723974, 0.9105199 )\\n);\\nconst mat3 LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = mat3(\\n\\tvec3( 1.2249401, - 0.2249404, 0.0 ),\\n\\tvec3( - 0.0420569, 1.0420571, 0.0 ),\\n\\tvec3( - 0.0196376, - 0.0786361, 1.0982735 )\\n);\\nvec4 LinearSRGBToLinearDisplayP3( in vec4 value ) {\\n\\treturn vec4( value.rgb * LINEAR_SRGB_TO_LINEAR_DISPLAY_P3, value.a );\\n}\\nvec4 LinearDisplayP3ToLinearSRGB( in vec4 value ) {\\n\\treturn vec4( value.rgb * LINEAR_DISPLAY_P3_TO_LINEAR_SRGB, value.a );\\n}\\nvec4 LinearTransferOETF( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 sRGBTransferOETF( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\\n}\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 LinearTosRGB( in vec4 value ) {\\n\\treturn sRGBTransferOETF( value );\\n}`,UE=`#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvec3 cameraToFrag;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif`,BE=`#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\t\\n#endif`,zE=`#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif`,kE=`#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\t\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif`,GE=`#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif`,VE=`#ifdef USE_FOG\\n\\tvFogDepth = - mvPosition.z;\\n#endif`,HE=`#ifdef USE_FOG\\n\\tvarying float vFogDepth;\\n#endif`,WE=`#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif`,qE=`#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float vFogDepth;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif`,XE=`#ifdef USE_GRADIENTMAP\\n\\tuniform sampler2D gradientMap;\\n#endif\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\tfloat dotNL = dot( normal, lightDirection );\\n\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t#ifdef USE_GRADIENTMAP\\n\\t\\treturn vec3( texture2D( gradientMap, coord ).r );\\n\\t#else\\n\\t\\tvec2 fw = fwidth( coord ) * 0.5;\\n\\t\\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\\n\\t#endif\\n}`,YE=`#ifdef USE_LIGHTMAP\\n\\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\\n\\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\\n\\treflectedLight.indirectDiffuse += lightMapIrradiance;\\n#endif`,ZE=`#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif`,JE=`LambertMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularStrength = specularStrength;`,$E=`varying vec3 vViewPosition;\\nstruct LambertMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Lambert\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Lambert`,KE=`uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\n#if defined( USE_LIGHT_PROBES )\\n\\tuniform vec3 lightProbe[ 9 ];\\n#endif\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\n\\tfloat x = normal.x, y = normal.y, z = normal.z;\\n\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\n\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\n\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\n\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\n\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\n\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\n\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\n\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\n\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\n\\treturn result;\\n}\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\\n\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\treturn irradiance;\\n}\\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\t#if defined ( LEGACY_LIGHTS )\\n\\t\\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\\n\\t\\t\\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n\\t\\t}\\n\\t\\treturn 1.0;\\n\\t#else\\n\\t\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\t\\tif ( cutoffDistance > 0.0 ) {\\n\\t\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t\\t}\\n\\t\\treturn distanceFalloff;\\n\\t#endif\\n}\\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\\n\\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\\n\\t\\tlight.color = directionalLight.color;\\n\\t\\tlight.direction = directionalLight.direction;\\n\\t\\tlight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\\n\\t\\tvec3 lVector = pointLight.position - geometryPosition;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tlight.color = pointLight.color;\\n\\t\\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\\n\\t\\tvec3 lVector = spotLight.position - geometryPosition;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat angleCos = dot( light.direction, spotLight.direction );\\n\\t\\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\tif ( spotAttenuation > 0.0 ) {\\n\\t\\t\\tfloat lightDistance = length( lVector );\\n\\t\\t\\tlight.color = spotLight.color * spotAttenuation;\\n\\t\\t\\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t\\t} else {\\n\\t\\t\\tlight.color = vec3( 0.0 );\\n\\t\\t\\tlight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\\n\\t\\tfloat dotNL = dot( normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\treturn irradiance;\\n\\t}\\n#endif`,jE=`#ifdef USE_ENVMAP\\n\\tvec3 getIBLIrradiance( const in vec3 normal ) {\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\n\\t\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n\\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\tvec3 reflectVec = reflect( - viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\n\\t\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\\n\\t\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\t\\tvec3 bentNormal = cross( bitangent, viewDir );\\n\\t\\t\\t\\tbentNormal = normalize( cross( bentNormal, bitangent ) );\\n\\t\\t\\t\\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\\n\\t\\t\\t\\treturn getIBLRadiance( viewDir, bentNormal, roughness );\\n\\t\\t\\t#else\\n\\t\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t\\t#endif\\n\\t\\t}\\n\\t#endif\\n#endif`,QE=`ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;`,tM=`varying vec3 vViewPosition;\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon`,eM=`BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;`,nM=`varying vec3 vViewPosition;\\nstruct BlinnPhongMaterial {\\n\\tvec3 diffuseColor;\\n\\tvec3 specularColor;\\n\\tfloat specularShininess;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong`,rM=`PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\\nmaterial.roughness = min( material.roughness, 1.0 );\\n#ifdef IOR\\n\\tmaterial.ior = ior;\\n\\t#ifdef USE_SPECULAR\\n\\t\\tfloat specularIntensityFactor = specularIntensity;\\n\\t\\tvec3 specularColorFactor = specularColor;\\n\\t\\t#ifdef USE_SPECULAR_COLORMAP\\n\\t\\t\\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\\n\\t\\t#endif\\n\\t\\t#ifdef USE_SPECULAR_INTENSITYMAP\\n\\t\\t\\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\\n\\t\\t#endif\\n\\t\\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\\n\\t#else\\n\\t\\tfloat specularIntensityFactor = 1.0;\\n\\t\\tvec3 specularColorFactor = vec3( 1.0 );\\n\\t\\tmaterial.specularF90 = 1.0;\\n\\t#endif\\n\\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.specularF90 = 1.0;\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\tmaterial.clearcoatF0 = vec3( 0.04 );\\n\\tmaterial.clearcoatF90 = 1.0;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\\n\\t#endif\\n\\tmaterial.clearcoat = saturate( material.clearcoat );\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\n\\tmaterial.clearcoatRoughness += geometryRoughness;\\n\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tmaterial.iridescence = iridescence;\\n\\tmaterial.iridescenceIOR = iridescenceIOR;\\n\\t#ifdef USE_IRIDESCENCEMAP\\n\\t\\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\t\\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\\n\\t#else\\n\\t\\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\\n\\t#endif\\n#endif\\n#ifdef USE_SHEEN\\n\\tmaterial.sheenColor = sheenColor;\\n\\t#ifdef USE_SHEEN_COLORMAP\\n\\t\\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\\n\\t#endif\\n\\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\\n\\t#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\t\\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\\n\\t#endif\\n#endif\\n#ifdef USE_ANISOTROPY\\n\\t#ifdef USE_ANISOTROPYMAP\\n\\t\\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\\n\\t\\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\\n\\t\\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\\n\\t#else\\n\\t\\tvec2 anisotropyV = anisotropyVector;\\n\\t#endif\\n\\tmaterial.anisotropy = length( anisotropyV );\\n\\tanisotropyV /= material.anisotropy;\\n\\tmaterial.anisotropy = saturate( material.anisotropy );\\n\\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\\n\\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x - tbn[ 1 ] * anisotropyV.y;\\n\\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x + tbn[ 0 ] * anisotropyV.y;\\n#endif`,iM=`struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat roughness;\\n\\tvec3 specularColor;\\n\\tfloat specularF90;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat clearcoat;\\n\\t\\tfloat clearcoatRoughness;\\n\\t\\tvec3 clearcoatF0;\\n\\t\\tfloat clearcoatF90;\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tfloat iridescence;\\n\\t\\tfloat iridescenceIOR;\\n\\t\\tfloat iridescenceThickness;\\n\\t\\tvec3 iridescenceFresnel;\\n\\t\\tvec3 iridescenceF0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tvec3 sheenColor;\\n\\t\\tfloat sheenRoughness;\\n\\t#endif\\n\\t#ifdef IOR\\n\\t\\tfloat ior;\\n\\t#endif\\n\\t#ifdef USE_TRANSMISSION\\n\\t\\tfloat transmission;\\n\\t\\tfloat transmissionAlpha;\\n\\t\\tfloat thickness;\\n\\t\\tfloat attenuationDistance;\\n\\t\\tvec3 attenuationColor;\\n\\t#endif\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tfloat anisotropy;\\n\\t\\tfloat alphaT;\\n\\t\\tvec3 anisotropyT;\\n\\t\\tvec3 anisotropyB;\\n\\t#endif\\n};\\nvec3 clearcoatSpecular = vec3( 0.0 );\\nvec3 sheenSpecular = vec3( 0.0 );\\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\\n float x2 = x * x;\\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\\n}\\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\n#ifdef USE_ANISOTROPY\\n\\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\\n\\t\\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\\n\\t\\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\\n\\t\\tfloat v = 0.5 / ( gv + gl );\\n\\t\\treturn saturate(v);\\n\\t}\\n\\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\\n\\t\\tfloat a2 = alphaT * alphaB;\\n\\t\\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\\n\\t\\thighp float v2 = dot( v, v );\\n\\t\\tfloat w2 = a2 / v2;\\n\\t\\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\\n\\t}\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\\n\\t\\tvec3 f0 = material.clearcoatF0;\\n\\t\\tfloat f90 = material.clearcoatF90;\\n\\t\\tfloat roughness = material.clearcoatRoughness;\\n\\t\\tfloat alpha = pow2( roughness );\\n\\t\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\t\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\t\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\t\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\t\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\t\\tvec3 F = F_Schlick( f0, f90, dotVH );\\n\\t\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\t\\tfloat D = D_GGX( alpha, dotNH );\\n\\t\\treturn F * ( V * D );\\n\\t}\\n#endif\\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\\n\\tvec3 f0 = material.specularColor;\\n\\tfloat f90 = material.specularF90;\\n\\tfloat roughness = material.roughness;\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( f0, f90, dotVH );\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tF = mix( F, material.iridescenceFresnel, material.iridescence );\\n\\t#endif\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tfloat dotTL = dot( material.anisotropyT, lightDir );\\n\\t\\tfloat dotTV = dot( material.anisotropyT, viewDir );\\n\\t\\tfloat dotTH = dot( material.anisotropyT, halfDir );\\n\\t\\tfloat dotBL = dot( material.anisotropyB, lightDir );\\n\\t\\tfloat dotBV = dot( material.anisotropyB, viewDir );\\n\\t\\tfloat dotBH = dot( material.anisotropyB, halfDir );\\n\\t\\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\\n\\t\\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\\n\\t#else\\n\\t\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\t\\tfloat D = D_GGX( alpha, dotNH );\\n\\t#endif\\n\\treturn F * ( V * D );\\n}\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie( float roughness, float dotNH ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tfloat invAlpha = 1.0 / alpha;\\n\\tfloat cos2h = dotNH * dotNH;\\n\\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\\n\\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\\n}\\nfloat V_Neubelt( float dotNV, float dotNL ) {\\n\\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\\n}\\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat D = D_Charlie( sheenRoughness, dotNH );\\n\\tfloat V = V_Neubelt( dotNV, dotNL );\\n\\treturn sheenColor * ( D * V );\\n}\\n#endif\\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat r2 = roughness * roughness;\\n\\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\\n\\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\\n\\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\\n\\treturn saturate( DG * RECIPROCAL_PI );\\n}\\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\\n\\treturn fab;\\n}\\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\treturn specularColor * fab.x + specularF90 * fab.y;\\n}\\n#ifdef USE_IRIDESCENCE\\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n#else\\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n#endif\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\\n\\t#else\\n\\t\\tvec3 Fr = specularColor;\\n\\t#endif\\n\\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\\n\\tfloat Ess = fab.x + fab.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometryNormal;\\n\\t\\tvec3 viewDir = geometryViewDir;\\n\\t\\tvec3 position = geometryPosition;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.roughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3( 0, 1, 0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = dotNLcc * directLight.color;\\n\\t\\tclearcoatSpecular += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\\n\\t#endif\\n\\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\\n\\t#endif\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\\n\\t#else\\n\\t\\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\\n\\t#endif\\n\\tvec3 totalScattering = singleScattering + multiScattering;\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\\n\\treflectedLight.indirectSpecular += radiance * singleScattering;\\n\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\n\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}`,oM=`\\nvec3 geometryPosition = - vViewPosition;\\nvec3 geometryNormal = normal;\\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\nvec3 geometryClearcoatNormal;\\n#ifdef USE_CLEARCOAT\\n\\tgeometryClearcoatNormal = clearcoatNormal;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\\n\\tif ( material.iridescenceThickness == 0.0 ) {\\n\\t\\tmaterial.iridescence = 0.0;\\n\\t} else {\\n\\t\\tmaterial.iridescence = saturate( material.iridescence );\\n\\t}\\n\\tif ( material.iridescence > 0.0 ) {\\n\\t\\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\\n\\t\\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\\n\\t}\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointLightInfo( pointLight, geometryPosition, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\tvec4 spotColor;\\n\\tvec3 spotLightCoord;\\n\\tbool inSpotLightMap;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\\n\\t\\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\\n\\t\\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\\n\\t\\t#else\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\\n\\t\\t#endif\\n\\t\\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\\n\\t\\t\\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\\n\\t\\t\\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\\n\\t\\t\\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\\n\\t\\t\\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\\n\\t\\t#endif\\n\\t\\t#undef SPOT_LIGHT_MAP_INDEX\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalLightInfo( directionalLight, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 iblIrradiance = vec3( 0.0 );\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\t#if defined( USE_LIGHT_PROBES )\\n\\t\\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\\n\\t#endif\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearcoatRadiance = vec3( 0.0 );\\n#endif`,sM=`#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getIBLIrradiance( geometryNormal );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\\n\\t#else\\n\\t\\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\\n\\t#endif\\n#endif`,aM=`#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n#endif`,uM=`#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif`,lM=`#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif`,cM=`#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t\\tvarying float vIsPerspective;\\n\\t#else\\n\\t\\tuniform float logDepthBufFC;\\n\\t#endif\\n#endif`,fM=`#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n\\t#else\\n\\t\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\n\\t\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\t\\tgl_Position.z *= gl_Position.w;\\n\\t\\t}\\n\\t#endif\\n#endif`,hM=`#ifdef USE_MAP\\n\\tvec4 sampledDiffuseColor = texture2D( map, vMapUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\tsampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\\n\\t\\n\\t#endif\\n\\tdiffuseColor *= sampledDiffuseColor;\\n#endif`,pM=`#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif`,dM=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\t#if defined( USE_POINTS_UV )\\n\\t\\tvec2 uv = vUv;\\n\\t#else\\n\\t\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n\\t#endif\\n#endif\\n#ifdef USE_MAP\\n\\tdiffuseColor *= texture2D( map, uv );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif`,mM=`#if defined( USE_POINTS_UV )\\n\\tvarying vec2 vUv;\\n#else\\n\\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\t\\tuniform mat3 uvTransform;\\n\\t#endif\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif`,gM=`float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif`,yM=`#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif`,vM=`#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE )\\n\\tvColor *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t#if defined( USE_COLOR_ALPHA )\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\\n\\t\\t#elif defined( USE_COLOR )\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\\n\\t\\t#endif\\n\\t}\\n#endif`,_M=`#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\t\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\\n\\t\\t}\\n\\t#else\\n\\t\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\n\\t\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\n\\t\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\n\\t\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\n\\t#endif\\n#endif`,xM=`#ifdef USE_MORPHTARGETS\\n\\tuniform float morphTargetBaseInfluence;\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\t\\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\t\\tuniform sampler2DArray morphTargetsTexture;\\n\\t\\tuniform ivec2 morphTargetsTextureSize;\\n\\t\\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\\n\\t\\t\\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\\n\\t\\t\\tint y = texelIndex / morphTargetsTextureSize.x;\\n\\t\\t\\tint x = texelIndex - y * morphTargetsTextureSize.x;\\n\\t\\t\\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\\n\\t\\t\\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\\n\\t\\t}\\n\\t#else\\n\\t\\t#ifndef USE_MORPHNORMALS\\n\\t\\t\\tuniform float morphTargetInfluences[ 8 ];\\n\\t\\t#else\\n\\t\\t\\tuniform float morphTargetInfluences[ 4 ];\\n\\t\\t#endif\\n\\t#endif\\n#endif`,EM=`#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\t\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\\n\\t\\t}\\n\\t#else\\n\\t\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\n\\t\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\n\\t\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\n\\t\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\n\\t\\t#ifndef USE_MORPHNORMALS\\n\\t\\t\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\n\\t\\t\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\n\\t\\t\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\n\\t\\t\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\n\\t\\t#endif\\n\\t#endif\\n#endif`,MM=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n#ifdef FLAT_SHADED\\n\\tvec3 fdx = dFdx( vViewPosition );\\n\\tvec3 fdy = dFdy( vViewPosition );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal *= faceDirection;\\n\\t#endif\\n#endif\\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\\n\\t#ifdef USE_TANGENT\\n\\t\\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\\n\\t#else\\n\\t\\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\\n\\t\\t#if defined( USE_NORMALMAP )\\n\\t\\t\\tvNormalMapUv\\n\\t\\t#elif defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tvClearcoatNormalMapUv\\n\\t\\t#else\\n\\t\\t\\tvUv\\n\\t\\t#endif\\n\\t\\t);\\n\\t#endif\\n\\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\\n\\t\\ttbn[0] *= faceDirection;\\n\\t\\ttbn[1] *= faceDirection;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\t#ifdef USE_TANGENT\\n\\t\\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\\n\\t#else\\n\\t\\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\\n\\t#endif\\n\\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\\n\\t\\ttbn2[0] *= faceDirection;\\n\\t\\ttbn2[1] *= faceDirection;\\n\\t#endif\\n#endif\\nvec3 nonPerturbedNormal = normal;`,SM=`#ifdef USE_NORMALMAP_OBJECTSPACE\\n\\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\\n\\t#ifdef FLIP_SIDED\\n\\t\\tnormal = - normal;\\n\\t#endif\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\tnormal = normalize( normalMatrix * normal );\\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\tnormal = normalize( tbn * mapN );\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\\n#endif`,wM=`#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif`,bM=`#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif`,TM=`#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif`,AM=`#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef USE_NORMALMAP_OBJECTSPACE\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\\n\\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\\n\\t\\tvec3 q0 = dFdx( eye_pos.xyz );\\n\\t\\tvec3 q1 = dFdy( eye_pos.xyz );\\n\\t\\tvec2 st0 = dFdx( uv.st );\\n\\t\\tvec2 st1 = dFdy( uv.st );\\n\\t\\tvec3 N = surf_norm;\\n\\t\\tvec3 q1perp = cross( q1, N );\\n\\t\\tvec3 q0perp = cross( N, q0 );\\n\\t\\tvec3 T = q1perp * st0.x + q0perp * st1.x;\\n\\t\\tvec3 B = q1perp * st0.y + q0perp * st1.y;\\n\\t\\tfloat det = max( dot( T, T ), dot( B, B ) );\\n\\t\\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\\n\\t\\treturn mat3( T * scale, B * scale, N );\\n\\t}\\n#endif`,CM=`#ifdef USE_CLEARCOAT\\n\\tvec3 clearcoatNormal = nonPerturbedNormal;\\n#endif`,PM=`#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\\n#endif`,IM=`#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif`,RM=`#ifdef USE_IRIDESCENCEMAP\\n\\tuniform sampler2D iridescenceMap;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tuniform sampler2D iridescenceThicknessMap;\\n#endif`,LM=`#ifdef OPAQUE\\ndiffuseColor.a = 1.0;\\n#endif\\n#ifdef USE_TRANSMISSION\\ndiffuseColor.a *= material.transmissionAlpha;\\n#endif\\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );`,NM=`vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\nconst float ShiftRight8 = 1. / 256.;\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8;\\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\nvec2 packDepthToRG( in highp float v ) {\\n\\treturn packDepthToRGBA( v ).yx;\\n}\\nfloat unpackRGToDepth( const in highp vec2 v ) {\\n\\treturn unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) );\\n}\\nvec4 pack2HalfToRGBA( vec2 v ) {\\n\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\\n\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\\n}\\nvec2 unpackRGBATo2Half( vec4 v ) {\\n\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\\n\\treturn depth * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * depth - far );\\n}`,OM=`#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif`,DM=`vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;`,FM=`#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif`,UM=`#ifdef DITHERING\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif`,BM=`float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif`,zM=`#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif`,kM=`#if NUM_SPOT_LIGHT_COORDS > 0\\n\\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\\n#endif\\n#if NUM_SPOT_LIGHT_MAPS > 0\\n\\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\\n#endif\\n#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\n\\t\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\n\\t}\\n\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\n\\t\\tfloat occlusion = 1.0;\\n\\t\\tvec2 distribution = texture2DDistribution( shadow, uv );\\n\\t\\tfloat hard_shadow = step( compare , distribution.x );\\n\\t\\tif (hard_shadow != 1.0 ) {\\n\\t\\t\\tfloat distance = compare - distribution.x ;\\n\\t\\t\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\n\\t\\t\\tfloat softness_probability = variance / (variance + distance * distance );\\t\\t\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\\t\\t\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\n\\t\\t}\\n\\t\\treturn occlusion;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\\n\\t\\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn shadow;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif`,GM=`#if NUM_SPOT_LIGHT_COORDS > 0\\n\\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\\n\\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\\n#endif\\n#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n#endif`,VM=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\\n\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\tvec4 shadowWorldPosition;\\n#endif\\n#if defined( USE_SHADOWMAP )\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if NUM_SPOT_LIGHT_COORDS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition;\\n\\t\\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\t\\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\\n\\t\\t#endif\\n\\t\\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif`,HM=`float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}`,WM=`#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif`,qM=`#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\tuniform highp sampler2D boneTexture;\\n\\tuniform int boneTextureSize;\\n\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\tfloat j = i * 4.0;\\n\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\ty = dy * ( y + 0.5 );\\n\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\treturn bone;\\n\\t}\\n#endif`,XM=`#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif`,YM=`#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n\\t#ifdef USE_TANGENT\\n\\t\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#endif\\n#endif`,ZM=`float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif`,JM=`#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif`,$M=`#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif`,KM=`#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn saturate( toneMappingExposure * color );\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3( 1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108, 1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605, 1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }`,jM=`#ifdef USE_TRANSMISSION\\n\\tmaterial.transmission = transmission;\\n\\tmaterial.transmissionAlpha = 1.0;\\n\\tmaterial.thickness = thickness;\\n\\tmaterial.attenuationDistance = attenuationDistance;\\n\\tmaterial.attenuationColor = attenuationColor;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\\n\\t#endif\\n\\tvec3 pos = vWorldPosition;\\n\\tvec3 v = normalize( cameraPosition - pos );\\n\\tvec3 n = inverseTransformDirection( normal, viewMatrix );\\n\\tvec4 transmitted = getIBLVolumeRefraction(\\n\\t\\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\\n\\t\\tpos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness,\\n\\t\\tmaterial.attenuationColor, material.attenuationDistance );\\n\\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\\n\\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\\n#endif`,QM=`#ifdef USE_TRANSMISSION\\n\\tuniform float transmission;\\n\\tuniform float thickness;\\n\\tuniform float attenuationDistance;\\n\\tuniform vec3 attenuationColor;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tuniform sampler2D transmissionMap;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tuniform sampler2D thicknessMap;\\n\\t#endif\\n\\tuniform vec2 transmissionSamplerSize;\\n\\tuniform sampler2D transmissionSamplerMap;\\n\\tuniform mat4 modelMatrix;\\n\\tuniform mat4 projectionMatrix;\\n\\tvarying vec3 vWorldPosition;\\n\\tfloat w0( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\\n\\t}\\n\\tfloat w1( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\\n\\t}\\n\\tfloat w2( float a ){\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\\n\\t}\\n\\tfloat w3( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * a * a );\\n\\t}\\n\\tfloat g0( float a ) {\\n\\t\\treturn w0( a ) + w1( a );\\n\\t}\\n\\tfloat g1( float a ) {\\n\\t\\treturn w2( a ) + w3( a );\\n\\t}\\n\\tfloat h0( float a ) {\\n\\t\\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\\n\\t}\\n\\tfloat h1( float a ) {\\n\\t\\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\\n\\t}\\n\\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\\n\\t\\tuv = uv * texelSize.zw + 0.5;\\n\\t\\tvec2 iuv = floor( uv );\\n\\t\\tvec2 fuv = fract( uv );\\n\\t\\tfloat g0x = g0( fuv.x );\\n\\t\\tfloat g1x = g1( fuv.x );\\n\\t\\tfloat h0x = h0( fuv.x );\\n\\t\\tfloat h1x = h1( fuv.x );\\n\\t\\tfloat h0y = h0( fuv.y );\\n\\t\\tfloat h1y = h1( fuv.y );\\n\\t\\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\\n\\t\\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\\n\\t\\t\\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\\n\\t}\\n\\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\\n\\t\\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\\n\\t\\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\\n\\t\\tvec2 fLodSizeInv = 1.0 / fLodSize;\\n\\t\\tvec2 cLodSizeInv = 1.0 / cLodSize;\\n\\t\\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\\n\\t\\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\\n\\t\\treturn mix( fSample, cSample, fract( lod ) );\\n\\t}\\n\\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\\n\\t\\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\\n\\t\\tvec3 modelScale;\\n\\t\\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\\n\\t\\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\\n\\t\\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\\n\\t\\treturn normalize( refractionVector ) * thickness * modelScale;\\n\\t}\\n\\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\\n\\t\\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\\n\\t}\\n\\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\\n\\t\\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\\n\\t\\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\\n\\t}\\n\\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tif ( isinf( attenuationDistance ) ) {\\n\\t\\t\\treturn vec3( 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\\n\\t\\t\\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\\t\\t\\treturn transmittance;\\n\\t\\t}\\n\\t}\\n\\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\\n\\t\\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\\n\\t\\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,\\n\\t\\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\\n\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\trefractionCoords += 1.0;\\n\\t\\trefractionCoords /= 2.0;\\n\\t\\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\\n\\t\\tvec3 transmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\\n\\t\\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\\n\\t\\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\\n\\t\\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\\n\\t\\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\\n\\t}\\n#endif`,tS=`#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvarying vec2 vUv;\\n#endif\\n#ifdef USE_MAP\\n\\tvarying vec2 vMapUv;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tvarying vec2 vAlphaMapUv;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tvarying vec2 vLightMapUv;\\n#endif\\n#ifdef USE_AOMAP\\n\\tvarying vec2 vAoMapUv;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tvarying vec2 vBumpMapUv;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tvarying vec2 vNormalMapUv;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tvarying vec2 vEmissiveMapUv;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tvarying vec2 vMetalnessMapUv;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tvarying vec2 vRoughnessMapUv;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tvarying vec2 vAnisotropyMapUv;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tvarying vec2 vClearcoatMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvarying vec2 vClearcoatNormalMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tvarying vec2 vClearcoatRoughnessMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tvarying vec2 vIridescenceMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tvarying vec2 vIridescenceThicknessMapUv;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tvarying vec2 vSheenColorMapUv;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tvarying vec2 vSheenRoughnessMapUv;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tvarying vec2 vSpecularMapUv;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tvarying vec2 vSpecularColorMapUv;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tvarying vec2 vSpecularIntensityMapUv;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tuniform mat3 transmissionMapTransform;\\n\\tvarying vec2 vTransmissionMapUv;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tuniform mat3 thicknessMapTransform;\\n\\tvarying vec2 vThicknessMapUv;\\n#endif`,eS=`#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvarying vec2 vUv;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform mat3 mapTransform;\\n\\tvarying vec2 vMapUv;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform mat3 alphaMapTransform;\\n\\tvarying vec2 vAlphaMapUv;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tuniform mat3 lightMapTransform;\\n\\tvarying vec2 vLightMapUv;\\n#endif\\n#ifdef USE_AOMAP\\n\\tuniform mat3 aoMapTransform;\\n\\tvarying vec2 vAoMapUv;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tuniform mat3 bumpMapTransform;\\n\\tvarying vec2 vBumpMapUv;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tuniform mat3 normalMapTransform;\\n\\tvarying vec2 vNormalMapUv;\\n#endif\\n#ifdef USE_DISPLACEMENTMAP\\n\\tuniform mat3 displacementMapTransform;\\n\\tvarying vec2 vDisplacementMapUv;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tuniform mat3 emissiveMapTransform;\\n\\tvarying vec2 vEmissiveMapUv;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tuniform mat3 metalnessMapTransform;\\n\\tvarying vec2 vMetalnessMapUv;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tuniform mat3 roughnessMapTransform;\\n\\tvarying vec2 vRoughnessMapUv;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tuniform mat3 anisotropyMapTransform;\\n\\tvarying vec2 vAnisotropyMapUv;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tuniform mat3 clearcoatMapTransform;\\n\\tvarying vec2 vClearcoatMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform mat3 clearcoatNormalMapTransform;\\n\\tvarying vec2 vClearcoatNormalMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform mat3 clearcoatRoughnessMapTransform;\\n\\tvarying vec2 vClearcoatRoughnessMapUv;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tuniform mat3 sheenColorMapTransform;\\n\\tvarying vec2 vSheenColorMapUv;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tuniform mat3 sheenRoughnessMapTransform;\\n\\tvarying vec2 vSheenRoughnessMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tuniform mat3 iridescenceMapTransform;\\n\\tvarying vec2 vIridescenceMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tuniform mat3 iridescenceThicknessMapTransform;\\n\\tvarying vec2 vIridescenceThicknessMapUv;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tuniform mat3 specularMapTransform;\\n\\tvarying vec2 vSpecularMapUv;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tuniform mat3 specularColorMapTransform;\\n\\tvarying vec2 vSpecularColorMapUv;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tuniform mat3 specularIntensityMapTransform;\\n\\tvarying vec2 vSpecularIntensityMapUv;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tuniform mat3 transmissionMapTransform;\\n\\tvarying vec2 vTransmissionMapUv;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tuniform mat3 thicknessMapTransform;\\n\\tvarying vec2 vThicknessMapUv;\\n#endif`,nS=`#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvUv = vec3( uv, 1 ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_AOMAP\\n\\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_DISPLACEMENTMAP\\n\\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\\n#endif`,rS=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif`,iS=`varying vec2 vUv;\\nuniform mat3 uvTransform;\\nvoid main() {\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\n}`,oS=`uniform sampler2D t2D;\\nuniform float backgroundIntensity;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\\n\\t#endif\\n\\ttexColor.rgb *= backgroundIntensity;\\n\\tgl_FragColor = texColor;\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n}`,sS=`varying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\tgl_Position.z = gl_Position.w;\\n}`,aS=`#ifdef ENVMAP_TYPE_CUBE\\n\\tuniform samplerCube envMap;\\n#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\tuniform sampler2D envMap;\\n#endif\\nuniform float flipEnvMap;\\nuniform float backgroundBlurriness;\\nuniform float backgroundIntensity;\\nvarying vec3 vWorldDirection;\\n#include <cube_uv_reflection_fragment>\\nvoid main() {\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 texColor = textureCube( envMap, vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 texColor = textureCubeUV( envMap, vWorldDirection, backgroundBlurriness );\\n\\t#else\\n\\t\\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\t#endif\\n\\ttexColor.rgb *= backgroundIntensity;\\n\\tgl_FragColor = texColor;\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n}`,uS=`varying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\tgl_Position.z = gl_Position.w;\\n}`,lS=`uniform samplerCube tCube;\\nuniform float tFlip;\\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\nvoid main() {\\n\\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\\n\\tgl_FragColor = texColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n}`,cS=`#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvHighPrecisionZW = gl_Position.zw;\\n}`,fS=`#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\n\\t#endif\\n}`,hS=`#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvWorldPosition = worldPosition.xyz;\\n}`,pS=`#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main () {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}`,dS=`varying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n}`,mS=`uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n}`,gS=`uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <morphcolor_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n}`,yS=`uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include <opaque_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n}`,vS=`#include <common>\\n#include <uv_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <morphcolor_vertex>\\n\\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinbase_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t\\t#include <defaultnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <fog_vertex>\\n}`,_S=`uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\t#include <specularmap_fragment>\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include <aomap_fragment>\\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include <envmap_fragment>\\n\\t#include <opaque_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}`,xS=`#define LAMBERT\\nvarying vec3 vViewPosition;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <normal_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <morphcolor_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <normal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}`,ES=`#define LAMBERT\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <normal_pars_fragment>\\n#include <lights_lambert_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_lambert_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\t#include <opaque_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}`,MS=`#define MATCAP\\nvarying vec3 vViewPosition;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <color_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <normal_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <morphcolor_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <normal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n}`,SS=`#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <normal_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\t#include <opaque_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}`,wS=`#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <normal_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <normal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}`,bS=`#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <normal_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n\\t#ifdef OPAQUE\\n\\t\\tgl_FragColor.a = 1.0;\\n\\t#endif\\n}`,TS=`#define PHONG\\nvarying vec3 vViewPosition;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <normal_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <morphcolor_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <normal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}`,AS=`#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <normal_pars_fragment>\\n#include <lights_phong_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_phong_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\t#include <opaque_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}`,CS=`#define STANDARD\\nvarying vec3 vViewPosition;\\n#ifdef USE_TRANSMISSION\\n\\tvarying vec3 vWorldPosition;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <normal_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <morphcolor_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <normal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n#ifdef USE_TRANSMISSION\\n\\tvWorldPosition = worldPosition.xyz;\\n#endif\\n}`,PS=`#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define IOR\\n\\t#define USE_SPECULAR\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef IOR\\n\\tuniform float ior;\\n#endif\\n#ifdef USE_SPECULAR\\n\\tuniform float specularIntensity;\\n\\tuniform vec3 specularColor;\\n\\t#ifdef USE_SPECULAR_COLORMAP\\n\\t\\tuniform sampler2D specularColorMap;\\n\\t#endif\\n\\t#ifdef USE_SPECULAR_INTENSITYMAP\\n\\t\\tuniform sampler2D specularIntensityMap;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tuniform float iridescence;\\n\\tuniform float iridescenceIOR;\\n\\tuniform float iridescenceThicknessMinimum;\\n\\tuniform float iridescenceThicknessMaximum;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheenColor;\\n\\tuniform float sheenRoughness;\\n\\t#ifdef USE_SHEEN_COLORMAP\\n\\t\\tuniform sampler2D sheenColorMap;\\n\\t#endif\\n\\t#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\t\\tuniform sampler2D sheenRoughnessMap;\\n\\t#endif\\n#endif\\n#ifdef USE_ANISOTROPY\\n\\tuniform vec2 anisotropyVector;\\n\\t#ifdef USE_ANISOTROPYMAP\\n\\t\\tuniform sampler2D anisotropyMap;\\n\\t#endif\\n#endif\\nvarying vec3 vViewPosition;\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <iridescence_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_physical_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <lights_pars_begin>\\n#include <normal_pars_fragment>\\n#include <lights_physical_pars_fragment>\\n#include <transmission_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <clearcoat_pars_fragment>\\n#include <iridescence_pars_fragment>\\n#include <roughnessmap_pars_fragment>\\n#include <metalnessmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\t#include <roughnessmap_fragment>\\n\\t#include <metalnessmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <clearcoat_normal_fragment_begin>\\n\\t#include <clearcoat_normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_physical_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\\n\\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\\n\\t#include <transmission_fragment>\\n\\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\\n\\t#ifdef USE_SHEEN\\n\\t\\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\\n\\t\\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\\n\\t\\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\\n\\t\\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\\n\\t#endif\\n\\t#include <opaque_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}`,IS=`#define TOON\\nvarying vec3 vViewPosition;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <normal_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <morphcolor_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <normal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}`,RS=`#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <gradientmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <normal_pars_fragment>\\n#include <lights_toon_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_toon_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include <opaque_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}`,LS=`uniform float size;\\nuniform float scale;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\n#ifdef USE_POINTS_UV\\n\\tvarying vec2 vUv;\\n\\tuniform mat3 uvTransform;\\n#endif\\nvoid main() {\\n\\t#ifdef USE_POINTS_UV\\n\\t\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\t#endif\\n\\t#include <color_vertex>\\n\\t#include <morphcolor_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <project_vertex>\\n\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <fog_vertex>\\n}`,NS=`uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <map_particle_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_particle_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include <opaque_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n}`,OS=`#include <common>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <shadowmap_pars_vertex>\\nvoid main() {\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}`,DS=`uniform vec3 color;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <logdepthbuf_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\nvoid main() {\\n\\t#include <logdepthbuf_fragment>\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n}`,FS=`uniform float rotation;\\nuniform vec2 center;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n}`,US=`uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <alphatest_pars_fragment>\\n#include <alphahash_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <alphahash_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include <opaque_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <colorspace_fragment>\\n\\t#include <fog_fragment>\\n}`,ge={alphahash_fragment:aE,alphahash_pars_fragment:uE,alphamap_fragment:lE,alphamap_pars_fragment:cE,alphatest_fragment:fE,alphatest_pars_fragment:hE,aomap_fragment:pE,aomap_pars_fragment:dE,begin_vertex:mE,beginnormal_vertex:gE,bsdfs:yE,iridescence_fragment:vE,bumpmap_pars_fragment:_E,clipping_planes_fragment:xE,clipping_planes_pars_fragment:EE,clipping_planes_pars_vertex:ME,clipping_planes_vertex:SE,color_fragment:wE,color_pars_fragment:bE,color_pars_vertex:TE,color_vertex:AE,common:CE,cube_uv_reflection_fragment:PE,defaultnormal_vertex:IE,displacementmap_pars_vertex:RE,displacementmap_vertex:LE,emissivemap_fragment:NE,emissivemap_pars_fragment:OE,colorspace_fragment:DE,colorspace_pars_fragment:FE,envmap_fragment:UE,envmap_common_pars_fragment:BE,envmap_pars_fragment:zE,envmap_pars_vertex:kE,envmap_physical_pars_fragment:jE,envmap_vertex:GE,fog_vertex:VE,fog_pars_vertex:HE,fog_fragment:WE,fog_pars_fragment:qE,gradientmap_pars_fragment:XE,lightmap_fragment:YE,lightmap_pars_fragment:ZE,lights_lambert_fragment:JE,lights_lambert_pars_fragment:$E,lights_pars_begin:KE,lights_toon_fragment:QE,lights_toon_pars_fragment:tM,lights_phong_fragment:eM,lights_phong_pars_fragment:nM,lights_physical_fragment:rM,lights_physical_pars_fragment:iM,lights_fragment_begin:oM,lights_fragment_maps:sM,lights_fragment_end:aM,logdepthbuf_fragment:uM,logdepthbuf_pars_fragment:lM,logdepthbuf_pars_vertex:cM,logdepthbuf_vertex:fM,map_fragment:hM,map_pars_fragment:pM,map_particle_fragment:dM,map_particle_pars_fragment:mM,metalnessmap_fragment:gM,metalnessmap_pars_fragment:yM,morphcolor_vertex:vM,morphnormal_vertex:_M,morphtarget_pars_vertex:xM,morphtarget_vertex:EM,normal_fragment_begin:MM,normal_fragment_maps:SM,normal_pars_fragment:wM,normal_pars_vertex:bM,normal_vertex:TM,normalmap_pars_fragment:AM,clearcoat_normal_fragment_begin:CM,clearcoat_normal_fragment_maps:PM,clearcoat_pars_fragment:IM,iridescence_pars_fragment:RM,opaque_fragment:LM,packing:NM,premultiplied_alpha_fragment:OM,project_vertex:DM,dithering_fragment:FM,dithering_pars_fragment:UM,roughnessmap_fragment:BM,roughnessmap_pars_fragment:zM,shadowmap_pars_fragment:kM,shadowmap_pars_vertex:GM,shadowmap_vertex:VM,shadowmask_pars_fragment:HM,skinbase_vertex:WM,skinning_pars_vertex:qM,skinning_vertex:XM,skinnormal_vertex:YM,specularmap_fragment:ZM,specularmap_pars_fragment:JM,tonemapping_fragment:$M,tonemapping_pars_fragment:KM,transmission_fragment:jM,transmission_pars_fragment:QM,uv_pars_fragment:tS,uv_pars_vertex:eS,uv_vertex:nS,worldpos_vertex:rS,background_vert:iS,background_frag:oS,backgroundCube_vert:sS,backgroundCube_frag:aS,cube_vert:uS,cube_frag:lS,depth_vert:cS,depth_frag:fS,distanceRGBA_vert:hS,distanceRGBA_frag:pS,equirect_vert:dS,equirect_frag:mS,linedashed_vert:gS,linedashed_frag:yS,meshbasic_vert:vS,meshbasic_frag:_S,meshlambert_vert:xS,meshlambert_frag:ES,meshmatcap_vert:MS,meshmatcap_frag:SS,meshnormal_vert:wS,meshnormal_frag:bS,meshphong_vert:TS,meshphong_frag:AS,meshphysical_vert:CS,meshphysical_frag:PS,meshtoon_vert:IS,meshtoon_frag:RS,points_vert:LS,points_frag:NS,shadow_vert:OS,shadow_frag:DS,sprite_vert:FS,sprite_frag:US},zt={common:{diffuse:{value:new xn(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new ve},alphaMap:{value:null},alphaMapTransform:{value:new ve},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new ve}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new ve}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new ve}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new ve},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new ve},normalScale:{value:new fn(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new ve},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new ve}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new ve}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new ve}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new xn(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new xn(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new ve},alphaTest:{value:0},uvTransform:{value:new ve}},sprite:{diffuse:{value:new xn(16777215)},opacity:{value:1},center:{value:new fn(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new ve},alphaMap:{value:null},alphaMapTransform:{value:new ve},alphaTest:{value:0}}},co={basic:{uniforms:Jr([zt.common,zt.specularmap,zt.envmap,zt.aomap,zt.lightmap,zt.fog]),vertexShader:ge.meshbasic_vert,fragmentShader:ge.meshbasic_frag},lambert:{uniforms:Jr([zt.common,zt.specularmap,zt.envmap,zt.aomap,zt.lightmap,zt.emissivemap,zt.bumpmap,zt.normalmap,zt.displacementmap,zt.fog,zt.lights,{emissive:{value:new xn(0)}}]),vertexShader:ge.meshlambert_vert,fragmentShader:ge.meshlambert_frag},phong:{uniforms:Jr([zt.common,zt.specularmap,zt.envmap,zt.aomap,zt.lightmap,zt.emissivemap,zt.bumpmap,zt.normalmap,zt.displacementmap,zt.fog,zt.lights,{emissive:{value:new xn(0)},specular:{value:new xn(1118481)},shininess:{value:30}}]),vertexShader:ge.meshphong_vert,fragmentShader:ge.meshphong_frag},standard:{uniforms:Jr([zt.common,zt.envmap,zt.aomap,zt.lightmap,zt.emissivemap,zt.bumpmap,zt.normalmap,zt.displacementmap,zt.roughnessmap,zt.metalnessmap,zt.fog,zt.lights,{emissive:{value:new xn(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:ge.meshphysical_vert,fragmentShader:ge.meshphysical_frag},toon:{uniforms:Jr([zt.common,zt.aomap,zt.lightmap,zt.emissivemap,zt.bumpmap,zt.normalmap,zt.displacementmap,zt.gradientmap,zt.fog,zt.lights,{emissive:{value:new xn(0)}}]),vertexShader:ge.meshtoon_vert,fragmentShader:ge.meshtoon_frag},matcap:{uniforms:Jr([zt.common,zt.bumpmap,zt.normalmap,zt.displacementmap,zt.fog,{matcap:{value:null}}]),vertexShader:ge.meshmatcap_vert,fragmentShader:ge.meshmatcap_frag},points:{uniforms:Jr([zt.points,zt.fog]),vertexShader:ge.points_vert,fragmentShader:ge.points_frag},dashed:{uniforms:Jr([zt.common,zt.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:ge.linedashed_vert,fragmentShader:ge.linedashed_frag},depth:{uniforms:Jr([zt.common,zt.displacementmap]),vertexShader:ge.depth_vert,fragmentShader:ge.depth_frag},normal:{uniforms:Jr([zt.common,zt.bumpmap,zt.normalmap,zt.displacementmap,{opacity:{value:1}}]),vertexShader:ge.meshnormal_vert,fragmentShader:ge.meshnormal_frag},sprite:{uniforms:Jr([zt.sprite,zt.fog]),vertexShader:ge.sprite_vert,fragmentShader:ge.sprite_frag},background:{uniforms:{uvTransform:{value:new ve},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:ge.background_vert,fragmentShader:ge.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1}},vertexShader:ge.backgroundCube_vert,fragmentShader:ge.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:ge.cube_vert,fragmentShader:ge.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:ge.equirect_vert,fragmentShader:ge.equirect_frag},distanceRGBA:{uniforms:Jr([zt.common,zt.displacementmap,{referencePosition:{value:new mt},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:ge.distanceRGBA_vert,fragmentShader:ge.distanceRGBA_frag},shadow:{uniforms:Jr([zt.lights,zt.fog,{color:{value:new xn(0)},opacity:{value:1}}]),vertexShader:ge.shadow_vert,fragmentShader:ge.shadow_frag}};co.physical={uniforms:Jr([co.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new ve},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new ve},clearcoatNormalScale:{value:new fn(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new ve},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new ve},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new ve},sheen:{value:0},sheenColor:{value:new xn(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new ve},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new ve},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new ve},transmissionSamplerSize:{value:new fn},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new ve},attenuationDistance:{value:0},attenuationColor:{value:new xn(0)},specularColor:{value:new xn(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new ve},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new ve},anisotropyVector:{value:new fn},anisotropyMap:{value:null},anisotropyMapTransform:{value:new ve}}]),vertexShader:ge.meshphysical_vert,fragmentShader:ge.meshphysical_frag};var ql={r:0,b:0,g:0};function BS(r,t,e,o,a,l,f){let h=new xn(0),p=l===!0?0:1,d,g,_=null,y=0,M=null;function w(x,v){let C=!1,S=v.isScene===!0?v.background:null;S&&S.isTexture&&(S=(v.backgroundBlurriness>0?e:t).get(S)),S===null?T(h,p):S&&S.isColor&&(T(S,1),C=!0);let O=r.xr.getEnvironmentBlendMode();O===\\\"additive\\\"?o.buffers.color.setClear(0,0,0,1,f):O===\\\"alpha-blend\\\"&&o.buffers.color.setClear(0,0,0,0,f),(r.autoClear||C)&&r.clear(r.autoClearColor,r.autoClearDepth,r.autoClearStencil),S&&(S.isCubeTexture||S.mapping===pc)?(g===void 0&&(g=new fo(new zu(1,1,1),new Zo({name:\\\"BackgroundCubeMaterial\\\",uniforms:qa(co.backgroundCube.uniforms),vertexShader:co.backgroundCube.vertexShader,fragmentShader:co.backgroundCube.fragmentShader,side:li,depthTest:!1,depthWrite:!1,fog:!1})),g.geometry.deleteAttribute(\\\"normal\\\"),g.geometry.deleteAttribute(\\\"uv\\\"),g.onBeforeRender=function(F,G,z){this.matrixWorld.copyPosition(z.matrixWorld)},Object.defineProperty(g.material,\\\"envMap\\\",{get:function(){return this.uniforms.envMap.value}}),a.update(g)),g.material.uniforms.envMap.value=S,g.material.uniforms.flipEnvMap.value=S.isCubeTexture&&S.isRenderTargetTexture===!1?-1:1,g.material.uniforms.backgroundBlurriness.value=v.backgroundBlurriness,g.material.uniforms.backgroundIntensity.value=v.backgroundIntensity,g.material.toneMapped=gn.getTransfer(S.colorSpace)!==Tn,(_!==S||y!==S.version||M!==r.toneMapping)&&(g.material.needsUpdate=!0,_=S,y=S.version,M=r.toneMapping),g.layers.enableAll(),x.unshift(g,g.geometry,g.material,0,0,null)):S&&S.isTexture&&(d===void 0&&(d=new fo(new Eh(2,2),new Zo({name:\\\"BackgroundMaterial\\\",uniforms:qa(co.background.uniforms),vertexShader:co.background.vertexShader,fragmentShader:co.background.fragmentShader,side:ms,depthTest:!1,depthWrite:!1,fog:!1})),d.geometry.deleteAttribute(\\\"normal\\\"),Object.defineProperty(d.material,\\\"map\\\",{get:function(){return this.uniforms.t2D.value}}),a.update(d)),d.material.uniforms.t2D.value=S,d.material.uniforms.backgroundIntensity.value=v.backgroundIntensity,d.material.toneMapped=gn.getTransfer(S.colorSpace)!==Tn,S.matrixAutoUpdate===!0&&S.updateMatrix(),d.material.uniforms.uvTransform.value.copy(S.matrix),(_!==S||y!==S.version||M!==r.toneMapping)&&(d.material.needsUpdate=!0,_=S,y=S.version,M=r.toneMapping),d.layers.enableAll(),x.unshift(d,d.geometry,d.material,0,0,null))}function T(x,v){x.getRGB(ql,Zg(r)),o.buffers.color.setClear(ql.r,ql.g,ql.b,v,f)}return{getClearColor:function(){return h},setClearColor:function(x,v=1){h.set(x),p=v,T(h,p)},getClearAlpha:function(){return p},setClearAlpha:function(x){p=x,T(h,p)},render:w}}function zS(r,t,e,o){let a=r.getParameter(r.MAX_VERTEX_ATTRIBS),l=o.isWebGL2?null:t.get(\\\"OES_vertex_array_object\\\"),f=o.isWebGL2||l!==null,h={},p=x(null),d=p,g=!1;function _(X,it,vt,pt,et){let ot=!1;if(f){let V=T(pt,vt,it);d!==V&&(d=V,M(d.object)),ot=v(X,pt,vt,et),ot&&C(X,pt,vt,et)}else{let V=it.wireframe===!0;(d.geometry!==pt.id||d.program!==vt.id||d.wireframe!==V)&&(d.geometry=pt.id,d.program=vt.id,d.wireframe=V,ot=!0)}et!==null&&e.update(et,r.ELEMENT_ARRAY_BUFFER),(ot||g)&&(g=!1,L(X,it,vt,pt),et!==null&&r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,e.get(et).buffer))}function y(){return o.isWebGL2?r.createVertexArray():l.createVertexArrayOES()}function M(X){return o.isWebGL2?r.bindVertexArray(X):l.bindVertexArrayOES(X)}function w(X){return o.isWebGL2?r.deleteVertexArray(X):l.deleteVertexArrayOES(X)}function T(X,it,vt){let pt=vt.wireframe===!0,et=h[X.id];et===void 0&&(et={},h[X.id]=et);let ot=et[it.id];ot===void 0&&(ot={},et[it.id]=ot);let V=ot[pt];return V===void 0&&(V=x(y()),ot[pt]=V),V}function x(X){let it=[],vt=[],pt=[];for(let et=0;et<a;et++)it[et]=0,vt[et]=0,pt[et]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:it,enabledAttributes:vt,attributeDivisors:pt,object:X,attributes:{},index:null}}function v(X,it,vt,pt){let et=d.attributes,ot=it.attributes,V=0,K=vt.getAttributes();for(let at in K)if(K[at].location>=0){let dt=et[at],Ct=ot[at];if(Ct===void 0&&(at===\\\"instanceMatrix\\\"&&X.instanceMatrix&&(Ct=X.instanceMatrix),at===\\\"instanceColor\\\"&&X.instanceColor&&(Ct=X.instanceColor)),dt===void 0||dt.attribute!==Ct||Ct&&dt.data!==Ct.data)return!0;V++}return d.attributesNum!==V||d.index!==pt}function C(X,it,vt,pt){let et={},ot=it.attributes,V=0,K=vt.getAttributes();for(let at in K)if(K[at].location>=0){let dt=ot[at];dt===void 0&&(at===\\\"instanceMatrix\\\"&&X.instanceMatrix&&(dt=X.instanceMatrix),at===\\\"instanceColor\\\"&&X.instanceColor&&(dt=X.instanceColor));let Ct={};Ct.attribute=dt,dt&&dt.data&&(Ct.data=dt.data),et[at]=Ct,V++}d.attributes=et,d.attributesNum=V,d.index=pt}function S(){let X=d.newAttributes;for(let it=0,vt=X.length;it<vt;it++)X[it]=0}function O(X){F(X,0)}function F(X,it){let vt=d.newAttributes,pt=d.enabledAttributes,et=d.attributeDivisors;vt[X]=1,pt[X]===0&&(r.enableVertexAttribArray(X),pt[X]=1),et[X]!==it&&((o.isWebGL2?r:t.get(\\\"ANGLE_instanced_arrays\\\"))[o.isWebGL2?\\\"vertexAttribDivisor\\\":\\\"vertexAttribDivisorANGLE\\\"](X,it),et[X]=it)}function G(){let X=d.newAttributes,it=d.enabledAttributes;for(let vt=0,pt=it.length;vt<pt;vt++)it[vt]!==X[vt]&&(r.disableVertexAttribArray(vt),it[vt]=0)}function z(X,it,vt,pt,et,ot,V){V===!0?r.vertexAttribIPointer(X,it,vt,et,ot):r.vertexAttribPointer(X,it,vt,pt,et,ot)}function L(X,it,vt,pt){if(o.isWebGL2===!1&&(X.isInstancedMesh||pt.isInstancedBufferGeometry)&&t.get(\\\"ANGLE_instanced_arrays\\\")===null)return;S();let et=pt.attributes,ot=vt.getAttributes(),V=it.defaultAttributeValues;for(let K in ot){let at=ot[K];if(at.location>=0){let Tt=et[K];if(Tt===void 0&&(K===\\\"instanceMatrix\\\"&&X.instanceMatrix&&(Tt=X.instanceMatrix),K===\\\"instanceColor\\\"&&X.instanceColor&&(Tt=X.instanceColor)),Tt!==void 0){let dt=Tt.normalized,Ct=Tt.itemSize,Yt=e.get(Tt);if(Yt===void 0)continue;let Wt=Yt.buffer,Nt=Yt.type,ne=Yt.bytesPerElement,Pt=o.isWebGL2===!0&&(Nt===r.INT||Nt===r.UNSIGNED_INT||Tt.gpuType===zg);if(Tt.isInterleavedBufferAttribute){let Xt=Tt.data,tt=Xt.stride,nn=Tt.offset;if(Xt.isInstancedInterleavedBuffer){for(let Gt=0;Gt<at.locationSize;Gt++)F(at.location+Gt,Xt.meshPerAttribute);X.isInstancedMesh!==!0&&pt._maxInstanceCount===void 0&&(pt._maxInstanceCount=Xt.meshPerAttribute*Xt.count)}else for(let Gt=0;Gt<at.locationSize;Gt++)O(at.location+Gt);r.bindBuffer(r.ARRAY_BUFFER,Wt);for(let Gt=0;Gt<at.locationSize;Gt++)z(at.location+Gt,Ct/at.locationSize,Nt,dt,tt*ne,(nn+Ct/at.locationSize*Gt)*ne,Pt)}else{if(Tt.isInstancedBufferAttribute){for(let Xt=0;Xt<at.locationSize;Xt++)F(at.location+Xt,Tt.meshPerAttribute);X.isInstancedMesh!==!0&&pt._maxInstanceCount===void 0&&(pt._maxInstanceCount=Tt.meshPerAttribute*Tt.count)}else for(let Xt=0;Xt<at.locationSize;Xt++)O(at.location+Xt);r.bindBuffer(r.ARRAY_BUFFER,Wt);for(let Xt=0;Xt<at.locationSize;Xt++)z(at.location+Xt,Ct/at.locationSize,Nt,dt,Ct*ne,Ct/at.locationSize*Xt*ne,Pt)}}else if(V!==void 0){let dt=V[K];if(dt!==void 0)switch(dt.length){case 2:r.vertexAttrib2fv(at.location,dt);break;case 3:r.vertexAttrib3fv(at.location,dt);break;case 4:r.vertexAttrib4fv(at.location,dt);break;default:r.vertexAttrib1fv(at.location,dt)}}}}G()}function D(){k();for(let X in h){let it=h[X];for(let vt in it){let pt=it[vt];for(let et in pt)w(pt[et].object),delete pt[et];delete it[vt]}delete h[X]}}function q(X){if(h[X.id]===void 0)return;let it=h[X.id];for(let vt in it){let pt=it[vt];for(let et in pt)w(pt[et].object),delete pt[et];delete it[vt]}delete h[X.id]}function nt(X){for(let it in h){let vt=h[it];if(vt[X.id]===void 0)continue;let pt=vt[X.id];for(let et in pt)w(pt[et].object),delete pt[et];delete vt[X.id]}}function k(){xt(),g=!0,d!==p&&(d=p,M(d.object))}function xt(){p.geometry=null,p.program=null,p.wireframe=!1}return{setup:_,reset:k,resetDefaultState:xt,dispose:D,releaseStatesOfGeometry:q,releaseStatesOfProgram:nt,initAttributes:S,enableAttribute:O,disableUnusedAttributes:G}}function kS(r,t,e,o){let a=o.isWebGL2,l;function f(d){l=d}function h(d,g){r.drawArrays(l,d,g),e.update(g,l,1)}function p(d,g,_){if(_===0)return;let y,M;if(a)y=r,M=\\\"drawArraysInstanced\\\";else if(y=t.get(\\\"ANGLE_instanced_arrays\\\"),M=\\\"drawArraysInstancedANGLE\\\",y===null){console.error(\\\"THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\\\");return}y[M](l,d,g,_),e.update(g,l,_)}this.setMode=f,this.render=h,this.renderInstances=p}function GS(r,t,e){let o;function a(){if(o!==void 0)return o;if(t.has(\\\"EXT_texture_filter_anisotropic\\\")===!0){let z=t.get(\\\"EXT_texture_filter_anisotropic\\\");o=r.getParameter(z.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else o=0;return o}function l(z){if(z===\\\"highp\\\"){if(r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.HIGH_FLOAT).precision>0&&r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.HIGH_FLOAT).precision>0)return\\\"highp\\\";z=\\\"mediump\\\"}return z===\\\"mediump\\\"&&r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.MEDIUM_FLOAT).precision>0&&r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.MEDIUM_FLOAT).precision>0?\\\"mediump\\\":\\\"lowp\\\"}let f=typeof WebGL2RenderingContext!=\\\"undefined\\\"&&r.constructor.name===\\\"WebGL2RenderingContext\\\",h=e.precision!==void 0?e.precision:\\\"highp\\\",p=l(h);p!==h&&(console.warn(\\\"THREE.WebGLRenderer:\\\",h,\\\"not supported, using\\\",p,\\\"instead.\\\"),h=p);let d=f||t.has(\\\"WEBGL_draw_buffers\\\"),g=e.logarithmicDepthBuffer===!0,_=r.getParameter(r.MAX_TEXTURE_IMAGE_UNITS),y=r.getParameter(r.MAX_VERTEX_TEXTURE_IMAGE_UNITS),M=r.getParameter(r.MAX_TEXTURE_SIZE),w=r.getParameter(r.MAX_CUBE_MAP_TEXTURE_SIZE),T=r.getParameter(r.MAX_VERTEX_ATTRIBS),x=r.getParameter(r.MAX_VERTEX_UNIFORM_VECTORS),v=r.getParameter(r.MAX_VARYING_VECTORS),C=r.getParameter(r.MAX_FRAGMENT_UNIFORM_VECTORS),S=y>0,O=f||t.has(\\\"OES_texture_float\\\"),F=S&&O,G=f?r.getParameter(r.MAX_SAMPLES):0;return{isWebGL2:f,drawBuffers:d,getMaxAnisotropy:a,getMaxPrecision:l,precision:h,logarithmicDepthBuffer:g,maxTextures:_,maxVertexTextures:y,maxTextureSize:M,maxCubemapSize:w,maxAttributes:T,maxVertexUniforms:x,maxVaryings:v,maxFragmentUniforms:C,vertexTextures:S,floatFragmentTextures:O,floatVertexTextures:F,maxSamples:G}}function VS(r){let t=this,e=null,o=0,a=!1,l=!1,f=new Vo,h=new ve,p={value:null,needsUpdate:!1};this.uniform=p,this.numPlanes=0,this.numIntersection=0,this.init=function(_,y){let M=_.length!==0||y||o!==0||a;return a=y,o=_.length,M},this.beginShadows=function(){l=!0,g(null)},this.endShadows=function(){l=!1},this.setGlobalState=function(_,y){e=g(_,y,0)},this.setState=function(_,y,M){let w=_.clippingPlanes,T=_.clipIntersection,x=_.clipShadows,v=r.get(_);if(!a||w===null||w.length===0||l&&!x)l?g(null):d();else{let C=l?0:o,S=C*4,O=v.clippingState||null;p.value=O,O=g(w,y,S,M);for(let F=0;F!==S;++F)O[F]=e[F];v.clippingState=O,this.numIntersection=T?this.numPlanes:0,this.numPlanes+=C}};function d(){p.value!==e&&(p.value=e,p.needsUpdate=o>0),t.numPlanes=o,t.numIntersection=0}function g(_,y,M,w){let T=_!==null?_.length:0,x=null;if(T!==0){if(x=p.value,w!==!0||x===null){let v=M+T*4,C=y.matrixWorldInverse;h.getNormalMatrix(C),(x===null||x.length<v)&&(x=new Float32Array(v));for(let S=0,O=M;S!==T;++S,O+=4)f.copy(_[S]).applyMatrix4(C,h),f.normal.toArray(x,O),x[O+3]=f.constant}p.value=x,p.needsUpdate=!0}return t.numPlanes=T,t.numIntersection=0,x}}function HS(r){let t=new WeakMap;function e(f,h){return h===lh?f.mapping=Ga:h===ch&&(f.mapping=Va),f}function o(f){if(f&&f.isTexture&&f.isRenderTargetTexture===!1){let h=f.mapping;if(h===lh||h===ch)if(t.has(f)){let p=t.get(f).texture;return e(p,f.mapping)}else{let p=f.image;if(p&&p.height>0){let d=new xh(p.height/2);return d.fromEquirectangularTexture(r,f),t.set(f,d),f.addEventListener(\\\"dispose\\\",a),e(d.texture,f.mapping)}else return null}}return f}function a(f){let h=f.target;h.removeEventListener(\\\"dispose\\\",a);let p=t.get(h);p!==void 0&&(t.delete(h),p.dispose())}function l(){t=new WeakMap}return{get:o,dispose:l}}var Mh=class extends lc{constructor(t=-1,e=1,o=1,a=-1,l=.1,f=2e3){super(),this.isOrthographicCamera=!0,this.type=\\\"OrthographicCamera\\\",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=o,this.bottom=a,this.near=l,this.far=f,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=t.view===null?null:Object.assign({},t.view),this}setViewOffset(t,e,o,a,l,f){this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=o,this.view.offsetY=a,this.view.width=l,this.view.height=f,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),o=(this.right+this.left)/2,a=(this.top+this.bottom)/2,l=o-t,f=o+t,h=a+e,p=a-e;if(this.view!==null&&this.view.enabled){let d=(this.right-this.left)/this.view.fullWidth/this.zoom,g=(this.top-this.bottom)/this.view.fullHeight/this.zoom;l+=d*this.view.offsetX,f=l+d*this.view.width,h-=g*this.view.offsetY,p=h-g*this.view.height}this.projectionMatrix.makeOrthographic(l,f,h,p,this.near,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){let e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,this.view!==null&&(e.object.view=Object.assign({},this.view)),e}},Fa=4,pg=[.125,.215,.35,.446,.526,.582],Hs=20,oh=new Mh,dg=new xn,sh=null,Vs=(1+Math.sqrt(5))/2,Na=1/Vs,mg=[new mt(1,1,1),new mt(-1,1,1),new mt(1,1,-1),new mt(-1,1,-1),new mt(0,Vs,Na),new mt(0,Vs,-Na),new mt(Na,0,Vs),new mt(-Na,0,Vs),new mt(Vs,Na,0),new mt(-Vs,Na,0)],hc=class{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,o=.1,a=100){sh=this._renderer.getRenderTarget(),this._setSize(256);let l=this._allocateTargets();return l.depthBuffer=!0,this._sceneToCubeUV(t,o,a,l),e>0&&this._blur(l,0,0,e),this._applyPMREM(l),this._cleanup(l),l}fromEquirectangular(t,e=null){return this._fromTexture(t,e)}fromCubemap(t,e=null){return this._fromTexture(t,e)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=vg(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=yg(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose()}_setSize(t){this._lodMax=Math.floor(Math.log2(t)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let t=0;t<this._lodPlanes.length;t++)this._lodPlanes[t].dispose()}_cleanup(t){this._renderer.setRenderTarget(sh),t.scissorTest=!1,Xl(t,0,0,t.width,t.height)}_fromTexture(t,e){t.mapping===Ga||t.mapping===Va?this._setSize(t.image.length===0?16:t.image[0].width||t.image[0].image.width):this._setSize(t.image.width/4),sh=this._renderer.getRenderTarget();let o=e||this._allocateTargets();return this._textureToCubeUV(t,o),this._applyPMREM(o),this._cleanup(o),o}_allocateTargets(){let t=3*Math.max(this._cubeSize,112),e=4*this._cubeSize,o={magFilter:Oi,minFilter:Oi,generateMipmaps:!1,type:Uu,format:Ki,colorSpace:Xo,depthBuffer:!1},a=gg(t,e,o);if(this._pingPongRenderTarget===null||this._pingPongRenderTarget.width!==t||this._pingPongRenderTarget.height!==e){this._pingPongRenderTarget!==null&&this._dispose(),this._pingPongRenderTarget=gg(t,e,o);let{_lodMax:l}=this;({sizeLods:this._sizeLods,lodPlanes:this._lodPlanes,sigmas:this._sigmas}=WS(l)),this._blurMaterial=qS(l,t,e)}return a}_compileMaterial(t){let e=new fo(this._lodPlanes[0],t);this._renderer.compile(e,oh)}_sceneToCubeUV(t,e,o,a){let h=new Ei(90,1,e,o),p=[1,-1,1,1,1,1],d=[1,1,1,-1,-1,-1],g=this._renderer,_=g.autoClear,y=g.toneMapping;g.getClearColor(dg),g.toneMapping=ps,g.autoClear=!1;let M=new sc({name:\\\"PMREM.Background\\\",side:li,depthWrite:!1,depthTest:!1}),w=new fo(new zu,M),T=!1,x=t.background;x?x.isColor&&(M.color.copy(x),t.background=null,T=!0):(M.color.copy(dg),T=!0);for(let v=0;v<6;v++){let C=v%3;C===0?(h.up.set(0,p[v],0),h.lookAt(d[v],0,0)):C===1?(h.up.set(0,0,p[v]),h.lookAt(0,d[v],0)):(h.up.set(0,p[v],0),h.lookAt(0,0,d[v]));let S=this._cubeSize;Xl(a,C*S,v>2?S:0,S,S),g.setRenderTarget(a),T&&g.render(w,h),g.render(t,h)}w.geometry.dispose(),w.material.dispose(),g.toneMapping=y,g.autoClear=_,t.background=x}_textureToCubeUV(t,e){let o=this._renderer,a=t.mapping===Ga||t.mapping===Va;a?(this._cubemapMaterial===null&&(this._cubemapMaterial=vg()),this._cubemapMaterial.uniforms.flipEnvMap.value=t.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=yg());let l=a?this._cubemapMaterial:this._equirectMaterial,f=new fo(this._lodPlanes[0],l),h=l.uniforms;h.envMap.value=t;let p=this._cubeSize;Xl(e,0,0,3*p,2*p),o.setRenderTarget(e),o.render(f,oh)}_applyPMREM(t){let e=this._renderer,o=e.autoClear;e.autoClear=!1;for(let a=1;a<this._lodPlanes.length;a++){let l=Math.sqrt(this._sigmas[a]*this._sigmas[a]-this._sigmas[a-1]*this._sigmas[a-1]),f=mg[(a-1)%mg.length];this._blur(t,a-1,a,l,f)}e.autoClear=o}_blur(t,e,o,a,l){let f=this._pingPongRenderTarget;this._halfBlur(t,f,e,o,a,\\\"latitudinal\\\",l),this._halfBlur(f,t,o,o,a,\\\"longitudinal\\\",l)}_halfBlur(t,e,o,a,l,f,h){let p=this._renderer,d=this._blurMaterial;f!==\\\"latitudinal\\\"&&f!==\\\"longitudinal\\\"&&console.error(\\\"blur direction must be either latitudinal or longitudinal!\\\");let g=3,_=new fo(this._lodPlanes[a],d),y=d.uniforms,M=this._sizeLods[o]-1,w=isFinite(l)?Math.PI/(2*M):2*Math.PI/(2*Hs-1),T=l/w,x=isFinite(l)?1+Math.floor(g*T):Hs;x>Hs&&console.warn(`sigmaRadians, ${l}, is too large and will clip, as it requested ${x} samples when the maximum is set to ${Hs}`);let v=[],C=0;for(let z=0;z<Hs;++z){let L=z/T,D=Math.exp(-L*L/2);v.push(D),z===0?C+=D:z<x&&(C+=2*D)}for(let z=0;z<v.length;z++)v[z]=v[z]/C;y.envMap.value=t.texture,y.samples.value=x,y.weights.value=v,y.latitudinal.value=f===\\\"latitudinal\\\",h&&(y.poleAxis.value=h);let{_lodMax:S}=this;y.dTheta.value=w,y.mipInt.value=S-o;let O=this._sizeLods[a],F=3*O*(a>S-Fa?a-S+Fa:0),G=4*(this._cubeSize-O);Xl(e,F,G,3*O,2*O),p.setRenderTarget(e),p.render(_,oh)}};function WS(r){let t=[],e=[],o=[],a=r,l=r-Fa+1+pg.length;for(let f=0;f<l;f++){let h=Math.pow(2,a);e.push(h);let p=1/h;f>r-Fa?p=pg[f-r+Fa-1]:f===0&&(p=0),o.push(p);let d=1/(h-2),g=-d,_=1+d,y=[g,g,_,g,_,_,g,g,_,_,g,_],M=6,w=6,T=3,x=2,v=1,C=new Float32Array(T*w*M),S=new Float32Array(x*w*M),O=new Float32Array(v*w*M);for(let G=0;G<M;G++){let z=G%3*2/3-1,L=G>2?0:-1,D=[z,L,0,z+2/3,L,0,z+2/3,L+1,0,z,L,0,z+2/3,L+1,0,z,L+1,0];C.set(D,T*w*G),S.set(y,x*w*G);let q=[G,G,G,G,G,G];O.set(q,v*w*G)}let F=new Zs;F.setAttribute(\\\"position\\\",new Fi(C,T)),F.setAttribute(\\\"uv\\\",new Fi(S,x)),F.setAttribute(\\\"faceIndex\\\",new Fi(O,v)),t.push(F),a>Fa&&a--}return{lodPlanes:t,sizeLods:e,sigmas:o}}function gg(r,t,e){let o=new Yo(r,t,e);return o.texture.mapping=pc,o.texture.name=\\\"PMREM.cubeUv\\\",o.scissorTest=!0,o}function Xl(r,t,e,o,a){r.viewport.set(t,e,o,a),r.scissor.set(t,e,o,a)}function qS(r,t,e){let o=new Float32Array(Hs),a=new mt(0,1,0);return new Zo({name:\\\"SphericalGaussianBlur\\\",defines:{n:Hs,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/e,CUBEUV_MAX_MIP:`${r}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:o},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:a}},vertexShader:Jh(),fragmentShader:`\\n\\n\\t\\t\\tprecision mediump float;\\n\\t\\t\\tprecision mediump int;\\n\\n\\t\\t\\tvarying vec3 vOutputDirection;\\n\\n\\t\\t\\tuniform sampler2D envMap;\\n\\t\\t\\tuniform int samples;\\n\\t\\t\\tuniform float weights[ n ];\\n\\t\\t\\tuniform bool latitudinal;\\n\\t\\t\\tuniform float dTheta;\\n\\t\\t\\tuniform float mipInt;\\n\\t\\t\\tuniform vec3 poleAxis;\\n\\n\\t\\t\\t#define ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\t#include <cube_uv_reflection_fragment>\\n\\n\\t\\t\\tvec3 getSample( float theta, vec3 axis ) {\\n\\n\\t\\t\\t\\tfloat cosTheta = cos( theta );\\n\\t\\t\\t\\t// Rodrigues' axis-angle rotation\\n\\t\\t\\t\\tvec3 sampleDirection = vOutputDirection * cosTheta\\n\\t\\t\\t\\t\\t+ cross( axis, vOutputDirection ) * sin( theta )\\n\\t\\t\\t\\t\\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\\n\\n\\t\\t\\t\\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\\n\\n\\t\\t\\t}\\n\\n\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\\n\\n\\t\\t\\t\\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\\n\\n\\t\\t\\t\\t\\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\\n\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\taxis = normalize( axis );\\n\\n\\t\\t\\t\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\t\\t\\t\\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\\n\\n\\t\\t\\t\\tfor ( int i = 1; i < n; i++ ) {\\n\\n\\t\\t\\t\\t\\tif ( i >= samples ) {\\n\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\tfloat theta = dTheta * float( i );\\n\\t\\t\\t\\t\\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\\n\\t\\t\\t\\t\\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\\n\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t}\\n\\t\\t`,blending:hs,depthTest:!1,depthWrite:!1})}function yg(){return new Zo({name:\\\"EquirectangularToCubeUV\\\",uniforms:{envMap:{value:null}},vertexShader:Jh(),fragmentShader:`\\n\\n\\t\\t\\tprecision mediump float;\\n\\t\\t\\tprecision mediump int;\\n\\n\\t\\t\\tvarying vec3 vOutputDirection;\\n\\n\\t\\t\\tuniform sampler2D envMap;\\n\\n\\t\\t\\t#include <common>\\n\\n\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\tvec3 outputDirection = normalize( vOutputDirection );\\n\\t\\t\\t\\tvec2 uv = equirectUv( outputDirection );\\n\\n\\t\\t\\t\\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\\n\\n\\t\\t\\t}\\n\\t\\t`,blending:hs,depthTest:!1,depthWrite:!1})}function vg(){return new Zo({name:\\\"CubemapToCubeUV\\\",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:Jh(),fragmentShader:`\\n\\n\\t\\t\\tprecision mediump float;\\n\\t\\t\\tprecision mediump int;\\n\\n\\t\\t\\tuniform float flipEnvMap;\\n\\n\\t\\t\\tvarying vec3 vOutputDirection;\\n\\n\\t\\t\\tuniform samplerCube envMap;\\n\\n\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\\n\\n\\t\\t\\t}\\n\\t\\t`,blending:hs,depthTest:!1,depthWrite:!1})}function Jh(){return`\\n\\n\\t\\tprecision mediump float;\\n\\t\\tprecision mediump int;\\n\\n\\t\\tattribute float faceIndex;\\n\\n\\t\\tvarying vec3 vOutputDirection;\\n\\n\\t\\t// RH coordinate system; PMREM face-indexing convention\\n\\t\\tvec3 getDirection( vec2 uv, float face ) {\\n\\n\\t\\t\\tuv = 2.0 * uv - 1.0;\\n\\n\\t\\t\\tvec3 direction = vec3( uv, 1.0 );\\n\\n\\t\\t\\tif ( face == 0.0 ) {\\n\\n\\t\\t\\t\\tdirection = direction.zyx; // ( 1, v, u ) pos x\\n\\n\\t\\t\\t} else if ( face == 1.0 ) {\\n\\n\\t\\t\\t\\tdirection = direction.xzy;\\n\\t\\t\\t\\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\\n\\n\\t\\t\\t} else if ( face == 2.0 ) {\\n\\n\\t\\t\\t\\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\\n\\n\\t\\t\\t} else if ( face == 3.0 ) {\\n\\n\\t\\t\\t\\tdirection = direction.zyx;\\n\\t\\t\\t\\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\\n\\n\\t\\t\\t} else if ( face == 4.0 ) {\\n\\n\\t\\t\\t\\tdirection = direction.xzy;\\n\\t\\t\\t\\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\\n\\n\\t\\t\\t} else if ( face == 5.0 ) {\\n\\n\\t\\t\\t\\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\\n\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn direction;\\n\\n\\t\\t}\\n\\n\\t\\tvoid main() {\\n\\n\\t\\t\\tvOutputDirection = getDirection( uv, faceIndex );\\n\\t\\t\\tgl_Position = vec4( position, 1.0 );\\n\\n\\t\\t}\\n\\t`}function XS(r){let t=new WeakMap,e=null;function o(h){if(h&&h.isTexture){let p=h.mapping,d=p===lh||p===ch,g=p===Ga||p===Va;if(d||g)if(h.isRenderTargetTexture&&h.needsPMREMUpdate===!0){h.needsPMREMUpdate=!1;let _=t.get(h);return e===null&&(e=new hc(r)),_=d?e.fromEquirectangular(h,_):e.fromCubemap(h,_),t.set(h,_),_.texture}else{if(t.has(h))return t.get(h).texture;{let _=h.image;if(d&&_&&_.height>0||g&&_&&a(_)){e===null&&(e=new hc(r));let y=d?e.fromEquirectangular(h):e.fromCubemap(h);return t.set(h,y),h.addEventListener(\\\"dispose\\\",l),y.texture}else return null}}}return h}function a(h){let p=0,d=6;for(let g=0;g<d;g++)h[g]!==void 0&&p++;return p===d}function l(h){let p=h.target;p.removeEventListener(\\\"dispose\\\",l);let d=t.get(p);d!==void 0&&(t.delete(p),d.dispose())}function f(){t=new WeakMap,e!==null&&(e.dispose(),e=null)}return{get:o,dispose:f}}function YS(r){let t={};function e(o){if(t[o]!==void 0)return t[o];let a;switch(o){case\\\"WEBGL_depth_texture\\\":a=r.getExtension(\\\"WEBGL_depth_texture\\\")||r.getExtension(\\\"MOZ_WEBGL_depth_texture\\\")||r.getExtension(\\\"WEBKIT_WEBGL_depth_texture\\\");break;case\\\"EXT_texture_filter_anisotropic\\\":a=r.getExtension(\\\"EXT_texture_filter_anisotropic\\\")||r.getExtension(\\\"MOZ_EXT_texture_filter_anisotropic\\\")||r.getExtension(\\\"WEBKIT_EXT_texture_filter_anisotropic\\\");break;case\\\"WEBGL_compressed_texture_s3tc\\\":a=r.getExtension(\\\"WEBGL_compressed_texture_s3tc\\\")||r.getExtension(\\\"MOZ_WEBGL_compressed_texture_s3tc\\\")||r.getExtension(\\\"WEBKIT_WEBGL_compressed_texture_s3tc\\\");break;case\\\"WEBGL_compressed_texture_pvrtc\\\":a=r.getExtension(\\\"WEBGL_compressed_texture_pvrtc\\\")||r.getExtension(\\\"WEBKIT_WEBGL_compressed_texture_pvrtc\\\");break;default:a=r.getExtension(o)}return t[o]=a,a}return{has:function(o){return e(o)!==null},init:function(o){o.isWebGL2?e(\\\"EXT_color_buffer_float\\\"):(e(\\\"WEBGL_depth_texture\\\"),e(\\\"OES_texture_float\\\"),e(\\\"OES_texture_half_float\\\"),e(\\\"OES_texture_half_float_linear\\\"),e(\\\"OES_standard_derivatives\\\"),e(\\\"OES_element_index_uint\\\"),e(\\\"OES_vertex_array_object\\\"),e(\\\"ANGLE_instanced_arrays\\\")),e(\\\"OES_texture_float_linear\\\"),e(\\\"EXT_color_buffer_half_float\\\"),e(\\\"WEBGL_multisampled_render_to_texture\\\")},get:function(o){let a=e(o);return a===null&&console.warn(\\\"THREE.WebGLRenderer: \\\"+o+\\\" extension not supported.\\\"),a}}}function ZS(r,t,e,o){let a={},l=new WeakMap;function f(_){let y=_.target;y.index!==null&&t.remove(y.index);for(let w in y.attributes)t.remove(y.attributes[w]);for(let w in y.morphAttributes){let T=y.morphAttributes[w];for(let x=0,v=T.length;x<v;x++)t.remove(T[x])}y.removeEventListener(\\\"dispose\\\",f),delete a[y.id];let M=l.get(y);M&&(t.remove(M),l.delete(y)),o.releaseStatesOfGeometry(y),y.isInstancedBufferGeometry===!0&&delete y._maxInstanceCount,e.memory.geometries--}function h(_,y){return a[y.id]===!0||(y.addEventListener(\\\"dispose\\\",f),a[y.id]=!0,e.memory.geometries++),y}function p(_){let y=_.attributes;for(let w in y)t.update(y[w],r.ARRAY_BUFFER);let M=_.morphAttributes;for(let w in M){let T=M[w];for(let x=0,v=T.length;x<v;x++)t.update(T[x],r.ARRAY_BUFFER)}}function d(_){let y=[],M=_.index,w=_.attributes.position,T=0;if(M!==null){let C=M.array;T=M.version;for(let S=0,O=C.length;S<O;S+=3){let F=C[S+0],G=C[S+1],z=C[S+2];y.push(F,G,G,z,z,F)}}else if(w!==void 0){let C=w.array;T=w.version;for(let S=0,O=C.length/3-1;S<O;S+=3){let F=S+0,G=S+1,z=S+2;y.push(F,G,G,z,z,F)}}else return;let x=new(Xg(y)?uc:ac)(y,1);x.version=T;let v=l.get(_);v&&t.remove(v),l.set(_,x)}function g(_){let y=l.get(_);if(y){let M=_.index;M!==null&&y.version<M.version&&d(_)}else d(_);return l.get(_)}return{get:h,update:p,getWireframeAttribute:g}}function JS(r,t,e,o){let a=o.isWebGL2,l;function f(y){l=y}let h,p;function d(y){h=y.type,p=y.bytesPerElement}function g(y,M){r.drawElements(l,M,h,y*p),e.update(M,l,1)}function _(y,M,w){if(w===0)return;let T,x;if(a)T=r,x=\\\"drawElementsInstanced\\\";else if(T=t.get(\\\"ANGLE_instanced_arrays\\\"),x=\\\"drawElementsInstancedANGLE\\\",T===null){console.error(\\\"THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\\\");return}T[x](l,M,h,y*p,w),e.update(M,l,w)}this.setMode=f,this.setIndex=d,this.render=g,this.renderInstances=_}function $S(r){let t={geometries:0,textures:0},e={frame:0,calls:0,triangles:0,points:0,lines:0};function o(l,f,h){switch(e.calls++,f){case r.TRIANGLES:e.triangles+=h*(l/3);break;case r.LINES:e.lines+=h*(l/2);break;case r.LINE_STRIP:e.lines+=h*(l-1);break;case r.LINE_LOOP:e.lines+=h*l;break;case r.POINTS:e.points+=h*l;break;default:console.error(\\\"THREE.WebGLInfo: Unknown draw mode:\\\",f);break}}function a(){e.calls=0,e.triangles=0,e.points=0,e.lines=0}return{memory:t,render:e,programs:null,autoReset:!0,reset:a,update:o}}function KS(r,t){return r[0]-t[0]}function jS(r,t){return Math.abs(t[1])-Math.abs(r[1])}function QS(r,t,e){let o={},a=new Float32Array(8),l=new WeakMap,f=new Tr,h=[];for(let d=0;d<8;d++)h[d]=[d,0];function p(d,g,_){let y=d.morphTargetInfluences;if(t.isWebGL2===!0){let M=g.morphAttributes.position||g.morphAttributes.normal||g.morphAttributes.color,w=M!==void 0?M.length:0,T=l.get(g);if(T===void 0||T.count!==w){let X=function(){k.dispose(),l.delete(g),g.removeEventListener(\\\"dispose\\\",X)};T!==void 0&&T.texture.dispose();let C=g.morphAttributes.position!==void 0,S=g.morphAttributes.normal!==void 0,O=g.morphAttributes.color!==void 0,F=g.morphAttributes.position||[],G=g.morphAttributes.normal||[],z=g.morphAttributes.color||[],L=0;C===!0&&(L=1),S===!0&&(L=2),O===!0&&(L=3);let D=g.attributes.position.count*L,q=1;D>t.maxTextureSize&&(q=Math.ceil(D/t.maxTextureSize),D=t.maxTextureSize);let nt=new Float32Array(D*q*4*w),k=new rc(nt,D,q,w);k.type=fs,k.needsUpdate=!0;let xt=L*4;for(let it=0;it<w;it++){let vt=F[it],pt=G[it],et=z[it],ot=D*q*4*it;for(let V=0;V<vt.count;V++){let K=V*xt;C===!0&&(f.fromBufferAttribute(vt,V),nt[ot+K+0]=f.x,nt[ot+K+1]=f.y,nt[ot+K+2]=f.z,nt[ot+K+3]=0),S===!0&&(f.fromBufferAttribute(pt,V),nt[ot+K+4]=f.x,nt[ot+K+5]=f.y,nt[ot+K+6]=f.z,nt[ot+K+7]=0),O===!0&&(f.fromBufferAttribute(et,V),nt[ot+K+8]=f.x,nt[ot+K+9]=f.y,nt[ot+K+10]=f.z,nt[ot+K+11]=et.itemSize===4?f.w:1)}}T={count:w,texture:k,size:new fn(D,q)},l.set(g,T),g.addEventListener(\\\"dispose\\\",X)}let x=0;for(let C=0;C<y.length;C++)x+=y[C];let v=g.morphTargetsRelative?1:1-x;_.getUniforms().setValue(r,\\\"morphTargetBaseInfluence\\\",v),_.getUniforms().setValue(r,\\\"morphTargetInfluences\\\",y),_.getUniforms().setValue(r,\\\"morphTargetsTexture\\\",T.texture,e),_.getUniforms().setValue(r,\\\"morphTargetsTextureSize\\\",T.size)}else{let M=y===void 0?0:y.length,w=o[g.id];if(w===void 0||w.length!==M){w=[];for(let S=0;S<M;S++)w[S]=[S,0];o[g.id]=w}for(let S=0;S<M;S++){let O=w[S];O[0]=S,O[1]=y[S]}w.sort(jS);for(let S=0;S<8;S++)S<M&&w[S][1]?(h[S][0]=w[S][0],h[S][1]=w[S][1]):(h[S][0]=Number.MAX_SAFE_INTEGER,h[S][1]=0);h.sort(KS);let T=g.morphAttributes.position,x=g.morphAttributes.normal,v=0;for(let S=0;S<8;S++){let O=h[S],F=O[0],G=O[1];F!==Number.MAX_SAFE_INTEGER&&G?(T&&g.getAttribute(\\\"morphTarget\\\"+S)!==T[F]&&g.setAttribute(\\\"morphTarget\\\"+S,T[F]),x&&g.getAttribute(\\\"morphNormal\\\"+S)!==x[F]&&g.setAttribute(\\\"morphNormal\\\"+S,x[F]),a[S]=G,v+=G):(T&&g.hasAttribute(\\\"morphTarget\\\"+S)===!0&&g.deleteAttribute(\\\"morphTarget\\\"+S),x&&g.hasAttribute(\\\"morphNormal\\\"+S)===!0&&g.deleteAttribute(\\\"morphNormal\\\"+S),a[S]=0)}let C=g.morphTargetsRelative?1:1-v;_.getUniforms().setValue(r,\\\"morphTargetBaseInfluence\\\",C),_.getUniforms().setValue(r,\\\"morphTargetInfluences\\\",a)}}return{update:p}}function tw(r,t,e,o){let a=new WeakMap;function l(p){let d=o.render.frame,g=p.geometry,_=t.get(p,g);if(a.get(_)!==d&&(t.update(_),a.set(_,d)),p.isInstancedMesh&&(p.hasEventListener(\\\"dispose\\\",h)===!1&&p.addEventListener(\\\"dispose\\\",h),a.get(p)!==d&&(e.update(p.instanceMatrix,r.ARRAY_BUFFER),p.instanceColor!==null&&e.update(p.instanceColor,r.ARRAY_BUFFER),a.set(p,d))),p.isSkinnedMesh){let y=p.skeleton;a.get(y)!==d&&(y.update(),a.set(y,d))}return _}function f(){a=new WeakMap}function h(p){let d=p.target;d.removeEventListener(\\\"dispose\\\",h),e.remove(d.instanceMatrix),d.instanceColor!==null&&e.remove(d.instanceColor)}return{update:l,dispose:f}}var $g=new ji,Kg=new rc,jg=new yh,Qg=new cc,_g=[],xg=[],Eg=new Float32Array(16),Mg=new Float32Array(9),Sg=new Float32Array(4);function Ya(r,t,e){let o=r[0];if(o<=0||o>0)return r;let a=t*e,l=_g[a];if(l===void 0&&(l=new Float32Array(a),_g[a]=l),t!==0){o.toArray(l,0);for(let f=1,h=0;f!==t;++f)h+=e,r[f].toArray(l,h)}return l}function tr(r,t){if(r.length!==t.length)return!1;for(let e=0,o=r.length;e<o;e++)if(r[e]!==t[e])return!1;return!0}function er(r,t){for(let e=0,o=t.length;e<o;e++)r[e]=t[e]}function mc(r,t){let e=xg[t];e===void 0&&(e=new Int32Array(t),xg[t]=e);for(let o=0;o!==t;++o)e[o]=r.allocateTextureUnit();return e}function ew(r,t){let e=this.cache;e[0]!==t&&(r.uniform1f(this.addr,t),e[0]=t)}function nw(r,t){let e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y)&&(r.uniform2f(this.addr,t.x,t.y),e[0]=t.x,e[1]=t.y);else{if(tr(e,t))return;r.uniform2fv(this.addr,t),er(e,t)}}function rw(r,t){let e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z)&&(r.uniform3f(this.addr,t.x,t.y,t.z),e[0]=t.x,e[1]=t.y,e[2]=t.z);else if(t.r!==void 0)(e[0]!==t.r||e[1]!==t.g||e[2]!==t.b)&&(r.uniform3f(this.addr,t.r,t.g,t.b),e[0]=t.r,e[1]=t.g,e[2]=t.b);else{if(tr(e,t))return;r.uniform3fv(this.addr,t),er(e,t)}}function iw(r,t){let e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z||e[3]!==t.w)&&(r.uniform4f(this.addr,t.x,t.y,t.z,t.w),e[0]=t.x,e[1]=t.y,e[2]=t.z,e[3]=t.w);else{if(tr(e,t))return;r.uniform4fv(this.addr,t),er(e,t)}}function ow(r,t){let e=this.cache,o=t.elements;if(o===void 0){if(tr(e,t))return;r.uniformMatrix2fv(this.addr,!1,t),er(e,t)}else{if(tr(e,o))return;Sg.set(o),r.uniformMatrix2fv(this.addr,!1,Sg),er(e,o)}}function sw(r,t){let e=this.cache,o=t.elements;if(o===void 0){if(tr(e,t))return;r.uniformMatrix3fv(this.addr,!1,t),er(e,t)}else{if(tr(e,o))return;Mg.set(o),r.uniformMatrix3fv(this.addr,!1,Mg),er(e,o)}}function aw(r,t){let e=this.cache,o=t.elements;if(o===void 0){if(tr(e,t))return;r.uniformMatrix4fv(this.addr,!1,t),er(e,t)}else{if(tr(e,o))return;Eg.set(o),r.uniformMatrix4fv(this.addr,!1,Eg),er(e,o)}}function uw(r,t){let e=this.cache;e[0]!==t&&(r.uniform1i(this.addr,t),e[0]=t)}function lw(r,t){let e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y)&&(r.uniform2i(this.addr,t.x,t.y),e[0]=t.x,e[1]=t.y);else{if(tr(e,t))return;r.uniform2iv(this.addr,t),er(e,t)}}function cw(r,t){let e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z)&&(r.uniform3i(this.addr,t.x,t.y,t.z),e[0]=t.x,e[1]=t.y,e[2]=t.z);else{if(tr(e,t))return;r.uniform3iv(this.addr,t),er(e,t)}}function fw(r,t){let e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z||e[3]!==t.w)&&(r.uniform4i(this.addr,t.x,t.y,t.z,t.w),e[0]=t.x,e[1]=t.y,e[2]=t.z,e[3]=t.w);else{if(tr(e,t))return;r.uniform4iv(this.addr,t),er(e,t)}}function hw(r,t){let e=this.cache;e[0]!==t&&(r.uniform1ui(this.addr,t),e[0]=t)}function pw(r,t){let e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y)&&(r.uniform2ui(this.addr,t.x,t.y),e[0]=t.x,e[1]=t.y);else{if(tr(e,t))return;r.uniform2uiv(this.addr,t),er(e,t)}}function dw(r,t){let e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z)&&(r.uniform3ui(this.addr,t.x,t.y,t.z),e[0]=t.x,e[1]=t.y,e[2]=t.z);else{if(tr(e,t))return;r.uniform3uiv(this.addr,t),er(e,t)}}function mw(r,t){let e=this.cache;if(t.x!==void 0)(e[0]!==t.x||e[1]!==t.y||e[2]!==t.z||e[3]!==t.w)&&(r.uniform4ui(this.addr,t.x,t.y,t.z,t.w),e[0]=t.x,e[1]=t.y,e[2]=t.z,e[3]=t.w);else{if(tr(e,t))return;r.uniform4uiv(this.addr,t),er(e,t)}}function gw(r,t,e){let o=this.cache,a=e.allocateTextureUnit();o[0]!==a&&(r.uniform1i(this.addr,a),o[0]=a),e.setTexture2D(t||$g,a)}function yw(r,t,e){let o=this.cache,a=e.allocateTextureUnit();o[0]!==a&&(r.uniform1i(this.addr,a),o[0]=a),e.setTexture3D(t||jg,a)}function vw(r,t,e){let o=this.cache,a=e.allocateTextureUnit();o[0]!==a&&(r.uniform1i(this.addr,a),o[0]=a),e.setTextureCube(t||Qg,a)}function _w(r,t,e){let o=this.cache,a=e.allocateTextureUnit();o[0]!==a&&(r.uniform1i(this.addr,a),o[0]=a),e.setTexture2DArray(t||Kg,a)}function xw(r){switch(r){case 5126:return ew;case 35664:return nw;case 35665:return rw;case 35666:return iw;case 35674:return ow;case 35675:return sw;case 35676:return aw;case 5124:case 35670:return uw;case 35667:case 35671:return lw;case 35668:case 35672:return cw;case 35669:case 35673:return fw;case 5125:return hw;case 36294:return pw;case 36295:return dw;case 36296:return mw;case 35678:case 36198:case 36298:case 36306:case 35682:return gw;case 35679:case 36299:case 36307:return yw;case 35680:case 36300:case 36308:case 36293:return vw;case 36289:case 36303:case 36311:case 36292:return _w}}function Ew(r,t){r.uniform1fv(this.addr,t)}function Mw(r,t){let e=Ya(t,this.size,2);r.uniform2fv(this.addr,e)}function Sw(r,t){let e=Ya(t,this.size,3);r.uniform3fv(this.addr,e)}function ww(r,t){let e=Ya(t,this.size,4);r.uniform4fv(this.addr,e)}function bw(r,t){let e=Ya(t,this.size,4);r.uniformMatrix2fv(this.addr,!1,e)}function Tw(r,t){let e=Ya(t,this.size,9);r.uniformMatrix3fv(this.addr,!1,e)}function Aw(r,t){let e=Ya(t,this.size,16);r.uniformMatrix4fv(this.addr,!1,e)}function Cw(r,t){r.uniform1iv(this.addr,t)}function Pw(r,t){r.uniform2iv(this.addr,t)}function Iw(r,t){r.uniform3iv(this.addr,t)}function Rw(r,t){r.uniform4iv(this.addr,t)}function Lw(r,t){r.uniform1uiv(this.addr,t)}function Nw(r,t){r.uniform2uiv(this.addr,t)}function Ow(r,t){r.uniform3uiv(this.addr,t)}function Dw(r,t){r.uniform4uiv(this.addr,t)}function Fw(r,t,e){let o=this.cache,a=t.length,l=mc(e,a);tr(o,l)||(r.uniform1iv(this.addr,l),er(o,l));for(let f=0;f!==a;++f)e.setTexture2D(t[f]||$g,l[f])}function Uw(r,t,e){let o=this.cache,a=t.length,l=mc(e,a);tr(o,l)||(r.uniform1iv(this.addr,l),er(o,l));for(let f=0;f!==a;++f)e.setTexture3D(t[f]||jg,l[f])}function Bw(r,t,e){let o=this.cache,a=t.length,l=mc(e,a);tr(o,l)||(r.uniform1iv(this.addr,l),er(o,l));for(let f=0;f!==a;++f)e.setTextureCube(t[f]||Qg,l[f])}function zw(r,t,e){let o=this.cache,a=t.length,l=mc(e,a);tr(o,l)||(r.uniform1iv(this.addr,l),er(o,l));for(let f=0;f!==a;++f)e.setTexture2DArray(t[f]||Kg,l[f])}function kw(r){switch(r){case 5126:return Ew;case 35664:return Mw;case 35665:return Sw;case 35666:return ww;case 35674:return bw;case 35675:return Tw;case 35676:return Aw;case 5124:case 35670:return Cw;case 35667:case 35671:return Pw;case 35668:case 35672:return Iw;case 35669:case 35673:return Rw;case 5125:return Lw;case 36294:return Nw;case 36295:return Ow;case 36296:return Dw;case 35678:case 36198:case 36298:case 36306:case 35682:return Fw;case 35679:case 36299:case 36307:return Uw;case 35680:case 36300:case 36308:case 36293:return Bw;case 36289:case 36303:case 36311:case 36292:return zw}}var Sh=class{constructor(t,e,o){this.id=t,this.addr=o,this.cache=[],this.setValue=xw(e.type)}},wh=class{constructor(t,e,o){this.id=t,this.addr=o,this.cache=[],this.size=e.size,this.setValue=kw(e.type)}},bh=class{constructor(t){this.id=t,this.seq=[],this.map={}}setValue(t,e,o){let a=this.seq;for(let l=0,f=a.length;l!==f;++l){let h=a[l];h.setValue(t,e[h.id],o)}}},ah=/(\\\\w+)(\\\\])?(\\\\[|\\\\.)?/g;function wg(r,t){r.seq.push(t),r.map[t.id]=t}function Gw(r,t,e){let o=r.name,a=o.length;for(ah.lastIndex=0;;){let l=ah.exec(o),f=ah.lastIndex,h=l[1],p=l[2]===\\\"]\\\",d=l[3];if(p&&(h=h|0),d===void 0||d===\\\"[\\\"&&f+2===a){wg(e,d===void 0?new Sh(h,r,t):new wh(h,r,t));break}else{let _=e.map[h];_===void 0&&(_=new bh(h),wg(e,_)),e=_}}}var ka=class{constructor(t,e){this.seq=[],this.map={};let o=t.getProgramParameter(e,t.ACTIVE_UNIFORMS);for(let a=0;a<o;++a){let l=t.getActiveUniform(e,a),f=t.getUniformLocation(e,l.name);Gw(l,f,this)}}setValue(t,e,o,a){let l=this.map[e];l!==void 0&&l.setValue(t,o,a)}setOptional(t,e,o){let a=e[o];a!==void 0&&this.setValue(t,o,a)}static upload(t,e,o,a){for(let l=0,f=e.length;l!==f;++l){let h=e[l],p=o[h.id];p.needsUpdate!==!1&&h.setValue(t,p.value,a)}}static seqWithValue(t,e){let o=[];for(let a=0,l=t.length;a!==l;++a){let f=t[a];f.id in e&&o.push(f)}return o}};function bg(r,t,e){let o=r.createShader(t);return r.shaderSource(o,e),r.compileShader(o),o}var Vw=0;function Hw(r,t){let e=r.split(`\\n`),o=[],a=Math.max(t-6,0),l=Math.min(t+6,e.length);for(let f=a;f<l;f++){let h=f+1;o.push(`${h===t?\\\">\\\":\\\" \\\"} ${h}: ${e[f]}`)}return o.join(`\\n`)}function Ww(r){let t=gn.getPrimaries(gn.workingColorSpace),e=gn.getPrimaries(r),o;switch(t===e?o=\\\"\\\":t===jl&&e===Kl?o=\\\"LinearDisplayP3ToLinearSRGB\\\":t===Kl&&e===jl&&(o=\\\"LinearSRGBToLinearDisplayP3\\\"),r){case Xo:case dc:return[o,\\\"LinearTransferOETF\\\"];case br:case Zh:return[o,\\\"sRGBTransferOETF\\\"];default:return console.warn(\\\"THREE.WebGLProgram: Unsupported color space:\\\",r),[o,\\\"LinearTransferOETF\\\"]}}function Tg(r,t,e){let o=r.getShaderParameter(t,r.COMPILE_STATUS),a=r.getShaderInfoLog(t).trim();if(o&&a===\\\"\\\")return\\\"\\\";let l=/ERROR: 0:(\\\\d+)/.exec(a);if(l){let f=parseInt(l[1]);return e.toUpperCase()+`\\n\\n`+a+`\\n\\n`+Hw(r.getShaderSource(t),f)}else return a}function qw(r,t){let e=Ww(t);return`vec4 ${r}( vec4 value ) { return ${e[0]}( ${e[1]}( value ) ); }`}function Xw(r,t){let e;switch(t){case cx:e=\\\"Linear\\\";break;case fx:e=\\\"Reinhard\\\";break;case hx:e=\\\"OptimizedCineon\\\";break;case px:e=\\\"ACESFilmic\\\";break;case dx:e=\\\"Custom\\\";break;default:console.warn(\\\"THREE.WebGLProgram: Unsupported toneMapping:\\\",t),e=\\\"Linear\\\"}return\\\"vec3 \\\"+r+\\\"( vec3 color ) { return \\\"+e+\\\"ToneMapping( color ); }\\\"}function Yw(r){return[r.extensionDerivatives||r.envMapCubeUVHeight||r.bumpMap||r.normalMapTangentSpace||r.clearcoatNormalMap||r.flatShading||r.shaderID===\\\"physical\\\"?\\\"#extension GL_OES_standard_derivatives : enable\\\":\\\"\\\",(r.extensionFragDepth||r.logarithmicDepthBuffer)&&r.rendererExtensionFragDepth?\\\"#extension GL_EXT_frag_depth : enable\\\":\\\"\\\",r.extensionDrawBuffers&&r.rendererExtensionDrawBuffers?\\\"#extension GL_EXT_draw_buffers : require\\\":\\\"\\\",(r.extensionShaderTextureLOD||r.envMap||r.transmission)&&r.rendererExtensionShaderTextureLod?\\\"#extension GL_EXT_shader_texture_lod : enable\\\":\\\"\\\"].filter(Nu).join(`\\n`)}function Zw(r){let t=[];for(let e in r){let o=r[e];o!==!1&&t.push(\\\"#define \\\"+e+\\\" \\\"+o)}return t.join(`\\n`)}function Jw(r,t){let e={},o=r.getProgramParameter(t,r.ACTIVE_ATTRIBUTES);for(let a=0;a<o;a++){let l=r.getActiveAttrib(t,a),f=l.name,h=1;l.type===r.FLOAT_MAT2&&(h=2),l.type===r.FLOAT_MAT3&&(h=3),l.type===r.FLOAT_MAT4&&(h=4),e[f]={type:l.type,location:r.getAttribLocation(t,f),locationSize:h}}return e}function Nu(r){return r!==\\\"\\\"}function Ag(r,t){let e=t.numSpotLightShadows+t.numSpotLightMaps-t.numSpotLightShadowsWithMaps;return r.replace(/NUM_DIR_LIGHTS/g,t.numDirLights).replace(/NUM_SPOT_LIGHTS/g,t.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,t.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,e).replace(/NUM_RECT_AREA_LIGHTS/g,t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,t.numPointLights).replace(/NUM_HEMI_LIGHTS/g,t.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,t.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,t.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,t.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,t.numPointLightShadows)}function Cg(r,t){return r.replace(/NUM_CLIPPING_PLANES/g,t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,t.numClippingPlanes-t.numClipIntersection)}var $w=/^[ \\\\t]*#include +<([\\\\w\\\\d./]+)>/gm;function Th(r){return r.replace($w,jw)}var Kw=new Map([[\\\"encodings_fragment\\\",\\\"colorspace_fragment\\\"],[\\\"encodings_pars_fragment\\\",\\\"colorspace_pars_fragment\\\"],[\\\"output_fragment\\\",\\\"opaque_fragment\\\"]]);function jw(r,t){let e=ge[t];if(e===void 0){let o=Kw.get(t);if(o!==void 0)e=ge[o],console.warn('THREE.WebGLRenderer: Shader chunk \\\"%s\\\" has been deprecated. Use \\\"%s\\\" instead.',t,o);else throw new Error(\\\"Can not resolve #include <\\\"+t+\\\">\\\")}return Th(e)}var Qw=/#pragma unroll_loop_start\\\\s+for\\\\s*\\\\(\\\\s*int\\\\s+i\\\\s*=\\\\s*(\\\\d+)\\\\s*;\\\\s*i\\\\s*<\\\\s*(\\\\d+)\\\\s*;\\\\s*i\\\\s*\\\\+\\\\+\\\\s*\\\\)\\\\s*{([\\\\s\\\\S]+?)}\\\\s+#pragma unroll_loop_end/g;function Pg(r){return r.replace(Qw,tb)}function tb(r,t,e,o){let a=\\\"\\\";for(let l=parseInt(t);l<parseInt(e);l++)a+=o.replace(/\\\\[\\\\s*i\\\\s*\\\\]/g,\\\"[ \\\"+l+\\\" ]\\\").replace(/UNROLLED_LOOP_INDEX/g,l);return a}function Ig(r){let t=\\\"precision \\\"+r.precision+` float;\\nprecision `+r.precision+\\\" int;\\\";return r.precision===\\\"highp\\\"?t+=`\\n#define HIGH_PRECISION`:r.precision===\\\"mediump\\\"?t+=`\\n#define MEDIUM_PRECISION`:r.precision===\\\"lowp\\\"&&(t+=`\\n#define LOW_PRECISION`),t}function eb(r){let t=\\\"SHADOWMAP_TYPE_BASIC\\\";return r.shadowMapType===Og?t=\\\"SHADOWMAP_TYPE_PCF\\\":r.shadowMapType===V1?t=\\\"SHADOWMAP_TYPE_PCF_SOFT\\\":r.shadowMapType===Go&&(t=\\\"SHADOWMAP_TYPE_VSM\\\"),t}function nb(r){let t=\\\"ENVMAP_TYPE_CUBE\\\";if(r.envMap)switch(r.envMapMode){case Ga:case Va:t=\\\"ENVMAP_TYPE_CUBE\\\";break;case pc:t=\\\"ENVMAP_TYPE_CUBE_UV\\\";break}return t}function rb(r){let t=\\\"ENVMAP_MODE_REFLECTION\\\";if(r.envMap)switch(r.envMapMode){case Va:t=\\\"ENVMAP_MODE_REFRACTION\\\";break}return t}function ib(r){let t=\\\"ENVMAP_BLENDING_NONE\\\";if(r.envMap)switch(r.combine){case Ug:t=\\\"ENVMAP_BLENDING_MULTIPLY\\\";break;case ux:t=\\\"ENVMAP_BLENDING_MIX\\\";break;case lx:t=\\\"ENVMAP_BLENDING_ADD\\\";break}return t}function ob(r){let t=r.envMapCubeUVHeight;if(t===null)return null;let e=Math.log2(t)-2,o=1/t;return{texelWidth:1/(3*Math.max(Math.pow(2,e),7*16)),texelHeight:o,maxMip:e}}function sb(r,t,e,o){let a=r.getContext(),l=e.defines,f=e.vertexShader,h=e.fragmentShader,p=eb(e),d=nb(e),g=rb(e),_=ib(e),y=ob(e),M=e.isWebGL2?\\\"\\\":Yw(e),w=Zw(l),T=a.createProgram(),x,v,C=e.glslVersion?\\\"#version \\\"+e.glslVersion+`\\n`:\\\"\\\";e.isRawShaderMaterial?(x=[\\\"#define SHADER_TYPE \\\"+e.shaderType,\\\"#define SHADER_NAME \\\"+e.shaderName,w].filter(Nu).join(`\\n`),x.length>0&&(x+=`\\n`),v=[M,\\\"#define SHADER_TYPE \\\"+e.shaderType,\\\"#define SHADER_NAME \\\"+e.shaderName,w].filter(Nu).join(`\\n`),v.length>0&&(v+=`\\n`)):(x=[Ig(e),\\\"#define SHADER_TYPE \\\"+e.shaderType,\\\"#define SHADER_NAME \\\"+e.shaderName,w,e.instancing?\\\"#define USE_INSTANCING\\\":\\\"\\\",e.instancingColor?\\\"#define USE_INSTANCING_COLOR\\\":\\\"\\\",e.useFog&&e.fog?\\\"#define USE_FOG\\\":\\\"\\\",e.useFog&&e.fogExp2?\\\"#define FOG_EXP2\\\":\\\"\\\",e.map?\\\"#define USE_MAP\\\":\\\"\\\",e.envMap?\\\"#define USE_ENVMAP\\\":\\\"\\\",e.envMap?\\\"#define \\\"+g:\\\"\\\",e.lightMap?\\\"#define USE_LIGHTMAP\\\":\\\"\\\",e.aoMap?\\\"#define USE_AOMAP\\\":\\\"\\\",e.bumpMap?\\\"#define USE_BUMPMAP\\\":\\\"\\\",e.normalMap?\\\"#define USE_NORMALMAP\\\":\\\"\\\",e.normalMapObjectSpace?\\\"#define USE_NORMALMAP_OBJECTSPACE\\\":\\\"\\\",e.normalMapTangentSpace?\\\"#define USE_NORMALMAP_TANGENTSPACE\\\":\\\"\\\",e.displacementMap?\\\"#define USE_DISPLACEMENTMAP\\\":\\\"\\\",e.emissiveMap?\\\"#define USE_EMISSIVEMAP\\\":\\\"\\\",e.anisotropy?\\\"#define USE_ANISOTROPY\\\":\\\"\\\",e.anisotropyMap?\\\"#define USE_ANISOTROPYMAP\\\":\\\"\\\",e.clearcoatMap?\\\"#define USE_CLEARCOATMAP\\\":\\\"\\\",e.clearcoatRoughnessMap?\\\"#define USE_CLEARCOAT_ROUGHNESSMAP\\\":\\\"\\\",e.clearcoatNormalMap?\\\"#define USE_CLEARCOAT_NORMALMAP\\\":\\\"\\\",e.iridescenceMap?\\\"#define USE_IRIDESCENCEMAP\\\":\\\"\\\",e.iridescenceThicknessMap?\\\"#define USE_IRIDESCENCE_THICKNESSMAP\\\":\\\"\\\",e.specularMap?\\\"#define USE_SPECULARMAP\\\":\\\"\\\",e.specularColorMap?\\\"#define USE_SPECULAR_COLORMAP\\\":\\\"\\\",e.specularIntensityMap?\\\"#define USE_SPECULAR_INTENSITYMAP\\\":\\\"\\\",e.roughnessMap?\\\"#define USE_ROUGHNESSMAP\\\":\\\"\\\",e.metalnessMap?\\\"#define USE_METALNESSMAP\\\":\\\"\\\",e.alphaMap?\\\"#define USE_ALPHAMAP\\\":\\\"\\\",e.alphaHash?\\\"#define USE_ALPHAHASH\\\":\\\"\\\",e.transmission?\\\"#define USE_TRANSMISSION\\\":\\\"\\\",e.transmissionMap?\\\"#define USE_TRANSMISSIONMAP\\\":\\\"\\\",e.thicknessMap?\\\"#define USE_THICKNESSMAP\\\":\\\"\\\",e.sheenColorMap?\\\"#define USE_SHEEN_COLORMAP\\\":\\\"\\\",e.sheenRoughnessMap?\\\"#define USE_SHEEN_ROUGHNESSMAP\\\":\\\"\\\",e.mapUv?\\\"#define MAP_UV \\\"+e.mapUv:\\\"\\\",e.alphaMapUv?\\\"#define ALPHAMAP_UV \\\"+e.alphaMapUv:\\\"\\\",e.lightMapUv?\\\"#define LIGHTMAP_UV \\\"+e.lightMapUv:\\\"\\\",e.aoMapUv?\\\"#define AOMAP_UV \\\"+e.aoMapUv:\\\"\\\",e.emissiveMapUv?\\\"#define EMISSIVEMAP_UV \\\"+e.emissiveMapUv:\\\"\\\",e.bumpMapUv?\\\"#define BUMPMAP_UV \\\"+e.bumpMapUv:\\\"\\\",e.normalMapUv?\\\"#define NORMALMAP_UV \\\"+e.normalMapUv:\\\"\\\",e.displacementMapUv?\\\"#define DISPLACEMENTMAP_UV \\\"+e.displacementMapUv:\\\"\\\",e.metalnessMapUv?\\\"#define METALNESSMAP_UV \\\"+e.metalnessMapUv:\\\"\\\",e.roughnessMapUv?\\\"#define ROUGHNESSMAP_UV \\\"+e.roughnessMapUv:\\\"\\\",e.anisotropyMapUv?\\\"#define ANISOTROPYMAP_UV \\\"+e.anisotropyMapUv:\\\"\\\",e.clearcoatMapUv?\\\"#define CLEARCOATMAP_UV \\\"+e.clearcoatMapUv:\\\"\\\",e.clearcoatNormalMapUv?\\\"#define CLEARCOAT_NORMALMAP_UV \\\"+e.clearcoatNormalMapUv:\\\"\\\",e.clearcoatRoughnessMapUv?\\\"#define CLEARCOAT_ROUGHNESSMAP_UV \\\"+e.clearcoatRoughnessMapUv:\\\"\\\",e.iridescenceMapUv?\\\"#define IRIDESCENCEMAP_UV \\\"+e.iridescenceMapUv:\\\"\\\",e.iridescenceThicknessMapUv?\\\"#define IRIDESCENCE_THICKNESSMAP_UV \\\"+e.iridescenceThicknessMapUv:\\\"\\\",e.sheenColorMapUv?\\\"#define SHEEN_COLORMAP_UV \\\"+e.sheenColorMapUv:\\\"\\\",e.sheenRoughnessMapUv?\\\"#define SHEEN_ROUGHNESSMAP_UV \\\"+e.sheenRoughnessMapUv:\\\"\\\",e.specularMapUv?\\\"#define SPECULARMAP_UV \\\"+e.specularMapUv:\\\"\\\",e.specularColorMapUv?\\\"#define SPECULAR_COLORMAP_UV \\\"+e.specularColorMapUv:\\\"\\\",e.specularIntensityMapUv?\\\"#define SPECULAR_INTENSITYMAP_UV \\\"+e.specularIntensityMapUv:\\\"\\\",e.transmissionMapUv?\\\"#define TRANSMISSIONMAP_UV \\\"+e.transmissionMapUv:\\\"\\\",e.thicknessMapUv?\\\"#define THICKNESSMAP_UV \\\"+e.thicknessMapUv:\\\"\\\",e.vertexTangents&&e.flatShading===!1?\\\"#define USE_TANGENT\\\":\\\"\\\",e.vertexColors?\\\"#define USE_COLOR\\\":\\\"\\\",e.vertexAlphas?\\\"#define USE_COLOR_ALPHA\\\":\\\"\\\",e.vertexUv1s?\\\"#define USE_UV1\\\":\\\"\\\",e.vertexUv2s?\\\"#define USE_UV2\\\":\\\"\\\",e.vertexUv3s?\\\"#define USE_UV3\\\":\\\"\\\",e.pointsUvs?\\\"#define USE_POINTS_UV\\\":\\\"\\\",e.flatShading?\\\"#define FLAT_SHADED\\\":\\\"\\\",e.skinning?\\\"#define USE_SKINNING\\\":\\\"\\\",e.morphTargets?\\\"#define USE_MORPHTARGETS\\\":\\\"\\\",e.morphNormals&&e.flatShading===!1?\\\"#define USE_MORPHNORMALS\\\":\\\"\\\",e.morphColors&&e.isWebGL2?\\\"#define USE_MORPHCOLORS\\\":\\\"\\\",e.morphTargetsCount>0&&e.isWebGL2?\\\"#define MORPHTARGETS_TEXTURE\\\":\\\"\\\",e.morphTargetsCount>0&&e.isWebGL2?\\\"#define MORPHTARGETS_TEXTURE_STRIDE \\\"+e.morphTextureStride:\\\"\\\",e.morphTargetsCount>0&&e.isWebGL2?\\\"#define MORPHTARGETS_COUNT \\\"+e.morphTargetsCount:\\\"\\\",e.doubleSided?\\\"#define DOUBLE_SIDED\\\":\\\"\\\",e.flipSided?\\\"#define FLIP_SIDED\\\":\\\"\\\",e.shadowMapEnabled?\\\"#define USE_SHADOWMAP\\\":\\\"\\\",e.shadowMapEnabled?\\\"#define \\\"+p:\\\"\\\",e.sizeAttenuation?\\\"#define USE_SIZEATTENUATION\\\":\\\"\\\",e.numLightProbes>0?\\\"#define USE_LIGHT_PROBES\\\":\\\"\\\",e.useLegacyLights?\\\"#define LEGACY_LIGHTS\\\":\\\"\\\",e.logarithmicDepthBuffer?\\\"#define USE_LOGDEPTHBUF\\\":\\\"\\\",e.logarithmicDepthBuffer&&e.rendererExtensionFragDepth?\\\"#define USE_LOGDEPTHBUF_EXT\\\":\\\"\\\",\\\"uniform mat4 modelMatrix;\\\",\\\"uniform mat4 modelViewMatrix;\\\",\\\"uniform mat4 projectionMatrix;\\\",\\\"uniform mat4 viewMatrix;\\\",\\\"uniform mat3 normalMatrix;\\\",\\\"uniform vec3 cameraPosition;\\\",\\\"uniform bool isOrthographic;\\\",\\\"#ifdef USE_INSTANCING\\\",\\\"\\tattribute mat4 instanceMatrix;\\\",\\\"#endif\\\",\\\"#ifdef USE_INSTANCING_COLOR\\\",\\\"\\tattribute vec3 instanceColor;\\\",\\\"#endif\\\",\\\"attribute vec3 position;\\\",\\\"attribute vec3 normal;\\\",\\\"attribute vec2 uv;\\\",\\\"#ifdef USE_UV1\\\",\\\"\\tattribute vec2 uv1;\\\",\\\"#endif\\\",\\\"#ifdef USE_UV2\\\",\\\"\\tattribute vec2 uv2;\\\",\\\"#endif\\\",\\\"#ifdef USE_UV3\\\",\\\"\\tattribute vec2 uv3;\\\",\\\"#endif\\\",\\\"#ifdef USE_TANGENT\\\",\\\"\\tattribute vec4 tangent;\\\",\\\"#endif\\\",\\\"#if defined( USE_COLOR_ALPHA )\\\",\\\"\\tattribute vec4 color;\\\",\\\"#elif defined( USE_COLOR )\\\",\\\"\\tattribute vec3 color;\\\",\\\"#endif\\\",\\\"#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )\\\",\\\"\\tattribute vec3 morphTarget0;\\\",\\\"\\tattribute vec3 morphTarget1;\\\",\\\"\\tattribute vec3 morphTarget2;\\\",\\\"\\tattribute vec3 morphTarget3;\\\",\\\"\\t#ifdef USE_MORPHNORMALS\\\",\\\"\\t\\tattribute vec3 morphNormal0;\\\",\\\"\\t\\tattribute vec3 morphNormal1;\\\",\\\"\\t\\tattribute vec3 morphNormal2;\\\",\\\"\\t\\tattribute vec3 morphNormal3;\\\",\\\"\\t#else\\\",\\\"\\t\\tattribute vec3 morphTarget4;\\\",\\\"\\t\\tattribute vec3 morphTarget5;\\\",\\\"\\t\\tattribute vec3 morphTarget6;\\\",\\\"\\t\\tattribute vec3 morphTarget7;\\\",\\\"\\t#endif\\\",\\\"#endif\\\",\\\"#ifdef USE_SKINNING\\\",\\\"\\tattribute vec4 skinIndex;\\\",\\\"\\tattribute vec4 skinWeight;\\\",\\\"#endif\\\",`\\n`].filter(Nu).join(`\\n`),v=[M,Ig(e),\\\"#define SHADER_TYPE \\\"+e.shaderType,\\\"#define SHADER_NAME \\\"+e.shaderName,w,e.useFog&&e.fog?\\\"#define USE_FOG\\\":\\\"\\\",e.useFog&&e.fogExp2?\\\"#define FOG_EXP2\\\":\\\"\\\",e.map?\\\"#define USE_MAP\\\":\\\"\\\",e.matcap?\\\"#define USE_MATCAP\\\":\\\"\\\",e.envMap?\\\"#define USE_ENVMAP\\\":\\\"\\\",e.envMap?\\\"#define \\\"+d:\\\"\\\",e.envMap?\\\"#define \\\"+g:\\\"\\\",e.envMap?\\\"#define \\\"+_:\\\"\\\",y?\\\"#define CUBEUV_TEXEL_WIDTH \\\"+y.texelWidth:\\\"\\\",y?\\\"#define CUBEUV_TEXEL_HEIGHT \\\"+y.texelHeight:\\\"\\\",y?\\\"#define CUBEUV_MAX_MIP \\\"+y.maxMip+\\\".0\\\":\\\"\\\",e.lightMap?\\\"#define USE_LIGHTMAP\\\":\\\"\\\",e.aoMap?\\\"#define USE_AOMAP\\\":\\\"\\\",e.bumpMap?\\\"#define USE_BUMPMAP\\\":\\\"\\\",e.normalMap?\\\"#define USE_NORMALMAP\\\":\\\"\\\",e.normalMapObjectSpace?\\\"#define USE_NORMALMAP_OBJECTSPACE\\\":\\\"\\\",e.normalMapTangentSpace?\\\"#define USE_NORMALMAP_TANGENTSPACE\\\":\\\"\\\",e.emissiveMap?\\\"#define USE_EMISSIVEMAP\\\":\\\"\\\",e.anisotropy?\\\"#define USE_ANISOTROPY\\\":\\\"\\\",e.anisotropyMap?\\\"#define USE_ANISOTROPYMAP\\\":\\\"\\\",e.clearcoat?\\\"#define USE_CLEARCOAT\\\":\\\"\\\",e.clearcoatMap?\\\"#define USE_CLEARCOATMAP\\\":\\\"\\\",e.clearcoatRoughnessMap?\\\"#define USE_CLEARCOAT_ROUGHNESSMAP\\\":\\\"\\\",e.clearcoatNormalMap?\\\"#define USE_CLEARCOAT_NORMALMAP\\\":\\\"\\\",e.iridescence?\\\"#define USE_IRIDESCENCE\\\":\\\"\\\",e.iridescenceMap?\\\"#define USE_IRIDESCENCEMAP\\\":\\\"\\\",e.iridescenceThicknessMap?\\\"#define USE_IRIDESCENCE_THICKNESSMAP\\\":\\\"\\\",e.specularMap?\\\"#define USE_SPECULARMAP\\\":\\\"\\\",e.specularColorMap?\\\"#define USE_SPECULAR_COLORMAP\\\":\\\"\\\",e.specularIntensityMap?\\\"#define USE_SPECULAR_INTENSITYMAP\\\":\\\"\\\",e.roughnessMap?\\\"#define USE_ROUGHNESSMAP\\\":\\\"\\\",e.metalnessMap?\\\"#define USE_METALNESSMAP\\\":\\\"\\\",e.alphaMap?\\\"#define USE_ALPHAMAP\\\":\\\"\\\",e.alphaTest?\\\"#define USE_ALPHATEST\\\":\\\"\\\",e.alphaHash?\\\"#define USE_ALPHAHASH\\\":\\\"\\\",e.sheen?\\\"#define USE_SHEEN\\\":\\\"\\\",e.sheenColorMap?\\\"#define USE_SHEEN_COLORMAP\\\":\\\"\\\",e.sheenRoughnessMap?\\\"#define USE_SHEEN_ROUGHNESSMAP\\\":\\\"\\\",e.transmission?\\\"#define USE_TRANSMISSION\\\":\\\"\\\",e.transmissionMap?\\\"#define USE_TRANSMISSIONMAP\\\":\\\"\\\",e.thicknessMap?\\\"#define USE_THICKNESSMAP\\\":\\\"\\\",e.vertexTangents&&e.flatShading===!1?\\\"#define USE_TANGENT\\\":\\\"\\\",e.vertexColors||e.instancingColor?\\\"#define USE_COLOR\\\":\\\"\\\",e.vertexAlphas?\\\"#define USE_COLOR_ALPHA\\\":\\\"\\\",e.vertexUv1s?\\\"#define USE_UV1\\\":\\\"\\\",e.vertexUv2s?\\\"#define USE_UV2\\\":\\\"\\\",e.vertexUv3s?\\\"#define USE_UV3\\\":\\\"\\\",e.pointsUvs?\\\"#define USE_POINTS_UV\\\":\\\"\\\",e.gradientMap?\\\"#define USE_GRADIENTMAP\\\":\\\"\\\",e.flatShading?\\\"#define FLAT_SHADED\\\":\\\"\\\",e.doubleSided?\\\"#define DOUBLE_SIDED\\\":\\\"\\\",e.flipSided?\\\"#define FLIP_SIDED\\\":\\\"\\\",e.shadowMapEnabled?\\\"#define USE_SHADOWMAP\\\":\\\"\\\",e.shadowMapEnabled?\\\"#define \\\"+p:\\\"\\\",e.premultipliedAlpha?\\\"#define PREMULTIPLIED_ALPHA\\\":\\\"\\\",e.numLightProbes>0?\\\"#define USE_LIGHT_PROBES\\\":\\\"\\\",e.useLegacyLights?\\\"#define LEGACY_LIGHTS\\\":\\\"\\\",e.decodeVideoTexture?\\\"#define DECODE_VIDEO_TEXTURE\\\":\\\"\\\",e.logarithmicDepthBuffer?\\\"#define USE_LOGDEPTHBUF\\\":\\\"\\\",e.logarithmicDepthBuffer&&e.rendererExtensionFragDepth?\\\"#define USE_LOGDEPTHBUF_EXT\\\":\\\"\\\",\\\"uniform mat4 viewMatrix;\\\",\\\"uniform vec3 cameraPosition;\\\",\\\"uniform bool isOrthographic;\\\",e.toneMapping!==ps?\\\"#define TONE_MAPPING\\\":\\\"\\\",e.toneMapping!==ps?ge.tonemapping_pars_fragment:\\\"\\\",e.toneMapping!==ps?Xw(\\\"toneMapping\\\",e.toneMapping):\\\"\\\",e.dithering?\\\"#define DITHERING\\\":\\\"\\\",e.opaque?\\\"#define OPAQUE\\\":\\\"\\\",ge.colorspace_pars_fragment,qw(\\\"linearToOutputTexel\\\",e.outputColorSpace),e.useDepthPacking?\\\"#define DEPTH_PACKING \\\"+e.depthPacking:\\\"\\\",`\\n`].filter(Nu).join(`\\n`)),f=Th(f),f=Ag(f,e),f=Cg(f,e),h=Th(h),h=Ag(h,e),h=Cg(h,e),f=Pg(f),h=Pg(h),e.isWebGL2&&e.isRawShaderMaterial!==!0&&(C=`#version 300 es\\n`,x=[\\\"precision mediump sampler2DArray;\\\",\\\"#define attribute in\\\",\\\"#define varying out\\\",\\\"#define texture2D texture\\\"].join(`\\n`)+`\\n`+x,v=[\\\"#define varying in\\\",e.glslVersion===Jm?\\\"\\\":\\\"layout(location = 0) out highp vec4 pc_fragColor;\\\",e.glslVersion===Jm?\\\"\\\":\\\"#define gl_FragColor pc_fragColor\\\",\\\"#define gl_FragDepthEXT gl_FragDepth\\\",\\\"#define texture2D texture\\\",\\\"#define textureCube texture\\\",\\\"#define texture2DProj textureProj\\\",\\\"#define texture2DLodEXT textureLod\\\",\\\"#define texture2DProjLodEXT textureProjLod\\\",\\\"#define textureCubeLodEXT textureLod\\\",\\\"#define texture2DGradEXT textureGrad\\\",\\\"#define texture2DProjGradEXT textureProjGrad\\\",\\\"#define textureCubeGradEXT textureGrad\\\"].join(`\\n`)+`\\n`+v);let S=C+x+f,O=C+v+h,F=bg(a,a.VERTEX_SHADER,S),G=bg(a,a.FRAGMENT_SHADER,O);if(a.attachShader(T,F),a.attachShader(T,G),e.index0AttributeName!==void 0?a.bindAttribLocation(T,0,e.index0AttributeName):e.morphTargets===!0&&a.bindAttribLocation(T,0,\\\"position\\\"),a.linkProgram(T),r.debug.checkShaderErrors){let D=a.getProgramInfoLog(T).trim(),q=a.getShaderInfoLog(F).trim(),nt=a.getShaderInfoLog(G).trim(),k=!0,xt=!0;if(a.getProgramParameter(T,a.LINK_STATUS)===!1)if(k=!1,typeof r.debug.onShaderError==\\\"function\\\")r.debug.onShaderError(a,T,F,G);else{let X=Tg(a,F,\\\"vertex\\\"),it=Tg(a,G,\\\"fragment\\\");console.error(\\\"THREE.WebGLProgram: Shader Error \\\"+a.getError()+\\\" - VALIDATE_STATUS \\\"+a.getProgramParameter(T,a.VALIDATE_STATUS)+`\\n\\nProgram Info Log: `+D+`\\n`+X+`\\n`+it)}else D!==\\\"\\\"?console.warn(\\\"THREE.WebGLProgram: Program Info Log:\\\",D):(q===\\\"\\\"||nt===\\\"\\\")&&(xt=!1);xt&&(this.diagnostics={runnable:k,programLog:D,vertexShader:{log:q,prefix:x},fragmentShader:{log:nt,prefix:v}})}a.deleteShader(F),a.deleteShader(G);let z;this.getUniforms=function(){return z===void 0&&(z=new ka(a,T)),z};let L;return this.getAttributes=function(){return L===void 0&&(L=Jw(a,T)),L},this.destroy=function(){o.releaseStatesOfProgram(this),a.deleteProgram(T),this.program=void 0},this.type=e.shaderType,this.name=e.shaderName,this.id=Vw++,this.cacheKey=t,this.usedTimes=1,this.program=T,this.vertexShader=F,this.fragmentShader=G,this}var ab=0,Ah=class{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(t){let e=t.vertexShader,o=t.fragmentShader,a=this._getShaderStage(e),l=this._getShaderStage(o),f=this._getShaderCacheForMaterial(t);return f.has(a)===!1&&(f.add(a),a.usedTimes++),f.has(l)===!1&&(f.add(l),l.usedTimes++),this}remove(t){let e=this.materialCache.get(t);for(let o of e)o.usedTimes--,o.usedTimes===0&&this.shaderCache.delete(o.code);return this.materialCache.delete(t),this}getVertexShaderID(t){return this._getShaderStage(t.vertexShader).id}getFragmentShaderID(t){return this._getShaderStage(t.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(t){let e=this.materialCache,o=e.get(t);return o===void 0&&(o=new Set,e.set(t,o)),o}_getShaderStage(t){let e=this.shaderCache,o=e.get(t);return o===void 0&&(o=new Ch(t),e.set(t,o)),o}},Ch=class{constructor(t){this.id=ab++,this.code=t,this.usedTimes=0}};function ub(r,t,e,o,a,l,f){let h=new oc,p=new Ah,d=[],g=a.isWebGL2,_=a.logarithmicDepthBuffer,y=a.vertexTextures,M=a.precision,w={MeshDepthMaterial:\\\"depth\\\",MeshDistanceMaterial:\\\"distanceRGBA\\\",MeshNormalMaterial:\\\"normal\\\",MeshBasicMaterial:\\\"basic\\\",MeshLambertMaterial:\\\"lambert\\\",MeshPhongMaterial:\\\"phong\\\",MeshToonMaterial:\\\"toon\\\",MeshStandardMaterial:\\\"physical\\\",MeshPhysicalMaterial:\\\"physical\\\",MeshMatcapMaterial:\\\"matcap\\\",LineBasicMaterial:\\\"basic\\\",LineDashedMaterial:\\\"dashed\\\",PointsMaterial:\\\"points\\\",ShadowMaterial:\\\"shadow\\\",SpriteMaterial:\\\"sprite\\\"};function T(D){return D===0?\\\"uv\\\":`uv${D}`}function x(D,q,nt,k,xt){let X=k.fog,it=xt.geometry,vt=D.isMeshStandardMaterial?k.environment:null,pt=(D.isMeshStandardMaterial?e:t).get(D.envMap||vt),et=pt&&pt.mapping===pc?pt.image.height:null,ot=w[D.type];D.precision!==null&&(M=a.getMaxPrecision(D.precision),M!==D.precision&&console.warn(\\\"THREE.WebGLProgram.getParameters:\\\",D.precision,\\\"not supported, using\\\",M,\\\"instead.\\\"));let V=it.morphAttributes.position||it.morphAttributes.normal||it.morphAttributes.color,K=V!==void 0?V.length:0,at=0;it.morphAttributes.position!==void 0&&(at=1),it.morphAttributes.normal!==void 0&&(at=2),it.morphAttributes.color!==void 0&&(at=3);let Tt,dt,Ct,Yt;if(ot){let He=co[ot];Tt=He.vertexShader,dt=He.fragmentShader}else Tt=D.vertexShader,dt=D.fragmentShader,p.update(D),Ct=p.getVertexShaderID(D),Yt=p.getFragmentShaderID(D);let Wt=r.getRenderTarget(),Nt=xt.isInstancedMesh===!0,ne=!!D.map,Pt=!!D.matcap,Xt=!!pt,tt=!!D.aoMap,nn=!!D.lightMap,Gt=!!D.bumpMap,te=!!D.normalMap,qt=!!D.displacementMap,$=!!D.emissiveMap,N=!!D.metalnessMap,b=!!D.roughnessMap,R=D.anisotropy>0,W=D.clearcoat>0,J=D.iridescence>0,I=D.sheen>0,P=D.transmission>0,B=R&&!!D.anisotropyMap,lt=W&&!!D.clearcoatMap,ct=W&&!!D.clearcoatNormalMap,Q=W&&!!D.clearcoatRoughnessMap,St=J&&!!D.iridescenceMap,_t=J&&!!D.iridescenceThicknessMap,Mt=I&&!!D.sheenColorMap,Lt=I&&!!D.sheenRoughnessMap,$t=!!D.specularMap,Et=!!D.specularColorMap,oe=!!D.specularIntensityMap,jt=P&&!!D.transmissionMap,Ht=P&&!!D.thicknessMap,Ot=!!D.gradientMap,Y=!!D.alphaMap,wt=D.alphaTest>0,j=!!D.alphaHash,Ut=!!D.extensions,Dt=!!it.attributes.uv1,ft=!!it.attributes.uv2,Kt=!!it.attributes.uv3,re=ps;return D.toneMapped&&(Wt===null||Wt.isXRRenderTarget===!0)&&(re=r.toneMapping),{isWebGL2:g,shaderID:ot,shaderType:D.type,shaderName:D.name,vertexShader:Tt,fragmentShader:dt,defines:D.defines,customVertexShaderID:Ct,customFragmentShaderID:Yt,isRawShaderMaterial:D.isRawShaderMaterial===!0,glslVersion:D.glslVersion,precision:M,instancing:Nt,instancingColor:Nt&&xt.instanceColor!==null,supportsVertexTextures:y,outputColorSpace:Wt===null?r.outputColorSpace:Wt.isXRRenderTarget===!0?Wt.texture.colorSpace:Xo,map:ne,matcap:Pt,envMap:Xt,envMapMode:Xt&&pt.mapping,envMapCubeUVHeight:et,aoMap:tt,lightMap:nn,bumpMap:Gt,normalMap:te,displacementMap:y&&qt,emissiveMap:$,normalMapObjectSpace:te&&D.normalMapType===Cx,normalMapTangentSpace:te&&D.normalMapType===Ax,metalnessMap:N,roughnessMap:b,anisotropy:R,anisotropyMap:B,clearcoat:W,clearcoatMap:lt,clearcoatNormalMap:ct,clearcoatRoughnessMap:Q,iridescence:J,iridescenceMap:St,iridescenceThicknessMap:_t,sheen:I,sheenColorMap:Mt,sheenRoughnessMap:Lt,specularMap:$t,specularColorMap:Et,specularIntensityMap:oe,transmission:P,transmissionMap:jt,thicknessMap:Ht,gradientMap:Ot,opaque:D.transparent===!1&&D.blending===Ba,alphaMap:Y,alphaTest:wt,alphaHash:j,combine:D.combine,mapUv:ne&&T(D.map.channel),aoMapUv:tt&&T(D.aoMap.channel),lightMapUv:nn&&T(D.lightMap.channel),bumpMapUv:Gt&&T(D.bumpMap.channel),normalMapUv:te&&T(D.normalMap.channel),displacementMapUv:qt&&T(D.displacementMap.channel),emissiveMapUv:$&&T(D.emissiveMap.channel),metalnessMapUv:N&&T(D.metalnessMap.channel),roughnessMapUv:b&&T(D.roughnessMap.channel),anisotropyMapUv:B&&T(D.anisotropyMap.channel),clearcoatMapUv:lt&&T(D.clearcoatMap.channel),clearcoatNormalMapUv:ct&&T(D.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:Q&&T(D.clearcoatRoughnessMap.channel),iridescenceMapUv:St&&T(D.iridescenceMap.channel),iridescenceThicknessMapUv:_t&&T(D.iridescenceThicknessMap.channel),sheenColorMapUv:Mt&&T(D.sheenColorMap.channel),sheenRoughnessMapUv:Lt&&T(D.sheenRoughnessMap.channel),specularMapUv:$t&&T(D.specularMap.channel),specularColorMapUv:Et&&T(D.specularColorMap.channel),specularIntensityMapUv:oe&&T(D.specularIntensityMap.channel),transmissionMapUv:jt&&T(D.transmissionMap.channel),thicknessMapUv:Ht&&T(D.thicknessMap.channel),alphaMapUv:Y&&T(D.alphaMap.channel),vertexTangents:!!it.attributes.tangent&&(te||R),vertexColors:D.vertexColors,vertexAlphas:D.vertexColors===!0&&!!it.attributes.color&&it.attributes.color.itemSize===4,vertexUv1s:Dt,vertexUv2s:ft,vertexUv3s:Kt,pointsUvs:xt.isPoints===!0&&!!it.attributes.uv&&(ne||Y),fog:!!X,useFog:D.fog===!0,fogExp2:X&&X.isFogExp2,flatShading:D.flatShading===!0,sizeAttenuation:D.sizeAttenuation===!0,logarithmicDepthBuffer:_,skinning:xt.isSkinnedMesh===!0,morphTargets:it.morphAttributes.position!==void 0,morphNormals:it.morphAttributes.normal!==void 0,morphColors:it.morphAttributes.color!==void 0,morphTargetsCount:K,morphTextureStride:at,numDirLights:q.directional.length,numPointLights:q.point.length,numSpotLights:q.spot.length,numSpotLightMaps:q.spotLightMap.length,numRectAreaLights:q.rectArea.length,numHemiLights:q.hemi.length,numDirLightShadows:q.directionalShadowMap.length,numPointLightShadows:q.pointShadowMap.length,numSpotLightShadows:q.spotShadowMap.length,numSpotLightShadowsWithMaps:q.numSpotLightShadowsWithMaps,numLightProbes:q.numLightProbes,numClippingPlanes:f.numPlanes,numClipIntersection:f.numIntersection,dithering:D.dithering,shadowMapEnabled:r.shadowMap.enabled&&nt.length>0,shadowMapType:r.shadowMap.type,toneMapping:re,useLegacyLights:r._useLegacyLights,decodeVideoTexture:ne&&D.map.isVideoTexture===!0&&gn.getTransfer(D.map.colorSpace)===Tn,premultipliedAlpha:D.premultipliedAlpha,doubleSided:D.side===Ho,flipSided:D.side===li,useDepthPacking:D.depthPacking>=0,depthPacking:D.depthPacking||0,index0AttributeName:D.index0AttributeName,extensionDerivatives:Ut&&D.extensions.derivatives===!0,extensionFragDepth:Ut&&D.extensions.fragDepth===!0,extensionDrawBuffers:Ut&&D.extensions.drawBuffers===!0,extensionShaderTextureLOD:Ut&&D.extensions.shaderTextureLOD===!0,rendererExtensionFragDepth:g||o.has(\\\"EXT_frag_depth\\\"),rendererExtensionDrawBuffers:g||o.has(\\\"WEBGL_draw_buffers\\\"),rendererExtensionShaderTextureLod:g||o.has(\\\"EXT_shader_texture_lod\\\"),customProgramCacheKey:D.customProgramCacheKey()}}function v(D){let q=[];if(D.shaderID?q.push(D.shaderID):(q.push(D.customVertexShaderID),q.push(D.customFragmentShaderID)),D.defines!==void 0)for(let nt in D.defines)q.push(nt),q.push(D.defines[nt]);return D.isRawShaderMaterial===!1&&(C(q,D),S(q,D),q.push(r.outputColorSpace)),q.push(D.customProgramCacheKey),q.join()}function C(D,q){D.push(q.precision),D.push(q.outputColorSpace),D.push(q.envMapMode),D.push(q.envMapCubeUVHeight),D.push(q.mapUv),D.push(q.alphaMapUv),D.push(q.lightMapUv),D.push(q.aoMapUv),D.push(q.bumpMapUv),D.push(q.normalMapUv),D.push(q.displacementMapUv),D.push(q.emissiveMapUv),D.push(q.metalnessMapUv),D.push(q.roughnessMapUv),D.push(q.anisotropyMapUv),D.push(q.clearcoatMapUv),D.push(q.clearcoatNormalMapUv),D.push(q.clearcoatRoughnessMapUv),D.push(q.iridescenceMapUv),D.push(q.iridescenceThicknessMapUv),D.push(q.sheenColorMapUv),D.push(q.sheenRoughnessMapUv),D.push(q.specularMapUv),D.push(q.specularColorMapUv),D.push(q.specularIntensityMapUv),D.push(q.transmissionMapUv),D.push(q.thicknessMapUv),D.push(q.combine),D.push(q.fogExp2),D.push(q.sizeAttenuation),D.push(q.morphTargetsCount),D.push(q.morphAttributeCount),D.push(q.numDirLights),D.push(q.numPointLights),D.push(q.numSpotLights),D.push(q.numSpotLightMaps),D.push(q.numHemiLights),D.push(q.numRectAreaLights),D.push(q.numDirLightShadows),D.push(q.numPointLightShadows),D.push(q.numSpotLightShadows),D.push(q.numSpotLightShadowsWithMaps),D.push(q.numLightProbes),D.push(q.shadowMapType),D.push(q.toneMapping),D.push(q.numClippingPlanes),D.push(q.numClipIntersection),D.push(q.depthPacking)}function S(D,q){h.disableAll(),q.isWebGL2&&h.enable(0),q.supportsVertexTextures&&h.enable(1),q.instancing&&h.enable(2),q.instancingColor&&h.enable(3),q.matcap&&h.enable(4),q.envMap&&h.enable(5),q.normalMapObjectSpace&&h.enable(6),q.normalMapTangentSpace&&h.enable(7),q.clearcoat&&h.enable(8),q.iridescence&&h.enable(9),q.alphaTest&&h.enable(10),q.vertexColors&&h.enable(11),q.vertexAlphas&&h.enable(12),q.vertexUv1s&&h.enable(13),q.vertexUv2s&&h.enable(14),q.vertexUv3s&&h.enable(15),q.vertexTangents&&h.enable(16),q.anisotropy&&h.enable(17),D.push(h.mask),h.disableAll(),q.fog&&h.enable(0),q.useFog&&h.enable(1),q.flatShading&&h.enable(2),q.logarithmicDepthBuffer&&h.enable(3),q.skinning&&h.enable(4),q.morphTargets&&h.enable(5),q.morphNormals&&h.enable(6),q.morphColors&&h.enable(7),q.premultipliedAlpha&&h.enable(8),q.shadowMapEnabled&&h.enable(9),q.useLegacyLights&&h.enable(10),q.doubleSided&&h.enable(11),q.flipSided&&h.enable(12),q.useDepthPacking&&h.enable(13),q.dithering&&h.enable(14),q.transmission&&h.enable(15),q.sheen&&h.enable(16),q.opaque&&h.enable(17),q.pointsUvs&&h.enable(18),q.decodeVideoTexture&&h.enable(19),D.push(h.mask)}function O(D){let q=w[D.type],nt;if(q){let k=co[q];nt=eE.clone(k.uniforms)}else nt=D.uniforms;return nt}function F(D,q){let nt;for(let k=0,xt=d.length;k<xt;k++){let X=d[k];if(X.cacheKey===q){nt=X,++nt.usedTimes;break}}return nt===void 0&&(nt=new sb(r,q,D,l),d.push(nt)),nt}function G(D){if(--D.usedTimes===0){let q=d.indexOf(D);d[q]=d[d.length-1],d.pop(),D.destroy()}}function z(D){p.remove(D)}function L(){p.dispose()}return{getParameters:x,getProgramCacheKey:v,getUniforms:O,acquireProgram:F,releaseProgram:G,releaseShaderCache:z,programs:d,dispose:L}}function lb(){let r=new WeakMap;function t(l){let f=r.get(l);return f===void 0&&(f={},r.set(l,f)),f}function e(l){r.delete(l)}function o(l,f,h){r.get(l)[f]=h}function a(){r=new WeakMap}return{get:t,remove:e,update:o,dispose:a}}function cb(r,t){return r.groupOrder!==t.groupOrder?r.groupOrder-t.groupOrder:r.renderOrder!==t.renderOrder?r.renderOrder-t.renderOrder:r.material.id!==t.material.id?r.material.id-t.material.id:r.z!==t.z?r.z-t.z:r.id-t.id}function Rg(r,t){return r.groupOrder!==t.groupOrder?r.groupOrder-t.groupOrder:r.renderOrder!==t.renderOrder?r.renderOrder-t.renderOrder:r.z!==t.z?t.z-r.z:r.id-t.id}function Lg(){let r=[],t=0,e=[],o=[],a=[];function l(){t=0,e.length=0,o.length=0,a.length=0}function f(_,y,M,w,T,x){let v=r[t];return v===void 0?(v={id:_.id,object:_,geometry:y,material:M,groupOrder:w,renderOrder:_.renderOrder,z:T,group:x},r[t]=v):(v.id=_.id,v.object=_,v.geometry=y,v.material=M,v.groupOrder=w,v.renderOrder=_.renderOrder,v.z=T,v.group=x),t++,v}function h(_,y,M,w,T,x){let v=f(_,y,M,w,T,x);M.transmission>0?o.push(v):M.transparent===!0?a.push(v):e.push(v)}function p(_,y,M,w,T,x){let v=f(_,y,M,w,T,x);M.transmission>0?o.unshift(v):M.transparent===!0?a.unshift(v):e.unshift(v)}function d(_,y){e.length>1&&e.sort(_||cb),o.length>1&&o.sort(y||Rg),a.length>1&&a.sort(y||Rg)}function g(){for(let _=t,y=r.length;_<y;_++){let M=r[_];if(M.id===null)break;M.id=null,M.object=null,M.geometry=null,M.material=null,M.group=null}}return{opaque:e,transmissive:o,transparent:a,init:l,push:h,unshift:p,finish:g,sort:d}}function fb(){let r=new WeakMap;function t(o,a){let l=r.get(o),f;return l===void 0?(f=new Lg,r.set(o,[f])):a>=l.length?(f=new Lg,l.push(f)):f=l[a],f}function e(){r=new WeakMap}return{get:t,dispose:e}}function hb(){let r={};return{get:function(t){if(r[t.id]!==void 0)return r[t.id];let e;switch(t.type){case\\\"DirectionalLight\\\":e={direction:new mt,color:new xn};break;case\\\"SpotLight\\\":e={position:new mt,direction:new mt,color:new xn,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case\\\"PointLight\\\":e={position:new mt,color:new xn,distance:0,decay:0};break;case\\\"HemisphereLight\\\":e={direction:new mt,skyColor:new xn,groundColor:new xn};break;case\\\"RectAreaLight\\\":e={color:new xn,position:new mt,halfWidth:new mt,halfHeight:new mt};break}return r[t.id]=e,e}}}function pb(){let r={};return{get:function(t){if(r[t.id]!==void 0)return r[t.id];let e;switch(t.type){case\\\"DirectionalLight\\\":e={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new fn};break;case\\\"SpotLight\\\":e={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new fn};break;case\\\"PointLight\\\":e={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new fn,shadowCameraNear:1,shadowCameraFar:1e3};break}return r[t.id]=e,e}}}var db=0;function mb(r,t){return(t.castShadow?2:0)-(r.castShadow?2:0)+(t.map?1:0)-(r.map?1:0)}function gb(r,t){let e=new hb,o=pb(),a={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let g=0;g<9;g++)a.probe.push(new mt);let l=new mt,f=new zr,h=new zr;function p(g,_){let y=0,M=0,w=0;for(let k=0;k<9;k++)a.probe[k].set(0,0,0);let T=0,x=0,v=0,C=0,S=0,O=0,F=0,G=0,z=0,L=0,D=0;g.sort(mb);let q=_===!0?Math.PI:1;for(let k=0,xt=g.length;k<xt;k++){let X=g[k],it=X.color,vt=X.intensity,pt=X.distance,et=X.shadow&&X.shadow.map?X.shadow.map.texture:null;if(X.isAmbientLight)y+=it.r*vt*q,M+=it.g*vt*q,w+=it.b*vt*q;else if(X.isLightProbe){for(let ot=0;ot<9;ot++)a.probe[ot].addScaledVector(X.sh.coefficients[ot],vt);D++}else if(X.isDirectionalLight){let ot=e.get(X);if(ot.color.copy(X.color).multiplyScalar(X.intensity*q),X.castShadow){let V=X.shadow,K=o.get(X);K.shadowBias=V.bias,K.shadowNormalBias=V.normalBias,K.shadowRadius=V.radius,K.shadowMapSize=V.mapSize,a.directionalShadow[T]=K,a.directionalShadowMap[T]=et,a.directionalShadowMatrix[T]=X.shadow.matrix,O++}a.directional[T]=ot,T++}else if(X.isSpotLight){let ot=e.get(X);ot.position.setFromMatrixPosition(X.matrixWorld),ot.color.copy(it).multiplyScalar(vt*q),ot.distance=pt,ot.coneCos=Math.cos(X.angle),ot.penumbraCos=Math.cos(X.angle*(1-X.penumbra)),ot.decay=X.decay,a.spot[v]=ot;let V=X.shadow;if(X.map&&(a.spotLightMap[z]=X.map,z++,V.updateMatrices(X),X.castShadow&&L++),a.spotLightMatrix[v]=V.matrix,X.castShadow){let K=o.get(X);K.shadowBias=V.bias,K.shadowNormalBias=V.normalBias,K.shadowRadius=V.radius,K.shadowMapSize=V.mapSize,a.spotShadow[v]=K,a.spotShadowMap[v]=et,G++}v++}else if(X.isRectAreaLight){let ot=e.get(X);ot.color.copy(it).multiplyScalar(vt),ot.halfWidth.set(X.width*.5,0,0),ot.halfHeight.set(0,X.height*.5,0),a.rectArea[C]=ot,C++}else if(X.isPointLight){let ot=e.get(X);if(ot.color.copy(X.color).multiplyScalar(X.intensity*q),ot.distance=X.distance,ot.decay=X.decay,X.castShadow){let V=X.shadow,K=o.get(X);K.shadowBias=V.bias,K.shadowNormalBias=V.normalBias,K.shadowRadius=V.radius,K.shadowMapSize=V.mapSize,K.shadowCameraNear=V.camera.near,K.shadowCameraFar=V.camera.far,a.pointShadow[x]=K,a.pointShadowMap[x]=et,a.pointShadowMatrix[x]=X.shadow.matrix,F++}a.point[x]=ot,x++}else if(X.isHemisphereLight){let ot=e.get(X);ot.skyColor.copy(X.color).multiplyScalar(vt*q),ot.groundColor.copy(X.groundColor).multiplyScalar(vt*q),a.hemi[S]=ot,S++}}C>0&&(t.isWebGL2||r.has(\\\"OES_texture_float_linear\\\")===!0?(a.rectAreaLTC1=zt.LTC_FLOAT_1,a.rectAreaLTC2=zt.LTC_FLOAT_2):r.has(\\\"OES_texture_half_float_linear\\\")===!0?(a.rectAreaLTC1=zt.LTC_HALF_1,a.rectAreaLTC2=zt.LTC_HALF_2):console.error(\\\"THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.\\\")),a.ambient[0]=y,a.ambient[1]=M,a.ambient[2]=w;let nt=a.hash;(nt.directionalLength!==T||nt.pointLength!==x||nt.spotLength!==v||nt.rectAreaLength!==C||nt.hemiLength!==S||nt.numDirectionalShadows!==O||nt.numPointShadows!==F||nt.numSpotShadows!==G||nt.numSpotMaps!==z||nt.numLightProbes!==D)&&(a.directional.length=T,a.spot.length=v,a.rectArea.length=C,a.point.length=x,a.hemi.length=S,a.directionalShadow.length=O,a.directionalShadowMap.length=O,a.pointShadow.length=F,a.pointShadowMap.length=F,a.spotShadow.length=G,a.spotShadowMap.length=G,a.directionalShadowMatrix.length=O,a.pointShadowMatrix.length=F,a.spotLightMatrix.length=G+z-L,a.spotLightMap.length=z,a.numSpotLightShadowsWithMaps=L,a.numLightProbes=D,nt.directionalLength=T,nt.pointLength=x,nt.spotLength=v,nt.rectAreaLength=C,nt.hemiLength=S,nt.numDirectionalShadows=O,nt.numPointShadows=F,nt.numSpotShadows=G,nt.numSpotMaps=z,nt.numLightProbes=D,a.version=db++)}function d(g,_){let y=0,M=0,w=0,T=0,x=0,v=_.matrixWorldInverse;for(let C=0,S=g.length;C<S;C++){let O=g[C];if(O.isDirectionalLight){let F=a.directional[y];F.direction.setFromMatrixPosition(O.matrixWorld),l.setFromMatrixPosition(O.target.matrixWorld),F.direction.sub(l),F.direction.transformDirection(v),y++}else if(O.isSpotLight){let F=a.spot[w];F.position.setFromMatrixPosition(O.matrixWorld),F.position.applyMatrix4(v),F.direction.setFromMatrixPosition(O.matrixWorld),l.setFromMatrixPosition(O.target.matrixWorld),F.direction.sub(l),F.direction.transformDirection(v),w++}else if(O.isRectAreaLight){let F=a.rectArea[T];F.position.setFromMatrixPosition(O.matrixWorld),F.position.applyMatrix4(v),h.identity(),f.copy(O.matrixWorld),f.premultiply(v),h.extractRotation(f),F.halfWidth.set(O.width*.5,0,0),F.halfHeight.set(0,O.height*.5,0),F.halfWidth.applyMatrix4(h),F.halfHeight.applyMatrix4(h),T++}else if(O.isPointLight){let F=a.point[M];F.position.setFromMatrixPosition(O.matrixWorld),F.position.applyMatrix4(v),M++}else if(O.isHemisphereLight){let F=a.hemi[x];F.direction.setFromMatrixPosition(O.matrixWorld),F.direction.transformDirection(v),x++}}}return{setup:p,setupView:d,state:a}}function Ng(r,t){let e=new gb(r,t),o=[],a=[];function l(){o.length=0,a.length=0}function f(_){o.push(_)}function h(_){a.push(_)}function p(_){e.setup(o,_)}function d(_){e.setupView(o,_)}return{init:l,state:{lightsArray:o,shadowsArray:a,lights:e},setupLights:p,setupLightsView:d,pushLight:f,pushShadow:h}}function yb(r,t){let e=new WeakMap;function o(l,f=0){let h=e.get(l),p;return h===void 0?(p=new Ng(r,t),e.set(l,[p])):f>=h.length?(p=new Ng(r,t),h.push(p)):p=h[f],p}function a(){e=new WeakMap}return{get:o,dispose:a}}var Ph=class extends Wa{constructor(t){super(),this.isMeshDepthMaterial=!0,this.type=\\\"MeshDepthMaterial\\\",this.depthPacking=bx,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}},Ih=class extends Wa{constructor(t){super(),this.isMeshDistanceMaterial=!0,this.type=\\\"MeshDistanceMaterial\\\",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(t)}copy(t){return super.copy(t),this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}},vb=`void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}`,_b=`uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include <packing>\\nvoid main() {\\n\\tconst float samples = float( VSM_SAMPLES );\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\\n\\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\\n\\tfor ( float i = 0.0; i < samples; i ++ ) {\\n\\t\\tfloat uvOffset = uvStart + i * uvStride;\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean / samples;\\n\\tsquared_mean = squared_mean / samples;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}`;function xb(r,t,e){let o=new fc,a=new fn,l=new fn,f=new Tr,h=new Ph({depthPacking:Tx}),p=new Ih,d={},g=e.maxTextureSize,_={[ms]:li,[li]:ms,[Ho]:Ho},y=new Zo({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new fn},radius:{value:4}},vertexShader:vb,fragmentShader:_b}),M=y.clone();M.defines.HORIZONTAL_PASS=1;let w=new Zs;w.setAttribute(\\\"position\\\",new Fi(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));let T=new fo(w,y),x=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=Og;let v=this.type;this.render=function(F,G,z){if(x.enabled===!1||x.autoUpdate===!1&&x.needsUpdate===!1||F.length===0)return;let L=r.getRenderTarget(),D=r.getActiveCubeFace(),q=r.getActiveMipmapLevel(),nt=r.state;nt.setBlending(hs),nt.buffers.color.setClear(1,1,1,1),nt.buffers.depth.setTest(!0),nt.setScissorTest(!1);let k=v!==Go&&this.type===Go,xt=v===Go&&this.type!==Go;for(let X=0,it=F.length;X<it;X++){let vt=F[X],pt=vt.shadow;if(pt===void 0){console.warn(\\\"THREE.WebGLShadowMap:\\\",vt,\\\"has no shadow.\\\");continue}if(pt.autoUpdate===!1&&pt.needsUpdate===!1)continue;a.copy(pt.mapSize);let et=pt.getFrameExtents();if(a.multiply(et),l.copy(pt.mapSize),(a.x>g||a.y>g)&&(a.x>g&&(l.x=Math.floor(g/et.x),a.x=l.x*et.x,pt.mapSize.x=l.x),a.y>g&&(l.y=Math.floor(g/et.y),a.y=l.y*et.y,pt.mapSize.y=l.y)),pt.map===null||k===!0||xt===!0){let V=this.type!==Go?{minFilter:$r,magFilter:$r}:{};pt.map!==null&&pt.map.dispose(),pt.map=new Yo(a.x,a.y,V),pt.map.texture.name=vt.name+\\\".shadowMap\\\",pt.camera.updateProjectionMatrix()}r.setRenderTarget(pt.map),r.clear();let ot=pt.getViewportCount();for(let V=0;V<ot;V++){let K=pt.getViewport(V);f.set(l.x*K.x,l.y*K.y,l.x*K.z,l.y*K.w),nt.viewport(f),pt.updateMatrices(vt,V),o=pt.getFrustum(),O(G,z,pt.camera,vt,this.type)}pt.isPointLightShadow!==!0&&this.type===Go&&C(pt,z),pt.needsUpdate=!1}v=this.type,x.needsUpdate=!1,r.setRenderTarget(L,D,q)};function C(F,G){let z=t.update(T);y.defines.VSM_SAMPLES!==F.blurSamples&&(y.defines.VSM_SAMPLES=F.blurSamples,M.defines.VSM_SAMPLES=F.blurSamples,y.needsUpdate=!0,M.needsUpdate=!0),F.mapPass===null&&(F.mapPass=new Yo(a.x,a.y)),y.uniforms.shadow_pass.value=F.map.texture,y.uniforms.resolution.value=F.mapSize,y.uniforms.radius.value=F.radius,r.setRenderTarget(F.mapPass),r.clear(),r.renderBufferDirect(G,null,z,y,T,null),M.uniforms.shadow_pass.value=F.mapPass.texture,M.uniforms.resolution.value=F.mapSize,M.uniforms.radius.value=F.radius,r.setRenderTarget(F.map),r.clear(),r.renderBufferDirect(G,null,z,M,T,null)}function S(F,G,z,L){let D=null,q=z.isPointLight===!0?F.customDistanceMaterial:F.customDepthMaterial;if(q!==void 0)D=q;else if(D=z.isPointLight===!0?p:h,r.localClippingEnabled&&G.clipShadows===!0&&Array.isArray(G.clippingPlanes)&&G.clippingPlanes.length!==0||G.displacementMap&&G.displacementScale!==0||G.alphaMap&&G.alphaTest>0||G.map&&G.alphaTest>0){let nt=D.uuid,k=G.uuid,xt=d[nt];xt===void 0&&(xt={},d[nt]=xt);let X=xt[k];X===void 0&&(X=D.clone(),xt[k]=X),D=X}if(D.visible=G.visible,D.wireframe=G.wireframe,L===Go?D.side=G.shadowSide!==null?G.shadowSide:G.side:D.side=G.shadowSide!==null?G.shadowSide:_[G.side],D.alphaMap=G.alphaMap,D.alphaTest=G.alphaTest,D.map=G.map,D.clipShadows=G.clipShadows,D.clippingPlanes=G.clippingPlanes,D.clipIntersection=G.clipIntersection,D.displacementMap=G.displacementMap,D.displacementScale=G.displacementScale,D.displacementBias=G.displacementBias,D.wireframeLinewidth=G.wireframeLinewidth,D.linewidth=G.linewidth,z.isPointLight===!0&&D.isMeshDistanceMaterial===!0){let nt=r.properties.get(D);nt.light=z}return D}function O(F,G,z,L,D){if(F.visible===!1)return;if(F.layers.test(G.layers)&&(F.isMesh||F.isLine||F.isPoints)&&(F.castShadow||F.receiveShadow&&D===Go)&&(!F.frustumCulled||o.intersectsObject(F))){F.modelViewMatrix.multiplyMatrices(z.matrixWorldInverse,F.matrixWorld);let k=t.update(F),xt=F.material;if(Array.isArray(xt)){let X=k.groups;for(let it=0,vt=X.length;it<vt;it++){let pt=X[it],et=xt[pt.materialIndex];if(et&&et.visible){let ot=S(F,et,L,D);r.renderBufferDirect(z,null,k,ot,F,pt)}}}else if(xt.visible){let X=S(F,xt,L,D);r.renderBufferDirect(z,null,k,X,F,null)}}let nt=F.children;for(let k=0,xt=nt.length;k<xt;k++)O(nt[k],G,z,L,D)}}function Eb(r,t,e){let o=e.isWebGL2;function a(){let Y=!1,wt=new Tr,j=null,Ut=new Tr(0,0,0,0);return{setMask:function(Dt){j!==Dt&&!Y&&(r.colorMask(Dt,Dt,Dt,Dt),j=Dt)},setLocked:function(Dt){Y=Dt},setClear:function(Dt,ft,Kt,re,mn){mn===!0&&(Dt*=re,ft*=re,Kt*=re),wt.set(Dt,ft,Kt,re),Ut.equals(wt)===!1&&(r.clearColor(Dt,ft,Kt,re),Ut.copy(wt))},reset:function(){Y=!1,j=null,Ut.set(-1,0,0,0)}}}function l(){let Y=!1,wt=null,j=null,Ut=null;return{setTest:function(Dt){Dt?Wt(r.DEPTH_TEST):Nt(r.DEPTH_TEST)},setMask:function(Dt){wt!==Dt&&!Y&&(r.depthMask(Dt),wt=Dt)},setFunc:function(Dt){if(j!==Dt){switch(Dt){case ex:r.depthFunc(r.NEVER);break;case nx:r.depthFunc(r.ALWAYS);break;case rx:r.depthFunc(r.LESS);break;case uh:r.depthFunc(r.LEQUAL);break;case ix:r.depthFunc(r.EQUAL);break;case ox:r.depthFunc(r.GEQUAL);break;case sx:r.depthFunc(r.GREATER);break;case ax:r.depthFunc(r.NOTEQUAL);break;default:r.depthFunc(r.LEQUAL)}j=Dt}},setLocked:function(Dt){Y=Dt},setClear:function(Dt){Ut!==Dt&&(r.clearDepth(Dt),Ut=Dt)},reset:function(){Y=!1,wt=null,j=null,Ut=null}}}function f(){let Y=!1,wt=null,j=null,Ut=null,Dt=null,ft=null,Kt=null,re=null,mn=null;return{setTest:function(He){Y||(He?Wt(r.STENCIL_TEST):Nt(r.STENCIL_TEST))},setMask:function(He){wt!==He&&!Y&&(r.stencilMask(He),wt=He)},setFunc:function(He,Si,$n){(j!==He||Ut!==Si||Dt!==$n)&&(r.stencilFunc(He,Si,$n),j=He,Ut=Si,Dt=$n)},setOp:function(He,Si,$n){(ft!==He||Kt!==Si||re!==$n)&&(r.stencilOp(He,Si,$n),ft=He,Kt=Si,re=$n)},setLocked:function(He){Y=He},setClear:function(He){mn!==He&&(r.clearStencil(He),mn=He)},reset:function(){Y=!1,wt=null,j=null,Ut=null,Dt=null,ft=null,Kt=null,re=null,mn=null}}}let h=new a,p=new l,d=new f,g=new WeakMap,_=new WeakMap,y={},M={},w=new WeakMap,T=[],x=null,v=!1,C=null,S=null,O=null,F=null,G=null,z=null,L=null,D=!1,q=null,nt=null,k=null,xt=null,X=null,it=r.getParameter(r.MAX_COMBINED_TEXTURE_IMAGE_UNITS),vt=!1,pt=0,et=r.getParameter(r.VERSION);et.indexOf(\\\"WebGL\\\")!==-1?(pt=parseFloat(/^WebGL (\\\\d)/.exec(et)[1]),vt=pt>=1):et.indexOf(\\\"OpenGL ES\\\")!==-1&&(pt=parseFloat(/^OpenGL ES (\\\\d)/.exec(et)[1]),vt=pt>=2);let ot=null,V={},K=r.getParameter(r.SCISSOR_BOX),at=r.getParameter(r.VIEWPORT),Tt=new Tr().fromArray(K),dt=new Tr().fromArray(at);function Ct(Y,wt,j,Ut){let Dt=new Uint8Array(4),ft=r.createTexture();r.bindTexture(Y,ft),r.texParameteri(Y,r.TEXTURE_MIN_FILTER,r.NEAREST),r.texParameteri(Y,r.TEXTURE_MAG_FILTER,r.NEAREST);for(let Kt=0;Kt<j;Kt++)o&&(Y===r.TEXTURE_3D||Y===r.TEXTURE_2D_ARRAY)?r.texImage3D(wt,0,r.RGBA,1,1,Ut,0,r.RGBA,r.UNSIGNED_BYTE,Dt):r.texImage2D(wt+Kt,0,r.RGBA,1,1,0,r.RGBA,r.UNSIGNED_BYTE,Dt);return ft}let Yt={};Yt[r.TEXTURE_2D]=Ct(r.TEXTURE_2D,r.TEXTURE_2D,1),Yt[r.TEXTURE_CUBE_MAP]=Ct(r.TEXTURE_CUBE_MAP,r.TEXTURE_CUBE_MAP_POSITIVE_X,6),o&&(Yt[r.TEXTURE_2D_ARRAY]=Ct(r.TEXTURE_2D_ARRAY,r.TEXTURE_2D_ARRAY,1,1),Yt[r.TEXTURE_3D]=Ct(r.TEXTURE_3D,r.TEXTURE_3D,1,1)),h.setClear(0,0,0,1),p.setClear(1),d.setClear(0),Wt(r.DEPTH_TEST),p.setFunc(uh),qt(!1),$(pm),Wt(r.CULL_FACE),Gt(hs);function Wt(Y){y[Y]!==!0&&(r.enable(Y),y[Y]=!0)}function Nt(Y){y[Y]!==!1&&(r.disable(Y),y[Y]=!1)}function ne(Y,wt){return M[Y]!==wt?(r.bindFramebuffer(Y,wt),M[Y]=wt,o&&(Y===r.DRAW_FRAMEBUFFER&&(M[r.FRAMEBUFFER]=wt),Y===r.FRAMEBUFFER&&(M[r.DRAW_FRAMEBUFFER]=wt)),!0):!1}function Pt(Y,wt){let j=T,Ut=!1;if(Y)if(j=w.get(wt),j===void 0&&(j=[],w.set(wt,j)),Y.isWebGLMultipleRenderTargets){let Dt=Y.texture;if(j.length!==Dt.length||j[0]!==r.COLOR_ATTACHMENT0){for(let ft=0,Kt=Dt.length;ft<Kt;ft++)j[ft]=r.COLOR_ATTACHMENT0+ft;j.length=Dt.length,Ut=!0}}else j[0]!==r.COLOR_ATTACHMENT0&&(j[0]=r.COLOR_ATTACHMENT0,Ut=!0);else j[0]!==r.BACK&&(j[0]=r.BACK,Ut=!0);Ut&&(e.isWebGL2?r.drawBuffers(j):t.get(\\\"WEBGL_draw_buffers\\\").drawBuffersWEBGL(j))}function Xt(Y){return x!==Y?(r.useProgram(Y),x=Y,!0):!1}let tt={[Oa]:r.FUNC_ADD,[W1]:r.FUNC_SUBTRACT,[q1]:r.FUNC_REVERSE_SUBTRACT};if(o)tt[ym]=r.MIN,tt[vm]=r.MAX;else{let Y=t.get(\\\"EXT_blend_minmax\\\");Y!==null&&(tt[ym]=Y.MIN_EXT,tt[vm]=Y.MAX_EXT)}let nn={[X1]:r.ZERO,[Y1]:r.ONE,[Z1]:r.SRC_COLOR,[Dg]:r.SRC_ALPHA,[tx]:r.SRC_ALPHA_SATURATE,[j1]:r.DST_COLOR,[$1]:r.DST_ALPHA,[J1]:r.ONE_MINUS_SRC_COLOR,[Fg]:r.ONE_MINUS_SRC_ALPHA,[Q1]:r.ONE_MINUS_DST_COLOR,[K1]:r.ONE_MINUS_DST_ALPHA};function Gt(Y,wt,j,Ut,Dt,ft,Kt,re){if(Y===hs){v===!0&&(Nt(r.BLEND),v=!1);return}if(v===!1&&(Wt(r.BLEND),v=!0),Y!==H1){if(Y!==C||re!==D){if((S!==Oa||G!==Oa)&&(r.blendEquation(r.FUNC_ADD),S=Oa,G=Oa),re)switch(Y){case Ba:r.blendFuncSeparate(r.ONE,r.ONE_MINUS_SRC_ALPHA,r.ONE,r.ONE_MINUS_SRC_ALPHA);break;case dm:r.blendFunc(r.ONE,r.ONE);break;case mm:r.blendFuncSeparate(r.ZERO,r.ONE_MINUS_SRC_COLOR,r.ZERO,r.ONE);break;case gm:r.blendFuncSeparate(r.ZERO,r.SRC_COLOR,r.ZERO,r.SRC_ALPHA);break;default:console.error(\\\"THREE.WebGLState: Invalid blending: \\\",Y);break}else switch(Y){case Ba:r.blendFuncSeparate(r.SRC_ALPHA,r.ONE_MINUS_SRC_ALPHA,r.ONE,r.ONE_MINUS_SRC_ALPHA);break;case dm:r.blendFunc(r.SRC_ALPHA,r.ONE);break;case mm:r.blendFuncSeparate(r.ZERO,r.ONE_MINUS_SRC_COLOR,r.ZERO,r.ONE);break;case gm:r.blendFunc(r.ZERO,r.SRC_COLOR);break;default:console.error(\\\"THREE.WebGLState: Invalid blending: \\\",Y);break}O=null,F=null,z=null,L=null,C=Y,D=re}return}Dt=Dt||wt,ft=ft||j,Kt=Kt||Ut,(wt!==S||Dt!==G)&&(r.blendEquationSeparate(tt[wt],tt[Dt]),S=wt,G=Dt),(j!==O||Ut!==F||ft!==z||Kt!==L)&&(r.blendFuncSeparate(nn[j],nn[Ut],nn[ft],nn[Kt]),O=j,F=Ut,z=ft,L=Kt),C=Y,D=!1}function te(Y,wt){Y.side===Ho?Nt(r.CULL_FACE):Wt(r.CULL_FACE);let j=Y.side===li;wt&&(j=!j),qt(j),Y.blending===Ba&&Y.transparent===!1?Gt(hs):Gt(Y.blending,Y.blendEquation,Y.blendSrc,Y.blendDst,Y.blendEquationAlpha,Y.blendSrcAlpha,Y.blendDstAlpha,Y.premultipliedAlpha),p.setFunc(Y.depthFunc),p.setTest(Y.depthTest),p.setMask(Y.depthWrite),h.setMask(Y.colorWrite);let Ut=Y.stencilWrite;d.setTest(Ut),Ut&&(d.setMask(Y.stencilWriteMask),d.setFunc(Y.stencilFunc,Y.stencilRef,Y.stencilFuncMask),d.setOp(Y.stencilFail,Y.stencilZFail,Y.stencilZPass)),b(Y.polygonOffset,Y.polygonOffsetFactor,Y.polygonOffsetUnits),Y.alphaToCoverage===!0?Wt(r.SAMPLE_ALPHA_TO_COVERAGE):Nt(r.SAMPLE_ALPHA_TO_COVERAGE)}function qt(Y){q!==Y&&(Y?r.frontFace(r.CW):r.frontFace(r.CCW),q=Y)}function $(Y){Y!==k1?(Wt(r.CULL_FACE),Y!==nt&&(Y===pm?r.cullFace(r.BACK):Y===G1?r.cullFace(r.FRONT):r.cullFace(r.FRONT_AND_BACK))):Nt(r.CULL_FACE),nt=Y}function N(Y){Y!==k&&(vt&&r.lineWidth(Y),k=Y)}function b(Y,wt,j){Y?(Wt(r.POLYGON_OFFSET_FILL),(xt!==wt||X!==j)&&(r.polygonOffset(wt,j),xt=wt,X=j)):Nt(r.POLYGON_OFFSET_FILL)}function R(Y){Y?Wt(r.SCISSOR_TEST):Nt(r.SCISSOR_TEST)}function W(Y){Y===void 0&&(Y=r.TEXTURE0+it-1),ot!==Y&&(r.activeTexture(Y),ot=Y)}function J(Y,wt,j){j===void 0&&(ot===null?j=r.TEXTURE0+it-1:j=ot);let Ut=V[j];Ut===void 0&&(Ut={type:void 0,texture:void 0},V[j]=Ut),(Ut.type!==Y||Ut.texture!==wt)&&(ot!==j&&(r.activeTexture(j),ot=j),r.bindTexture(Y,wt||Yt[Y]),Ut.type=Y,Ut.texture=wt)}function I(){let Y=V[ot];Y!==void 0&&Y.type!==void 0&&(r.bindTexture(Y.type,null),Y.type=void 0,Y.texture=void 0)}function P(){try{r.compressedTexImage2D.apply(r,arguments)}catch(Y){console.error(\\\"THREE.WebGLState:\\\",Y)}}function B(){try{r.compressedTexImage3D.apply(r,arguments)}catch(Y){console.error(\\\"THREE.WebGLState:\\\",Y)}}function lt(){try{r.texSubImage2D.apply(r,arguments)}catch(Y){console.error(\\\"THREE.WebGLState:\\\",Y)}}function ct(){try{r.texSubImage3D.apply(r,arguments)}catch(Y){console.error(\\\"THREE.WebGLState:\\\",Y)}}function Q(){try{r.compressedTexSubImage2D.apply(r,arguments)}catch(Y){console.error(\\\"THREE.WebGLState:\\\",Y)}}function St(){try{r.compressedTexSubImage3D.apply(r,arguments)}catch(Y){console.error(\\\"THREE.WebGLState:\\\",Y)}}function _t(){try{r.texStorage2D.apply(r,arguments)}catch(Y){console.error(\\\"THREE.WebGLState:\\\",Y)}}function Mt(){try{r.texStorage3D.apply(r,arguments)}catch(Y){console.error(\\\"THREE.WebGLState:\\\",Y)}}function Lt(){try{r.texImage2D.apply(r,arguments)}catch(Y){console.error(\\\"THREE.WebGLState:\\\",Y)}}function $t(){try{r.texImage3D.apply(r,arguments)}catch(Y){console.error(\\\"THREE.WebGLState:\\\",Y)}}function Et(Y){Tt.equals(Y)===!1&&(r.scissor(Y.x,Y.y,Y.z,Y.w),Tt.copy(Y))}function oe(Y){dt.equals(Y)===!1&&(r.viewport(Y.x,Y.y,Y.z,Y.w),dt.copy(Y))}function jt(Y,wt){let j=_.get(wt);j===void 0&&(j=new WeakMap,_.set(wt,j));let Ut=j.get(Y);Ut===void 0&&(Ut=r.getUniformBlockIndex(wt,Y.name),j.set(Y,Ut))}function Ht(Y,wt){let Ut=_.get(wt).get(Y);g.get(wt)!==Ut&&(r.uniformBlockBinding(wt,Ut,Y.__bindingPointIndex),g.set(wt,Ut))}function Ot(){r.disable(r.BLEND),r.disable(r.CULL_FACE),r.disable(r.DEPTH_TEST),r.disable(r.POLYGON_OFFSET_FILL),r.disable(r.SCISSOR_TEST),r.disable(r.STENCIL_TEST),r.disable(r.SAMPLE_ALPHA_TO_COVERAGE),r.blendEquation(r.FUNC_ADD),r.blendFunc(r.ONE,r.ZERO),r.blendFuncSeparate(r.ONE,r.ZERO,r.ONE,r.ZERO),r.colorMask(!0,!0,!0,!0),r.clearColor(0,0,0,0),r.depthMask(!0),r.depthFunc(r.LESS),r.clearDepth(1),r.stencilMask(4294967295),r.stencilFunc(r.ALWAYS,0,4294967295),r.stencilOp(r.KEEP,r.KEEP,r.KEEP),r.clearStencil(0),r.cullFace(r.BACK),r.frontFace(r.CCW),r.polygonOffset(0,0),r.activeTexture(r.TEXTURE0),r.bindFramebuffer(r.FRAMEBUFFER,null),o===!0&&(r.bindFramebuffer(r.DRAW_FRAMEBUFFER,null),r.bindFramebuffer(r.READ_FRAMEBUFFER,null)),r.useProgram(null),r.lineWidth(1),r.scissor(0,0,r.canvas.width,r.canvas.height),r.viewport(0,0,r.canvas.width,r.canvas.height),y={},ot=null,V={},M={},w=new WeakMap,T=[],x=null,v=!1,C=null,S=null,O=null,F=null,G=null,z=null,L=null,D=!1,q=null,nt=null,k=null,xt=null,X=null,Tt.set(0,0,r.canvas.width,r.canvas.height),dt.set(0,0,r.canvas.width,r.canvas.height),h.reset(),p.reset(),d.reset()}return{buffers:{color:h,depth:p,stencil:d},enable:Wt,disable:Nt,bindFramebuffer:ne,drawBuffers:Pt,useProgram:Xt,setBlending:Gt,setMaterial:te,setFlipSided:qt,setCullFace:$,setLineWidth:N,setPolygonOffset:b,setScissorTest:R,activeTexture:W,bindTexture:J,unbindTexture:I,compressedTexImage2D:P,compressedTexImage3D:B,texImage2D:Lt,texImage3D:$t,updateUBOMapping:jt,uniformBlockBinding:Ht,texStorage2D:_t,texStorage3D:Mt,texSubImage2D:lt,texSubImage3D:ct,compressedTexSubImage2D:Q,compressedTexSubImage3D:St,scissor:Et,viewport:oe,reset:Ot}}function Mb(r,t,e,o,a,l,f){let h=a.isWebGL2,p=a.maxTextures,d=a.maxCubemapSize,g=a.maxTextureSize,_=a.maxSamples,y=t.has(\\\"WEBGL_multisampled_render_to_texture\\\")?t.get(\\\"WEBGL_multisampled_render_to_texture\\\"):null,M=typeof navigator==\\\"undefined\\\"?!1:/OculusBrowser/g.test(navigator.userAgent),w=new WeakMap,T,x=new WeakMap,v=!1;try{v=typeof OffscreenCanvas!=\\\"undefined\\\"&&new OffscreenCanvas(1,1).getContext(\\\"2d\\\")!==null}catch(I){}function C(I,P){return v?new OffscreenCanvas(I,P):tc(\\\"canvas\\\")}function S(I,P,B,lt){let ct=1;if((I.width>lt||I.height>lt)&&(ct=lt/Math.max(I.width,I.height)),ct<1||P===!0)if(typeof HTMLImageElement!=\\\"undefined\\\"&&I instanceof HTMLImageElement||typeof HTMLCanvasElement!=\\\"undefined\\\"&&I instanceof HTMLCanvasElement||typeof ImageBitmap!=\\\"undefined\\\"&&I instanceof ImageBitmap){let Q=P?mh:Math.floor,St=Q(ct*I.width),_t=Q(ct*I.height);T===void 0&&(T=C(St,_t));let Mt=B?C(St,_t):T;return Mt.width=St,Mt.height=_t,Mt.getContext(\\\"2d\\\").drawImage(I,0,0,St,_t),console.warn(\\\"THREE.WebGLRenderer: Texture has been resized from (\\\"+I.width+\\\"x\\\"+I.height+\\\") to (\\\"+St+\\\"x\\\"+_t+\\\").\\\"),Mt}else return\\\"data\\\"in I&&console.warn(\\\"THREE.WebGLRenderer: Image in DataTexture is too big (\\\"+I.width+\\\"x\\\"+I.height+\\\").\\\"),I;return I}function O(I){return $m(I.width)&&$m(I.height)}function F(I){return h?!1:I.wrapS!==$i||I.wrapT!==$i||I.minFilter!==$r&&I.minFilter!==Oi}function G(I,P){return I.generateMipmaps&&P&&I.minFilter!==$r&&I.minFilter!==Oi}function z(I){r.generateMipmap(I)}function L(I,P,B,lt,ct=!1){if(h===!1)return P;if(I!==null){if(r[I]!==void 0)return r[I];console.warn(\\\"THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '\\\"+I+\\\"'\\\")}let Q=P;if(P===r.RED&&(B===r.FLOAT&&(Q=r.R32F),B===r.HALF_FLOAT&&(Q=r.R16F),B===r.UNSIGNED_BYTE&&(Q=r.R8)),P===r.RED_INTEGER&&(B===r.UNSIGNED_BYTE&&(Q=r.R8UI),B===r.UNSIGNED_SHORT&&(Q=r.R16UI),B===r.UNSIGNED_INT&&(Q=r.R32UI),B===r.BYTE&&(Q=r.R8I),B===r.SHORT&&(Q=r.R16I),B===r.INT&&(Q=r.R32I)),P===r.RG&&(B===r.FLOAT&&(Q=r.RG32F),B===r.HALF_FLOAT&&(Q=r.RG16F),B===r.UNSIGNED_BYTE&&(Q=r.RG8)),P===r.RGBA){let St=ct?$l:gn.getTransfer(lt);B===r.FLOAT&&(Q=r.RGBA32F),B===r.HALF_FLOAT&&(Q=r.RGBA16F),B===r.UNSIGNED_BYTE&&(Q=St===Tn?r.SRGB8_ALPHA8:r.RGBA8),B===r.UNSIGNED_SHORT_4_4_4_4&&(Q=r.RGBA4),B===r.UNSIGNED_SHORT_5_5_5_1&&(Q=r.RGB5_A1)}return(Q===r.R16F||Q===r.R32F||Q===r.RG16F||Q===r.RG32F||Q===r.RGBA16F||Q===r.RGBA32F)&&t.get(\\\"EXT_color_buffer_float\\\"),Q}function D(I,P,B){return G(I,B)===!0||I.isFramebufferTexture&&I.minFilter!==$r&&I.minFilter!==Oi?Math.log2(Math.max(P.width,P.height))+1:I.mipmaps!==void 0&&I.mipmaps.length>0?I.mipmaps.length:I.isCompressedTexture&&Array.isArray(I.image)?P.mipmaps.length:1}function q(I){return I===$r||I===_m||I===Lf?r.NEAREST:r.LINEAR}function nt(I){let P=I.target;P.removeEventListener(\\\"dispose\\\",nt),xt(P),P.isVideoTexture&&w.delete(P)}function k(I){let P=I.target;P.removeEventListener(\\\"dispose\\\",k),it(P)}function xt(I){let P=o.get(I);if(P.__webglInit===void 0)return;let B=I.source,lt=x.get(B);if(lt){let ct=lt[P.__cacheKey];ct.usedTimes--,ct.usedTimes===0&&X(I),Object.keys(lt).length===0&&x.delete(B)}o.remove(I)}function X(I){let P=o.get(I);r.deleteTexture(P.__webglTexture);let B=I.source,lt=x.get(B);delete lt[P.__cacheKey],f.memory.textures--}function it(I){let P=I.texture,B=o.get(I),lt=o.get(P);if(lt.__webglTexture!==void 0&&(r.deleteTexture(lt.__webglTexture),f.memory.textures--),I.depthTexture&&I.depthTexture.dispose(),I.isWebGLCubeRenderTarget)for(let ct=0;ct<6;ct++){if(Array.isArray(B.__webglFramebuffer[ct]))for(let Q=0;Q<B.__webglFramebuffer[ct].length;Q++)r.deleteFramebuffer(B.__webglFramebuffer[ct][Q]);else r.deleteFramebuffer(B.__webglFramebuffer[ct]);B.__webglDepthbuffer&&r.deleteRenderbuffer(B.__webglDepthbuffer[ct])}else{if(Array.isArray(B.__webglFramebuffer))for(let ct=0;ct<B.__webglFramebuffer.length;ct++)r.deleteFramebuffer(B.__webglFramebuffer[ct]);else r.deleteFramebuffer(B.__webglFramebuffer);if(B.__webglDepthbuffer&&r.deleteRenderbuffer(B.__webglDepthbuffer),B.__webglMultisampledFramebuffer&&r.deleteFramebuffer(B.__webglMultisampledFramebuffer),B.__webglColorRenderbuffer)for(let ct=0;ct<B.__webglColorRenderbuffer.length;ct++)B.__webglColorRenderbuffer[ct]&&r.deleteRenderbuffer(B.__webglColorRenderbuffer[ct]);B.__webglDepthRenderbuffer&&r.deleteRenderbuffer(B.__webglDepthRenderbuffer)}if(I.isWebGLMultipleRenderTargets)for(let ct=0,Q=P.length;ct<Q;ct++){let St=o.get(P[ct]);St.__webglTexture&&(r.deleteTexture(St.__webglTexture),f.memory.textures--),o.remove(P[ct])}o.remove(P),o.remove(I)}let vt=0;function pt(){vt=0}function et(){let I=vt;return I>=p&&console.warn(\\\"THREE.WebGLTextures: Trying to use \\\"+I+\\\" texture units while this GPU supports only \\\"+p),vt+=1,I}function ot(I){let P=[];return P.push(I.wrapS),P.push(I.wrapT),P.push(I.wrapR||0),P.push(I.magFilter),P.push(I.minFilter),P.push(I.anisotropy),P.push(I.internalFormat),P.push(I.format),P.push(I.type),P.push(I.generateMipmaps),P.push(I.premultiplyAlpha),P.push(I.flipY),P.push(I.unpackAlignment),P.push(I.colorSpace),P.join()}function V(I,P){let B=o.get(I);if(I.isVideoTexture&&W(I),I.isRenderTargetTexture===!1&&I.version>0&&B.__version!==I.version){let lt=I.image;if(lt===null)console.warn(\\\"THREE.WebGLRenderer: Texture marked for update but no image data found.\\\");else if(lt.complete===!1)console.warn(\\\"THREE.WebGLRenderer: Texture marked for update but image is incomplete\\\");else{ne(B,I,P);return}}e.bindTexture(r.TEXTURE_2D,B.__webglTexture,r.TEXTURE0+P)}function K(I,P){let B=o.get(I);if(I.version>0&&B.__version!==I.version){ne(B,I,P);return}e.bindTexture(r.TEXTURE_2D_ARRAY,B.__webglTexture,r.TEXTURE0+P)}function at(I,P){let B=o.get(I);if(I.version>0&&B.__version!==I.version){ne(B,I,P);return}e.bindTexture(r.TEXTURE_3D,B.__webglTexture,r.TEXTURE0+P)}function Tt(I,P){let B=o.get(I);if(I.version>0&&B.__version!==I.version){Pt(B,I,P);return}e.bindTexture(r.TEXTURE_CUBE_MAP,B.__webglTexture,r.TEXTURE0+P)}let dt={[fh]:r.REPEAT,[$i]:r.CLAMP_TO_EDGE,[hh]:r.MIRRORED_REPEAT},Ct={[$r]:r.NEAREST,[_m]:r.NEAREST_MIPMAP_NEAREST,[Lf]:r.NEAREST_MIPMAP_LINEAR,[Oi]:r.LINEAR,[mx]:r.LINEAR_MIPMAP_NEAREST,[Fu]:r.LINEAR_MIPMAP_LINEAR},Yt={[Ix]:r.NEVER,[Ux]:r.ALWAYS,[Rx]:r.LESS,[Nx]:r.LEQUAL,[Lx]:r.EQUAL,[Fx]:r.GEQUAL,[Ox]:r.GREATER,[Dx]:r.NOTEQUAL};function Wt(I,P,B){if(B?(r.texParameteri(I,r.TEXTURE_WRAP_S,dt[P.wrapS]),r.texParameteri(I,r.TEXTURE_WRAP_T,dt[P.wrapT]),(I===r.TEXTURE_3D||I===r.TEXTURE_2D_ARRAY)&&r.texParameteri(I,r.TEXTURE_WRAP_R,dt[P.wrapR]),r.texParameteri(I,r.TEXTURE_MAG_FILTER,Ct[P.magFilter]),r.texParameteri(I,r.TEXTURE_MIN_FILTER,Ct[P.minFilter])):(r.texParameteri(I,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(I,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),(I===r.TEXTURE_3D||I===r.TEXTURE_2D_ARRAY)&&r.texParameteri(I,r.TEXTURE_WRAP_R,r.CLAMP_TO_EDGE),(P.wrapS!==$i||P.wrapT!==$i)&&console.warn(\\\"THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.\\\"),r.texParameteri(I,r.TEXTURE_MAG_FILTER,q(P.magFilter)),r.texParameteri(I,r.TEXTURE_MIN_FILTER,q(P.minFilter)),P.minFilter!==$r&&P.minFilter!==Oi&&console.warn(\\\"THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.\\\")),P.compareFunction&&(r.texParameteri(I,r.TEXTURE_COMPARE_MODE,r.COMPARE_REF_TO_TEXTURE),r.texParameteri(I,r.TEXTURE_COMPARE_FUNC,Yt[P.compareFunction])),t.has(\\\"EXT_texture_filter_anisotropic\\\")===!0){let lt=t.get(\\\"EXT_texture_filter_anisotropic\\\");if(P.magFilter===$r||P.minFilter!==Lf&&P.minFilter!==Fu||P.type===fs&&t.has(\\\"OES_texture_float_linear\\\")===!1||h===!1&&P.type===Uu&&t.has(\\\"OES_texture_half_float_linear\\\")===!1)return;(P.anisotropy>1||o.get(P).__currentAnisotropy)&&(r.texParameterf(I,lt.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(P.anisotropy,a.getMaxAnisotropy())),o.get(P).__currentAnisotropy=P.anisotropy)}}function Nt(I,P){let B=!1;I.__webglInit===void 0&&(I.__webglInit=!0,P.addEventListener(\\\"dispose\\\",nt));let lt=P.source,ct=x.get(lt);ct===void 0&&(ct={},x.set(lt,ct));let Q=ot(P);if(Q!==I.__cacheKey){ct[Q]===void 0&&(ct[Q]={texture:r.createTexture(),usedTimes:0},f.memory.textures++,B=!0),ct[Q].usedTimes++;let St=ct[I.__cacheKey];St!==void 0&&(ct[I.__cacheKey].usedTimes--,St.usedTimes===0&&X(P)),I.__cacheKey=Q,I.__webglTexture=ct[Q].texture}return B}function ne(I,P,B){let lt=r.TEXTURE_2D;(P.isDataArrayTexture||P.isCompressedArrayTexture)&&(lt=r.TEXTURE_2D_ARRAY),P.isData3DTexture&&(lt=r.TEXTURE_3D);let ct=Nt(I,P),Q=P.source;e.bindTexture(lt,I.__webglTexture,r.TEXTURE0+B);let St=o.get(Q);if(Q.version!==St.__version||ct===!0){e.activeTexture(r.TEXTURE0+B);let _t=gn.getPrimaries(gn.workingColorSpace),Mt=P.colorSpace===Di?null:gn.getPrimaries(P.colorSpace),Lt=P.colorSpace===Di||_t===Mt?r.NONE:r.BROWSER_DEFAULT_WEBGL;r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,P.flipY),r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,P.premultiplyAlpha),r.pixelStorei(r.UNPACK_ALIGNMENT,P.unpackAlignment),r.pixelStorei(r.UNPACK_COLORSPACE_CONVERSION_WEBGL,Lt);let $t=F(P)&&O(P.image)===!1,Et=S(P.image,$t,!1,g);Et=J(P,Et);let oe=O(Et)||h,jt=l.convert(P.format,P.colorSpace),Ht=l.convert(P.type),Ot=L(P.internalFormat,jt,Ht,P.colorSpace,P.isVideoTexture);Wt(lt,P,oe);let Y,wt=P.mipmaps,j=h&&P.isVideoTexture!==!0,Ut=St.__version===void 0||ct===!0,Dt=D(P,Et,oe);if(P.isDepthTexture)Ot=r.DEPTH_COMPONENT,h?P.type===fs?Ot=r.DEPTH_COMPONENT32F:P.type===cs?Ot=r.DEPTH_COMPONENT24:P.type===Ws?Ot=r.DEPTH24_STENCIL8:Ot=r.DEPTH_COMPONENT16:P.type===fs&&console.error(\\\"WebGLRenderer: Floating point depth texture requires WebGL2.\\\"),P.format===qs&&Ot===r.DEPTH_COMPONENT&&P.type!==Yh&&P.type!==cs&&(console.warn(\\\"THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.\\\"),P.type=cs,Ht=l.convert(P.type)),P.format===Ha&&Ot===r.DEPTH_COMPONENT&&(Ot=r.DEPTH_STENCIL,P.type!==Ws&&(console.warn(\\\"THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.\\\"),P.type=Ws,Ht=l.convert(P.type))),Ut&&(j?e.texStorage2D(r.TEXTURE_2D,1,Ot,Et.width,Et.height):e.texImage2D(r.TEXTURE_2D,0,Ot,Et.width,Et.height,0,jt,Ht,null));else if(P.isDataTexture)if(wt.length>0&&oe){j&&Ut&&e.texStorage2D(r.TEXTURE_2D,Dt,Ot,wt[0].width,wt[0].height);for(let ft=0,Kt=wt.length;ft<Kt;ft++)Y=wt[ft],j?e.texSubImage2D(r.TEXTURE_2D,ft,0,0,Y.width,Y.height,jt,Ht,Y.data):e.texImage2D(r.TEXTURE_2D,ft,Ot,Y.width,Y.height,0,jt,Ht,Y.data);P.generateMipmaps=!1}else j?(Ut&&e.texStorage2D(r.TEXTURE_2D,Dt,Ot,Et.width,Et.height),e.texSubImage2D(r.TEXTURE_2D,0,0,0,Et.width,Et.height,jt,Ht,Et.data)):e.texImage2D(r.TEXTURE_2D,0,Ot,Et.width,Et.height,0,jt,Ht,Et.data);else if(P.isCompressedTexture)if(P.isCompressedArrayTexture){j&&Ut&&e.texStorage3D(r.TEXTURE_2D_ARRAY,Dt,Ot,wt[0].width,wt[0].height,Et.depth);for(let ft=0,Kt=wt.length;ft<Kt;ft++)Y=wt[ft],P.format!==Ki?jt!==null?j?e.compressedTexSubImage3D(r.TEXTURE_2D_ARRAY,ft,0,0,0,Y.width,Y.height,Et.depth,jt,Y.data,0,0):e.compressedTexImage3D(r.TEXTURE_2D_ARRAY,ft,Ot,Y.width,Y.height,Et.depth,0,Y.data,0,0):console.warn(\\\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()\\\"):j?e.texSubImage3D(r.TEXTURE_2D_ARRAY,ft,0,0,0,Y.width,Y.height,Et.depth,jt,Ht,Y.data):e.texImage3D(r.TEXTURE_2D_ARRAY,ft,Ot,Y.width,Y.height,Et.depth,0,jt,Ht,Y.data)}else{j&&Ut&&e.texStorage2D(r.TEXTURE_2D,Dt,Ot,wt[0].width,wt[0].height);for(let ft=0,Kt=wt.length;ft<Kt;ft++)Y=wt[ft],P.format!==Ki?jt!==null?j?e.compressedTexSubImage2D(r.TEXTURE_2D,ft,0,0,Y.width,Y.height,jt,Y.data):e.compressedTexImage2D(r.TEXTURE_2D,ft,Ot,Y.width,Y.height,0,Y.data):console.warn(\\\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()\\\"):j?e.texSubImage2D(r.TEXTURE_2D,ft,0,0,Y.width,Y.height,jt,Ht,Y.data):e.texImage2D(r.TEXTURE_2D,ft,Ot,Y.width,Y.height,0,jt,Ht,Y.data)}else if(P.isDataArrayTexture)j?(Ut&&e.texStorage3D(r.TEXTURE_2D_ARRAY,Dt,Ot,Et.width,Et.height,Et.depth),e.texSubImage3D(r.TEXTURE_2D_ARRAY,0,0,0,0,Et.width,Et.height,Et.depth,jt,Ht,Et.data)):e.texImage3D(r.TEXTURE_2D_ARRAY,0,Ot,Et.width,Et.height,Et.depth,0,jt,Ht,Et.data);else if(P.isData3DTexture)j?(Ut&&e.texStorage3D(r.TEXTURE_3D,Dt,Ot,Et.width,Et.height,Et.depth),e.texSubImage3D(r.TEXTURE_3D,0,0,0,0,Et.width,Et.height,Et.depth,jt,Ht,Et.data)):e.texImage3D(r.TEXTURE_3D,0,Ot,Et.width,Et.height,Et.depth,0,jt,Ht,Et.data);else if(P.isFramebufferTexture){if(Ut)if(j)e.texStorage2D(r.TEXTURE_2D,Dt,Ot,Et.width,Et.height);else{let ft=Et.width,Kt=Et.height;for(let re=0;re<Dt;re++)e.texImage2D(r.TEXTURE_2D,re,Ot,ft,Kt,0,jt,Ht,null),ft>>=1,Kt>>=1}}else if(wt.length>0&&oe){j&&Ut&&e.texStorage2D(r.TEXTURE_2D,Dt,Ot,wt[0].width,wt[0].height);for(let ft=0,Kt=wt.length;ft<Kt;ft++)Y=wt[ft],j?e.texSubImage2D(r.TEXTURE_2D,ft,0,0,jt,Ht,Y):e.texImage2D(r.TEXTURE_2D,ft,Ot,jt,Ht,Y);P.generateMipmaps=!1}else j?(Ut&&e.texStorage2D(r.TEXTURE_2D,Dt,Ot,Et.width,Et.height),e.texSubImage2D(r.TEXTURE_2D,0,0,0,jt,Ht,Et)):e.texImage2D(r.TEXTURE_2D,0,Ot,jt,Ht,Et);G(P,oe)&&z(lt),St.__version=Q.version,P.onUpdate&&P.onUpdate(P)}I.__version=P.version}function Pt(I,P,B){if(P.image.length!==6)return;let lt=Nt(I,P),ct=P.source;e.bindTexture(r.TEXTURE_CUBE_MAP,I.__webglTexture,r.TEXTURE0+B);let Q=o.get(ct);if(ct.version!==Q.__version||lt===!0){e.activeTexture(r.TEXTURE0+B);let St=gn.getPrimaries(gn.workingColorSpace),_t=P.colorSpace===Di?null:gn.getPrimaries(P.colorSpace),Mt=P.colorSpace===Di||St===_t?r.NONE:r.BROWSER_DEFAULT_WEBGL;r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,P.flipY),r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,P.premultiplyAlpha),r.pixelStorei(r.UNPACK_ALIGNMENT,P.unpackAlignment),r.pixelStorei(r.UNPACK_COLORSPACE_CONVERSION_WEBGL,Mt);let Lt=P.isCompressedTexture||P.image[0].isCompressedTexture,$t=P.image[0]&&P.image[0].isDataTexture,Et=[];for(let ft=0;ft<6;ft++)!Lt&&!$t?Et[ft]=S(P.image[ft],!1,!0,d):Et[ft]=$t?P.image[ft].image:P.image[ft],Et[ft]=J(P,Et[ft]);let oe=Et[0],jt=O(oe)||h,Ht=l.convert(P.format,P.colorSpace),Ot=l.convert(P.type),Y=L(P.internalFormat,Ht,Ot,P.colorSpace),wt=h&&P.isVideoTexture!==!0,j=Q.__version===void 0||lt===!0,Ut=D(P,oe,jt);Wt(r.TEXTURE_CUBE_MAP,P,jt);let Dt;if(Lt){wt&&j&&e.texStorage2D(r.TEXTURE_CUBE_MAP,Ut,Y,oe.width,oe.height);for(let ft=0;ft<6;ft++){Dt=Et[ft].mipmaps;for(let Kt=0;Kt<Dt.length;Kt++){let re=Dt[Kt];P.format!==Ki?Ht!==null?wt?e.compressedTexSubImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+ft,Kt,0,0,re.width,re.height,Ht,re.data):e.compressedTexImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+ft,Kt,Y,re.width,re.height,0,re.data):console.warn(\\\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()\\\"):wt?e.texSubImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+ft,Kt,0,0,re.width,re.height,Ht,Ot,re.data):e.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+ft,Kt,Y,re.width,re.height,0,Ht,Ot,re.data)}}}else{Dt=P.mipmaps,wt&&j&&(Dt.length>0&&Ut++,e.texStorage2D(r.TEXTURE_CUBE_MAP,Ut,Y,Et[0].width,Et[0].height));for(let ft=0;ft<6;ft++)if($t){wt?e.texSubImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+ft,0,0,0,Et[ft].width,Et[ft].height,Ht,Ot,Et[ft].data):e.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+ft,0,Y,Et[ft].width,Et[ft].height,0,Ht,Ot,Et[ft].data);for(let Kt=0;Kt<Dt.length;Kt++){let mn=Dt[Kt].image[ft].image;wt?e.texSubImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+ft,Kt+1,0,0,mn.width,mn.height,Ht,Ot,mn.data):e.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+ft,Kt+1,Y,mn.width,mn.height,0,Ht,Ot,mn.data)}}else{wt?e.texSubImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+ft,0,0,0,Ht,Ot,Et[ft]):e.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+ft,0,Y,Ht,Ot,Et[ft]);for(let Kt=0;Kt<Dt.length;Kt++){let re=Dt[Kt];wt?e.texSubImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+ft,Kt+1,0,0,Ht,Ot,re.image[ft]):e.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+ft,Kt+1,Y,Ht,Ot,re.image[ft])}}}G(P,jt)&&z(r.TEXTURE_CUBE_MAP),Q.__version=ct.version,P.onUpdate&&P.onUpdate(P)}I.__version=P.version}function Xt(I,P,B,lt,ct,Q){let St=l.convert(B.format,B.colorSpace),_t=l.convert(B.type),Mt=L(B.internalFormat,St,_t,B.colorSpace);if(!o.get(P).__hasExternalTextures){let $t=Math.max(1,P.width>>Q),Et=Math.max(1,P.height>>Q);ct===r.TEXTURE_3D||ct===r.TEXTURE_2D_ARRAY?e.texImage3D(ct,Q,Mt,$t,Et,P.depth,0,St,_t,null):e.texImage2D(ct,Q,Mt,$t,Et,0,St,_t,null)}e.bindFramebuffer(r.FRAMEBUFFER,I),R(P)?y.framebufferTexture2DMultisampleEXT(r.FRAMEBUFFER,lt,ct,o.get(B).__webglTexture,0,b(P)):(ct===r.TEXTURE_2D||ct>=r.TEXTURE_CUBE_MAP_POSITIVE_X&&ct<=r.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&r.framebufferTexture2D(r.FRAMEBUFFER,lt,ct,o.get(B).__webglTexture,Q),e.bindFramebuffer(r.FRAMEBUFFER,null)}function tt(I,P,B){if(r.bindRenderbuffer(r.RENDERBUFFER,I),P.depthBuffer&&!P.stencilBuffer){let lt=h===!0?r.DEPTH_COMPONENT24:r.DEPTH_COMPONENT16;if(B||R(P)){let ct=P.depthTexture;ct&&ct.isDepthTexture&&(ct.type===fs?lt=r.DEPTH_COMPONENT32F:ct.type===cs&&(lt=r.DEPTH_COMPONENT24));let Q=b(P);R(P)?y.renderbufferStorageMultisampleEXT(r.RENDERBUFFER,Q,lt,P.width,P.height):r.renderbufferStorageMultisample(r.RENDERBUFFER,Q,lt,P.width,P.height)}else r.renderbufferStorage(r.RENDERBUFFER,lt,P.width,P.height);r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.RENDERBUFFER,I)}else if(P.depthBuffer&&P.stencilBuffer){let lt=b(P);B&&R(P)===!1?r.renderbufferStorageMultisample(r.RENDERBUFFER,lt,r.DEPTH24_STENCIL8,P.width,P.height):R(P)?y.renderbufferStorageMultisampleEXT(r.RENDERBUFFER,lt,r.DEPTH24_STENCIL8,P.width,P.height):r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,P.width,P.height),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_STENCIL_ATTACHMENT,r.RENDERBUFFER,I)}else{let lt=P.isWebGLMultipleRenderTargets===!0?P.texture:[P.texture];for(let ct=0;ct<lt.length;ct++){let Q=lt[ct],St=l.convert(Q.format,Q.colorSpace),_t=l.convert(Q.type),Mt=L(Q.internalFormat,St,_t,Q.colorSpace),Lt=b(P);B&&R(P)===!1?r.renderbufferStorageMultisample(r.RENDERBUFFER,Lt,Mt,P.width,P.height):R(P)?y.renderbufferStorageMultisampleEXT(r.RENDERBUFFER,Lt,Mt,P.width,P.height):r.renderbufferStorage(r.RENDERBUFFER,Mt,P.width,P.height)}}r.bindRenderbuffer(r.RENDERBUFFER,null)}function nn(I,P){if(P&&P.isWebGLCubeRenderTarget)throw new Error(\\\"Depth Texture with cube render targets is not supported\\\");if(e.bindFramebuffer(r.FRAMEBUFFER,I),!(P.depthTexture&&P.depthTexture.isDepthTexture))throw new Error(\\\"renderTarget.depthTexture must be an instance of THREE.DepthTexture\\\");(!o.get(P.depthTexture).__webglTexture||P.depthTexture.image.width!==P.width||P.depthTexture.image.height!==P.height)&&(P.depthTexture.image.width=P.width,P.depthTexture.image.height=P.height,P.depthTexture.needsUpdate=!0),V(P.depthTexture,0);let lt=o.get(P.depthTexture).__webglTexture,ct=b(P);if(P.depthTexture.format===qs)R(P)?y.framebufferTexture2DMultisampleEXT(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.TEXTURE_2D,lt,0,ct):r.framebufferTexture2D(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.TEXTURE_2D,lt,0);else if(P.depthTexture.format===Ha)R(P)?y.framebufferTexture2DMultisampleEXT(r.FRAMEBUFFER,r.DEPTH_STENCIL_ATTACHMENT,r.TEXTURE_2D,lt,0,ct):r.framebufferTexture2D(r.FRAMEBUFFER,r.DEPTH_STENCIL_ATTACHMENT,r.TEXTURE_2D,lt,0);else throw new Error(\\\"Unknown depthTexture format\\\")}function Gt(I){let P=o.get(I),B=I.isWebGLCubeRenderTarget===!0;if(I.depthTexture&&!P.__autoAllocateDepthBuffer){if(B)throw new Error(\\\"target.depthTexture not supported in Cube render targets\\\");nn(P.__webglFramebuffer,I)}else if(B){P.__webglDepthbuffer=[];for(let lt=0;lt<6;lt++)e.bindFramebuffer(r.FRAMEBUFFER,P.__webglFramebuffer[lt]),P.__webglDepthbuffer[lt]=r.createRenderbuffer(),tt(P.__webglDepthbuffer[lt],I,!1)}else e.bindFramebuffer(r.FRAMEBUFFER,P.__webglFramebuffer),P.__webglDepthbuffer=r.createRenderbuffer(),tt(P.__webglDepthbuffer,I,!1);e.bindFramebuffer(r.FRAMEBUFFER,null)}function te(I,P,B){let lt=o.get(I);P!==void 0&&Xt(lt.__webglFramebuffer,I,I.texture,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,0),B!==void 0&&Gt(I)}function qt(I){let P=I.texture,B=o.get(I),lt=o.get(P);I.addEventListener(\\\"dispose\\\",k),I.isWebGLMultipleRenderTargets!==!0&&(lt.__webglTexture===void 0&&(lt.__webglTexture=r.createTexture()),lt.__version=P.version,f.memory.textures++);let ct=I.isWebGLCubeRenderTarget===!0,Q=I.isWebGLMultipleRenderTargets===!0,St=O(I)||h;if(ct){B.__webglFramebuffer=[];for(let _t=0;_t<6;_t++)if(h&&P.mipmaps&&P.mipmaps.length>0){B.__webglFramebuffer[_t]=[];for(let Mt=0;Mt<P.mipmaps.length;Mt++)B.__webglFramebuffer[_t][Mt]=r.createFramebuffer()}else B.__webglFramebuffer[_t]=r.createFramebuffer()}else{if(h&&P.mipmaps&&P.mipmaps.length>0){B.__webglFramebuffer=[];for(let _t=0;_t<P.mipmaps.length;_t++)B.__webglFramebuffer[_t]=r.createFramebuffer()}else B.__webglFramebuffer=r.createFramebuffer();if(Q)if(a.drawBuffers){let _t=I.texture;for(let Mt=0,Lt=_t.length;Mt<Lt;Mt++){let $t=o.get(_t[Mt]);$t.__webglTexture===void 0&&($t.__webglTexture=r.createTexture(),f.memory.textures++)}}else console.warn(\\\"THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.\\\");if(h&&I.samples>0&&R(I)===!1){let _t=Q?P:[P];B.__webglMultisampledFramebuffer=r.createFramebuffer(),B.__webglColorRenderbuffer=[],e.bindFramebuffer(r.FRAMEBUFFER,B.__webglMultisampledFramebuffer);for(let Mt=0;Mt<_t.length;Mt++){let Lt=_t[Mt];B.__webglColorRenderbuffer[Mt]=r.createRenderbuffer(),r.bindRenderbuffer(r.RENDERBUFFER,B.__webglColorRenderbuffer[Mt]);let $t=l.convert(Lt.format,Lt.colorSpace),Et=l.convert(Lt.type),oe=L(Lt.internalFormat,$t,Et,Lt.colorSpace,I.isXRRenderTarget===!0),jt=b(I);r.renderbufferStorageMultisample(r.RENDERBUFFER,jt,oe,I.width,I.height),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0+Mt,r.RENDERBUFFER,B.__webglColorRenderbuffer[Mt])}r.bindRenderbuffer(r.RENDERBUFFER,null),I.depthBuffer&&(B.__webglDepthRenderbuffer=r.createRenderbuffer(),tt(B.__webglDepthRenderbuffer,I,!0)),e.bindFramebuffer(r.FRAMEBUFFER,null)}}if(ct){e.bindTexture(r.TEXTURE_CUBE_MAP,lt.__webglTexture),Wt(r.TEXTURE_CUBE_MAP,P,St);for(let _t=0;_t<6;_t++)if(h&&P.mipmaps&&P.mipmaps.length>0)for(let Mt=0;Mt<P.mipmaps.length;Mt++)Xt(B.__webglFramebuffer[_t][Mt],I,P,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+_t,Mt);else Xt(B.__webglFramebuffer[_t],I,P,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+_t,0);G(P,St)&&z(r.TEXTURE_CUBE_MAP),e.unbindTexture()}else if(Q){let _t=I.texture;for(let Mt=0,Lt=_t.length;Mt<Lt;Mt++){let $t=_t[Mt],Et=o.get($t);e.bindTexture(r.TEXTURE_2D,Et.__webglTexture),Wt(r.TEXTURE_2D,$t,St),Xt(B.__webglFramebuffer,I,$t,r.COLOR_ATTACHMENT0+Mt,r.TEXTURE_2D,0),G($t,St)&&z(r.TEXTURE_2D)}e.unbindTexture()}else{let _t=r.TEXTURE_2D;if((I.isWebGL3DRenderTarget||I.isWebGLArrayRenderTarget)&&(h?_t=I.isWebGL3DRenderTarget?r.TEXTURE_3D:r.TEXTURE_2D_ARRAY:console.error(\\\"THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.\\\")),e.bindTexture(_t,lt.__webglTexture),Wt(_t,P,St),h&&P.mipmaps&&P.mipmaps.length>0)for(let Mt=0;Mt<P.mipmaps.length;Mt++)Xt(B.__webglFramebuffer[Mt],I,P,r.COLOR_ATTACHMENT0,_t,Mt);else Xt(B.__webglFramebuffer,I,P,r.COLOR_ATTACHMENT0,_t,0);G(P,St)&&z(_t),e.unbindTexture()}I.depthBuffer&&Gt(I)}function $(I){let P=O(I)||h,B=I.isWebGLMultipleRenderTargets===!0?I.texture:[I.texture];for(let lt=0,ct=B.length;lt<ct;lt++){let Q=B[lt];if(G(Q,P)){let St=I.isWebGLCubeRenderTarget?r.TEXTURE_CUBE_MAP:r.TEXTURE_2D,_t=o.get(Q).__webglTexture;e.bindTexture(St,_t),z(St),e.unbindTexture()}}}function N(I){if(h&&I.samples>0&&R(I)===!1){let P=I.isWebGLMultipleRenderTargets?I.texture:[I.texture],B=I.width,lt=I.height,ct=r.COLOR_BUFFER_BIT,Q=[],St=I.stencilBuffer?r.DEPTH_STENCIL_ATTACHMENT:r.DEPTH_ATTACHMENT,_t=o.get(I),Mt=I.isWebGLMultipleRenderTargets===!0;if(Mt)for(let Lt=0;Lt<P.length;Lt++)e.bindFramebuffer(r.FRAMEBUFFER,_t.__webglMultisampledFramebuffer),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0+Lt,r.RENDERBUFFER,null),e.bindFramebuffer(r.FRAMEBUFFER,_t.__webglFramebuffer),r.framebufferTexture2D(r.DRAW_FRAMEBUFFER,r.COLOR_ATTACHMENT0+Lt,r.TEXTURE_2D,null,0);e.bindFramebuffer(r.READ_FRAMEBUFFER,_t.__webglMultisampledFramebuffer),e.bindFramebuffer(r.DRAW_FRAMEBUFFER,_t.__webglFramebuffer);for(let Lt=0;Lt<P.length;Lt++){Q.push(r.COLOR_ATTACHMENT0+Lt),I.depthBuffer&&Q.push(St);let $t=_t.__ignoreDepthValues!==void 0?_t.__ignoreDepthValues:!1;if($t===!1&&(I.depthBuffer&&(ct|=r.DEPTH_BUFFER_BIT),I.stencilBuffer&&(ct|=r.STENCIL_BUFFER_BIT)),Mt&&r.framebufferRenderbuffer(r.READ_FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.RENDERBUFFER,_t.__webglColorRenderbuffer[Lt]),$t===!0&&(r.invalidateFramebuffer(r.READ_FRAMEBUFFER,[St]),r.invalidateFramebuffer(r.DRAW_FRAMEBUFFER,[St])),Mt){let Et=o.get(P[Lt]).__webglTexture;r.framebufferTexture2D(r.DRAW_FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,Et,0)}r.blitFramebuffer(0,0,B,lt,0,0,B,lt,ct,r.NEAREST),M&&r.invalidateFramebuffer(r.READ_FRAMEBUFFER,Q)}if(e.bindFramebuffer(r.READ_FRAMEBUFFER,null),e.bindFramebuffer(r.DRAW_FRAMEBUFFER,null),Mt)for(let Lt=0;Lt<P.length;Lt++){e.bindFramebuffer(r.FRAMEBUFFER,_t.__webglMultisampledFramebuffer),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0+Lt,r.RENDERBUFFER,_t.__webglColorRenderbuffer[Lt]);let $t=o.get(P[Lt]).__webglTexture;e.bindFramebuffer(r.FRAMEBUFFER,_t.__webglFramebuffer),r.framebufferTexture2D(r.DRAW_FRAMEBUFFER,r.COLOR_ATTACHMENT0+Lt,r.TEXTURE_2D,$t,0)}e.bindFramebuffer(r.DRAW_FRAMEBUFFER,_t.__webglMultisampledFramebuffer)}}function b(I){return Math.min(_,I.samples)}function R(I){let P=o.get(I);return h&&I.samples>0&&t.has(\\\"WEBGL_multisampled_render_to_texture\\\")===!0&&P.__useRenderToTexture!==!1}function W(I){let P=f.render.frame;w.get(I)!==P&&(w.set(I,P),I.update())}function J(I,P){let B=I.colorSpace,lt=I.format,ct=I.type;return I.isCompressedTexture===!0||I.isVideoTexture===!0||I.format===ph||B!==Xo&&B!==Di&&(gn.getTransfer(B)===Tn?h===!1?t.has(\\\"EXT_sRGB\\\")===!0&<===Ki?(I.format=ph,I.minFilter=Oi,I.generateMipmaps=!1):P=ec.sRGBToLinear(P):(lt!==Ki||ct!==ds)&&console.warn(\\\"THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.\\\"):console.error(\\\"THREE.WebGLTextures: Unsupported texture color space:\\\",B)),P}this.allocateTextureUnit=et,this.resetTextureUnits=pt,this.setTexture2D=V,this.setTexture2DArray=K,this.setTexture3D=at,this.setTextureCube=Tt,this.rebindTextures=te,this.setupRenderTarget=qt,this.updateRenderTargetMipmap=$,this.updateMultisampleRenderTarget=N,this.setupDepthRenderbuffer=Gt,this.setupFrameBufferTexture=Xt,this.useMultisampledRTT=R}function Sb(r,t,e){let o=e.isWebGL2;function a(l,f=Di){let h,p=gn.getTransfer(f);if(l===ds)return r.UNSIGNED_BYTE;if(l===kg)return r.UNSIGNED_SHORT_4_4_4_4;if(l===Gg)return r.UNSIGNED_SHORT_5_5_5_1;if(l===gx)return r.BYTE;if(l===yx)return r.SHORT;if(l===Yh)return r.UNSIGNED_SHORT;if(l===zg)return r.INT;if(l===cs)return r.UNSIGNED_INT;if(l===fs)return r.FLOAT;if(l===Uu)return o?r.HALF_FLOAT:(h=t.get(\\\"OES_texture_half_float\\\"),h!==null?h.HALF_FLOAT_OES:null);if(l===vx)return r.ALPHA;if(l===Ki)return r.RGBA;if(l===_x)return r.LUMINANCE;if(l===xx)return r.LUMINANCE_ALPHA;if(l===qs)return r.DEPTH_COMPONENT;if(l===Ha)return r.DEPTH_STENCIL;if(l===ph)return h=t.get(\\\"EXT_sRGB\\\"),h!==null?h.SRGB_ALPHA_EXT:null;if(l===Ex)return r.RED;if(l===Vg)return r.RED_INTEGER;if(l===Mx)return r.RG;if(l===Hg)return r.RG_INTEGER;if(l===Wg)return r.RGBA_INTEGER;if(l===Nf||l===Of||l===Df||l===Ff)if(p===Tn)if(h=t.get(\\\"WEBGL_compressed_texture_s3tc_srgb\\\"),h!==null){if(l===Nf)return h.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(l===Of)return h.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(l===Df)return h.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(l===Ff)return h.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(h=t.get(\\\"WEBGL_compressed_texture_s3tc\\\"),h!==null){if(l===Nf)return h.COMPRESSED_RGB_S3TC_DXT1_EXT;if(l===Of)return h.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(l===Df)return h.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(l===Ff)return h.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(l===xm||l===Em||l===Mm||l===Sm)if(h=t.get(\\\"WEBGL_compressed_texture_pvrtc\\\"),h!==null){if(l===xm)return h.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(l===Em)return h.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(l===Mm)return h.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(l===Sm)return h.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(l===Sx)return h=t.get(\\\"WEBGL_compressed_texture_etc1\\\"),h!==null?h.COMPRESSED_RGB_ETC1_WEBGL:null;if(l===wm||l===bm)if(h=t.get(\\\"WEBGL_compressed_texture_etc\\\"),h!==null){if(l===wm)return p===Tn?h.COMPRESSED_SRGB8_ETC2:h.COMPRESSED_RGB8_ETC2;if(l===bm)return p===Tn?h.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:h.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(l===Tm||l===Am||l===Cm||l===Pm||l===Im||l===Rm||l===Lm||l===Nm||l===Om||l===Dm||l===Fm||l===Um||l===Bm||l===zm)if(h=t.get(\\\"WEBGL_compressed_texture_astc\\\"),h!==null){if(l===Tm)return p===Tn?h.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:h.COMPRESSED_RGBA_ASTC_4x4_KHR;if(l===Am)return p===Tn?h.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:h.COMPRESSED_RGBA_ASTC_5x4_KHR;if(l===Cm)return p===Tn?h.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:h.COMPRESSED_RGBA_ASTC_5x5_KHR;if(l===Pm)return p===Tn?h.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:h.COMPRESSED_RGBA_ASTC_6x5_KHR;if(l===Im)return p===Tn?h.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:h.COMPRESSED_RGBA_ASTC_6x6_KHR;if(l===Rm)return p===Tn?h.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:h.COMPRESSED_RGBA_ASTC_8x5_KHR;if(l===Lm)return p===Tn?h.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:h.COMPRESSED_RGBA_ASTC_8x6_KHR;if(l===Nm)return p===Tn?h.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:h.COMPRESSED_RGBA_ASTC_8x8_KHR;if(l===Om)return p===Tn?h.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:h.COMPRESSED_RGBA_ASTC_10x5_KHR;if(l===Dm)return p===Tn?h.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:h.COMPRESSED_RGBA_ASTC_10x6_KHR;if(l===Fm)return p===Tn?h.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:h.COMPRESSED_RGBA_ASTC_10x8_KHR;if(l===Um)return p===Tn?h.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:h.COMPRESSED_RGBA_ASTC_10x10_KHR;if(l===Bm)return p===Tn?h.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:h.COMPRESSED_RGBA_ASTC_12x10_KHR;if(l===zm)return p===Tn?h.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:h.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(l===Uf||l===km||l===Gm)if(h=t.get(\\\"EXT_texture_compression_bptc\\\"),h!==null){if(l===Uf)return p===Tn?h.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:h.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(l===km)return h.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(l===Gm)return h.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(l===wx||l===Vm||l===Hm||l===Wm)if(h=t.get(\\\"EXT_texture_compression_rgtc\\\"),h!==null){if(l===Uf)return h.COMPRESSED_RED_RGTC1_EXT;if(l===Vm)return h.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(l===Hm)return h.COMPRESSED_RED_GREEN_RGTC2_EXT;if(l===Wm)return h.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return l===Ws?o?r.UNSIGNED_INT_24_8:(h=t.get(\\\"WEBGL_depth_texture\\\"),h!==null?h.UNSIGNED_INT_24_8_WEBGL:null):r[l]!==void 0?r[l]:null}return{convert:a}}var Rh=class extends Ei{constructor(t=[]){super(),this.isArrayCamera=!0,this.cameras=t}},Ua=class extends ho{constructor(){super(),this.isGroup=!0,this.type=\\\"Group\\\"}},wb={type:\\\"move\\\"},Du=class{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null&&(this._hand=new Ua,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new Ua,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new mt,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new mt),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new Ua,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new mt,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new mt),this._grip}dispatchEvent(t){return this._targetRay!==null&&this._targetRay.dispatchEvent(t),this._grip!==null&&this._grip.dispatchEvent(t),this._hand!==null&&this._hand.dispatchEvent(t),this}connect(t){if(t&&t.hand){let e=this._hand;if(e)for(let o of t.hand.values())this._getHandJoint(e,o)}return this.dispatchEvent({type:\\\"connected\\\",data:t}),this}disconnect(t){return this.dispatchEvent({type:\\\"disconnected\\\",data:t}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}update(t,e,o){let a=null,l=null,f=null,h=this._targetRay,p=this._grip,d=this._hand;if(t&&e.session.visibilityState!==\\\"visible-blurred\\\"){if(d&&t.hand){f=!0;for(let T of t.hand.values()){let x=e.getJointPose(T,o),v=this._getHandJoint(d,T);x!==null&&(v.matrix.fromArray(x.transform.matrix),v.matrix.decompose(v.position,v.rotation,v.scale),v.matrixWorldNeedsUpdate=!0,v.jointRadius=x.radius),v.visible=x!==null}let g=d.joints[\\\"index-finger-tip\\\"],_=d.joints[\\\"thumb-tip\\\"],y=g.position.distanceTo(_.position),M=.02,w=.005;d.inputState.pinching&&y>M+w?(d.inputState.pinching=!1,this.dispatchEvent({type:\\\"pinchend\\\",handedness:t.handedness,target:this})):!d.inputState.pinching&&y<=M-w&&(d.inputState.pinching=!0,this.dispatchEvent({type:\\\"pinchstart\\\",handedness:t.handedness,target:this}))}else p!==null&&t.gripSpace&&(l=e.getPose(t.gripSpace,o),l!==null&&(p.matrix.fromArray(l.transform.matrix),p.matrix.decompose(p.position,p.rotation,p.scale),p.matrixWorldNeedsUpdate=!0,l.linearVelocity?(p.hasLinearVelocity=!0,p.linearVelocity.copy(l.linearVelocity)):p.hasLinearVelocity=!1,l.angularVelocity?(p.hasAngularVelocity=!0,p.angularVelocity.copy(l.angularVelocity)):p.hasAngularVelocity=!1));h!==null&&(a=e.getPose(t.targetRaySpace,o),a===null&&l!==null&&(a=l),a!==null&&(h.matrix.fromArray(a.transform.matrix),h.matrix.decompose(h.position,h.rotation,h.scale),h.matrixWorldNeedsUpdate=!0,a.linearVelocity?(h.hasLinearVelocity=!0,h.linearVelocity.copy(a.linearVelocity)):h.hasLinearVelocity=!1,a.angularVelocity?(h.hasAngularVelocity=!0,h.angularVelocity.copy(a.angularVelocity)):h.hasAngularVelocity=!1,this.dispatchEvent(wb)))}return h!==null&&(h.visible=a!==null),p!==null&&(p.visible=l!==null),d!==null&&(d.visible=f!==null),this}_getHandJoint(t,e){if(t.joints[e.jointName]===void 0){let o=new Ua;o.matrixAutoUpdate=!1,o.visible=!1,t.joints[e.jointName]=o,t.add(o)}return t.joints[e.jointName]}},Lh=class extends ji{constructor(t,e,o,a,l,f,h,p,d,g){if(g=g!==void 0?g:qs,g!==qs&&g!==Ha)throw new Error(\\\"DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat\\\");o===void 0&&g===qs&&(o=cs),o===void 0&&g===Ha&&(o=Ws),super(null,a,l,f,h,p,g,o,d),this.isDepthTexture=!0,this.image={width:t,height:e},this.magFilter=h!==void 0?h:$r,this.minFilter=p!==void 0?p:$r,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(t){return super.copy(t),this.compareFunction=t.compareFunction,this}toJSON(t){let e=super.toJSON(t);return this.compareFunction!==null&&(e.compareFunction=this.compareFunction),e}},Nh=class extends gs{constructor(t,e){super();let o=this,a=null,l=1,f=null,h=\\\"local-floor\\\",p=1,d=null,g=null,_=null,y=null,M=null,w=null,T=e.getContextAttributes(),x=null,v=null,C=[],S=[],O=new Ei;O.layers.enable(1),O.viewport=new Tr;let F=new Ei;F.layers.enable(2),F.viewport=new Tr;let G=[O,F],z=new Rh;z.layers.enable(1),z.layers.enable(2);let L=null,D=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(K){let at=C[K];return at===void 0&&(at=new Du,C[K]=at),at.getTargetRaySpace()},this.getControllerGrip=function(K){let at=C[K];return at===void 0&&(at=new Du,C[K]=at),at.getGripSpace()},this.getHand=function(K){let at=C[K];return at===void 0&&(at=new Du,C[K]=at),at.getHandSpace()};function q(K){let at=S.indexOf(K.inputSource);if(at===-1)return;let Tt=C[at];Tt!==void 0&&(Tt.update(K.inputSource,K.frame,d||f),Tt.dispatchEvent({type:K.type,data:K.inputSource}))}function nt(){a.removeEventListener(\\\"select\\\",q),a.removeEventListener(\\\"selectstart\\\",q),a.removeEventListener(\\\"selectend\\\",q),a.removeEventListener(\\\"squeeze\\\",q),a.removeEventListener(\\\"squeezestart\\\",q),a.removeEventListener(\\\"squeezeend\\\",q),a.removeEventListener(\\\"end\\\",nt),a.removeEventListener(\\\"inputsourceschange\\\",k);for(let K=0;K<C.length;K++){let at=S[K];at!==null&&(S[K]=null,C[K].disconnect(at))}L=null,D=null,t.setRenderTarget(x),M=null,y=null,_=null,a=null,v=null,V.stop(),o.isPresenting=!1,o.dispatchEvent({type:\\\"sessionend\\\"})}this.setFramebufferScaleFactor=function(K){l=K,o.isPresenting===!0&&console.warn(\\\"THREE.WebXRManager: Cannot change framebuffer scale while presenting.\\\")},this.setReferenceSpaceType=function(K){h=K,o.isPresenting===!0&&console.warn(\\\"THREE.WebXRManager: Cannot change reference space type while presenting.\\\")},this.getReferenceSpace=function(){return d||f},this.setReferenceSpace=function(K){d=K},this.getBaseLayer=function(){return y!==null?y:M},this.getBinding=function(){return _},this.getFrame=function(){return w},this.getSession=function(){return a},this.setSession=async function(K){if(a=K,a!==null){if(x=t.getRenderTarget(),a.addEventListener(\\\"select\\\",q),a.addEventListener(\\\"selectstart\\\",q),a.addEventListener(\\\"selectend\\\",q),a.addEventListener(\\\"squeeze\\\",q),a.addEventListener(\\\"squeezestart\\\",q),a.addEventListener(\\\"squeezeend\\\",q),a.addEventListener(\\\"end\\\",nt),a.addEventListener(\\\"inputsourceschange\\\",k),T.xrCompatible!==!0&&await e.makeXRCompatible(),a.renderState.layers===void 0||t.capabilities.isWebGL2===!1){let at={antialias:a.renderState.layers===void 0?T.antialias:!0,alpha:!0,depth:T.depth,stencil:T.stencil,framebufferScaleFactor:l};M=new XRWebGLLayer(a,e,at),a.updateRenderState({baseLayer:M}),v=new Yo(M.framebufferWidth,M.framebufferHeight,{format:Ki,type:ds,colorSpace:t.outputColorSpace,stencilBuffer:T.stencil})}else{let at=null,Tt=null,dt=null;T.depth&&(dt=T.stencil?e.DEPTH24_STENCIL8:e.DEPTH_COMPONENT24,at=T.stencil?Ha:qs,Tt=T.stencil?Ws:cs);let Ct={colorFormat:e.RGBA8,depthFormat:dt,scaleFactor:l};_=new XRWebGLBinding(a,e),y=_.createProjectionLayer(Ct),a.updateRenderState({layers:[y]}),v=new Yo(y.textureWidth,y.textureHeight,{format:Ki,type:ds,depthTexture:new Lh(y.textureWidth,y.textureHeight,Tt,void 0,void 0,void 0,void 0,void 0,void 0,at),stencilBuffer:T.stencil,colorSpace:t.outputColorSpace,samples:T.antialias?4:0});let Yt=t.properties.get(v);Yt.__ignoreDepthValues=y.ignoreDepthValues}v.isXRRenderTarget=!0,this.setFoveation(p),d=null,f=await a.requestReferenceSpace(h),V.setContext(a),V.start(),o.isPresenting=!0,o.dispatchEvent({type:\\\"sessionstart\\\"})}},this.getEnvironmentBlendMode=function(){if(a!==null)return a.environmentBlendMode};function k(K){for(let at=0;at<K.removed.length;at++){let Tt=K.removed[at],dt=S.indexOf(Tt);dt>=0&&(S[dt]=null,C[dt].disconnect(Tt))}for(let at=0;at<K.added.length;at++){let Tt=K.added[at],dt=S.indexOf(Tt);if(dt===-1){for(let Yt=0;Yt<C.length;Yt++)if(Yt>=S.length){S.push(Tt),dt=Yt;break}else if(S[Yt]===null){S[Yt]=Tt,dt=Yt;break}if(dt===-1)break}let Ct=C[dt];Ct&&Ct.connect(Tt)}}let xt=new mt,X=new mt;function it(K,at,Tt){xt.setFromMatrixPosition(at.matrixWorld),X.setFromMatrixPosition(Tt.matrixWorld);let dt=xt.distanceTo(X),Ct=at.projectionMatrix.elements,Yt=Tt.projectionMatrix.elements,Wt=Ct[14]/(Ct[10]-1),Nt=Ct[14]/(Ct[10]+1),ne=(Ct[9]+1)/Ct[5],Pt=(Ct[9]-1)/Ct[5],Xt=(Ct[8]-1)/Ct[0],tt=(Yt[8]+1)/Yt[0],nn=Wt*Xt,Gt=Wt*tt,te=dt/(-Xt+tt),qt=te*-Xt;at.matrixWorld.decompose(K.position,K.quaternion,K.scale),K.translateX(qt),K.translateZ(te),K.matrixWorld.compose(K.position,K.quaternion,K.scale),K.matrixWorldInverse.copy(K.matrixWorld).invert();let $=Wt+te,N=Nt+te,b=nn-qt,R=Gt+(dt-qt),W=ne*Nt/N*$,J=Pt*Nt/N*$;K.projectionMatrix.makePerspective(b,R,W,J,$,N),K.projectionMatrixInverse.copy(K.projectionMatrix).invert()}function vt(K,at){at===null?K.matrixWorld.copy(K.matrix):K.matrixWorld.multiplyMatrices(at.matrixWorld,K.matrix),K.matrixWorldInverse.copy(K.matrixWorld).invert()}this.updateCamera=function(K){if(a===null)return;z.near=F.near=O.near=K.near,z.far=F.far=O.far=K.far,(L!==z.near||D!==z.far)&&(a.updateRenderState({depthNear:z.near,depthFar:z.far}),L=z.near,D=z.far);let at=K.parent,Tt=z.cameras;vt(z,at);for(let dt=0;dt<Tt.length;dt++)vt(Tt[dt],at);Tt.length===2?it(z,O,F):z.projectionMatrix.copy(O.projectionMatrix),pt(K,z,at)};function pt(K,at,Tt){Tt===null?K.matrix.copy(at.matrixWorld):(K.matrix.copy(Tt.matrixWorld),K.matrix.invert(),K.matrix.multiply(at.matrixWorld)),K.matrix.decompose(K.position,K.quaternion,K.scale),K.updateMatrixWorld(!0),K.projectionMatrix.copy(at.projectionMatrix),K.projectionMatrixInverse.copy(at.projectionMatrixInverse),K.isPerspectiveCamera&&(K.fov=dh*2*Math.atan(1/K.projectionMatrix.elements[5]),K.zoom=1)}this.getCamera=function(){return z},this.getFoveation=function(){if(!(y===null&&M===null))return p},this.setFoveation=function(K){p=K,y!==null&&(y.fixedFoveation=K),M!==null&&M.fixedFoveation!==void 0&&(M.fixedFoveation=K)};let et=null;function ot(K,at){if(g=at.getViewerPose(d||f),w=at,g!==null){let Tt=g.views;M!==null&&(t.setRenderTargetFramebuffer(v,M.framebuffer),t.setRenderTarget(v));let dt=!1;Tt.length!==z.cameras.length&&(z.cameras.length=0,dt=!0);for(let Ct=0;Ct<Tt.length;Ct++){let Yt=Tt[Ct],Wt=null;if(M!==null)Wt=M.getViewport(Yt);else{let ne=_.getViewSubImage(y,Yt);Wt=ne.viewport,Ct===0&&(t.setRenderTargetTextures(v,ne.colorTexture,y.ignoreDepthValues?void 0:ne.depthStencilTexture),t.setRenderTarget(v))}let Nt=G[Ct];Nt===void 0&&(Nt=new Ei,Nt.layers.enable(Ct),Nt.viewport=new Tr,G[Ct]=Nt),Nt.matrix.fromArray(Yt.transform.matrix),Nt.matrix.decompose(Nt.position,Nt.quaternion,Nt.scale),Nt.projectionMatrix.fromArray(Yt.projectionMatrix),Nt.projectionMatrixInverse.copy(Nt.projectionMatrix).invert(),Nt.viewport.set(Wt.x,Wt.y,Wt.width,Wt.height),Ct===0&&(z.matrix.copy(Nt.matrix),z.matrix.decompose(z.position,z.quaternion,z.scale)),dt===!0&&z.cameras.push(Nt)}}for(let Tt=0;Tt<C.length;Tt++){let dt=S[Tt],Ct=C[Tt];dt!==null&&Ct!==void 0&&Ct.update(dt,at,d||f)}et&&et(K,at),at.detectedPlanes&&o.dispatchEvent({type:\\\"planesdetected\\\",data:at}),w=null}let V=new Jg;V.setAnimationLoop(ot),this.setAnimationLoop=function(K){et=K},this.dispose=function(){}}};function bb(r,t){function e(x,v){x.matrixAutoUpdate===!0&&x.updateMatrix(),v.value.copy(x.matrix)}function o(x,v){v.color.getRGB(x.fogColor.value,Zg(r)),v.isFog?(x.fogNear.value=v.near,x.fogFar.value=v.far):v.isFogExp2&&(x.fogDensity.value=v.density)}function a(x,v,C,S,O){v.isMeshBasicMaterial||v.isMeshLambertMaterial?l(x,v):v.isMeshToonMaterial?(l(x,v),_(x,v)):v.isMeshPhongMaterial?(l(x,v),g(x,v)):v.isMeshStandardMaterial?(l(x,v),y(x,v),v.isMeshPhysicalMaterial&&M(x,v,O)):v.isMeshMatcapMaterial?(l(x,v),w(x,v)):v.isMeshDepthMaterial?l(x,v):v.isMeshDistanceMaterial?(l(x,v),T(x,v)):v.isMeshNormalMaterial?l(x,v):v.isLineBasicMaterial?(f(x,v),v.isLineDashedMaterial&&h(x,v)):v.isPointsMaterial?p(x,v,C,S):v.isSpriteMaterial?d(x,v):v.isShadowMaterial?(x.color.value.copy(v.color),x.opacity.value=v.opacity):v.isShaderMaterial&&(v.uniformsNeedUpdate=!1)}function l(x,v){x.opacity.value=v.opacity,v.color&&x.diffuse.value.copy(v.color),v.emissive&&x.emissive.value.copy(v.emissive).multiplyScalar(v.emissiveIntensity),v.map&&(x.map.value=v.map,e(v.map,x.mapTransform)),v.alphaMap&&(x.alphaMap.value=v.alphaMap,e(v.alphaMap,x.alphaMapTransform)),v.bumpMap&&(x.bumpMap.value=v.bumpMap,e(v.bumpMap,x.bumpMapTransform),x.bumpScale.value=v.bumpScale,v.side===li&&(x.bumpScale.value*=-1)),v.normalMap&&(x.normalMap.value=v.normalMap,e(v.normalMap,x.normalMapTransform),x.normalScale.value.copy(v.normalScale),v.side===li&&x.normalScale.value.negate()),v.displacementMap&&(x.displacementMap.value=v.displacementMap,e(v.displacementMap,x.displacementMapTransform),x.displacementScale.value=v.displacementScale,x.displacementBias.value=v.displacementBias),v.emissiveMap&&(x.emissiveMap.value=v.emissiveMap,e(v.emissiveMap,x.emissiveMapTransform)),v.specularMap&&(x.specularMap.value=v.specularMap,e(v.specularMap,x.specularMapTransform)),v.alphaTest>0&&(x.alphaTest.value=v.alphaTest);let C=t.get(v).envMap;if(C&&(x.envMap.value=C,x.flipEnvMap.value=C.isCubeTexture&&C.isRenderTargetTexture===!1?-1:1,x.reflectivity.value=v.reflectivity,x.ior.value=v.ior,x.refractionRatio.value=v.refractionRatio),v.lightMap){x.lightMap.value=v.lightMap;let S=r._useLegacyLights===!0?Math.PI:1;x.lightMapIntensity.value=v.lightMapIntensity*S,e(v.lightMap,x.lightMapTransform)}v.aoMap&&(x.aoMap.value=v.aoMap,x.aoMapIntensity.value=v.aoMapIntensity,e(v.aoMap,x.aoMapTransform))}function f(x,v){x.diffuse.value.copy(v.color),x.opacity.value=v.opacity,v.map&&(x.map.value=v.map,e(v.map,x.mapTransform))}function h(x,v){x.dashSize.value=v.dashSize,x.totalSize.value=v.dashSize+v.gapSize,x.scale.value=v.scale}function p(x,v,C,S){x.diffuse.value.copy(v.color),x.opacity.value=v.opacity,x.size.value=v.size*C,x.scale.value=S*.5,v.map&&(x.map.value=v.map,e(v.map,x.uvTransform)),v.alphaMap&&(x.alphaMap.value=v.alphaMap,e(v.alphaMap,x.alphaMapTransform)),v.alphaTest>0&&(x.alphaTest.value=v.alphaTest)}function d(x,v){x.diffuse.value.copy(v.color),x.opacity.value=v.opacity,x.rotation.value=v.rotation,v.map&&(x.map.value=v.map,e(v.map,x.mapTransform)),v.alphaMap&&(x.alphaMap.value=v.alphaMap,e(v.alphaMap,x.alphaMapTransform)),v.alphaTest>0&&(x.alphaTest.value=v.alphaTest)}function g(x,v){x.specular.value.copy(v.specular),x.shininess.value=Math.max(v.shininess,1e-4)}function _(x,v){v.gradientMap&&(x.gradientMap.value=v.gradientMap)}function y(x,v){x.metalness.value=v.metalness,v.metalnessMap&&(x.metalnessMap.value=v.metalnessMap,e(v.metalnessMap,x.metalnessMapTransform)),x.roughness.value=v.roughness,v.roughnessMap&&(x.roughnessMap.value=v.roughnessMap,e(v.roughnessMap,x.roughnessMapTransform)),t.get(v).envMap&&(x.envMapIntensity.value=v.envMapIntensity)}function M(x,v,C){x.ior.value=v.ior,v.sheen>0&&(x.sheenColor.value.copy(v.sheenColor).multiplyScalar(v.sheen),x.sheenRoughness.value=v.sheenRoughness,v.sheenColorMap&&(x.sheenColorMap.value=v.sheenColorMap,e(v.sheenColorMap,x.sheenColorMapTransform)),v.sheenRoughnessMap&&(x.sheenRoughnessMap.value=v.sheenRoughnessMap,e(v.sheenRoughnessMap,x.sheenRoughnessMapTransform))),v.clearcoat>0&&(x.clearcoat.value=v.clearcoat,x.clearcoatRoughness.value=v.clearcoatRoughness,v.clearcoatMap&&(x.clearcoatMap.value=v.clearcoatMap,e(v.clearcoatMap,x.clearcoatMapTransform)),v.clearcoatRoughnessMap&&(x.clearcoatRoughnessMap.value=v.clearcoatRoughnessMap,e(v.clearcoatRoughnessMap,x.clearcoatRoughnessMapTransform)),v.clearcoatNormalMap&&(x.clearcoatNormalMap.value=v.clearcoatNormalMap,e(v.clearcoatNormalMap,x.clearcoatNormalMapTransform),x.clearcoatNormalScale.value.copy(v.clearcoatNormalScale),v.side===li&&x.clearcoatNormalScale.value.negate())),v.iridescence>0&&(x.iridescence.value=v.iridescence,x.iridescenceIOR.value=v.iridescenceIOR,x.iridescenceThicknessMinimum.value=v.iridescenceThicknessRange[0],x.iridescenceThicknessMaximum.value=v.iridescenceThicknessRange[1],v.iridescenceMap&&(x.iridescenceMap.value=v.iridescenceMap,e(v.iridescenceMap,x.iridescenceMapTransform)),v.iridescenceThicknessMap&&(x.iridescenceThicknessMap.value=v.iridescenceThicknessMap,e(v.iridescenceThicknessMap,x.iridescenceThicknessMapTransform))),v.transmission>0&&(x.transmission.value=v.transmission,x.transmissionSamplerMap.value=C.texture,x.transmissionSamplerSize.value.set(C.width,C.height),v.transmissionMap&&(x.transmissionMap.value=v.transmissionMap,e(v.transmissionMap,x.transmissionMapTransform)),x.thickness.value=v.thickness,v.thicknessMap&&(x.thicknessMap.value=v.thicknessMap,e(v.thicknessMap,x.thicknessMapTransform)),x.attenuationDistance.value=v.attenuationDistance,x.attenuationColor.value.copy(v.attenuationColor)),v.anisotropy>0&&(x.anisotropyVector.value.set(v.anisotropy*Math.cos(v.anisotropyRotation),v.anisotropy*Math.sin(v.anisotropyRotation)),v.anisotropyMap&&(x.anisotropyMap.value=v.anisotropyMap,e(v.anisotropyMap,x.anisotropyMapTransform))),x.specularIntensity.value=v.specularIntensity,x.specularColor.value.copy(v.specularColor),v.specularColorMap&&(x.specularColorMap.value=v.specularColorMap,e(v.specularColorMap,x.specularColorMapTransform)),v.specularIntensityMap&&(x.specularIntensityMap.value=v.specularIntensityMap,e(v.specularIntensityMap,x.specularIntensityMapTransform))}function w(x,v){v.matcap&&(x.matcap.value=v.matcap)}function T(x,v){let C=t.get(v).light;x.referencePosition.value.setFromMatrixPosition(C.matrixWorld),x.nearDistance.value=C.shadow.camera.near,x.farDistance.value=C.shadow.camera.far}return{refreshFogUniforms:o,refreshMaterialUniforms:a}}function Tb(r,t,e,o){let a={},l={},f=[],h=e.isWebGL2?r.getParameter(r.MAX_UNIFORM_BUFFER_BINDINGS):0;function p(C,S){let O=S.program;o.uniformBlockBinding(C,O)}function d(C,S){let O=a[C.id];O===void 0&&(w(C),O=g(C),a[C.id]=O,C.addEventListener(\\\"dispose\\\",x));let F=S.program;o.updateUBOMapping(C,F);let G=t.render.frame;l[C.id]!==G&&(y(C),l[C.id]=G)}function g(C){let S=_();C.__bindingPointIndex=S;let O=r.createBuffer(),F=C.__size,G=C.usage;return r.bindBuffer(r.UNIFORM_BUFFER,O),r.bufferData(r.UNIFORM_BUFFER,F,G),r.bindBuffer(r.UNIFORM_BUFFER,null),r.bindBufferBase(r.UNIFORM_BUFFER,S,O),O}function _(){for(let C=0;C<h;C++)if(f.indexOf(C)===-1)return f.push(C),C;return console.error(\\\"THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached.\\\"),0}function y(C){let S=a[C.id],O=C.uniforms,F=C.__cache;r.bindBuffer(r.UNIFORM_BUFFER,S);for(let G=0,z=O.length;G<z;G++){let L=O[G];if(M(L,G,F)===!0){let D=L.__offset,q=Array.isArray(L.value)?L.value:[L.value],nt=0;for(let k=0;k<q.length;k++){let xt=q[k],X=T(xt);typeof xt==\\\"number\\\"?(L.__data[0]=xt,r.bufferSubData(r.UNIFORM_BUFFER,D+nt,L.__data)):xt.isMatrix3?(L.__data[0]=xt.elements[0],L.__data[1]=xt.elements[1],L.__data[2]=xt.elements[2],L.__data[3]=xt.elements[0],L.__data[4]=xt.elements[3],L.__data[5]=xt.elements[4],L.__data[6]=xt.elements[5],L.__data[7]=xt.elements[0],L.__data[8]=xt.elements[6],L.__data[9]=xt.elements[7],L.__data[10]=xt.elements[8],L.__data[11]=xt.elements[0]):(xt.toArray(L.__data,nt),nt+=X.storage/Float32Array.BYTES_PER_ELEMENT)}r.bufferSubData(r.UNIFORM_BUFFER,D,L.__data)}}r.bindBuffer(r.UNIFORM_BUFFER,null)}function M(C,S,O){let F=C.value;if(O[S]===void 0){if(typeof F==\\\"number\\\")O[S]=F;else{let G=Array.isArray(F)?F:[F],z=[];for(let L=0;L<G.length;L++)z.push(G[L].clone());O[S]=z}return!0}else if(typeof F==\\\"number\\\"){if(O[S]!==F)return O[S]=F,!0}else{let G=Array.isArray(O[S])?O[S]:[O[S]],z=Array.isArray(F)?F:[F];for(let L=0;L<G.length;L++){let D=G[L];if(D.equals(z[L])===!1)return D.copy(z[L]),!0}}return!1}function w(C){let S=C.uniforms,O=0,F=16,G=0;for(let z=0,L=S.length;z<L;z++){let D=S[z],q={boundary:0,storage:0},nt=Array.isArray(D.value)?D.value:[D.value];for(let k=0,xt=nt.length;k<xt;k++){let X=nt[k],it=T(X);q.boundary+=it.boundary,q.storage+=it.storage}if(D.__data=new Float32Array(q.storage/Float32Array.BYTES_PER_ELEMENT),D.__offset=O,z>0){G=O%F;let k=F-G;G!==0&&k-q.boundary<0&&(O+=F-G,D.__offset=O)}O+=q.storage}return G=O%F,G>0&&(O+=F-G),C.__size=O,C.__cache={},this}function T(C){let S={boundary:0,storage:0};return typeof C==\\\"number\\\"?(S.boundary=4,S.storage=4):C.isVector2?(S.boundary=8,S.storage=8):C.isVector3||C.isColor?(S.boundary=16,S.storage=12):C.isVector4?(S.boundary=16,S.storage=16):C.isMatrix3?(S.boundary=48,S.storage=48):C.isMatrix4?(S.boundary=64,S.storage=64):C.isTexture?console.warn(\\\"THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group.\\\"):console.warn(\\\"THREE.WebGLRenderer: Unsupported uniform value type.\\\",C),S}function x(C){let S=C.target;S.removeEventListener(\\\"dispose\\\",x);let O=f.indexOf(S.__bindingPointIndex);f.splice(O,1),r.deleteBuffer(a[S.id]),delete a[S.id],delete l[S.id]}function v(){for(let C in a)r.deleteBuffer(a[C]);f=[],a={},l={}}return{bind:p,update:d,dispose:v}}var Oh=class{constructor(t={}){let{canvas:e=zx(),context:o=null,depth:a=!0,stencil:l=!0,alpha:f=!1,antialias:h=!1,premultipliedAlpha:p=!0,preserveDrawingBuffer:d=!1,powerPreference:g=\\\"default\\\",failIfMajorPerformanceCaveat:_=!1}=t;this.isWebGLRenderer=!0;let y;o!==null?y=o.getContextAttributes().alpha:y=f;let M=new Uint32Array(4),w=new Int32Array(4),T=null,x=null,v=[],C=[];this.domElement=e,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this._outputColorSpace=br,this._useLegacyLights=!1,this.toneMapping=ps,this.toneMappingExposure=1;let S=this,O=!1,F=0,G=0,z=null,L=-1,D=null,q=new Tr,nt=new Tr,k=null,xt=new xn(0),X=0,it=e.width,vt=e.height,pt=1,et=null,ot=null,V=new Tr(0,0,it,vt),K=new Tr(0,0,it,vt),at=!1,Tt=new fc,dt=!1,Ct=!1,Yt=null,Wt=new zr,Nt=new fn,ne=new mt,Pt={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function Xt(){return z===null?pt:1}let tt=o;function nn(H,rt){for(let gt=0;gt<H.length;gt++){let st=H[gt],yt=e.getContext(st,rt);if(yt!==null)return yt}return null}try{let H={alpha:!0,depth:a,stencil:l,antialias:h,premultipliedAlpha:p,preserveDrawingBuffer:d,powerPreference:g,failIfMajorPerformanceCaveat:_};if(\\\"setAttribute\\\"in e&&e.setAttribute(\\\"data-engine\\\",`three.js r${Xh}`),e.addEventListener(\\\"webglcontextlost\\\",wt,!1),e.addEventListener(\\\"webglcontextrestored\\\",j,!1),e.addEventListener(\\\"webglcontextcreationerror\\\",Ut,!1),tt===null){let rt=[\\\"webgl2\\\",\\\"webgl\\\",\\\"experimental-webgl\\\"];if(S.isWebGL1Renderer===!0&&rt.shift(),tt=nn(rt,H),tt===null)throw nn(rt)?new Error(\\\"Error creating WebGL context with your selected attributes.\\\"):new Error(\\\"Error creating WebGL context.\\\")}typeof WebGLRenderingContext!=\\\"undefined\\\"&&tt instanceof WebGLRenderingContext&&console.warn(\\\"THREE.WebGLRenderer: WebGL 1 support was deprecated in r153 and will be removed in r163.\\\"),tt.getShaderPrecisionFormat===void 0&&(tt.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(H){throw console.error(\\\"THREE.WebGLRenderer: \\\"+H.message),H}let Gt,te,qt,$,N,b,R,W,J,I,P,B,lt,ct,Q,St,_t,Mt,Lt,$t,Et,oe,jt,Ht;function Ot(){Gt=new YS(tt),te=new GS(tt,Gt,t),Gt.init(te),oe=new Sb(tt,Gt,te),qt=new Eb(tt,Gt,te),$=new $S(tt),N=new lb,b=new Mb(tt,Gt,qt,N,te,oe,$),R=new HS(S),W=new XS(S),J=new sE(tt,te),jt=new zS(tt,Gt,J,te),I=new ZS(tt,J,$,jt),P=new tw(tt,I,J,$),Lt=new QS(tt,te,b),St=new VS(N),B=new ub(S,R,W,Gt,te,jt,St),lt=new bb(S,N),ct=new fb,Q=new yb(Gt,te),Mt=new BS(S,R,W,qt,P,y,p),_t=new xb(S,P,te),Ht=new Tb(tt,$,te,qt),$t=new kS(tt,Gt,$,te),Et=new JS(tt,Gt,$,te),$.programs=B.programs,S.capabilities=te,S.extensions=Gt,S.properties=N,S.renderLists=ct,S.shadowMap=_t,S.state=qt,S.info=$}Ot();let Y=new Nh(S,tt);this.xr=Y,this.getContext=function(){return tt},this.getContextAttributes=function(){return tt.getContextAttributes()},this.forceContextLoss=function(){let H=Gt.get(\\\"WEBGL_lose_context\\\");H&&H.loseContext()},this.forceContextRestore=function(){let H=Gt.get(\\\"WEBGL_lose_context\\\");H&&H.restoreContext()},this.getPixelRatio=function(){return pt},this.setPixelRatio=function(H){H!==void 0&&(pt=H,this.setSize(it,vt,!1))},this.getSize=function(H){return H.set(it,vt)},this.setSize=function(H,rt,gt=!0){if(Y.isPresenting){console.warn(\\\"THREE.WebGLRenderer: Can't change size while VR device is presenting.\\\");return}it=H,vt=rt,e.width=Math.floor(H*pt),e.height=Math.floor(rt*pt),gt===!0&&(e.style.width=H+\\\"px\\\",e.style.height=rt+\\\"px\\\"),this.setViewport(0,0,H,rt)},this.getDrawingBufferSize=function(H){return H.set(it*pt,vt*pt).floor()},this.setDrawingBufferSize=function(H,rt,gt){it=H,vt=rt,pt=gt,e.width=Math.floor(H*gt),e.height=Math.floor(rt*gt),this.setViewport(0,0,H,rt)},this.getCurrentViewport=function(H){return H.copy(q)},this.getViewport=function(H){return H.copy(V)},this.setViewport=function(H,rt,gt,st){H.isVector4?V.set(H.x,H.y,H.z,H.w):V.set(H,rt,gt,st),qt.viewport(q.copy(V).multiplyScalar(pt).floor())},this.getScissor=function(H){return H.copy(K)},this.setScissor=function(H,rt,gt,st){H.isVector4?K.set(H.x,H.y,H.z,H.w):K.set(H,rt,gt,st),qt.scissor(nt.copy(K).multiplyScalar(pt).floor())},this.getScissorTest=function(){return at},this.setScissorTest=function(H){qt.setScissorTest(at=H)},this.setOpaqueSort=function(H){et=H},this.setTransparentSort=function(H){ot=H},this.getClearColor=function(H){return H.copy(Mt.getClearColor())},this.setClearColor=function(){Mt.setClearColor.apply(Mt,arguments)},this.getClearAlpha=function(){return Mt.getClearAlpha()},this.setClearAlpha=function(){Mt.setClearAlpha.apply(Mt,arguments)},this.clear=function(H=!0,rt=!0,gt=!0){let st=0;if(H){let yt=!1;if(z!==null){let It=z.texture.format;yt=It===Wg||It===Hg||It===Vg}if(yt){let It=z.texture.type,Bt=It===ds||It===cs||It===Yh||It===Ws||It===kg||It===Gg,se=Mt.getClearColor(),Qt=Mt.getClearAlpha(),ce=se.r,Vt=se.g,fe=se.b;Bt?(M[0]=ce,M[1]=Vt,M[2]=fe,M[3]=Qt,tt.clearBufferuiv(tt.COLOR,0,M)):(w[0]=ce,w[1]=Vt,w[2]=fe,w[3]=Qt,tt.clearBufferiv(tt.COLOR,0,w))}else st|=tt.COLOR_BUFFER_BIT}rt&&(st|=tt.DEPTH_BUFFER_BIT),gt&&(st|=tt.STENCIL_BUFFER_BIT),tt.clear(st)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){e.removeEventListener(\\\"webglcontextlost\\\",wt,!1),e.removeEventListener(\\\"webglcontextrestored\\\",j,!1),e.removeEventListener(\\\"webglcontextcreationerror\\\",Ut,!1),ct.dispose(),Q.dispose(),N.dispose(),R.dispose(),W.dispose(),P.dispose(),jt.dispose(),Ht.dispose(),B.dispose(),Y.dispose(),Y.removeEventListener(\\\"sessionstart\\\",He),Y.removeEventListener(\\\"sessionend\\\",Si),Yt&&(Yt.dispose(),Yt=null),$n.stop()};function wt(H){H.preventDefault(),console.log(\\\"THREE.WebGLRenderer: Context Lost.\\\"),O=!0}function j(){console.log(\\\"THREE.WebGLRenderer: Context Restored.\\\"),O=!1;let H=$.autoReset,rt=_t.enabled,gt=_t.autoUpdate,st=_t.needsUpdate,yt=_t.type;Ot(),$.autoReset=H,_t.enabled=rt,_t.autoUpdate=gt,_t.needsUpdate=st,_t.type=yt}function Ut(H){console.error(\\\"THREE.WebGLRenderer: A WebGL context could not be created. Reason: \\\",H.statusMessage)}function Dt(H){let rt=H.target;rt.removeEventListener(\\\"dispose\\\",Dt),ft(rt)}function ft(H){Kt(H),N.remove(H)}function Kt(H){let rt=N.get(H).programs;rt!==void 0&&(rt.forEach(function(gt){B.releaseProgram(gt)}),H.isShaderMaterial&&B.releaseShaderCache(H))}this.renderBufferDirect=function(H,rt,gt,st,yt,It){rt===null&&(rt=Pt);let Bt=yt.isMesh&&yt.matrixWorld.determinant()<0,se=ei(H,rt,gt,st,yt);qt.setMaterial(st,Bt);let Qt=gt.index,ce=1;if(st.wireframe===!0){if(Qt=I.getWireframeAttribute(gt),Qt===void 0)return;ce=2}let Vt=gt.drawRange,fe=gt.attributes.position,sn=Vt.start*ce,un=(Vt.start+Vt.count)*ce;It!==null&&(sn=Math.max(sn,It.start*ce),un=Math.min(un,(It.start+It.count)*ce)),Qt!==null?(sn=Math.max(sn,0),un=Math.min(un,Qt.count)):fe!=null&&(sn=Math.max(sn,0),un=Math.min(un,fe.count));let vn=un-sn;if(vn<0||vn===1/0)return;jt.setup(yt,st,se,gt,Qt);let ni,En=$t;if(Qt!==null&&(ni=J.get(Qt),En=Et,En.setIndex(ni)),yt.isMesh)st.wireframe===!0?(qt.setLineWidth(st.wireframeLinewidth*Xt()),En.setMode(tt.LINES)):En.setMode(tt.TRIANGLES);else if(yt.isLine){let de=st.linewidth;de===void 0&&(de=1),qt.setLineWidth(de*Xt()),yt.isLineSegments?En.setMode(tt.LINES):yt.isLineLoop?En.setMode(tt.LINE_LOOP):En.setMode(tt.LINE_STRIP)}else yt.isPoints?En.setMode(tt.POINTS):yt.isSprite&&En.setMode(tt.TRIANGLES);if(yt.isInstancedMesh)En.renderInstances(sn,vn,yt.count);else if(gt.isInstancedBufferGeometry){let de=gt._maxInstanceCount!==void 0?gt._maxInstanceCount:1/0,Mo=Math.min(gt.instanceCount,de);En.renderInstances(sn,vn,Mo)}else En.render(sn,vn)},this.compile=function(H,rt){function gt(st,yt,It){st.transparent===!0&&st.side===Ho&&st.forceSinglePass===!1?(st.side=li,st.needsUpdate=!0,pe(st,yt,It),st.side=ms,st.needsUpdate=!0,pe(st,yt,It),st.side=Ho):pe(st,yt,It)}x=Q.get(H),x.init(),C.push(x),H.traverseVisible(function(st){st.isLight&&st.layers.test(rt.layers)&&(x.pushLight(st),st.castShadow&&x.pushShadow(st))}),x.setupLights(S._useLegacyLights),H.traverse(function(st){let yt=st.material;if(yt)if(Array.isArray(yt))for(let It=0;It<yt.length;It++){let Bt=yt[It];gt(Bt,H,st)}else gt(yt,H,st)}),C.pop(),x=null};let re=null;function mn(H){re&&re(H)}function He(){$n.stop()}function Si(){$n.start()}let $n=new Jg;$n.setAnimationLoop(mn),typeof self!=\\\"undefined\\\"&&$n.setContext(self),this.setAnimationLoop=function(H){re=H,Y.setAnimationLoop(H),H===null?$n.stop():$n.start()},Y.addEventListener(\\\"sessionstart\\\",He),Y.addEventListener(\\\"sessionend\\\",Si),this.render=function(H,rt){if(rt!==void 0&&rt.isCamera!==!0){console.error(\\\"THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.\\\");return}if(O===!0)return;H.matrixWorldAutoUpdate===!0&&H.updateMatrixWorld(),rt.parent===null&&rt.matrixWorldAutoUpdate===!0&&rt.updateMatrixWorld(),Y.enabled===!0&&Y.isPresenting===!0&&(Y.cameraAutoUpdate===!0&&Y.updateCamera(rt),rt=Y.getCamera()),H.isScene===!0&&H.onBeforeRender(S,H,rt,z),x=Q.get(H,C.length),x.init(),C.push(x),Wt.multiplyMatrices(rt.projectionMatrix,rt.matrixWorldInverse),Tt.setFromProjectionMatrix(Wt),Ct=this.localClippingEnabled,dt=St.init(this.clippingPlanes,Ct),T=ct.get(H,v.length),T.init(),v.push(T),ml(H,rt,0,S.sortObjects),T.finish(),S.sortObjects===!0&&T.sort(et,ot),this.info.render.frame++,dt===!0&&St.beginShadows();let gt=x.state.shadowsArray;if(_t.render(gt,H,rt),dt===!0&&St.endShadows(),this.info.autoReset===!0&&this.info.reset(),Mt.render(T,H),x.setupLights(S._useLegacyLights),rt.isArrayCamera){let st=rt.cameras;for(let yt=0,It=st.length;yt<It;yt++){let Bt=st[yt];pi(T,H,Bt,Bt.viewport)}}else pi(T,H,rt);z!==null&&(b.updateMultisampleRenderTarget(z),b.updateRenderTargetMipmap(z)),H.isScene===!0&&H.onAfterRender(S,H,rt),jt.resetDefaultState(),L=-1,D=null,C.pop(),C.length>0?x=C[C.length-1]:x=null,v.pop(),v.length>0?T=v[v.length-1]:T=null};function ml(H,rt,gt,st){if(H.visible===!1)return;if(H.layers.test(rt.layers)){if(H.isGroup)gt=H.renderOrder;else if(H.isLOD)H.autoUpdate===!0&&H.update(rt);else if(H.isLight)x.pushLight(H),H.castShadow&&x.pushShadow(H);else if(H.isSprite){if(!H.frustumCulled||Tt.intersectsSprite(H)){st&&ne.setFromMatrixPosition(H.matrixWorld).applyMatrix4(Wt);let Bt=P.update(H),se=H.material;se.visible&&T.push(H,Bt,se,gt,ne.z,null)}}else if((H.isMesh||H.isLine||H.isPoints)&&(!H.frustumCulled||Tt.intersectsObject(H))){let Bt=P.update(H),se=H.material;if(st&&(H.boundingSphere!==void 0?(H.boundingSphere===null&&H.computeBoundingSphere(),ne.copy(H.boundingSphere.center)):(Bt.boundingSphere===null&&Bt.computeBoundingSphere(),ne.copy(Bt.boundingSphere.center)),ne.applyMatrix4(H.matrixWorld).applyMatrix4(Wt)),Array.isArray(se)){let Qt=Bt.groups;for(let ce=0,Vt=Qt.length;ce<Vt;ce++){let fe=Qt[ce],sn=se[fe.materialIndex];sn&&sn.visible&&T.push(H,Bt,sn,gt,ne.z,fe)}}else se.visible&&T.push(H,Bt,se,gt,ne.z,null)}}let It=H.children;for(let Bt=0,se=It.length;Bt<se;Bt++)ml(It[Bt],rt,gt,st)}function pi(H,rt,gt,st){let yt=H.opaque,It=H.transmissive,Bt=H.transparent;x.setupLightsView(gt),dt===!0&&St.setGlobalState(S.clippingPlanes,gt),It.length>0&&Ts(yt,It,rt,gt),st&&qt.viewport(q.copy(st)),yt.length>0&&Eo(yt,rt,gt),It.length>0&&Eo(It,rt,gt),Bt.length>0&&Eo(Bt,rt,gt),qt.buffers.depth.setTest(!0),qt.buffers.depth.setMask(!0),qt.buffers.color.setMask(!0),qt.setPolygonOffset(!1)}function Ts(H,rt,gt,st){let yt=te.isWebGL2;Yt===null&&(Yt=new Yo(1,1,{generateMipmaps:!0,type:Gt.has(\\\"EXT_color_buffer_half_float\\\")?Uu:ds,minFilter:Fu,samples:yt?4:0})),S.getDrawingBufferSize(Nt),yt?Yt.setSize(Nt.x,Nt.y):Yt.setSize(mh(Nt.x),mh(Nt.y));let It=S.getRenderTarget();S.setRenderTarget(Yt),S.getClearColor(xt),X=S.getClearAlpha(),X<1&&S.setClearColor(16777215,.5),S.clear();let Bt=S.toneMapping;S.toneMapping=ps,Eo(H,gt,st),b.updateMultisampleRenderTarget(Yt),b.updateRenderTargetMipmap(Yt);let se=!1;for(let Qt=0,ce=rt.length;Qt<ce;Qt++){let Vt=rt[Qt],fe=Vt.object,sn=Vt.geometry,un=Vt.material,vn=Vt.group;if(un.side===Ho&&fe.layers.test(st.layers)){let ni=un.side;un.side=li,un.needsUpdate=!0,Ui(fe,gt,st,sn,un,vn),un.side=ni,un.needsUpdate=!0,se=!0}}se===!0&&(b.updateMultisampleRenderTarget(Yt),b.updateRenderTargetMipmap(Yt)),S.setRenderTarget(It),S.setClearColor(xt,X),S.toneMapping=Bt}function Eo(H,rt,gt){let st=rt.isScene===!0?rt.overrideMaterial:null;for(let yt=0,It=H.length;yt<It;yt++){let Bt=H[yt],se=Bt.object,Qt=Bt.geometry,ce=st===null?Bt.material:st,Vt=Bt.group;se.layers.test(gt.layers)&&Ui(se,rt,gt,Qt,ce,Vt)}}function Ui(H,rt,gt,st,yt,It){H.onBeforeRender(S,rt,gt,st,yt,It),H.modelViewMatrix.multiplyMatrices(gt.matrixWorldInverse,H.matrixWorld),H.normalMatrix.getNormalMatrix(H.modelViewMatrix),yt.onBeforeRender(S,rt,gt,st,H,It),yt.transparent===!0&&yt.side===Ho&&yt.forceSinglePass===!1?(yt.side=li,yt.needsUpdate=!0,S.renderBufferDirect(gt,rt,st,yt,H,It),yt.side=ms,yt.needsUpdate=!0,S.renderBufferDirect(gt,rt,st,yt,H,It),yt.side=Ho):S.renderBufferDirect(gt,rt,st,yt,H,It),H.onAfterRender(S,rt,gt,st,yt,It)}function pe(H,rt,gt){rt.isScene!==!0&&(rt=Pt);let st=N.get(H),yt=x.state.lights,It=x.state.shadowsArray,Bt=yt.state.version,se=B.getParameters(H,yt.state,It,rt,gt),Qt=B.getProgramCacheKey(se),ce=st.programs;st.environment=H.isMeshStandardMaterial?rt.environment:null,st.fog=rt.fog,st.envMap=(H.isMeshStandardMaterial?W:R).get(H.envMap||st.environment),ce===void 0&&(H.addEventListener(\\\"dispose\\\",Dt),ce=new Map,st.programs=ce);let Vt=ce.get(Qt);if(Vt!==void 0){if(st.currentProgram===Vt&&st.lightsStateVersion===Bt)return Rr(H,se),Vt}else se.uniforms=B.getUniforms(H),H.onBuild(gt,se,S),H.onBeforeCompile(se,S),Vt=B.acquireProgram(se,Qt),ce.set(Qt,Vt),st.uniforms=se.uniforms;let fe=st.uniforms;(!H.isShaderMaterial&&!H.isRawShaderMaterial||H.clipping===!0)&&(fe.clippingPlanes=St.uniform),Rr(H,se),st.needsLights=Vn(H),st.lightsStateVersion=Bt,st.needsLights&&(fe.ambientLightColor.value=yt.state.ambient,fe.lightProbe.value=yt.state.probe,fe.directionalLights.value=yt.state.directional,fe.directionalLightShadows.value=yt.state.directionalShadow,fe.spotLights.value=yt.state.spot,fe.spotLightShadows.value=yt.state.spotShadow,fe.rectAreaLights.value=yt.state.rectArea,fe.ltc_1.value=yt.state.rectAreaLTC1,fe.ltc_2.value=yt.state.rectAreaLTC2,fe.pointLights.value=yt.state.point,fe.pointLightShadows.value=yt.state.pointShadow,fe.hemisphereLights.value=yt.state.hemi,fe.directionalShadowMap.value=yt.state.directionalShadowMap,fe.directionalShadowMatrix.value=yt.state.directionalShadowMatrix,fe.spotShadowMap.value=yt.state.spotShadowMap,fe.spotLightMatrix.value=yt.state.spotLightMatrix,fe.spotLightMap.value=yt.state.spotLightMap,fe.pointShadowMap.value=yt.state.pointShadowMap,fe.pointShadowMatrix.value=yt.state.pointShadowMatrix);let sn=Vt.getUniforms(),un=ka.seqWithValue(sn.seq,fe);return st.currentProgram=Vt,st.uniformsList=un,Vt}function Rr(H,rt){let gt=N.get(H);gt.outputColorSpace=rt.outputColorSpace,gt.instancing=rt.instancing,gt.instancingColor=rt.instancingColor,gt.skinning=rt.skinning,gt.morphTargets=rt.morphTargets,gt.morphNormals=rt.morphNormals,gt.morphColors=rt.morphColors,gt.morphTargetsCount=rt.morphTargetsCount,gt.numClippingPlanes=rt.numClippingPlanes,gt.numIntersection=rt.numClipIntersection,gt.vertexAlphas=rt.vertexAlphas,gt.vertexTangents=rt.vertexTangents,gt.toneMapping=rt.toneMapping}function ei(H,rt,gt,st,yt){rt.isScene!==!0&&(rt=Pt),b.resetTextureUnits();let It=rt.fog,Bt=st.isMeshStandardMaterial?rt.environment:null,se=z===null?S.outputColorSpace:z.isXRRenderTarget===!0?z.texture.colorSpace:Xo,Qt=(st.isMeshStandardMaterial?W:R).get(st.envMap||Bt),ce=st.vertexColors===!0&&!!gt.attributes.color&>.attributes.color.itemSize===4,Vt=!!gt.attributes.tangent&&(!!st.normalMap||st.anisotropy>0),fe=!!gt.morphAttributes.position,sn=!!gt.morphAttributes.normal,un=!!gt.morphAttributes.color,vn=ps;st.toneMapped&&(z===null||z.isXRRenderTarget===!0)&&(vn=S.toneMapping);let ni=gt.morphAttributes.position||gt.morphAttributes.normal||gt.morphAttributes.color,En=ni!==void 0?ni.length:0,de=N.get(st),Mo=x.state.lights;if(dt===!0&&(Ct===!0||H!==D)){let xr=H===D&&st.id===L;St.setState(st,H,xr)}let he=!1;st.version===de.__version?(de.needsLights&&de.lightsStateVersion!==Mo.state.version||de.outputColorSpace!==se||yt.isInstancedMesh&&de.instancing===!1||!yt.isInstancedMesh&&de.instancing===!0||yt.isSkinnedMesh&&de.skinning===!1||!yt.isSkinnedMesh&&de.skinning===!0||yt.isInstancedMesh&&de.instancingColor===!0&&yt.instanceColor===null||yt.isInstancedMesh&&de.instancingColor===!1&&yt.instanceColor!==null||de.envMap!==Qt||st.fog===!0&&de.fog!==It||de.numClippingPlanes!==void 0&&(de.numClippingPlanes!==St.numPlanes||de.numIntersection!==St.numIntersection)||de.vertexAlphas!==ce||de.vertexTangents!==Vt||de.morphTargets!==fe||de.morphNormals!==sn||de.morphColors!==un||de.toneMapping!==vn||te.isWebGL2===!0&&de.morphTargetsCount!==En)&&(he=!0):(he=!0,de.__version=st.version);let ro=de.currentProgram;he===!0&&(ro=pe(st,rt,yt));let ri=!1,So=!1,sa=!1,ie=ro.getUniforms(),Bi=de.uniforms;if(qt.useProgram(ro.program)&&(ri=!0,So=!0,sa=!0),st.id!==L&&(L=st.id,So=!0),ri||D!==H){ie.setValue(tt,\\\"projectionMatrix\\\",H.projectionMatrix),ie.setValue(tt,\\\"viewMatrix\\\",H.matrixWorldInverse);let xr=ie.map.cameraPosition;xr!==void 0&&xr.setValue(tt,ne.setFromMatrixPosition(H.matrixWorld)),te.logarithmicDepthBuffer&&ie.setValue(tt,\\\"logDepthBufFC\\\",2/(Math.log(H.far+1)/Math.LN2)),(st.isMeshPhongMaterial||st.isMeshToonMaterial||st.isMeshLambertMaterial||st.isMeshBasicMaterial||st.isMeshStandardMaterial||st.isShaderMaterial)&&ie.setValue(tt,\\\"isOrthographic\\\",H.isOrthographicCamera===!0),D!==H&&(D=H,So=!0,sa=!0)}if(yt.isSkinnedMesh){ie.setOptional(tt,yt,\\\"bindMatrix\\\"),ie.setOptional(tt,yt,\\\"bindMatrixInverse\\\");let xr=yt.skeleton;xr&&(te.floatVertexTextures?(xr.boneTexture===null&&xr.computeBoneTexture(),ie.setValue(tt,\\\"boneTexture\\\",xr.boneTexture,b),ie.setValue(tt,\\\"boneTextureSize\\\",xr.boneTextureSize)):console.warn(\\\"THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required.\\\"))}let Lr=gt.morphAttributes;if((Lr.position!==void 0||Lr.normal!==void 0||Lr.color!==void 0&&te.isWebGL2===!0)&&Lt.update(yt,gt,ro),(So||de.receiveShadow!==yt.receiveShadow)&&(de.receiveShadow=yt.receiveShadow,ie.setValue(tt,\\\"receiveShadow\\\",yt.receiveShadow)),st.isMeshGouraudMaterial&&st.envMap!==null&&(Bi.envMap.value=Qt,Bi.flipEnvMap.value=Qt.isCubeTexture&&Qt.isRenderTargetTexture===!1?-1:1),So&&(ie.setValue(tt,\\\"toneMappingExposure\\\",S.toneMappingExposure),de.needsLights&&Vr(Bi,sa),It&&st.fog===!0&<.refreshFogUniforms(Bi,It),lt.refreshMaterialUniforms(Bi,st,pt,vt,Yt),ka.upload(tt,de.uniformsList,Bi,b)),st.isShaderMaterial&&st.uniformsNeedUpdate===!0&&(ka.upload(tt,de.uniformsList,Bi,b),st.uniformsNeedUpdate=!1),st.isSpriteMaterial&&ie.setValue(tt,\\\"center\\\",yt.center),ie.setValue(tt,\\\"modelViewMatrix\\\",yt.modelViewMatrix),ie.setValue(tt,\\\"normalMatrix\\\",yt.normalMatrix),ie.setValue(tt,\\\"modelMatrix\\\",yt.matrixWorld),st.isShaderMaterial||st.isRawShaderMaterial){let xr=st.uniformsGroups;for(let le=0,gl=xr.length;le<gl;le++)if(te.isWebGL2){let yl=xr[le];Ht.update(yl,ro),Ht.bind(yl,ro)}else console.warn(\\\"THREE.WebGLRenderer: Uniform Buffer Objects can only be used with WebGL 2.\\\")}return ro}function Vr(H,rt){H.ambientLightColor.needsUpdate=rt,H.lightProbe.needsUpdate=rt,H.directionalLights.needsUpdate=rt,H.directionalLightShadows.needsUpdate=rt,H.pointLights.needsUpdate=rt,H.pointLightShadows.needsUpdate=rt,H.spotLights.needsUpdate=rt,H.spotLightShadows.needsUpdate=rt,H.rectAreaLights.needsUpdate=rt,H.hemisphereLights.needsUpdate=rt}function Vn(H){return H.isMeshLambertMaterial||H.isMeshToonMaterial||H.isMeshPhongMaterial||H.isMeshStandardMaterial||H.isShadowMaterial||H.isShaderMaterial&&H.lights===!0}this.getActiveCubeFace=function(){return F},this.getActiveMipmapLevel=function(){return G},this.getRenderTarget=function(){return z},this.setRenderTargetTextures=function(H,rt,gt){N.get(H.texture).__webglTexture=rt,N.get(H.depthTexture).__webglTexture=gt;let st=N.get(H);st.__hasExternalTextures=!0,st.__hasExternalTextures&&(st.__autoAllocateDepthBuffer=gt===void 0,st.__autoAllocateDepthBuffer||Gt.has(\\\"WEBGL_multisampled_render_to_texture\\\")===!0&&(console.warn(\\\"THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided\\\"),st.__useRenderToTexture=!1))},this.setRenderTargetFramebuffer=function(H,rt){let gt=N.get(H);gt.__webglFramebuffer=rt,gt.__useDefaultFramebuffer=rt===void 0},this.setRenderTarget=function(H,rt=0,gt=0){z=H,F=rt,G=gt;let st=!0,yt=null,It=!1,Bt=!1;if(H){let Qt=N.get(H);Qt.__useDefaultFramebuffer!==void 0?(qt.bindFramebuffer(tt.FRAMEBUFFER,null),st=!1):Qt.__webglFramebuffer===void 0?b.setupRenderTarget(H):Qt.__hasExternalTextures&&b.rebindTextures(H,N.get(H.texture).__webglTexture,N.get(H.depthTexture).__webglTexture);let ce=H.texture;(ce.isData3DTexture||ce.isDataArrayTexture||ce.isCompressedArrayTexture)&&(Bt=!0);let Vt=N.get(H).__webglFramebuffer;H.isWebGLCubeRenderTarget?(Array.isArray(Vt[rt])?yt=Vt[rt][gt]:yt=Vt[rt],It=!0):te.isWebGL2&&H.samples>0&&b.useMultisampledRTT(H)===!1?yt=N.get(H).__webglMultisampledFramebuffer:Array.isArray(Vt)?yt=Vt[gt]:yt=Vt,q.copy(H.viewport),nt.copy(H.scissor),k=H.scissorTest}else q.copy(V).multiplyScalar(pt).floor(),nt.copy(K).multiplyScalar(pt).floor(),k=at;if(qt.bindFramebuffer(tt.FRAMEBUFFER,yt)&&te.drawBuffers&&st&&qt.drawBuffers(H,yt),qt.viewport(q),qt.scissor(nt),qt.setScissorTest(k),It){let Qt=N.get(H.texture);tt.framebufferTexture2D(tt.FRAMEBUFFER,tt.COLOR_ATTACHMENT0,tt.TEXTURE_CUBE_MAP_POSITIVE_X+rt,Qt.__webglTexture,gt)}else if(Bt){let Qt=N.get(H.texture),ce=rt||0;tt.framebufferTextureLayer(tt.FRAMEBUFFER,tt.COLOR_ATTACHMENT0,Qt.__webglTexture,gt||0,ce)}L=-1},this.readRenderTargetPixels=function(H,rt,gt,st,yt,It,Bt){if(!(H&&H.isWebGLRenderTarget)){console.error(\\\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.\\\");return}let se=N.get(H).__webglFramebuffer;if(H.isWebGLCubeRenderTarget&&Bt!==void 0&&(se=se[Bt]),se){qt.bindFramebuffer(tt.FRAMEBUFFER,se);try{let Qt=H.texture,ce=Qt.format,Vt=Qt.type;if(ce!==Ki&&oe.convert(ce)!==tt.getParameter(tt.IMPLEMENTATION_COLOR_READ_FORMAT)){console.error(\\\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.\\\");return}let fe=Vt===Uu&&(Gt.has(\\\"EXT_color_buffer_half_float\\\")||te.isWebGL2&&Gt.has(\\\"EXT_color_buffer_float\\\"));if(Vt!==ds&&oe.convert(Vt)!==tt.getParameter(tt.IMPLEMENTATION_COLOR_READ_TYPE)&&!(Vt===fs&&(te.isWebGL2||Gt.has(\\\"OES_texture_float\\\")||Gt.has(\\\"WEBGL_color_buffer_float\\\")))&&!fe){console.error(\\\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.\\\");return}rt>=0&&rt<=H.width-st&>>=0&><=H.height-yt&&tt.readPixels(rt,gt,st,yt,oe.convert(ce),oe.convert(Vt),It)}finally{let Qt=z!==null?N.get(z).__webglFramebuffer:null;qt.bindFramebuffer(tt.FRAMEBUFFER,Qt)}}},this.copyFramebufferToTexture=function(H,rt,gt=0){let st=Math.pow(2,-gt),yt=Math.floor(rt.image.width*st),It=Math.floor(rt.image.height*st);b.setTexture2D(rt,0),tt.copyTexSubImage2D(tt.TEXTURE_2D,gt,0,0,H.x,H.y,yt,It),qt.unbindTexture()},this.copyTextureToTexture=function(H,rt,gt,st=0){let yt=rt.image.width,It=rt.image.height,Bt=oe.convert(gt.format),se=oe.convert(gt.type);b.setTexture2D(gt,0),tt.pixelStorei(tt.UNPACK_FLIP_Y_WEBGL,gt.flipY),tt.pixelStorei(tt.UNPACK_PREMULTIPLY_ALPHA_WEBGL,gt.premultiplyAlpha),tt.pixelStorei(tt.UNPACK_ALIGNMENT,gt.unpackAlignment),rt.isDataTexture?tt.texSubImage2D(tt.TEXTURE_2D,st,H.x,H.y,yt,It,Bt,se,rt.image.data):rt.isCompressedTexture?tt.compressedTexSubImage2D(tt.TEXTURE_2D,st,H.x,H.y,rt.mipmaps[0].width,rt.mipmaps[0].height,Bt,rt.mipmaps[0].data):tt.texSubImage2D(tt.TEXTURE_2D,st,H.x,H.y,Bt,se,rt.image),st===0&>.generateMipmaps&&tt.generateMipmap(tt.TEXTURE_2D),qt.unbindTexture()},this.copyTextureToTexture3D=function(H,rt,gt,st,yt=0){if(S.isWebGL1Renderer){console.warn(\\\"THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.\\\");return}let It=H.max.x-H.min.x+1,Bt=H.max.y-H.min.y+1,se=H.max.z-H.min.z+1,Qt=oe.convert(st.format),ce=oe.convert(st.type),Vt;if(st.isData3DTexture)b.setTexture3D(st,0),Vt=tt.TEXTURE_3D;else if(st.isDataArrayTexture)b.setTexture2DArray(st,0),Vt=tt.TEXTURE_2D_ARRAY;else{console.warn(\\\"THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.\\\");return}tt.pixelStorei(tt.UNPACK_FLIP_Y_WEBGL,st.flipY),tt.pixelStorei(tt.UNPACK_PREMULTIPLY_ALPHA_WEBGL,st.premultiplyAlpha),tt.pixelStorei(tt.UNPACK_ALIGNMENT,st.unpackAlignment);let fe=tt.getParameter(tt.UNPACK_ROW_LENGTH),sn=tt.getParameter(tt.UNPACK_IMAGE_HEIGHT),un=tt.getParameter(tt.UNPACK_SKIP_PIXELS),vn=tt.getParameter(tt.UNPACK_SKIP_ROWS),ni=tt.getParameter(tt.UNPACK_SKIP_IMAGES),En=gt.isCompressedTexture?gt.mipmaps[0]:gt.image;tt.pixelStorei(tt.UNPACK_ROW_LENGTH,En.width),tt.pixelStorei(tt.UNPACK_IMAGE_HEIGHT,En.height),tt.pixelStorei(tt.UNPACK_SKIP_PIXELS,H.min.x),tt.pixelStorei(tt.UNPACK_SKIP_ROWS,H.min.y),tt.pixelStorei(tt.UNPACK_SKIP_IMAGES,H.min.z),gt.isDataTexture||gt.isData3DTexture?tt.texSubImage3D(Vt,yt,rt.x,rt.y,rt.z,It,Bt,se,Qt,ce,En.data):gt.isCompressedArrayTexture?(console.warn(\\\"THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.\\\"),tt.compressedTexSubImage3D(Vt,yt,rt.x,rt.y,rt.z,It,Bt,se,Qt,En.data)):tt.texSubImage3D(Vt,yt,rt.x,rt.y,rt.z,It,Bt,se,Qt,ce,En),tt.pixelStorei(tt.UNPACK_ROW_LENGTH,fe),tt.pixelStorei(tt.UNPACK_IMAGE_HEIGHT,sn),tt.pixelStorei(tt.UNPACK_SKIP_PIXELS,un),tt.pixelStorei(tt.UNPACK_SKIP_ROWS,vn),tt.pixelStorei(tt.UNPACK_SKIP_IMAGES,ni),yt===0&&st.generateMipmaps&&tt.generateMipmap(Vt),qt.unbindTexture()},this.initTexture=function(H){H.isCubeTexture?b.setTextureCube(H,0):H.isData3DTexture?b.setTexture3D(H,0):H.isDataArrayTexture||H.isCompressedArrayTexture?b.setTexture2DArray(H,0):b.setTexture2D(H,0),qt.unbindTexture()},this.resetState=function(){F=0,G=0,z=null,qt.reset(),jt.reset()},typeof __THREE_DEVTOOLS__!=\\\"undefined\\\"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\\\"observe\\\",{detail:this}))}get coordinateSystem(){return Wo}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(t){this._outputColorSpace=t;let e=this.getContext();e.drawingBufferColorSpace=t===Zh?\\\"display-p3\\\":\\\"srgb\\\",e.unpackColorSpace=gn.workingColorSpace===dc?\\\"display-p3\\\":\\\"srgb\\\"}get physicallyCorrectLights(){return console.warn(\\\"THREE.WebGLRenderer: The property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead.\\\"),!this.useLegacyLights}set physicallyCorrectLights(t){console.warn(\\\"THREE.WebGLRenderer: The property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead.\\\"),this.useLegacyLights=!t}get outputEncoding(){return console.warn(\\\"THREE.WebGLRenderer: Property .outputEncoding has been removed. Use .outputColorSpace instead.\\\"),this.outputColorSpace===br?Xs:qg}set outputEncoding(t){console.warn(\\\"THREE.WebGLRenderer: Property .outputEncoding has been removed. Use .outputColorSpace instead.\\\"),this.outputColorSpace=t===Xs?br:Xo}get useLegacyLights(){return console.warn(\\\"THREE.WebGLRenderer: The property .useLegacyLights has been deprecated. Migrate your lighting according to the following guide: https://discourse.threejs.org/t/updates-to-lighting-in-three-js-r155/53733.\\\"),this._useLegacyLights}set useLegacyLights(t){console.warn(\\\"THREE.WebGLRenderer: The property .useLegacyLights has been deprecated. Migrate your lighting according to the following guide: https://discourse.threejs.org/t/updates-to-lighting-in-three-js-r155/53733.\\\"),this._useLegacyLights=t}},Dh=class extends Oh{};Dh.prototype.isWebGL1Renderer=!0;function Yl(r,t,e){return!r||!e&&r.constructor===t?r:typeof t.BYTES_PER_ELEMENT==\\\"number\\\"?new t(r):Array.prototype.slice.call(r)}function Ab(r){return ArrayBuffer.isView(r)&&!(r instanceof DataView)}var Xa=class{constructor(t,e,o,a){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=a!==void 0?a:new e.constructor(o),this.sampleValues=e,this.valueSize=o,this.settings=null,this.DefaultSettings_={}}evaluate(t){let e=this.parameterPositions,o=this._cachedIndex,a=e[o],l=e[o-1];n:{t:{let f;e:{r:if(!(t<a)){for(let h=o+2;;){if(a===void 0){if(t<l)break r;return o=e.length,this._cachedIndex=o,this.copySampleValue_(o-1)}if(o===h)break;if(l=a,a=e[++o],t<a)break t}f=e.length;break e}if(!(t>=l)){let h=e[1];t<h&&(o=2,l=h);for(let p=o-2;;){if(l===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(o===p)break;if(a=l,l=e[--o-1],t>=l)break t}f=o,o=0;break e}break n}for(;o<f;){let h=o+f>>>1;t<e[h]?f=h:o=h+1}if(a=e[o],l=e[o-1],l===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(a===void 0)return o=e.length,this._cachedIndex=o,this.copySampleValue_(o-1)}this._cachedIndex=o,this.intervalChanged_(o,l,a)}return this.interpolate_(o,l,t,a)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(t){let e=this.resultBuffer,o=this.sampleValues,a=this.valueSize,l=t*a;for(let f=0;f!==a;++f)e[f]=o[l+f];return e}interpolate_(){throw new Error(\\\"call to abstract method\\\")}intervalChanged_(){}},Fh=class extends Xa{constructor(t,e,o,a){super(t,e,o,a),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:qm,endingEnd:qm}}intervalChanged_(t,e,o){let a=this.parameterPositions,l=t-2,f=t+1,h=a[l],p=a[f];if(h===void 0)switch(this.getSettings_().endingStart){case Xm:l=t,h=2*e-o;break;case Ym:l=a.length-2,h=e+a[l]-a[l+1];break;default:l=t,h=o}if(p===void 0)switch(this.getSettings_().endingEnd){case Xm:f=t,p=2*o-e;break;case Ym:f=1,p=o+a[1]-a[0];break;default:f=t-1,p=e}let d=(o-e)*.5,g=this.valueSize;this._weightPrev=d/(e-h),this._weightNext=d/(p-o),this._offsetPrev=l*g,this._offsetNext=f*g}interpolate_(t,e,o,a){let l=this.resultBuffer,f=this.sampleValues,h=this.valueSize,p=t*h,d=p-h,g=this._offsetPrev,_=this._offsetNext,y=this._weightPrev,M=this._weightNext,w=(o-e)/(a-e),T=w*w,x=T*w,v=-y*x+2*y*T-y*w,C=(1+y)*x+(-1.5-2*y)*T+(-.5+y)*w+1,S=(-1-M)*x+(1.5+M)*T+.5*w,O=M*x-M*T;for(let F=0;F!==h;++F)l[F]=v*f[g+F]+C*f[d+F]+S*f[p+F]+O*f[_+F];return l}},Uh=class extends Xa{constructor(t,e,o,a){super(t,e,o,a)}interpolate_(t,e,o,a){let l=this.resultBuffer,f=this.sampleValues,h=this.valueSize,p=t*h,d=p-h,g=(o-e)/(a-e),_=1-g;for(let y=0;y!==h;++y)l[y]=f[d+y]*_+f[p+y]*g;return l}},Bh=class extends Xa{constructor(t,e,o,a){super(t,e,o,a)}interpolate_(t){return this.copySampleValue_(t-1)}},Qi=class{constructor(t,e,o,a){if(t===void 0)throw new Error(\\\"THREE.KeyframeTrack: track name is undefined\\\");if(e===void 0||e.length===0)throw new Error(\\\"THREE.KeyframeTrack: no keyframes in track named \\\"+t);this.name=t,this.times=Yl(e,this.TimeBufferType),this.values=Yl(o,this.ValueBufferType),this.setInterpolation(a||this.DefaultInterpolation)}static toJSON(t){let e=t.constructor,o;if(e.toJSON!==this.toJSON)o=e.toJSON(t);else{o={name:t.name,times:Yl(t.times,Array),values:Yl(t.values,Array)};let a=t.getInterpolation();a!==t.DefaultInterpolation&&(o.interpolation=a)}return o.type=t.ValueTypeName,o}InterpolantFactoryMethodDiscrete(t){return new Bh(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodLinear(t){return new Uh(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodSmooth(t){return new Fh(this.times,this.values,this.getValueSize(),t)}setInterpolation(t){let e;switch(t){case Zl:e=this.InterpolantFactoryMethodDiscrete;break;case Jl:e=this.InterpolantFactoryMethodLinear;break;case Bf:e=this.InterpolantFactoryMethodSmooth;break}if(e===void 0){let o=\\\"unsupported interpolation for \\\"+this.ValueTypeName+\\\" keyframe track named \\\"+this.name;if(this.createInterpolant===void 0)if(t!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw new Error(o);return console.warn(\\\"THREE.KeyframeTrack:\\\",o),this}return this.createInterpolant=e,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return Zl;case this.InterpolantFactoryMethodLinear:return Jl;case this.InterpolantFactoryMethodSmooth:return Bf}}getValueSize(){return this.values.length/this.times.length}shift(t){if(t!==0){let e=this.times;for(let o=0,a=e.length;o!==a;++o)e[o]+=t}return this}scale(t){if(t!==1){let e=this.times;for(let o=0,a=e.length;o!==a;++o)e[o]*=t}return this}trim(t,e){let o=this.times,a=o.length,l=0,f=a-1;for(;l!==a&&o[l]<t;)++l;for(;f!==-1&&o[f]>e;)--f;if(++f,l!==0||f!==a){l>=f&&(f=Math.max(f,1),l=f-1);let h=this.getValueSize();this.times=o.slice(l,f),this.values=this.values.slice(l*h,f*h)}return this}validate(){let t=!0,e=this.getValueSize();e-Math.floor(e)!==0&&(console.error(\\\"THREE.KeyframeTrack: Invalid value size in track.\\\",this),t=!1);let o=this.times,a=this.values,l=o.length;l===0&&(console.error(\\\"THREE.KeyframeTrack: Track is empty.\\\",this),t=!1);let f=null;for(let h=0;h!==l;h++){let p=o[h];if(typeof p==\\\"number\\\"&&isNaN(p)){console.error(\\\"THREE.KeyframeTrack: Time is not a valid number.\\\",this,h,p),t=!1;break}if(f!==null&&f>p){console.error(\\\"THREE.KeyframeTrack: Out of order keys.\\\",this,h,p,f),t=!1;break}f=p}if(a!==void 0&&Ab(a))for(let h=0,p=a.length;h!==p;++h){let d=a[h];if(isNaN(d)){console.error(\\\"THREE.KeyframeTrack: Value is not a valid number.\\\",this,h,d),t=!1;break}}return t}optimize(){let t=this.times.slice(),e=this.values.slice(),o=this.getValueSize(),a=this.getInterpolation()===Bf,l=t.length-1,f=1;for(let h=1;h<l;++h){let p=!1,d=t[h],g=t[h+1];if(d!==g&&(h!==1||d!==t[0]))if(a)p=!0;else{let _=h*o,y=_-o,M=_+o;for(let w=0;w!==o;++w){let T=e[_+w];if(T!==e[y+w]||T!==e[M+w]){p=!0;break}}}if(p){if(h!==f){t[f]=t[h];let _=h*o,y=f*o;for(let M=0;M!==o;++M)e[y+M]=e[_+M]}++f}}if(l>0){t[f]=t[l];for(let h=l*o,p=f*o,d=0;d!==o;++d)e[p+d]=e[h+d];++f}return f!==t.length?(this.times=t.slice(0,f),this.values=e.slice(0,f*o)):(this.times=t,this.values=e),this}clone(){let t=this.times.slice(),e=this.values.slice(),o=this.constructor,a=new o(this.name,t,e);return a.createInterpolant=this.createInterpolant,a}};Qi.prototype.TimeBufferType=Float32Array;Qi.prototype.ValueBufferType=Float32Array;Qi.prototype.DefaultInterpolation=Jl;var Js=class extends Qi{};Js.prototype.ValueTypeName=\\\"bool\\\";Js.prototype.ValueBufferType=Array;Js.prototype.DefaultInterpolation=Zl;Js.prototype.InterpolantFactoryMethodLinear=void 0;Js.prototype.InterpolantFactoryMethodSmooth=void 0;var zh=class extends Qi{};zh.prototype.ValueTypeName=\\\"color\\\";var kh=class extends Qi{};kh.prototype.ValueTypeName=\\\"number\\\";var Gh=class extends Xa{constructor(t,e,o,a){super(t,e,o,a)}interpolate_(t,e,o,a){let l=this.resultBuffer,f=this.sampleValues,h=this.valueSize,p=(o-e)/(a-e),d=t*h;for(let g=d+h;d!==g;d+=4)ys.slerpFlat(l,0,f,d-h,f,d,p);return l}},ku=class extends Qi{InterpolantFactoryMethodLinear(t){return new Gh(this.times,this.values,this.getValueSize(),t)}};ku.prototype.ValueTypeName=\\\"quaternion\\\";ku.prototype.DefaultInterpolation=Jl;ku.prototype.InterpolantFactoryMethodSmooth=void 0;var $s=class extends Qi{};$s.prototype.ValueTypeName=\\\"string\\\";$s.prototype.ValueBufferType=Array;$s.prototype.DefaultInterpolation=Zl;$s.prototype.InterpolantFactoryMethodLinear=void 0;$s.prototype.InterpolantFactoryMethodSmooth=void 0;var Vh=class extends Qi{};Vh.prototype.ValueTypeName=\\\"vector\\\";var Hh=class{constructor(t,e,o){let a=this,l=!1,f=0,h=0,p,d=[];this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=o,this.itemStart=function(g){h++,l===!1&&a.onStart!==void 0&&a.onStart(g,f,h),l=!0},this.itemEnd=function(g){f++,a.onProgress!==void 0&&a.onProgress(g,f,h),f===h&&(l=!1,a.onLoad!==void 0&&a.onLoad())},this.itemError=function(g){a.onError!==void 0&&a.onError(g)},this.resolveURL=function(g){return p?p(g):g},this.setURLModifier=function(g){return p=g,this},this.addHandler=function(g,_){return d.push(g,_),this},this.removeHandler=function(g){let _=d.indexOf(g);return _!==-1&&d.splice(_,2),this},this.getHandler=function(g){for(let _=0,y=d.length;_<y;_+=2){let M=d[_],w=d[_+1];if(M.global&&(M.lastIndex=0),M.test(g))return w}return null}}},Cb=new Hh,Wh=class{constructor(t){this.manager=t!==void 0?t:Cb,this.crossOrigin=\\\"anonymous\\\",this.withCredentials=!1,this.path=\\\"\\\",this.resourcePath=\\\"\\\",this.requestHeader={}}load(){}loadAsync(t,e){let o=this;return new Promise(function(a,l){o.load(t,a,e,l)})}parse(){}setCrossOrigin(t){return this.crossOrigin=t,this}setWithCredentials(t){return this.withCredentials=t,this}setPath(t){return this.path=t,this}setResourcePath(t){return this.resourcePath=t,this}setRequestHeader(t){return this.requestHeader=t,this}};Wh.DEFAULT_MATERIAL_NAME=\\\"__DEFAULT\\\";var $h=\\\"\\\\\\\\[\\\\\\\\]\\\\\\\\.:\\\\\\\\/\\\",Pb=new RegExp(\\\"[\\\"+$h+\\\"]\\\",\\\"g\\\"),Kh=\\\"[^\\\"+$h+\\\"]\\\",Ib=\\\"[^\\\"+$h.replace(\\\"\\\\\\\\.\\\",\\\"\\\")+\\\"]\\\",Rb=/((?:WC+[\\\\/:])*)/.source.replace(\\\"WC\\\",Kh),Lb=/(WCOD+)?/.source.replace(\\\"WCOD\\\",Ib),Nb=/(?:\\\\.(WC+)(?:\\\\[(.+)\\\\])?)?/.source.replace(\\\"WC\\\",Kh),Ob=/\\\\.(WC+)(?:\\\\[(.+)\\\\])?/.source.replace(\\\"WC\\\",Kh),Db=new RegExp(\\\"^\\\"+Rb+Lb+Nb+Ob+\\\"$\\\"),Fb=[\\\"material\\\",\\\"materials\\\",\\\"bones\\\",\\\"map\\\"],qh=class{constructor(t,e,o){let a=o||Rn.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,a)}getValue(t,e){this.bind();let o=this._targetGroup.nCachedObjects_,a=this._bindings[o];a!==void 0&&a.getValue(t,e)}setValue(t,e){let o=this._bindings;for(let a=this._targetGroup.nCachedObjects_,l=o.length;a!==l;++a)o[a].setValue(t,e)}bind(){let t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,o=t.length;e!==o;++e)t[e].bind()}unbind(){let t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,o=t.length;e!==o;++e)t[e].unbind()}},Rn=class r{constructor(t,e,o){this.path=e,this.parsedPath=o||r.parseTrackName(e),this.node=r.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,o){return t&&t.isAnimationObjectGroup?new r.Composite(t,e,o):new r(t,e,o)}static sanitizeNodeName(t){return t.replace(/\\\\s/g,\\\"_\\\").replace(Pb,\\\"\\\")}static parseTrackName(t){let e=Db.exec(t);if(e===null)throw new Error(\\\"PropertyBinding: Cannot parse trackName: \\\"+t);let o={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},a=o.nodeName&&o.nodeName.lastIndexOf(\\\".\\\");if(a!==void 0&&a!==-1){let l=o.nodeName.substring(a+1);Fb.indexOf(l)!==-1&&(o.nodeName=o.nodeName.substring(0,a),o.objectName=l)}if(o.propertyName===null||o.propertyName.length===0)throw new Error(\\\"PropertyBinding: can not parse propertyName from trackName: \\\"+t);return o}static findNode(t,e){if(e===void 0||e===\\\"\\\"||e===\\\".\\\"||e===-1||e===t.name||e===t.uuid)return t;if(t.skeleton){let o=t.skeleton.getBoneByName(e);if(o!==void 0)return o}if(t.children){let o=function(l){for(let f=0;f<l.length;f++){let h=l[f];if(h.name===e||h.uuid===e)return h;let p=o(h.children);if(p)return p}return null},a=o(t.children);if(a)return a}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(t,e){t[e]=this.targetObject[this.propertyName]}_getValue_array(t,e){let o=this.resolvedProperty;for(let a=0,l=o.length;a!==l;++a)t[e++]=o[a]}_getValue_arrayElement(t,e){t[e]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(t,e){this.resolvedProperty.toArray(t,e)}_setValue_direct(t,e){this.targetObject[this.propertyName]=t[e]}_setValue_direct_setNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(t,e){let o=this.resolvedProperty;for(let a=0,l=o.length;a!==l;++a)o[a]=t[e++]}_setValue_array_setNeedsUpdate(t,e){let o=this.resolvedProperty;for(let a=0,l=o.length;a!==l;++a)o[a]=t[e++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(t,e){let o=this.resolvedProperty;for(let a=0,l=o.length;a!==l;++a)o[a]=t[e++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(t,e){this.resolvedProperty[this.propertyIndex]=t[e]}_setValue_arrayElement_setNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(t,e){this.resolvedProperty.fromArray(t,e)}_setValue_fromArray_setNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(t,e){this.bind(),this.getValue(t,e)}_setValue_unbound(t,e){this.bind(),this.setValue(t,e)}bind(){let t=this.node,e=this.parsedPath,o=e.objectName,a=e.propertyName,l=e.propertyIndex;if(t||(t=r.findNode(this.rootNode,e.nodeName),this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t){console.warn(\\\"THREE.PropertyBinding: No target node found for track: \\\"+this.path+\\\".\\\");return}if(o){let d=e.objectIndex;switch(o){case\\\"materials\\\":if(!t.material){console.error(\\\"THREE.PropertyBinding: Can not bind to material as node does not have a material.\\\",this);return}if(!t.material.materials){console.error(\\\"THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.\\\",this);return}t=t.material.materials;break;case\\\"bones\\\":if(!t.skeleton){console.error(\\\"THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.\\\",this);return}t=t.skeleton.bones;for(let g=0;g<t.length;g++)if(t[g].name===d){d=g;break}break;case\\\"map\\\":if(\\\"map\\\"in t){t=t.map;break}if(!t.material){console.error(\\\"THREE.PropertyBinding: Can not bind to material as node does not have a material.\\\",this);return}if(!t.material.map){console.error(\\\"THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.\\\",this);return}t=t.material.map;break;default:if(t[o]===void 0){console.error(\\\"THREE.PropertyBinding: Can not bind to objectName of node undefined.\\\",this);return}t=t[o]}if(d!==void 0){if(t[d]===void 0){console.error(\\\"THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.\\\",this,t);return}t=t[d]}}let f=t[a];if(f===void 0){let d=e.nodeName;console.error(\\\"THREE.PropertyBinding: Trying to update property for track: \\\"+d+\\\".\\\"+a+\\\" but it wasn't found.\\\",t);return}let h=this.Versioning.None;this.targetObject=t,t.needsUpdate!==void 0?h=this.Versioning.NeedsUpdate:t.matrixWorldNeedsUpdate!==void 0&&(h=this.Versioning.MatrixWorldNeedsUpdate);let p=this.BindingType.Direct;if(l!==void 0){if(a===\\\"morphTargetInfluences\\\"){if(!t.geometry){console.error(\\\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.\\\",this);return}if(!t.geometry.morphAttributes){console.error(\\\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.\\\",this);return}t.morphTargetDictionary[l]!==void 0&&(l=t.morphTargetDictionary[l])}p=this.BindingType.ArrayElement,this.resolvedProperty=f,this.propertyIndex=l}else f.fromArray!==void 0&&f.toArray!==void 0?(p=this.BindingType.HasFromToArray,this.resolvedProperty=f):Array.isArray(f)?(p=this.BindingType.EntireArray,this.resolvedProperty=f):this.propertyName=a;this.getValue=this.GetterByBindingType[p],this.setValue=this.SetterByBindingTypeAndVersioning[p][h]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}};Rn.Composite=qh;Rn.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3};Rn.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2};Rn.prototype.GetterByBindingType=[Rn.prototype._getValue_direct,Rn.prototype._getValue_array,Rn.prototype._getValue_arrayElement,Rn.prototype._getValue_toArray];Rn.prototype.SetterByBindingTypeAndVersioning=[[Rn.prototype._setValue_direct,Rn.prototype._setValue_direct_setNeedsUpdate,Rn.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[Rn.prototype._setValue_array,Rn.prototype._setValue_array_setNeedsUpdate,Rn.prototype._setValue_array_setMatrixWorldNeedsUpdate],[Rn.prototype._setValue_arrayElement,Rn.prototype._setValue_arrayElement_setNeedsUpdate,Rn.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[Rn.prototype._setValue_fromArray,Rn.prototype._setValue_fromArray_setNeedsUpdate,Rn.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];var fR=new Float32Array(1);typeof __THREE_DEVTOOLS__!=\\\"undefined\\\"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\\\"register\\\",{detail:{revision:Xh}}));typeof window!=\\\"undefined\\\"&&(window.__THREE__?console.warn(\\\"WARNING: Multiple instances of Three.js being imported.\\\"):window.__THREE__=Xh);var iR=On(i0(),1);var mr=63710088e-1,mR={centimeters:mr*100,centimetres:mr*100,degrees:mr/111325,feet:mr*3.28084,inches:mr*39.37,kilometers:mr/1e3,kilometres:mr/1e3,meters:mr,metres:mr,miles:mr/1609.344,millimeters:mr*1e3,millimetres:mr*1e3,nauticalmiles:mr/1852,radians:1,yards:mr*1.0936},gR={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:1/1e3,kilometres:1/1e3,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/mr,yards:1.0936133};function Kr(r,t,e){e===void 0&&(e={});var o={type:\\\"Feature\\\"};return(e.id===0||e.id)&&(o.id=e.id),e.bbox&&(o.bbox=e.bbox),o.properties=t||{},o.geometry=r,o}function Sn(r,t,e){if(e===void 0&&(e={}),!r)throw new Error(\\\"coordinates is required\\\");if(!Array.isArray(r))throw new Error(\\\"coordinates must be an Array\\\");if(r.length<2)throw new Error(\\\"coordinates must be at least 2 numbers long\\\");if(!po(r[0])||!po(r[1]))throw new Error(\\\"coordinates must contain numbers\\\");var o={type:\\\"Point\\\",coordinates:r};return Kr(o,t,e)}function Ln(r,t,e){e===void 0&&(e={});for(var o=0,a=r;o<a.length;o++){var l=a[o];if(l.length<4)throw new Error(\\\"Each LinearRing of a Polygon must have 4 or more Positions.\\\");for(var f=0;f<l[l.length-1].length;f++)if(l[l.length-1][f]!==l[0][f])throw new Error(\\\"First and last Position are not equivalent.\\\")}var h={type:\\\"Polygon\\\",coordinates:r};return Kr(h,t,e)}function gr(r,t,e){if(e===void 0&&(e={}),r.length<2)throw new Error(\\\"coordinates must be an array of two or more positions\\\");var o={type:\\\"LineString\\\",coordinates:r};return Kr(o,t,e)}function jh(r,t,e){e===void 0&&(e={});var o={type:\\\"MultiPoint\\\",coordinates:r};return Kr(o,t,e)}function po(r){return!isNaN(r)&&r!==null&&!Array.isArray(r)}function nr(r,t,e){if(r!==null)for(var o,a,l,f,h,p,d,g=0,_=0,y,M=r.type,w=M===\\\"FeatureCollection\\\",T=M===\\\"Feature\\\",x=w?r.features.length:1,v=0;v<x;v++){d=w?r.features[v].geometry:T?r.geometry:r,y=d?d.type===\\\"GeometryCollection\\\":!1,h=y?d.geometries.length:1;for(var C=0;C<h;C++){var S=0,O=0;if(f=y?d.geometries[C]:d,f!==null){p=f.coordinates;var F=f.type;switch(g=e&&(F===\\\"Polygon\\\"||F===\\\"MultiPolygon\\\")?1:0,F){case null:break;case\\\"Point\\\":if(t(p,_,v,S,O)===!1)return!1;_++,S++;break;case\\\"LineString\\\":case\\\"MultiPoint\\\":for(o=0;o<p.length;o++){if(t(p[o],_,v,S,O)===!1)return!1;_++,F===\\\"MultiPoint\\\"&&S++}F===\\\"LineString\\\"&&S++;break;case\\\"Polygon\\\":case\\\"MultiLineString\\\":for(o=0;o<p.length;o++){for(a=0;a<p[o].length-g;a++){if(t(p[o][a],_,v,S,O)===!1)return!1;_++}F===\\\"MultiLineString\\\"&&S++,F===\\\"Polygon\\\"&&O++}F===\\\"Polygon\\\"&&S++;break;case\\\"MultiPolygon\\\":for(o=0;o<p.length;o++){for(O=0,a=0;a<p[o].length;a++){for(l=0;l<p[o][a].length-g;l++){if(t(p[o][a][l],_,v,S,O)===!1)return!1;_++}O++}S++}break;case\\\"GeometryCollection\\\":for(o=0;o<f.geometries.length;o++)if(nr(f.geometries[o],t,e)===!1)return!1;break;default:throw new Error(\\\"Unknown Geometry Type\\\")}}}}}function o0(r,t,e,o){var a=e;return nr(r,function(l,f,h,p,d){f===0&&e===void 0?a=l:a=t(a,l,f,h,p,d)},o),a}function vs(r,t){var e,o,a,l,f,h,p,d,g,_,y=0,M=r.type===\\\"FeatureCollection\\\",w=r.type===\\\"Feature\\\",T=M?r.features.length:1;for(e=0;e<T;e++){for(h=M?r.features[e].geometry:w?r.geometry:r,d=M?r.features[e].properties:w?r.properties:{},g=M?r.features[e].bbox:w?r.bbox:void 0,_=M?r.features[e].id:w?r.id:void 0,p=h?h.type===\\\"GeometryCollection\\\":!1,f=p?h.geometries.length:1,a=0;a<f;a++){if(l=p?h.geometries[a]:h,l===null){if(t(null,y,d,g,_)===!1)return!1;continue}switch(l.type){case\\\"Point\\\":case\\\"LineString\\\":case\\\"MultiPoint\\\":case\\\"Polygon\\\":case\\\"MultiLineString\\\":case\\\"MultiPolygon\\\":{if(t(l,y,d,g,_)===!1)return!1;break}case\\\"GeometryCollection\\\":{for(o=0;o<l.geometries.length;o++)if(t(l.geometries[o],y,d,g,_)===!1)return!1;break}default:throw new Error(\\\"Unknown Geometry Type\\\")}}y++}}function Mi(r,t){vs(r,function(e,o,a,l,f){var h=e===null?null:e.type;switch(h){case null:case\\\"Point\\\":case\\\"LineString\\\":case\\\"Polygon\\\":return t(Kr(e,a,{bbox:l,id:f}),o,0)===!1?!1:void 0}var p;switch(h){case\\\"MultiPoint\\\":p=\\\"Point\\\";break;case\\\"MultiLineString\\\":p=\\\"LineString\\\";break;case\\\"MultiPolygon\\\":p=\\\"Polygon\\\";break}for(var d=0;d<e.coordinates.length;d++){var g=e.coordinates[d],_={type:p,coordinates:g};if(t(Kr(_,a),o,d)===!1)return!1}})}function Qh(r){var t=[1/0,1/0,-1/0,-1/0];return nr(r,function(e){t[0]>e[0]&&(t[0]=e[0]),t[1]>e[1]&&(t[1]=e[1]),t[2]<e[0]&&(t[2]=e[0]),t[3]<e[1]&&(t[3]=e[1])}),t}Qh.default=Qh;var jr=Qh;function Ar(r){if(!r)throw new Error(\\\"coord is required\\\");if(!Array.isArray(r)){if(r.type===\\\"Feature\\\"&&r.geometry!==null&&r.geometry.type===\\\"Point\\\")return r.geometry.coordinates;if(r.type===\\\"Point\\\")return r.coordinates}if(Array.isArray(r)&&r.length>=2&&!Array.isArray(r[0])&&!Array.isArray(r[1]))return r;throw new Error(\\\"coord must be GeoJSON Point or an Array of numbers\\\")}function tp(r,t,e){if(!r)throw new Error(\\\"No feature passed\\\");if(!e)throw new Error(\\\".featureOf() requires a name\\\");if(!r||r.type!==\\\"Feature\\\"||!r.geometry)throw new Error(\\\"Invalid input to \\\"+e+\\\", Feature with geometry required\\\");if(!r.geometry||r.geometry.type!==t)throw new Error(\\\"Invalid input to \\\"+e+\\\": must be a \\\"+t+\\\", given \\\"+r.geometry.type)}function Cr(r){return r.type===\\\"Feature\\\"?r.geometry:r}var Wb=On(gc(),1);var tT=On(S0(),1);function yr(r,t,e){if(e===void 0&&(e={}),!r)throw new Error(\\\"point is required\\\");if(!t)throw new Error(\\\"polygon is required\\\");var o=Ar(r),a=Cr(t),l=a.type,f=t.bbox,h=a.coordinates;if(f&&eT(o,f)===!1)return!1;l===\\\"Polygon\\\"&&(h=[h]);for(var p=!1,d=0;d<h.length&&!p;d++)if(w0(o,h[d][0],e.ignoreBoundary)){for(var g=!1,_=1;_<h[d].length&&!g;)w0(o,h[d][_],!e.ignoreBoundary)&&(g=!0),_++;g||(p=!0)}return p}function w0(r,t,e){var o=!1;t[0][0]===t[t.length-1][0]&&t[0][1]===t[t.length-1][1]&&(t=t.slice(0,t.length-1));for(var a=0,l=t.length-1;a<t.length;l=a++){var f=t[a][0],h=t[a][1],p=t[l][0],d=t[l][1],g=r[1]*(f-p)+h*(p-r[0])+d*(r[0]-f)===0&&(f-r[0])*(p-r[0])<=0&&(h-r[1])*(d-r[1])<=0;if(g)return!e;var _=h>r[1]!=d>r[1]&&r[0]<(p-f)*(r[1]-h)/(d-h)+f;_&&(o=!o)}return o}function eT(r,t){return t[0]<=r[0]&&t[1]<=r[1]&&t[2]>=r[0]&&t[3]>=r[1]}var A0=new ArrayBuffer(16),qL=new Float64Array(A0),XL=new Uint32Array(A0);var gT=On(gp(),1);var v2=function(){function r(t){this.points=t.points||[],this.duration=t.duration||1e4,this.sharpness=t.sharpness||.85,this.centers=[],this.controls=[],this.stepLength=t.stepLength||60,this.length=this.points.length,this.delay=0;for(var e=0;e<this.length;e++)this.points[e].z=this.points[e].z||0;for(var e=0;e<this.length-1;e++){var o=this.points[e],a=this.points[e+1];this.centers.push({x:(o.x+a.x)/2,y:(o.y+a.y)/2,z:(o.z+a.z)/2})}this.controls.push([this.points[0],this.points[0]]);for(var e=0;e<this.centers.length-1;e++){var l=this.points[e+1].x-(this.centers[e].x+this.centers[e+1].x)/2,f=this.points[e+1].y-(this.centers[e].y+this.centers[e+1].y)/2,h=this.points[e+1].z-(this.centers[e].y+this.centers[e+1].z)/2;this.controls.push([{x:(1-this.sharpness)*this.points[e+1].x+this.sharpness*(this.centers[e].x+l),y:(1-this.sharpness)*this.points[e+1].y+this.sharpness*(this.centers[e].y+f),z:(1-this.sharpness)*this.points[e+1].z+this.sharpness*(this.centers[e].z+h)},{x:(1-this.sharpness)*this.points[e+1].x+this.sharpness*(this.centers[e+1].x+l),y:(1-this.sharpness)*this.points[e+1].y+this.sharpness*(this.centers[e+1].y+f),z:(1-this.sharpness)*this.points[e+1].z+this.sharpness*(this.centers[e+1].z+h)}])}return this.controls.push([this.points[this.length-1],this.points[this.length-1]]),this.steps=this.cacheSteps(this.stepLength),this}return r.prototype.cacheSteps=function(t){var e=[],o=this.pos(0);e.push(0);for(var a=0;a<this.duration;a+=10){var l=this.pos(a),f=Math.sqrt((l.x-o.x)*(l.x-o.x)+(l.y-o.y)*(l.y-o.y)+(l.z-o.z)*(l.z-o.z));f>t&&(e.push(a),o=l)}return e},r.prototype.vector=function(t){var e=this.pos(t+10),o=this.pos(t-10);return{angle:180*Math.atan2(e.y-o.y,e.x-o.x)/3.14,speed:Math.sqrt((o.x-e.x)*(o.x-e.x)+(o.y-e.y)*(o.y-e.y)+(o.z-e.z)*(o.z-e.z))}},r.prototype.pos=function(t){var e=t-this.delay;e<0&&(e=0),e>this.duration&&(e=this.duration-1);var o=e/this.duration;if(o>=1)return this.points[this.length-1];var a=Math.floor((this.points.length-1)*o),l=(this.length-1)*o-a;return yT(l,this.points[a],this.controls[a][1],this.controls[a+1][0],this.points[a+1])},r}();function yT(r,t,e,o,a){var l=vT(r),f={x:a.x*l[0]+o.x*l[1]+e.x*l[2]+t.x*l[3],y:a.y*l[0]+o.y*l[1]+e.y*l[2]+t.y*l[3],z:a.z*l[0]+o.z*l[1]+e.z*l[2]+t.z*l[3]};return f}function vT(r){var t=r*r,e=t*r;return[e,3*t*(1-r),3*r*(1-r)*(1-r),(1-r)*(1-r)*(1-r)]}function qu(r,t){t===void 0&&(t={});var e=Number(r[0]),o=Number(r[1]),a=Number(r[2]),l=Number(r[3]);if(r.length===6)throw new Error(\\\"@turf/bbox-polygon does not support BBox with 6 positions\\\");var f=[e,o],h=[e,l],p=[a,l],d=[a,o];return Ln([[f,d,p,h,f]],t.properties,{bbox:r,id:t.id})}function _T(r){return qu(jr(r))}var yp=_T;var FT=On(B0(),1);var lA=On(Nc(),1);var fA=On(gc(),1);var dA=On(gp(),1);var ny=Math.PI/180,ry=180/Math.PI,ju=function(r,t){this.lon=r,this.lat=t,this.x=ny*r,this.y=ny*t};ju.prototype.view=function(){return String(this.lon).slice(0,4)+\\\",\\\"+String(this.lat).slice(0,4)};ju.prototype.antipode=function(){var r=-1*this.lat,t=this.lon<0?180+this.lon:(180-this.lon)*-1;return new ju(t,r)};var iy=function(){this.coords=[],this.length=0};iy.prototype.move_to=function(r){this.length++,this.coords.push(r)};var Up=function(r){this.properties=r||{},this.geometries=[]};Up.prototype.json=function(){if(this.geometries.length<=0)return{geometry:{type:\\\"LineString\\\",coordinates:null},type:\\\"Feature\\\",properties:this.properties};if(this.geometries.length===1)return{geometry:{type:\\\"LineString\\\",coordinates:this.geometries[0].coords},type:\\\"Feature\\\",properties:this.properties};for(var r=[],t=0;t<this.geometries.length;t++)r.push(this.geometries[t].coords);return{geometry:{type:\\\"MultiLineString\\\",coordinates:r},type:\\\"Feature\\\",properties:this.properties}};Up.prototype.wkt=function(){for(var r=\\\"\\\",t=\\\"LINESTRING(\\\",e=function(l){t+=l[0]+\\\" \\\"+l[1]+\\\",\\\"},o=0;o<this.geometries.length;o++){if(this.geometries[o].coords.length===0)return\\\"LINESTRING(empty)\\\";var a=this.geometries[o].coords;a.forEach(e),r+=t.substring(0,t.length-1)+\\\")\\\"}return r};var oy=function(r,t,e){if(!r||r.x===void 0||r.y===void 0)throw new Error(\\\"GreatCircle constructor expects two args: start and end objects with x and y properties\\\");if(!t||t.x===void 0||t.y===void 0)throw new Error(\\\"GreatCircle constructor expects two args: start and end objects with x and y properties\\\");this.start=new ju(r.x,r.y),this.end=new ju(t.x,t.y),this.properties=e||{};var o=this.start.x-this.end.x,a=this.start.y-this.end.y,l=Math.pow(Math.sin(a/2),2)+Math.cos(this.start.y)*Math.cos(this.end.y)*Math.pow(Math.sin(o/2),2);if(this.g=2*Math.asin(Math.sqrt(l)),this.g===Math.PI)throw new Error(\\\"it appears \\\"+r.view()+\\\" and \\\"+t.view()+\\\" are 'antipodal', e.g diametrically opposite, thus there is no single route but rather infinite\\\");if(isNaN(this.g))throw new Error(\\\"could not calculate great circle between \\\"+r+\\\" and \\\"+t)};oy.prototype.interpolate=function(r){var t=Math.sin((1-r)*this.g)/Math.sin(this.g),e=Math.sin(r*this.g)/Math.sin(this.g),o=t*Math.cos(this.start.y)*Math.cos(this.start.x)+e*Math.cos(this.end.y)*Math.cos(this.end.x),a=t*Math.cos(this.start.y)*Math.sin(this.start.x)+e*Math.cos(this.end.y)*Math.sin(this.end.x),l=t*Math.sin(this.start.y)+e*Math.sin(this.end.y),f=ry*Math.atan2(l,Math.sqrt(Math.pow(o,2)+Math.pow(a,2))),h=ry*Math.atan2(a,o);return[h,f]};oy.prototype.Arc=function(r,t){var e=[];if(!r||r<=2)e.push([this.start.lon,this.start.lat]),e.push([this.end.lon,this.end.lat]);else for(var o=1/(r-1),a=0;a<r;++a){var l=o*a,f=this.interpolate(l);e.push(f)}for(var h=!1,p=0,d=t&&t.offset?t.offset:10,g=180-d,_=-180+d,y=360-d,M=1;M<e.length;++M){var w=e[M-1][0],T=e[M][0],x=Math.abs(T-w);x>y&&(T>g&&w<_||w>g&&T<_)?h=!0:x>p&&(p=x)}var v=[];if(h&&p<d){var C=[];v.push(C);for(var S=0;S<e.length;++S){var O=parseFloat(e[S][0]);if(S>0&&Math.abs(O-e[S-1][0])>y){var F=parseFloat(e[S-1][0]),G=parseFloat(e[S-1][1]),z=parseFloat(e[S][0]),L=parseFloat(e[S][1]);if(F>-180&&F<_&&z===180&&S+1<e.length&&e[S-1][0]>-180&&e[S-1][0]<_){C.push([-180,e[S][1]]),S++,C.push([e[S][0],e[S][1]]);continue}else if(F>g&&F<180&&z===-180&&S+1<e.length&&e[S-1][0]>g&&e[S-1][0]<180){C.push([180,e[S][1]]),S++,C.push([e[S][0],e[S][1]]);continue}if(F<_&&z>g){var D=F;F=z,z=D;var q=G;G=L,L=q}if(F>g&&z<_&&(z+=360),F<=180&&z>=180&&F<z){var nt=(180-F)/(z-F),k=nt*L+(1-nt)*G;C.push([e[S-1][0]>g?180:-180,k]),C=[],C.push([e[S-1][0]>g?-180:180,k]),v.push(C)}else C=[],v.push(C);C.push([O,e[S][1]])}else C.push([e[S][0],e[S][1]])}}else{var xt=[];v.push(xt);for(var X=0;X<e.length;++X)xt.push([e[X][0],e[X][1]])}for(var it=new Up(this.properties),vt=0;vt<v.length;++vt){var pt=new iy;it.geometries.push(pt);for(var et=v[vt],ot=0;ot<et.length;++ot)pt.move_to(et[ot])}return it};var yA=On(Nc(),1);var qC=On(Nc(),1);var XC=On(od(),1);var JC=On(gc(),1);var _e=[],xe=[],Ee=[],Me=[],Se=[],we=[],be=[],Te=[],Ae=[],Ce=[],Pe=[],Ie=[],Re=[],Le=[],Ne=[],Oe=[],De=[],Fe=[],Ue=[],Be=[],ze=[],ke=[],Ge=[],Ve=[];be[85]=Ce[85]=-1;Te[85]=Pe[85]=0;Ae[85]=Ie[85]=1;Ue[85]=ke[85]=1;Be[85]=Ge[85]=0;ze[85]=Ve[85]=1;_e[85]=Me[85]=0;xe[85]=Se[85]=-1;Ee[85]=Ne[85]=0;Oe[85]=Re[85]=0;De[85]=Le[85]=1;we[85]=Fe[85]=1;ke[1]=ke[169]=0;Ge[1]=Ge[169]=-1;Ve[1]=Ve[169]=0;Re[1]=Re[169]=-1;Le[1]=Le[169]=0;Ne[1]=Ne[169]=0;Ce[4]=Ce[166]=0;Pe[4]=Pe[166]=-1;Ie[4]=Ie[166]=1;Oe[4]=Oe[166]=1;De[4]=De[166]=0;Fe[4]=Fe[166]=0;be[16]=be[154]=0;Te[16]=Te[154]=1;Ae[16]=Ae[154]=1;Me[16]=Me[154]=1;Se[16]=Se[154]=0;we[16]=we[154]=1;Ue[64]=Ue[106]=0;Be[64]=Be[106]=1;ze[64]=ze[106]=0;_e[64]=_e[106]=-1;xe[64]=xe[106]=0;Ee[64]=Ee[106]=1;Ue[2]=Ue[168]=0;Be[2]=Be[168]=-1;ze[2]=ze[168]=1;ke[2]=ke[168]=0;Ge[2]=Ge[168]=-1;Ve[2]=Ve[168]=0;Re[2]=Re[168]=-1;Le[2]=Le[168]=0;Ne[2]=Ne[168]=0;Oe[2]=Oe[168]=-1;De[2]=De[168]=0;Fe[2]=Fe[168]=1;be[8]=be[162]=0;Te[8]=Te[162]=-1;Ae[8]=Ae[162]=0;Ce[8]=Ce[162]=0;Pe[8]=Pe[162]=-1;Ie[8]=Ie[162]=1;Re[8]=Re[162]=1;Le[8]=Le[162]=0;Ne[8]=Ne[162]=1;Oe[8]=Oe[162]=1;De[8]=De[162]=0;Fe[8]=Fe[162]=0;be[32]=be[138]=0;Te[32]=Te[138]=1;Ae[32]=Ae[138]=1;Ce[32]=Ce[138]=0;Pe[32]=Pe[138]=1;Ie[32]=Ie[138]=0;_e[32]=_e[138]=1;xe[32]=xe[138]=0;Ee[32]=Ee[138]=0;Me[32]=Me[138]=1;Se[32]=Se[138]=0;we[32]=we[138]=1;ke[128]=ke[42]=0;Ge[128]=Ge[42]=1;Ve[128]=Ve[42]=1;Ue[128]=Ue[42]=0;Be[128]=Be[42]=1;ze[128]=ze[42]=0;_e[128]=_e[42]=-1;xe[128]=xe[42]=0;Ee[128]=Ee[42]=1;Me[128]=Me[42]=-1;Se[128]=Se[42]=0;we[128]=we[42]=0;Ce[5]=Ce[165]=-1;Pe[5]=Pe[165]=0;Ie[5]=Ie[165]=0;ke[5]=ke[165]=1;Ge[5]=Ge[165]=0;Ve[5]=Ve[165]=0;Oe[20]=Oe[150]=0;De[20]=De[150]=1;Fe[20]=Fe[150]=1;Me[20]=Me[150]=0;Se[20]=Se[150]=-1;we[20]=we[150]=1;be[80]=be[90]=-1;Te[80]=Te[90]=0;Ae[80]=Ae[90]=1;Ue[80]=Ue[90]=1;Be[80]=Be[90]=0;ze[80]=ze[90]=1;Re[65]=Re[105]=0;Le[65]=Le[105]=1;Ne[65]=Ne[105]=0;_e[65]=_e[105]=0;xe[65]=xe[105]=-1;Ee[65]=Ee[105]=0;be[160]=be[10]=-1;Te[160]=Te[10]=0;Ae[160]=Ae[10]=1;Ce[160]=Ce[10]=-1;Pe[160]=Pe[10]=0;Ie[160]=Ie[10]=0;ke[160]=ke[10]=1;Ge[160]=Ge[10]=0;Ve[160]=Ve[10]=0;Ue[160]=Ue[10]=1;Be[160]=Be[10]=0;ze[160]=ze[10]=1;Oe[130]=Oe[40]=0;De[130]=De[40]=1;Fe[130]=Fe[40]=1;Re[130]=Re[40]=0;Le[130]=Le[40]=1;Ne[130]=Ne[40]=0;_e[130]=_e[40]=0;xe[130]=xe[40]=-1;Ee[130]=Ee[40]=0;Me[130]=Me[40]=0;Se[130]=Se[40]=-1;we[130]=we[40]=1;Ce[37]=Ce[133]=0;Pe[37]=Pe[133]=1;Ie[37]=Ie[133]=1;ke[37]=ke[133]=0;Ge[37]=Ge[133]=1;Ve[37]=Ve[133]=0;_e[37]=_e[133]=-1;xe[37]=xe[133]=0;Ee[37]=Ee[133]=0;Me[37]=Me[133]=1;Se[37]=Se[133]=0;we[37]=we[133]=0;Oe[148]=Oe[22]=-1;De[148]=De[22]=0;Fe[148]=Fe[22]=0;ke[148]=ke[22]=0;Ge[148]=Ge[22]=-1;Ve[148]=Ve[22]=1;Ue[148]=Ue[22]=0;Be[148]=Be[22]=1;ze[148]=ze[22]=1;Me[148]=Me[22]=-1;Se[148]=Se[22]=0;we[148]=we[22]=1;be[82]=be[88]=0;Te[82]=Te[88]=-1;Ae[82]=Ae[88]=1;Oe[82]=Oe[88]=1;De[82]=De[88]=0;Fe[82]=Fe[88]=1;Re[82]=Re[88]=-1;Le[82]=Le[88]=0;Ne[82]=Ne[88]=1;Ue[82]=Ue[88]=0;Be[82]=Be[88]=-1;ze[82]=ze[88]=0;be[73]=be[97]=0;Te[73]=Te[97]=1;Ae[73]=Ae[97]=0;Ce[73]=Ce[97]=0;Pe[73]=Pe[97]=-1;Ie[73]=Ie[97]=0;Re[73]=Re[97]=1;Le[73]=Le[97]=0;Ne[73]=Ne[97]=0;_e[73]=_e[97]=1;xe[73]=xe[97]=0;Ee[73]=Ee[97]=1;be[145]=be[25]=0;Te[145]=Te[25]=-1;Ae[145]=Ae[25]=0;Re[145]=Re[25]=1;Le[145]=Le[25]=0;Ne[145]=Ne[25]=1;ke[145]=ke[25]=0;Ge[145]=Ge[25]=1;Ve[145]=Ve[25]=1;Me[145]=Me[25]=-1;Se[145]=Se[25]=0;we[145]=we[25]=0;Ce[70]=Ce[100]=0;Pe[70]=Pe[100]=1;Ie[70]=Ie[100]=0;Oe[70]=Oe[100]=-1;De[70]=De[100]=0;Fe[70]=Fe[100]=1;Ue[70]=Ue[100]=0;Be[70]=Be[100]=-1;ze[70]=ze[100]=1;_e[70]=_e[100]=1;xe[70]=xe[100]=0;Ee[70]=Ee[100]=0;Ce[101]=Ce[69]=0;Pe[101]=Pe[69]=1;Ie[101]=Ie[69]=0;_e[101]=_e[69]=1;xe[101]=xe[69]=0;Ee[101]=Ee[69]=0;ke[149]=ke[21]=0;Ge[149]=Ge[21]=1;Ve[149]=Ve[21]=1;Me[149]=Me[21]=-1;Se[149]=Se[21]=0;we[149]=we[21]=0;Oe[86]=Oe[84]=-1;De[86]=De[84]=0;Fe[86]=Fe[84]=1;Ue[86]=Ue[84]=0;Be[86]=Be[84]=-1;ze[86]=ze[84]=1;be[89]=be[81]=0;Te[89]=Te[81]=-1;Ae[89]=Ae[81]=0;Re[89]=Re[81]=1;Le[89]=Le[81]=0;Ne[89]=Ne[81]=1;be[96]=be[74]=0;Te[96]=Te[74]=1;Ae[96]=Ae[74]=0;Ce[96]=Ce[74]=-1;Pe[96]=Pe[74]=0;Ie[96]=Ie[74]=1;Ue[96]=Ue[74]=1;Be[96]=Be[74]=0;ze[96]=ze[74]=0;_e[96]=_e[74]=1;xe[96]=xe[74]=0;Ee[96]=Ee[74]=1;be[24]=be[146]=0;Te[24]=Te[146]=-1;Ae[24]=Ae[146]=1;Oe[24]=Oe[146]=1;De[24]=De[146]=0;Fe[24]=Fe[146]=1;Re[24]=Re[146]=0;Le[24]=Le[146]=1;Ne[24]=Ne[146]=1;Me[24]=Me[146]=0;Se[24]=Se[146]=-1;we[24]=we[146]=0;Ce[6]=Ce[164]=-1;Pe[6]=Pe[164]=0;Ie[6]=Ie[164]=1;Oe[6]=Oe[164]=-1;De[6]=De[164]=0;Fe[6]=Fe[164]=0;ke[6]=ke[164]=0;Ge[6]=Ge[164]=-1;Ve[6]=Ve[164]=1;Ue[6]=Ue[164]=1;Be[6]=Be[164]=0;ze[6]=ze[164]=0;Re[129]=Re[41]=0;Le[129]=Le[41]=1;Ne[129]=Ne[41]=1;ke[129]=ke[41]=0;Ge[129]=Ge[41]=1;Ve[129]=Ve[41]=0;_e[129]=_e[41]=-1;xe[129]=xe[41]=0;Ee[129]=Ee[41]=0;Me[129]=Me[41]=0;Se[129]=Se[41]=-1;we[129]=we[41]=0;Oe[66]=Oe[104]=0;De[66]=De[104]=1;Fe[66]=Fe[104]=0;Re[66]=Re[104]=-1;Le[66]=Le[104]=0;Ne[66]=Ne[104]=1;Ue[66]=Ue[104]=0;Be[66]=Be[104]=-1;ze[66]=ze[104]=0;_e[66]=_e[104]=0;xe[66]=xe[104]=-1;Ee[66]=Ee[104]=1;be[144]=be[26]=-1;Te[144]=Te[26]=0;Ae[144]=Ae[26]=0;ke[144]=ke[26]=1;Ge[144]=Ge[26]=0;Ve[144]=Ve[26]=1;Ue[144]=Ue[26]=0;Be[144]=Be[26]=1;ze[144]=ze[26]=1;Me[144]=Me[26]=-1;Se[144]=Se[26]=0;we[144]=we[26]=1;Ce[36]=Ce[134]=0;Pe[36]=Pe[134]=1;Ie[36]=Ie[134]=1;Oe[36]=Oe[134]=0;De[36]=De[134]=1;Fe[36]=Fe[134]=0;_e[36]=_e[134]=0;xe[36]=xe[134]=-1;Ee[36]=Ee[134]=1;Me[36]=Me[134]=1;Se[36]=Se[134]=0;we[36]=we[134]=0;be[9]=be[161]=-1;Te[9]=Te[161]=0;Ae[9]=Ae[161]=0;Ce[9]=Ce[161]=0;Pe[9]=Pe[161]=-1;Ie[9]=Ie[161]=0;Re[9]=Re[161]=1;Le[9]=Le[161]=0;Ne[9]=Ne[161]=0;ke[9]=ke[161]=1;Ge[9]=Ge[161]=0;Ve[9]=Ve[161]=1;be[136]=0;Te[136]=1;Ae[136]=1;Ce[136]=0;Pe[136]=1;Ie[136]=0;Oe[136]=-1;De[136]=0;Fe[136]=1;Re[136]=-1;Le[136]=0;Ne[136]=0;ke[136]=0;Ge[136]=-1;Ve[136]=0;Ue[136]=0;Be[136]=-1;ze[136]=1;_e[136]=1;xe[136]=0;Ee[136]=0;Me[136]=1;Se[136]=0;we[136]=1;be[34]=0;Te[34]=-1;Ae[34]=0;Ce[34]=0;Pe[34]=-1;Ie[34]=1;Oe[34]=1;De[34]=0;Fe[34]=0;Re[34]=1;Le[34]=0;Ne[34]=1;ke[34]=0;Ge[34]=1;Ve[34]=1;Ue[34]=0;Be[34]=1;ze[34]=0;_e[34]=-1;xe[34]=0;Ee[34]=1;Me[34]=-1;Se[34]=0;we[34]=0;be[35]=0;Te[35]=1;Ae[35]=1;Ce[35]=0;Pe[35]=-1;Ie[35]=1;Oe[35]=1;De[35]=0;Fe[35]=0;Re[35]=-1;Le[35]=0;Ne[35]=0;ke[35]=0;Ge[35]=-1;Ve[35]=0;Ue[35]=0;Be[35]=1;ze[35]=0;_e[35]=-1;xe[35]=0;Ee[35]=1;Me[35]=1;Se[35]=0;we[35]=1;be[153]=0;Te[153]=1;Ae[153]=1;Re[153]=-1;Le[153]=0;Ne[153]=0;ke[153]=0;Ge[153]=-1;Ve[153]=0;Me[153]=1;Se[153]=0;we[153]=1;Ce[102]=0;Pe[102]=-1;Ie[102]=1;Oe[102]=1;De[102]=0;Fe[102]=0;Ue[102]=0;Be[102]=1;ze[102]=0;_e[102]=-1;xe[102]=0;Ee[102]=1;be[155]=0;Te[155]=-1;Ae[155]=0;Re[155]=1;Le[155]=0;Ne[155]=1;ke[155]=0;Ge[155]=1;Ve[155]=1;Me[155]=-1;Se[155]=0;we[155]=0;Ce[103]=0;Pe[103]=1;Ie[103]=0;Oe[103]=-1;De[103]=0;Fe[103]=1;Ue[103]=0;Be[103]=-1;ze[103]=1;_e[103]=1;xe[103]=0;Ee[103]=0;be[152]=0;Te[152]=1;Ae[152]=1;Oe[152]=-1;De[152]=0;Fe[152]=1;Re[152]=-1;Le[152]=0;Ne[152]=0;ke[152]=0;Ge[152]=-1;Ve[152]=0;Ue[152]=0;Be[152]=-1;ze[152]=1;Me[152]=1;Se[152]=0;we[152]=1;be[156]=0;Te[156]=-1;Ae[156]=1;Oe[156]=1;De[156]=0;Fe[156]=1;Re[156]=-1;Le[156]=0;Ne[156]=0;ke[156]=0;Ge[156]=-1;Ve[156]=0;Ue[156]=0;Be[156]=1;ze[156]=1;Me[156]=-1;Se[156]=0;we[156]=1;be[137]=0;Te[137]=1;Ae[137]=1;Ce[137]=0;Pe[137]=1;Ie[137]=0;Re[137]=-1;Le[137]=0;Ne[137]=0;ke[137]=0;Ge[137]=-1;Ve[137]=0;_e[137]=1;xe[137]=0;Ee[137]=0;Me[137]=1;Se[137]=0;we[137]=1;be[139]=0;Te[139]=1;Ae[139]=1;Ce[139]=0;Pe[139]=-1;Ie[139]=0;Re[139]=1;Le[139]=0;Ne[139]=0;ke[139]=0;Ge[139]=1;Ve[139]=0;_e[139]=-1;xe[139]=0;Ee[139]=0;Me[139]=1;Se[139]=0;we[139]=1;be[98]=0;Te[98]=-1;Ae[98]=0;Ce[98]=0;Pe[98]=-1;Ie[98]=1;Oe[98]=1;De[98]=0;Fe[98]=0;Re[98]=1;Le[98]=0;Ne[98]=1;Ue[98]=0;Be[98]=1;ze[98]=0;_e[98]=-1;xe[98]=0;Ee[98]=1;be[99]=0;Te[99]=1;Ae[99]=0;Ce[99]=0;Pe[99]=-1;Ie[99]=1;Oe[99]=1;De[99]=0;Fe[99]=0;Re[99]=-1;Le[99]=0;Ne[99]=1;Ue[99]=0;Be[99]=-1;ze[99]=0;_e[99]=1;xe[99]=0;Ee[99]=1;Ce[38]=0;Pe[38]=-1;Ie[38]=1;Oe[38]=1;De[38]=0;Fe[38]=0;ke[38]=0;Ge[38]=1;Ve[38]=1;Ue[38]=0;Be[38]=1;ze[38]=0;_e[38]=-1;xe[38]=0;Ee[38]=1;Me[38]=-1;Se[38]=0;we[38]=0;Ce[39]=0;Pe[39]=1;Ie[39]=1;Oe[39]=-1;De[39]=0;Fe[39]=0;ke[39]=0;Ge[39]=-1;Ve[39]=1;Ue[39]=0;Be[39]=1;ze[39]=0;_e[39]=-1;xe[39]=0;Ee[39]=1;Me[39]=1;Se[39]=0;we[39]=0;var sd=function(r){return[[r.bottomleft,0],[0,0],[0,r.leftbottom]]},ad=function(r){return[[1,r.rightbottom],[1,0],[r.bottomright,0]]},ud=function(r){return[[r.topright,1],[1,1],[1,r.righttop]]},ld=function(r){return[[0,r.lefttop],[0,1],[r.topleft,1]]},cd=function(r){return[[r.bottomright,0],[r.bottomleft,0],[0,r.leftbottom],[0,r.lefttop]]},fd=function(r){return[[r.bottomright,0],[r.bottomleft,0],[1,r.righttop],[1,r.rightbottom]]},hd=function(r){return[[1,r.righttop],[1,r.rightbottom],[r.topleft,1],[r.topright,1]]},pd=function(r){return[[0,r.leftbottom],[0,r.lefttop],[r.topleft,1],[r.topright,1]]},$C=function(r){return[[0,0],[0,r.leftbottom],[1,r.rightbottom],[1,0]]},KC=function(r){return[[1,0],[r.bottomright,0],[r.topright,1],[1,1]]},jC=function(r){return[[1,1],[1,r.righttop],[0,r.lefttop],[0,1]]},QC=function(r){return[[r.bottomleft,0],[0,0],[0,1],[r.topleft,1]]},tP=function(r){return[[1,r.righttop],[1,r.rightbottom],[0,r.leftbottom],[0,r.lefttop]]},eP=function(r){return[[r.topleft,1],[r.topright,1],[r.bottomright,0],[r.bottomleft,0]]},nP=function(){return[[0,0],[0,1],[1,1],[1,0]]},rP=function(r){return[[1,r.rightbottom],[1,0],[0,0],[0,1],[r.topleft,1]]},iP=function(r){return[[r.topright,1],[1,1],[1,0],[0,0],[0,r.leftbottom]]},oP=function(r){return[[1,0],[r.bottomright,0],[0,r.lefttop],[0,1],[1,1]]},sP=function(r){return[[1,1],[1,r.righttop],[r.bottomleft,0],[0,0],[0,1]]},aP=function(r){return[[1,r.righttop],[1,r.rightbottom],[0,r.lefttop],[0,1],[r.topleft,1]]},uP=function(r){return[[1,1],[1,r.righttop],[r.bottomright,0],[r.bottomleft,0],[r.topright,1]]},lP=function(r){return[[1,r.rightbottom],[1,0],[r.bottomright,0],[0,r.leftbottom],[0,r.lefttop]]},cP=function(r){return[[r.topright,1],[r.bottomleft,0],[0,0],[0,r.leftbottom],[r.topleft,1]]},fP=function(r){return[[r.bottomright,0],[r.bottomleft,0],[0,r.lefttop],[0,1],[r.topleft,1]]},hP=function(r){return[[1,1],[1,r.righttop],[0,r.leftbottom],[0,r.lefttop],[r.topright,1]]},pP=function(r){return[[1,r.rightbottom],[1,0],[r.bottomright,0],[r.topleft,1],[r.topright,1]]},dP=function(r){return[[1,r.righttop],[1,r.rightbottom],[r.bottomleft,0],[0,0],[0,r.leftbottom]]},mP=function(r){return[[1,r.rightbottom],[1,0],[0,0],[0,r.leftbottom],[r.topleft,1],[r.topright,1]]},gP=function(r){return[[1,1],[1,0],[r.bottomright,0],[0,r.leftbottom],[0,r.lefttop],[r.topright,1]]},yP=function(r){return[[1,1],[1,r.righttop],[r.bottomright,0],[r.bottomleft,0],[0,r.lefttop],[0,1]]},vP=function(r){return[[1,r.righttop],[1,r.rightbottom],[r.bottomleft,0],[0,0],[0,1],[r.topleft,1]]},_P=function(r){return[[1,1],[1,r.righttop],[r.bottomleft,0],[0,0],[0,r.leftbottom],[r.topright,1]]},xP=function(r){return[[1,r.rightbottom],[1,0],[r.bottomright,0],[0,r.lefttop],[0,1],[r.topleft,1]]},EP=function(r){return[[1,r.righttop],[1,r.rightbottom],[r.bottomright,0],[r.bottomleft,0],[0,r.leftbottom],[0,r.lefttop],[r.topleft,1],[r.topright,1]]},MP=function(r){return[[1,1],[1,r.righttop],[r.bottomleft,0],[0,0],[0,r.leftbottom],[r.topright,1]]},SP=function(r){return[[1,r.rightbottom],[1,0],[r.bottomright,0],[0,r.lefttop],[0,1],[r.topleft,1]]},wP=function(r){return[[1,1],[1,r.righttop],[r.bottomright,0],[r.bottomleft,0],[0,r.leftbottom],[0,r.lefttop],[r.topright,1]]},bP=function(r){return[[1,r.righttop],[1,r.rightbottom],[r.bottomleft,0],[0,0],[0,r.leftbottom],[r.topleft,1],[r.topright,1]]},TP=function(r){return[[1,r.righttop],[1,r.rightbottom],[r.bottomright,0],[r.bottomleft,0],[0,r.lefttop],[0,1],[r.topleft,1]]},AP=function(r){return[[1,r.rightbottom],[1,0],[r.bottomright,0],[0,r.leftbottom],[0,r.lefttop],[r.topleft,1],[r.topright,1]]},Xe=[],Ye=[],Ze=[],Je=[],$e=[],Ke=[],je=[],Qe=[];Je[1]=$e[1]=18;Je[169]=$e[169]=18;Ze[4]=Ye[4]=12;Ze[166]=Ye[166]=12;Xe[16]=Qe[16]=4;Xe[154]=Qe[154]=4;Ke[64]=je[64]=22;Ke[106]=je[106]=22;Ze[2]=Ke[2]=17;Je[2]=$e[2]=18;Ze[168]=Ke[168]=17;Je[168]=$e[168]=18;Xe[8]=Je[8]=9;Ye[8]=Ze[8]=12;Xe[162]=Je[162]=9;Ye[162]=Ze[162]=12;Xe[32]=Qe[32]=4;Ye[32]=je[32]=1;Xe[138]=Qe[138]=4;Ye[138]=je[138]=1;$e[128]=Qe[128]=21;Ke[128]=je[128]=22;$e[42]=Qe[42]=21;Ke[42]=je[42]=22;Ye[5]=$e[5]=14;Ye[165]=$e[165]=14;Ze[20]=Qe[20]=6;Ze[150]=Qe[150]=6;Xe[80]=Ke[80]=11;Xe[90]=Ke[90]=11;Je[65]=je[65]=3;Je[105]=je[105]=3;Xe[160]=Ke[160]=11;Ye[160]=$e[160]=14;Xe[10]=Ke[10]=11;Ye[10]=$e[10]=14;Ze[130]=Qe[130]=6;Je[130]=je[130]=3;Ze[40]=Qe[40]=6;Je[40]=je[40]=3;Ye[101]=je[101]=1;Ye[69]=je[69]=1;$e[149]=Qe[149]=21;$e[21]=Qe[21]=21;Ze[86]=Ke[86]=17;Ze[84]=Ke[84]=17;Xe[89]=Je[89]=9;Xe[81]=Je[81]=9;Xe[96]=je[96]=0;Ye[96]=Ke[96]=15;Xe[74]=je[74]=0;Ye[74]=Ke[74]=15;Xe[24]=Ze[24]=8;Je[24]=Qe[24]=7;Xe[146]=Ze[146]=8;Je[146]=Qe[146]=7;Ye[6]=Ke[6]=15;Ze[6]=$e[6]=16;Ye[164]=Ke[164]=15;Ze[164]=$e[164]=16;Je[129]=Qe[129]=7;$e[129]=je[129]=20;Je[41]=Qe[41]=7;$e[41]=je[41]=20;Ze[66]=je[66]=2;Je[66]=Ke[66]=19;Ze[104]=je[104]=2;Je[104]=Ke[104]=19;Xe[144]=$e[144]=10;Ke[144]=Qe[144]=23;Xe[26]=$e[26]=10;Ke[26]=Qe[26]=23;Ye[36]=Qe[36]=5;Ze[36]=je[36]=2;Ye[134]=Qe[134]=5;Ze[134]=je[134]=2;Xe[9]=$e[9]=10;Ye[9]=Je[9]=13;Xe[161]=$e[161]=10;Ye[161]=Je[161]=13;Ye[37]=Qe[37]=5;$e[37]=je[37]=20;Ye[133]=Qe[133]=5;$e[133]=je[133]=20;Ze[148]=$e[148]=16;Ke[148]=Qe[148]=23;Ze[22]=$e[22]=16;Ke[22]=Qe[22]=23;Xe[82]=Ze[82]=8;Je[82]=Ke[82]=19;Xe[88]=Ze[88]=8;Je[88]=Ke[88]=19;Xe[73]=je[73]=0;Ye[73]=Je[73]=13;Xe[97]=je[97]=0;Ye[97]=Je[97]=13;Xe[145]=Je[145]=9;$e[145]=Qe[145]=21;Xe[25]=Je[25]=9;$e[25]=Qe[25]=21;Ye[70]=je[70]=1;Ze[70]=Ke[70]=17;Ye[100]=je[100]=1;Ze[100]=Ke[100]=17;Xe[34]=Je[34]=9;Ye[34]=Ze[34]=12;$e[34]=Qe[34]=21;Ke[34]=je[34]=22;Xe[136]=Qe[136]=4;Ye[136]=je[136]=1;Ze[136]=Ke[136]=17;Je[136]=$e[136]=18;Xe[35]=Qe[35]=4;Ye[35]=Ze[35]=12;Je[35]=$e[35]=18;Ke[35]=je[35]=22;Xe[153]=Qe[153]=4;Je[153]=$e[153]=18;Ye[102]=Ze[102]=12;Ke[102]=je[102]=22;Xe[155]=Je[155]=9;$e[155]=Qe[155]=23;Ye[103]=je[103]=1;Ze[103]=Ke[103]=17;Xe[152]=Qe[152]=4;Ze[152]=Ke[152]=17;Je[152]=$e[152]=18;Xe[156]=Ze[156]=8;Je[156]=$e[156]=18;Ke[156]=Qe[156]=23;Xe[137]=Qe[137]=4;Ye[137]=je[137]=1;Je[137]=$e[137]=18;Xe[139]=Qe[139]=4;Ye[139]=Je[139]=13;$e[139]=je[139]=20;Xe[98]=Je[98]=9;Ye[98]=Ze[98]=12;Ke[98]=je[98]=22;Xe[99]=je[99]=0;Ye[99]=Ze[99]=12;Je[99]=Ke[99]=19;Ye[38]=Ze[38]=12;$e[38]=Qe[38]=21;Ke[38]=je[38]=22;Ye[39]=Qe[39]=5;Ze[39]=$e[39]=16;Ke[39]=je[39]=22;var Ft=[];Ft[1]=Ft[169]=sd;Ft[4]=Ft[166]=ad;Ft[16]=Ft[154]=ud;Ft[64]=Ft[106]=ld;Ft[168]=Ft[2]=cd;Ft[162]=Ft[8]=fd;Ft[138]=Ft[32]=hd;Ft[42]=Ft[128]=pd;Ft[5]=Ft[165]=$C;Ft[20]=Ft[150]=KC;Ft[80]=Ft[90]=jC;Ft[65]=Ft[105]=QC;Ft[160]=Ft[10]=tP;Ft[130]=Ft[40]=eP;Ft[85]=nP;Ft[101]=Ft[69]=rP;Ft[149]=Ft[21]=iP;Ft[86]=Ft[84]=oP;Ft[89]=Ft[81]=sP;Ft[96]=Ft[74]=aP;Ft[24]=Ft[146]=uP;Ft[6]=Ft[164]=lP;Ft[129]=Ft[41]=cP;Ft[66]=Ft[104]=fP;Ft[144]=Ft[26]=hP;Ft[36]=Ft[134]=pP;Ft[9]=Ft[161]=dP;Ft[37]=Ft[133]=mP;Ft[148]=Ft[22]=gP;Ft[82]=Ft[88]=yP;Ft[73]=Ft[97]=vP;Ft[145]=Ft[25]=_P;Ft[70]=Ft[100]=xP;Ft[34]=function(r){return[pd(r),fd(r)]};Ft[35]=EP;Ft[136]=function(r){return[hd(r),cd(r)]};Ft[153]=function(r){return[ud(r),sd(r)]};Ft[102]=function(r){return[ad(r),ld(r)]};Ft[155]=MP;Ft[103]=SP;Ft[152]=function(r){return[ud(r),cd(r)]};Ft[156]=wP;Ft[137]=function(r){return[hd(r),sd(r)]};Ft[139]=bP;Ft[98]=function(r){return[fd(r),ld(r)]};Ft[99]=TP;Ft[38]=function(r){return[ad(r),pd(r)]};Ft[39]=AP;function PP(r){return(r>0)-(r<0)||+r}function lu(r,t,e){var o=t[0]-r[0],a=t[1]-r[1],l=e[0]-t[0],f=e[1]-t[1];return PP(o*f-l*a)}function Kv(r,t){var e=r.geometry.coordinates[0].map(function(f){return f[0]}),o=r.geometry.coordinates[0].map(function(f){return f[1]}),a=t.geometry.coordinates[0].map(function(f){return f[0]}),l=t.geometry.coordinates[0].map(function(f){return f[1]});return Math.max.apply(null,e)===Math.max.apply(null,a)&&Math.max.apply(null,o)===Math.max.apply(null,l)&&Math.min.apply(null,e)===Math.min.apply(null,a)&&Math.min.apply(null,o)===Math.min.apply(null,l)}function dd(r,t){return t.geometry.coordinates[0].every(function(e){return yr(Sn(e),r)})}function jv(r,t){return r[0]===t[0]&&r[1]===t[1]}var IP=function(){function r(t){this.id=r.buildId(t),this.coordinates=t,this.innerEdges=[],this.outerEdges=[],this.outerEdgesSorted=!1}return r.buildId=function(t){return t.join(\\\",\\\")},r.prototype.removeInnerEdge=function(t){this.innerEdges=this.innerEdges.filter(function(e){return e.from.id!==t.from.id})},r.prototype.removeOuterEdge=function(t){this.outerEdges=this.outerEdges.filter(function(e){return e.to.id!==t.to.id})},r.prototype.addOuterEdge=function(t){this.outerEdges.push(t),this.outerEdgesSorted=!1},r.prototype.sortOuterEdges=function(){var t=this;this.outerEdgesSorted||(this.outerEdges.sort(function(e,o){var a=e.to,l=o.to;if(a.coordinates[0]-t.coordinates[0]>=0&&l.coordinates[0]-t.coordinates[0]<0)return 1;if(a.coordinates[0]-t.coordinates[0]<0&&l.coordinates[0]-t.coordinates[0]>=0)return-1;if(a.coordinates[0]-t.coordinates[0]===0&&l.coordinates[0]-t.coordinates[0]===0)return a.coordinates[1]-t.coordinates[1]>=0||l.coordinates[1]-t.coordinates[1]>=0?a.coordinates[1]-l.coordinates[1]:l.coordinates[1]-a.coordinates[1];var f=lu(t.coordinates,a.coordinates,l.coordinates);if(f<0)return 1;if(f>0)return-1;var h=Math.pow(a.coordinates[0]-t.coordinates[0],2)+Math.pow(a.coordinates[1]-t.coordinates[1],2),p=Math.pow(l.coordinates[0]-t.coordinates[0],2)+Math.pow(l.coordinates[1]-t.coordinates[1],2);return h-p}),this.outerEdgesSorted=!0)},r.prototype.getOuterEdges=function(){return this.sortOuterEdges(),this.outerEdges},r.prototype.getOuterEdge=function(t){return this.sortOuterEdges(),this.outerEdges[t]},r.prototype.addInnerEdge=function(t){this.innerEdges.push(t)},r}(),md=IP;var RP=function(){function r(t,e){this.from=t,this.to=e,this.next=void 0,this.label=void 0,this.symetric=void 0,this.ring=void 0,this.from.addOuterEdge(this),this.to.addInnerEdge(this)}return r.prototype.getSymetric=function(){return this.symetric||(this.symetric=new r(this.to,this.from),this.symetric.symetric=this),this.symetric},r.prototype.deleteEdge=function(){this.from.removeOuterEdge(this),this.to.removeInnerEdge(this)},r.prototype.isEqual=function(t){return this.from.id===t.from.id&&this.to.id===t.to.id},r.prototype.toString=function(){return\\\"Edge { \\\"+this.from.id+\\\" -> \\\"+this.to.id+\\\" }\\\"},r.prototype.toLineString=function(){return gr([this.from.coordinates,this.to.coordinates])},r.prototype.compareTo=function(t){return lu(t.from.coordinates,t.to.coordinates,this.to.coordinates)},r}(),Qv=RP;var LP=function(){function r(){this.edges=[],this.polygon=void 0,this.envelope=void 0}return r.prototype.push=function(t){this.edges.push(t),this.polygon=this.envelope=void 0},r.prototype.get=function(t){return this.edges[t]},Object.defineProperty(r.prototype,\\\"length\\\",{get:function(){return this.edges.length},enumerable:!0,configurable:!0}),r.prototype.forEach=function(t){this.edges.forEach(t)},r.prototype.map=function(t){return this.edges.map(t)},r.prototype.some=function(t){return this.edges.some(t)},r.prototype.isValid=function(){return!0},r.prototype.isHole=function(){var t=this,e=this.edges.reduce(function(f,h,p){return h.from.coordinates[1]>t.edges[f].from.coordinates[1]&&(f=p),f},0),o=(e===0?this.length:e)-1,a=(e+1)%this.length,l=lu(this.edges[o].from.coordinates,this.edges[e].from.coordinates,this.edges[a].from.coordinates);return l===0?this.edges[o].from.coordinates[0]>this.edges[a].from.coordinates[0]:l>0},r.prototype.toMultiPoint=function(){return jh(this.edges.map(function(t){return t.from.coordinates}))},r.prototype.toPolygon=function(){if(this.polygon)return this.polygon;var t=this.edges.map(function(e){return e.from.coordinates});return t.push(this.edges[0].from.coordinates),this.polygon=Ln([t])},r.prototype.getEnvelope=function(){return this.envelope?this.envelope:this.envelope=yp(this.toPolygon())},r.findEdgeRingContaining=function(t,e){var o=t.getEnvelope(),a,l;return e.forEach(function(f){var h=f.getEnvelope();if(l&&(a=l.getEnvelope()),!Kv(h,o)&&dd(h,o)){for(var p=t.map(function(w){return w.from.coordinates}),d=void 0,g=function(w){f.some(function(T){return jv(w,T.from.coordinates)})||(d=w)},_=0,y=p;_<y.length;_++){var M=y[_];g(M)}d&&f.inside(Sn(d))&&(!l||dd(a,h))&&(l=f)}}),l},r.prototype.inside=function(t){return yr(t,this.toPolygon())},r}(),gd=LP;function NP(r){if(!r)throw new Error(\\\"No geojson passed\\\");if(r.type!==\\\"FeatureCollection\\\"&&r.type!==\\\"GeometryCollection\\\"&&r.type!==\\\"MultiLineString\\\"&&r.type!==\\\"LineString\\\"&&r.type!==\\\"Feature\\\")throw new Error(\\\"Invalid input type '\\\"+r.type+\\\"'. Geojson must be FeatureCollection, GeometryCollection, LineString, MultiLineString or Feature\\\")}var QU=function(){function r(){this.edges=[],this.nodes={}}return r.fromGeoJson=function(t){NP(t);var e=new r;return Mi(t,function(o){tp(o,\\\"LineString\\\",\\\"Graph::fromGeoJson\\\"),o0(o,function(a,l){if(a){var f=e.getNode(a),h=e.getNode(l);e.addEdge(f,h)}return l})}),e},r.prototype.getNode=function(t){var e=md.buildId(t),o=this.nodes[e];return o||(o=this.nodes[e]=new md(t)),o},r.prototype.addEdge=function(t,e){var o=new Qv(t,e),a=o.getSymetric();this.edges.push(o),this.edges.push(a)},r.prototype.deleteDangles=function(){var t=this;Object.keys(this.nodes).map(function(e){return t.nodes[e]}).forEach(function(e){return t._removeIfDangle(e)})},r.prototype._removeIfDangle=function(t){var e=this;if(t.innerEdges.length<=1){var o=t.getOuterEdges().map(function(a){return a.to});this.removeNode(t),o.forEach(function(a){return e._removeIfDangle(a)})}},r.prototype.deleteCutEdges=function(){var t=this;this._computeNextCWEdges(),this._findLabeledEdgeRings(),this.edges.forEach(function(e){e.label===e.symetric.label&&(t.removeEdge(e.symetric),t.removeEdge(e))})},r.prototype._computeNextCWEdges=function(t){var e=this;typeof t==\\\"undefined\\\"?Object.keys(this.nodes).forEach(function(o){return e._computeNextCWEdges(e.nodes[o])}):t.getOuterEdges().forEach(function(o,a){t.getOuterEdge((a===0?t.getOuterEdges().length:a)-1).symetric.next=o})},r.prototype._computeNextCCWEdges=function(t,e){for(var o=t.getOuterEdges(),a,l,f=o.length-1;f>=0;--f){var h=o[f],p=h.symetric,d=void 0,g=void 0;h.label===e&&(d=h),p.label===e&&(g=p),!(!d||!g)&&(g&&(l=g),d&&(l&&(l.next=d,l=void 0),a||(a=d)))}l&&(l.next=a)},r.prototype._findLabeledEdgeRings=function(){var t=[],e=0;return this.edges.forEach(function(o){if(!(o.label>=0)){t.push(o);var a=o;do a.label=e,a=a.next;while(!o.isEqual(a));e++}}),t},r.prototype.getEdgeRings=function(){var t=this;this._computeNextCWEdges(),this.edges.forEach(function(o){o.label=void 0}),this._findLabeledEdgeRings().forEach(function(o){t._findIntersectionNodes(o).forEach(function(a){t._computeNextCCWEdges(a,o.label)})});var e=[];return this.edges.forEach(function(o){o.ring||e.push(t._findEdgeRing(o))}),e},r.prototype._findIntersectionNodes=function(t){var e=[],o=t,a=function(){var l=0;o.from.getOuterEdges().forEach(function(f){f.label===t.label&&++l}),l>1&&e.push(o.from),o=o.next};do a();while(!t.isEqual(o));return e},r.prototype._findEdgeRing=function(t){var e=t,o=new gd;do o.push(e),e.ring=o,e=e.next;while(!t.isEqual(e));return o},r.prototype.removeNode=function(t){var e=this;t.getOuterEdges().forEach(function(o){return e.removeEdge(o)}),t.innerEdges.forEach(function(o){return e.removeEdge(o)}),delete this.nodes[t.id]},r.prototype.removeEdge=function(t){this.edges=this.edges.filter(function(e){return!e.isEqual(t)}),t.deleteEdge()},r}();var UP=On(yd(),1);var BP=On(yd(),1);var kP=On(u_(),1);var YP=On(v_(),1);function x_(r){for(var t=r,e=[];t.parent;)e.unshift(t),t=t.parent;return e}function JP(){return new E_(function(r){return r.f})}var Ed={search:function(r,t,e,o){r.cleanDirty(),o=o||{};var a=o.heuristic||Ed.heuristics.manhattan,l=o.closest||!1,f=JP(),h=t;for(t.h=a(t,e),f.push(t);f.size()>0;){var p=f.pop();if(p===e)return x_(p);p.closed=!0;for(var d=r.neighbors(p),g=0,_=d.length;g<_;++g){var y=d[g];if(!(y.closed||y.isWall())){var M=p.g+y.getCost(p),w=y.visited;(!w||M<y.g)&&(y.visited=!0,y.parent=p,y.h=y.h||a(y,e),y.g=M,y.f=y.g+y.h,r.markDirty(y),l&&(y.h<h.h||y.h===h.h&&y.g<h.g)&&(h=y),w?f.rescoreElement(y):f.push(y))}}}return l?x_(h):[]},heuristics:{manhattan:function(r,t){var e=Math.abs(t.x-r.x),o=Math.abs(t.y-r.y);return e+o},diagonal:function(r,t){var e=1,o=Math.sqrt(2),a=Math.abs(t.x-r.x),l=Math.abs(t.y-r.y);return e*(a+l)+(o-2*e)*Math.min(a,l)}},cleanNode:function(r){r.f=0,r.g=0,r.h=0,r.visited=!1,r.closed=!1,r.parent=null}};function al(r,t){t=t||{},this.nodes=[],this.diagonal=!!t.diagonal,this.grid=[];for(var e=0;e<r.length;e++){this.grid[e]=[];for(var o=0,a=r[e];o<a.length;o++){var l=new nf(e,o,a[o]);this.grid[e][o]=l,this.nodes.push(l)}}this.init()}al.prototype.init=function(){this.dirtyNodes=[];for(var r=0;r<this.nodes.length;r++)Ed.cleanNode(this.nodes[r])};al.prototype.cleanDirty=function(){for(var r=0;r<this.dirtyNodes.length;r++)Ed.cleanNode(this.dirtyNodes[r]);this.dirtyNodes=[]};al.prototype.markDirty=function(r){this.dirtyNodes.push(r)};al.prototype.neighbors=function(r){var t=[],e=r.x,o=r.y,a=this.grid;return a[e-1]&&a[e-1][o]&&t.push(a[e-1][o]),a[e+1]&&a[e+1][o]&&t.push(a[e+1][o]),a[e]&&a[e][o-1]&&t.push(a[e][o-1]),a[e]&&a[e][o+1]&&t.push(a[e][o+1]),this.diagonal&&(a[e-1]&&a[e-1][o-1]&&t.push(a[e-1][o-1]),a[e+1]&&a[e+1][o-1]&&t.push(a[e+1][o-1]),a[e-1]&&a[e-1][o+1]&&t.push(a[e-1][o+1]),a[e+1]&&a[e+1][o+1]&&t.push(a[e+1][o+1])),t};al.prototype.toString=function(){for(var r=[],t=this.grid,e,o,a,l,f=0,h=t.length;f<h;f++){for(e=[],o=t[f],a=0,l=o.length;a<l;a++)e.push(o[a].weight);r.push(e.join(\\\" \\\"))}return r.join(`\\n`)};function nf(r,t,e){this.x=r,this.y=t,this.weight=e}nf.prototype.toString=function(){return\\\"[\\\"+this.x+\\\" \\\"+this.y+\\\"]\\\"};nf.prototype.getCost=function(r){return r&&r.x!==this.x&&r.y!==this.y?this.weight*1.41421:this.weight};nf.prototype.isWall=function(){return this.weight===0};function E_(r){this.content=[],this.scoreFunction=r}E_.prototype={push:function(r){this.content.push(r),this.sinkDown(this.content.length-1)},pop:function(){var r=this.content[0],t=this.content.pop();return this.content.length>0&&(this.content[0]=t,this.bubbleUp(0)),r},remove:function(r){var t=this.content.indexOf(r),e=this.content.pop();t!==this.content.length-1&&(this.content[t]=e,this.scoreFunction(e)<this.scoreFunction(r)?this.sinkDown(t):this.bubbleUp(t))},size:function(){return this.content.length},rescoreElement:function(r){this.sinkDown(this.content.indexOf(r))},sinkDown:function(r){for(var t=this.content[r];r>0;){var e=(r+1>>1)-1,o=this.content[e];if(this.scoreFunction(t)<this.scoreFunction(o))this.content[e]=t,this.content[r]=o,r=e;else break}},bubbleUp:function(r){for(var t=this.content.length,e=this.content[r],o=this.scoreFunction(e);;){var a=r+1<<1,l=a-1,f=null,h;if(l<t){var p=this.content[l];h=this.scoreFunction(p),h<o&&(f=l)}if(a<t){var d=this.content[a],g=this.scoreFunction(d);g<(f===null?o:h)&&(f=a)}if(f!==null)this.content[r]=this.content[f],this.content[f]=e,r=f;else break}}};function Md(){this._=null}function fu(r){r.U=r.C=r.L=r.R=r.P=r.N=null}Md.prototype={constructor:Md,insert:function(r,t){var e,o,a;if(r){if(t.P=r,t.N=r.N,r.N&&(r.N.P=t),r.N=t,r.R){for(r=r.R;r.L;)r=r.L;r.L=t}else r.R=t;e=r}else this._?(r=M_(this._),t.P=null,t.N=r,r.P=r.L=t,e=r):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,r=t;e&&e.C;)o=e.U,e===o.L?(a=o.R,a&&a.C?(e.C=a.C=!1,o.C=!0,r=o):(r===e.R&&(ul(this,e),r=e,e=r.U),e.C=!1,o.C=!0,ll(this,o))):(a=o.L,a&&a.C?(e.C=a.C=!1,o.C=!0,r=o):(r===e.L&&(ll(this,e),r=e,e=r.U),e.C=!1,o.C=!0,ul(this,o))),e=r.U;this._.C=!1},remove:function(r){r.N&&(r.N.P=r.P),r.P&&(r.P.N=r.N),r.N=r.P=null;var t=r.U,e,o=r.L,a=r.R,l,f;if(o?a?l=M_(a):l=o:l=a,t?t.L===r?t.L=l:t.R=l:this._=l,o&&a?(f=l.C,l.C=r.C,l.L=o,o.U=l,l!==a?(t=l.U,l.U=r.U,r=l.R,t.L=r,l.R=a,a.U=l):(l.U=t,t=l,r=l.R)):(f=r.C,r=l),r&&(r.U=t),!f){if(r&&r.C){r.C=!1;return}do{if(r===this._)break;if(r===t.L){if(e=t.R,e.C&&(e.C=!1,t.C=!0,ul(this,t),e=t.R),e.L&&e.L.C||e.R&&e.R.C){(!e.R||!e.R.C)&&(e.L.C=!1,e.C=!0,ll(this,e),e=t.R),e.C=t.C,t.C=e.R.C=!1,ul(this,t),r=this._;break}}else if(e=t.L,e.C&&(e.C=!1,t.C=!0,ll(this,t),e=t.L),e.L&&e.L.C||e.R&&e.R.C){(!e.L||!e.L.C)&&(e.R.C=!1,e.C=!0,ul(this,e),e=t.L),e.C=t.C,t.C=e.L.C=!1,ll(this,t),r=this._;break}e.C=!0,r=t,t=t.U}while(!r.C);r&&(r.C=!1)}}};function ul(r,t){var e=t,o=t.R,a=e.U;a?a.L===e?a.L=o:a.R=o:r._=o,o.U=a,e.U=o,e.R=o.L,e.R&&(e.R.U=e),o.L=e}function ll(r,t){var e=t,o=t.L,a=e.U;a?a.L===e?a.L=o:a.R=o:r._=o,o.U=a,e.U=o,e.L=o.R,e.L&&(e.L.U=e),o.R=e}function M_(r){for(;r.L;)r=r.L;return r}var Sd=Md;function hu(r,t,e,o){var a=[null,null],l=_r.push(a)-1;return a.left=r,a.right=t,e&&cl(a,r,t,e),o&&cl(a,t,r,o),Qr[r.index].halfedges.push(l),Qr[t.index].halfedges.push(l),a}function pu(r,t,e){var o=[t,e];return o.left=r,o}function cl(r,t,e,o){!r[0]&&!r[1]?(r[0]=o,r.left=t,r.right=e):r.left===e?r[1]=o:r[0]=o}function $P(r,t,e,o,a){var l=r[0],f=r[1],h=l[0],p=l[1],d=f[0],g=f[1],_=0,y=1,M=d-h,w=g-p,T;if(T=t-h,!(!M&&T>0)){if(T/=M,M<0){if(T<_)return;T<y&&(y=T)}else if(M>0){if(T>y)return;T>_&&(_=T)}if(T=o-h,!(!M&&T<0)){if(T/=M,M<0){if(T>y)return;T>_&&(_=T)}else if(M>0){if(T<_)return;T<y&&(y=T)}if(T=e-p,!(!w&&T>0)){if(T/=w,w<0){if(T<_)return;T<y&&(y=T)}else if(w>0){if(T>y)return;T>_&&(_=T)}if(T=a-p,!(!w&&T<0)){if(T/=w,w<0){if(T>y)return;T>_&&(_=T)}else if(w>0){if(T<_)return;T<y&&(y=T)}return!(_>0)&&!(y<1)||(_>0&&(r[0]=[h+_*M,p+_*w]),y<1&&(r[1]=[h+y*M,p+y*w])),!0}}}}}function KP(r,t,e,o,a){var l=r[1];if(l)return!0;var f=r[0],h=r.left,p=r.right,d=h[0],g=h[1],_=p[0],y=p[1],M=(d+_)/2,w=(g+y)/2,T,x;if(y===g){if(M<t||M>=o)return;if(d>_){if(!f)f=[M,e];else if(f[1]>=a)return;l=[M,a]}else{if(!f)f=[M,a];else if(f[1]<e)return;l=[M,e]}}else if(T=(d-_)/(y-g),x=w-T*M,T<-1||T>1)if(d>_){if(!f)f=[(e-x)/T,e];else if(f[1]>=a)return;l=[(a-x)/T,a]}else{if(!f)f=[(a-x)/T,a];else if(f[1]<e)return;l=[(e-x)/T,e]}else if(g<y){if(!f)f=[t,T*t+x];else if(f[0]>=o)return;l=[o,T*o+x]}else{if(!f)f=[o,T*o+x];else if(f[0]<t)return;l=[t,T*t+x]}return r[0]=f,r[1]=l,!0}function S_(r,t,e,o){for(var a=_r.length,l;a--;)(!KP(l=_r[a],r,t,e,o)||!$P(l,r,t,e,o)||!(Math.abs(l[0][0]-l[1][0])>yn||Math.abs(l[0][1]-l[1][1])>yn))&&delete _r[a]}function w_(r){return Qr[r.index]={site:r,halfedges:[]}}function jP(r,t){var e=r.site,o=t.left,a=t.right;return e===a&&(a=o,o=e),a?Math.atan2(a[1]-o[1],a[0]-o[0]):(e===o?(o=t[1],a=t[0]):(o=t[0],a=t[1]),Math.atan2(o[0]-a[0],a[1]-o[1]))}function wd(r,t){return t[+(t.left!==r.site)]}function QP(r,t){return t[+(t.left===r.site)]}function b_(){for(var r=0,t=Qr.length,e,o,a,l;r<t;++r)if((e=Qr[r])&&(l=(o=e.halfedges).length)){var f=new Array(l),h=new Array(l);for(a=0;a<l;++a)f[a]=a,h[a]=jP(e,_r[o[a]]);for(f.sort(function(p,d){return h[d]-h[p]}),a=0;a<l;++a)h[a]=o[f[a]];for(a=0;a<l;++a)o[a]=h[a]}}function T_(r,t,e,o){var a=Qr.length,l,f,h,p,d,g,_,y,M,w,T,x,v=!0;for(l=0;l<a;++l)if(f=Qr[l]){for(h=f.site,d=f.halfedges,p=d.length;p--;)_r[d[p]]||d.splice(p,1);for(p=0,g=d.length;p<g;)w=QP(f,_r[d[p]]),T=w[0],x=w[1],_=wd(f,_r[d[++p%g]]),y=_[0],M=_[1],(Math.abs(T-y)>yn||Math.abs(x-M)>yn)&&(d.splice(p,0,_r.push(pu(h,w,Math.abs(T-r)<yn&&o-x>yn?[r,Math.abs(y-r)<yn?M:o]:Math.abs(x-o)<yn&&e-T>yn?[Math.abs(M-o)<yn?y:e,o]:Math.abs(T-e)<yn&&x-t>yn?[e,Math.abs(y-e)<yn?M:t]:Math.abs(x-t)<yn&&T-r>yn?[Math.abs(M-t)<yn?y:r,t]:null))-1),++g);g&&(v=!1)}if(v){var C,S,O,F=1/0;for(l=0,v=null;l<a;++l)(f=Qr[l])&&(h=f.site,C=h[0]-r,S=h[1]-t,O=C*C+S*S,O<F&&(F=O,v=f));if(v){var G=[r,t],z=[r,o],L=[e,o],D=[e,t];v.halfedges.push(_r.push(pu(h=v.site,G,z))-1,_r.push(pu(h,z,L))-1,_r.push(pu(h,L,D))-1,_r.push(pu(h,D,G))-1)}}for(l=0;l<a;++l)(f=Qr[l])&&(f.halfedges.length||delete Qr[l])}var A_=[],rf;function tI(){fu(this),this.x=this.y=this.arc=this.site=this.cy=null}function ea(r){var t=r.P,e=r.N;if(!(!t||!e)){var o=t.site,a=r.site,l=e.site;if(o!==l){var f=a[0],h=a[1],p=o[0]-f,d=o[1]-h,g=l[0]-f,_=l[1]-h,y=2*(p*_-d*g);if(!(y>=-C_)){var M=p*p+d*d,w=g*g+_*_,T=(_*M-d*w)/y,x=(p*w-g*M)/y,v=A_.pop()||new tI;v.arc=r,v.site=a,v.x=T+f,v.y=(v.cy=x+h)+Math.sqrt(T*T+x*x),r.circle=v;for(var C=null,S=du._;S;)if(v.y<S.y||v.y===S.y&&v.x<=S.x)if(S.L)S=S.L;else{C=S.P;break}else if(S.R)S=S.R;else{C=S;break}du.insert(C,v),C||(rf=v)}}}}function na(r){var t=r.circle;t&&(t.P||(rf=t.N),du.remove(t),A_.push(t),fu(t),r.circle=null)}var I_=[];function eI(){fu(this),this.edge=this.site=this.circle=null}function P_(r){var t=I_.pop()||new eI;return t.site=r,t}function bd(r){na(r),ra.remove(r),I_.push(r),fu(r)}function R_(r){var t=r.circle,e=t.x,o=t.cy,a=[e,o],l=r.P,f=r.N,h=[r];bd(r);for(var p=l;p.circle&&Math.abs(e-p.circle.x)<yn&&Math.abs(o-p.circle.cy)<yn;)l=p.P,h.unshift(p),bd(p),p=l;h.unshift(p),na(p);for(var d=f;d.circle&&Math.abs(e-d.circle.x)<yn&&Math.abs(o-d.circle.cy)<yn;)f=d.N,h.push(d),bd(d),d=f;h.push(d),na(d);var g=h.length,_;for(_=1;_<g;++_)d=h[_],p=h[_-1],cl(d.edge,p.site,d.site,a);p=h[0],d=h[g-1],d.edge=hu(p.site,d.site,null,a),ea(p),ea(d)}function L_(r){for(var t=r[0],e=r[1],o,a,l,f,h=ra._;h;)if(l=N_(h,e)-t,l>yn)h=h.L;else if(f=t-nI(h,e),f>yn){if(!h.R){o=h;break}h=h.R}else{l>-yn?(o=h.P,a=h):f>-yn?(o=h,a=h.N):o=a=h;break}w_(r);var p=P_(r);if(ra.insert(o,p),!(!o&&!a)){if(o===a){na(o),a=P_(o.site),ra.insert(p,a),p.edge=a.edge=hu(o.site,p.site),ea(o),ea(a);return}if(!a){p.edge=hu(o.site,p.site);return}na(o),na(a);var d=o.site,g=d[0],_=d[1],y=r[0]-g,M=r[1]-_,w=a.site,T=w[0]-g,x=w[1]-_,v=2*(y*x-M*T),C=y*y+M*M,S=T*T+x*x,O=[(x*C-M*S)/v+g,(y*S-T*C)/v+_];cl(a.edge,d,w,O),p.edge=hu(d,r,null,O),a.edge=hu(r,w,null,O),ea(o),ea(a)}}function N_(r,t){var e=r.site,o=e[0],a=e[1],l=a-t;if(!l)return o;var f=r.P;if(!f)return-1/0;e=f.site;var h=e[0],p=e[1],d=p-t;if(!d)return h;var g=h-o,_=1/l-1/d,y=g/d;return _?(-y+Math.sqrt(y*y-2*_*(g*g/(-2*d)-p+d/2+a-l/2)))/_+o:(o+h)/2}function nI(r,t){var e=r.N;if(e)return N_(e,t);var o=r.site;return o[1]===t?o[0]:1/0}var yn=1e-6,C_=1e-12,ra,Qr,du,_r;function rI(r,t,e){return(r[0]-e[0])*(t[1]-r[1])-(r[0]-t[0])*(e[1]-r[1])}function iI(r,t){return t[1]-r[1]||t[0]-r[0]}function of(r,t){var e=r.sort(iI).pop(),o,a,l;for(_r=[],Qr=new Array(r.length),ra=new Sd,du=new Sd;;)if(l=rf,e&&(!l||e[1]<l.y||e[1]===l.y&&e[0]<l.x))(e[0]!==o||e[1]!==a)&&(L_(e),o=e[0],a=e[1]),e=r.pop();else if(l)R_(l.arc);else break;if(b_(),t){var f=+t[0][0],h=+t[0][1],p=+t[1][0],d=+t[1][1];S_(f,h,p,d),T_(f,h,p,d)}this.edges=_r,this.cells=Qr,ra=du=_r=Qr=null}of.prototype={constructor:of,polygons:function(){var r=this.edges;return this.cells.map(function(t){var e=t.halfedges.map(function(o){return wd(t,r[o])});return e.data=t.site.data,e})},triangles:function(){var r=[],t=this.edges;return this.cells.forEach(function(e,o){if(h=(l=e.halfedges).length)for(var a=e.site,l,f=-1,h,p,d=t[l[h-1]],g=d.left===a?d.right:d.left;++f<h;)p=g,d=t[l[f]],g=d.left===a?d.right:d.left,p&&g&&o<p.index&&o<g.index&&rI(a,p,g)<0&&r.push([a.data,p.data,g.data])}),r},links:function(){return this.edges.filter(function(r){return r.right}).map(function(r){return{source:r.left.data,target:r.right.data}})},find:function(r,t,e){for(var o=this,a,l=o._found||0,f=o.cells.length,h;!(h=o.cells[l]);)if(++l>=f)return null;var p=r-h.site[0],d=t-h.site[1],g=p*p+d*d;do h=o.cells[a=l],l=null,h.halfedges.forEach(function(_){var y=o.edges[_],M=y.left;if(!((M===h.site||!M)&&!(M=y.right))){var w=r-M[0],T=t-M[1],x=w*w+T*T;x<g&&(g=x,l=M.index)}});while(l!==null);return o._found=a,e==null||g<=e*e?h.site:null}};var hI=On(mu(),1);var kd=On(U_(),1);function ci(){return new uf}function uf(){this.reset()}uf.prototype={constructor:uf,reset:function(){this.s=this.t=0},add:function(r){B_(af,r,this.t),B_(this,af.s,this.s),this.s?this.t+=af.t:this.s=af.t},valueOf:function(){return this.s}};var af=new uf;function B_(r,t,e){var o=r.s=t+e,a=o-t,l=o-a;r.t=t-l+(e-a)}var cn=1e-6;var dn=Math.PI,or=dn/2,lf=dn/4,vo=dn*2,ia=180/dn,fi=dn/180,Bn=Math.abs,eo=Math.atan,hi=Math.atan2,en=Math.cos;var cf=Math.exp;var fl=Math.log;var ye=Math.sin;var Ir=Math.sqrt,hl=Math.tan;function Cd(r){return r>1?0:r<-1?dn:Math.acos(r)}function ti(r){return r>1?or:r<-1?-or:Math.asin(r)}function no(){}var pI=ci(),Yk=ci();function oa(r){var t=r[0],e=r[1],o=en(e);return[o*en(t),o*ye(t),ye(e)]}function pl(r,t){return[r[1]*t[2]-r[2]*t[1],r[2]*t[0]-r[0]*t[2],r[0]*t[1]-r[1]*t[0]]}function dl(r){var t=Ir(r[0]*r[0]+r[1]*r[1]+r[2]*r[2]);r[0]/=t,r[1]/=t,r[2]/=t}var r4=ci();function k_(r,t){return[r>dn?r-vo:r<-dn?r+vo:r,t]}k_.invert=k_;function Pd(){var r=[],t;return{point:function(e,o){t.push([e,o])},lineStart:function(){r.push(t=[])},lineEnd:no,rejoin:function(){r.length>1&&r.push(r.pop().concat(r.shift()))},result:function(){var e=r;return r=[],t=null,e}}}function Id(r,t){return Bn(r[0]-t[0])<cn&&Bn(r[1]-t[1])<cn}function ff(r,t,e,o){this.x=r,this.z=t,this.o=e,this.e=o,this.v=!1,this.n=this.p=null}function Rd(r,t,e,o,a){var l=[],f=[],h,p;if(r.forEach(function(w){if(!((T=w.length-1)<=0)){var T,x=w[0],v=w[T],C;if(Id(x,v)){for(a.lineStart(),h=0;h<T;++h)a.point((x=w[h])[0],x[1]);a.lineEnd();return}l.push(C=new ff(x,w,null,!0)),f.push(C.o=new ff(x,null,C,!1)),l.push(C=new ff(v,w,null,!1)),f.push(C.o=new ff(v,null,C,!0))}}),!!l.length){for(f.sort(t),G_(l),G_(f),h=0,p=f.length;h<p;++h)f[h].e=e=!e;for(var d=l[0],g,_;;){for(var y=d,M=!0;y.v;)if((y=y.n)===d)return;g=y.z,a.lineStart();do{if(y.v=y.o.v=!0,y.e){if(M)for(h=0,p=g.length;h<p;++h)a.point((_=g[h])[0],_[1]);else o(y.x,y.n.x,1,a);y=y.n}else{if(M)for(g=y.p.z,h=g.length-1;h>=0;--h)a.point((_=g[h])[0],_[1]);else o(y.x,y.p.x,-1,a);y=y.p}y=y.o,g=y.z,M=!M}while(!y.v);a.lineEnd()}}}function G_(r){if(t=r.length){for(var t,e=0,o=r[0],a;++e<t;)o.n=a=r[e],a.p=o,o=a;o.n=a=r[0],a.p=o}}function Ss(r,t){return r<t?-1:r>t?1:r>=t?0:NaN}function Ld(r){return r.length===1&&(r=gI(r)),{left:function(t,e,o,a){for(o==null&&(o=0),a==null&&(a=t.length);o<a;){var l=o+a>>>1;r(t[l],e)<0?o=l+1:a=l}return o},right:function(t,e,o,a){for(o==null&&(o=0),a==null&&(a=t.length);o<a;){var l=o+a>>>1;r(t[l],e)>0?a=l:o=l+1}return o}}}function gI(r){return function(t,e){return Ss(r(t),e)}}var V_=Ld(Ss),yI=V_.right,vI=V_.left;var H_=Array.prototype,xI=H_.slice,EI=H_.map;var J4=Math.sqrt(50),$4=Math.sqrt(10),K4=Math.sqrt(2);function pf(r){for(var t=r.length,e,o=-1,a=0,l,f;++o<t;)a+=r[o].length;for(l=new Array(a);--t>=0;)for(f=r[t],e=f.length;--e>=0;)l[--a]=f[e];return l}var PI=1e9,O5=-PI;var Nd=ci();function Od(r,t){var e=t[0],o=t[1],a=[ye(e),-en(e),0],l=0,f=0;Nd.reset();for(var h=0,p=r.length;h<p;++h)if(g=(d=r[h]).length)for(var d,g,_=d[g-1],y=_[0],M=_[1]/2+lf,w=ye(M),T=en(M),x=0;x<g;++x,y=C,w=O,T=F,_=v){var v=d[x],C=v[0],S=v[1]/2+lf,O=ye(S),F=en(S),G=C-y,z=G>=0?1:-1,L=z*G,D=L>dn,q=w*O;if(Nd.add(hi(q*z*ye(L),T*F+q*en(L))),l+=D?G+z*vo:G,D^y>=e^C>=e){var nt=pl(oa(_),oa(v));dl(nt);var k=pl(a,nt);dl(k);var xt=(D^G>=0?-1:1)*ti(k[2]);(o>xt||o===xt&&(nt[0]||nt[1]))&&(f+=D^G>=0?1:-1)}}return(l<-cn||l<cn&&Nd<-cn)^f&1}var W5=ci();var lV=ci(),cV=ci();var LI=1/0;var pV=-LI;function Dd(r){this._context=r}Dd.prototype={_radius:4.5,pointRadius:function(r){return this._radius=r,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){this._line===0&&this._context.closePath(),this._point=NaN},point:function(r,t){switch(this._point){case 0:{this._context.moveTo(r,t),this._point=1;break}case 1:{this._context.lineTo(r,t);break}default:{this._context.moveTo(r+this._radius,t),this._context.arc(r,t,this._radius,0,vo);break}}},result:no};var SV=ci();function Fd(){this._string=[]}Fd.prototype={_radius:4.5,_circle:X_(4.5),pointRadius:function(r){return(r=+r)!==this._radius&&(this._radius=r,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){this._line===0&&this._string.push(\\\"Z\\\"),this._point=NaN},point:function(r,t){switch(this._point){case 0:{this._string.push(\\\"M\\\",r,\\\",\\\",t),this._point=1;break}case 1:{this._string.push(\\\"L\\\",r,\\\",\\\",t);break}default:{this._circle==null&&(this._circle=X_(this._radius)),this._string.push(\\\"M\\\",r,\\\",\\\",t,this._circle);break}}},result:function(){if(this._string.length){var r=this._string.join(\\\"\\\");return this._string=[],r}else return null}};function X_(r){return\\\"m0,\\\"+r+\\\"a\\\"+r+\\\",\\\"+r+\\\" 0 1,1 0,\\\"+-2*r+\\\"a\\\"+r+\\\",\\\"+r+\\\" 0 1,1 0,\\\"+2*r+\\\"z\\\"}function Ud(r,t,e,o){return function(a,l){var f=t(l),h=a.invert(o[0],o[1]),p=Pd(),d=t(p),g=!1,_,y,M,w={point:T,lineStart:v,lineEnd:C,polygonStart:function(){w.point=S,w.lineStart=O,w.lineEnd=F,y=[],_=[]},polygonEnd:function(){w.point=T,w.lineStart=v,w.lineEnd=C,y=pf(y);var G=Od(_,h);y.length?(g||(l.polygonStart(),g=!0),Rd(y,DI,G,e,l)):G&&(g||(l.polygonStart(),g=!0),l.lineStart(),e(null,null,1,l),l.lineEnd()),g&&(l.polygonEnd(),g=!1),y=_=null},sphere:function(){l.polygonStart(),l.lineStart(),e(null,null,1,l),l.lineEnd(),l.polygonEnd()}};function T(G,z){var L=a(G,z);r(G=L[0],z=L[1])&&l.point(G,z)}function x(G,z){var L=a(G,z);f.point(L[0],L[1])}function v(){w.point=x,f.lineStart()}function C(){w.point=T,f.lineEnd()}function S(G,z){M.push([G,z]);var L=a(G,z);d.point(L[0],L[1])}function O(){d.lineStart(),M=[]}function F(){S(M[0][0],M[0][1]),d.lineEnd();var G=d.clean(),z=p.result(),L,D=z.length,q,nt,k;if(M.pop(),_.push(M),M=null,!!D){if(G&1){if(nt=z[0],(q=nt.length-1)>0){for(g||(l.polygonStart(),g=!0),l.lineStart(),L=0;L<q;++L)l.point((k=nt[L])[0],k[1]);l.lineEnd()}return}D>1&&G&2&&z.push(z.pop().concat(z.shift())),y.push(z.filter(OI))}}return w}}function OI(r){return r.length>1}function DI(r,t){return((r=r.x)[0]<0?r[1]-or-cn:or-r[1])-((t=t.x)[0]<0?t[1]-or-cn:or-t[1])}var FI=Ud(function(){return!0},UI,zI,[-dn,-or]);function UI(r){var t=NaN,e=NaN,o=NaN,a;return{lineStart:function(){r.lineStart(),a=1},point:function(l,f){var h=l>0?dn:-dn,p=Bn(l-t);Bn(p-dn)<cn?(r.point(t,e=(e+f)/2>0?or:-or),r.point(o,e),r.lineEnd(),r.lineStart(),r.point(h,e),r.point(l,e),a=0):o!==h&&p>=dn&&(Bn(t-o)<cn&&(t-=o*cn),Bn(l-h)<cn&&(l-=h*cn),e=BI(t,e,l,f),r.point(o,e),r.lineEnd(),r.lineStart(),r.point(h,e),a=0),r.point(t=l,e=f),o=h},lineEnd:function(){r.lineEnd(),t=e=NaN},clean:function(){return 2-a}}}function BI(r,t,e,o){var a,l,f=ye(r-e);return Bn(f)>cn?eo((ye(t)*(l=en(o))*ye(e)-ye(o)*(a=en(t))*ye(r))/(a*l*f)):(t+o)/2}function zI(r,t,e,o){var a;if(r==null)a=e*or,o.point(-dn,a),o.point(0,a),o.point(dn,a),o.point(dn,0),o.point(dn,-a),o.point(0,-a),o.point(-dn,-a),o.point(-dn,0),o.point(-dn,a);else if(Bn(r[0]-t[0])>cn){var l=r[0]<t[0]?dn:-dn;a=e*l/2,o.point(-l,a),o.point(0,a),o.point(l,a)}else o.point(t[0],t[1])}function df(r){return function(t){var e=new Bd;for(var o in r)e[o]=r[o];return e.stream=t,e}}function Bd(){}Bd.prototype={constructor:Bd,point:function(r,t){this.stream.point(r,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var cH=en(30*fi);var wH=df({point:function(r,t){this.stream.point(r*fi,t*fi)}});function mf(r){return function(t,e){var o=en(t),a=en(e),l=r(o*a);return[l*a*ye(t),l*ye(e)]}}function _o(r){return function(t,e){var o=Ir(t*t+e*e),a=r(o),l=ye(a),f=en(a);return[hi(t*l,o*f),ti(o&&e*l/o)]}}var Q_=mf(function(r){return Ir(2/(1+r))});Q_.invert=_o(function(r){return 2*ti(r/2)});var t1=mf(function(r){return(r=Cd(r))&&r/ye(r)});t1.invert=_o(function(r){return r});function zd(r,t){return[r,fl(hl((or+t)/2))]}zd.invert=function(r,t){return[r,2*eo(cf(t))-or]};function gf(r,t){return[r,t]}gf.invert=gf;function e1(r,t){var e=en(t),o=en(r)*e;return[e*ye(r)/o,ye(t)/o]}e1.invert=_o(eo);function n1(r,t){var e=t*t,o=e*e;return[r*(.8707-.131979*e+o*(-.013791+o*(.003971*e-.001529*o))),t*(1.007226+e*(.015085+o*(-.044475+.028874*e-.005916*o)))]}n1.invert=function(r,t){var e=t,o=25,a;do{var l=e*e,f=l*l;e-=a=(e*(1.007226+l*(.015085+f*(-.044475+.028874*l-.005916*f)))-t)/(1.007226+l*(.015085*3+f*(-.044475*7+.028874*9*l-.005916*11*f)))}while(Bn(a)>cn&&--o>0);return[r/(.8707+(l=e*e)*(-.131979+l*(-.013791+l*l*l*(.003971-.001529*l)))),e]};function r1(r,t){return[en(t)*ye(r),ye(t)]}r1.invert=_o(ti);function i1(r,t){var e=en(t),o=1+en(r)*e;return[e*ye(r)/o,ye(t)/o]}i1.invert=_o(function(r){return 2*eo(r)});function o1(r,t){return[fl(hl((or+t)/2)),-r]}o1.invert=function(r,t){return[-t,2*eo(cf(r))-or]};var qI=On(mu(),1);var XI=On(mu(),1);var ZI=On(mu(),1);var JI=On(mu(),1);function bs(r,t){return Math.sqrt((t[0]-r[0])**2+(t[1]-r[1])**2)}function a1(r){let t=0;for(let e=0;e<r.length-1;e++)t+=bs(r[e],r[e+1]);return t}function u1(r,t,e){let o=new fn(t[0]-r[0],t[1]-r[1]),a=new fn(t[0]-e[0],t[1]-e[1]),f=o.angleTo(a)*180/Math.PI,h=new fn(t[0]-r[0],t[1]-r[1]);return new fn(e[0]-r[0],e[1]-r[1]).cross(h)>0?f:-f}function oR(r,t,e){let o=u1(r,t,e);return 180-Math.abs(o)<15?\\\"front\\\":o>135?\\\"right_front\\\":o<-135?\\\"left_front\\\":o<=135&&o>=60?\\\"right\\\":o>=-135&&o<=-60?\\\"left\\\":o<60&&o>0?\\\"right_back\\\":o>-60&&o<0?\\\"left_back\\\":\\\"front\\\"}function l1(r){let t=[{direction:\\\"start\\\",distance:bs(r[0],r[1]),points:[r[0],r[1]]}];for(let e=2;e<r.length;e++){let o=oR(r[e-2],r[e-1],r[e]);if(o===\\\"front\\\"){let a=t[t.length-1],l=bs(r[e-1],r[e]);a.distance+=l,e!==2&&a.points.push(r[e-1])}else t.push({direction:o,distance:bs(r[e-1],r[e]),points:[r[e-1],r[e]]})}return t.push({direction:\\\"end\\\",distance:0,points:[r[r.length-1]]}),t}var xo=On(w1(),1);var yf=class{constructor(t=3){this.lift_priority=t;si(this,\\\"roadInfo\\\",[]);si(this,\\\"pointMap\\\",new Map);si(this,\\\"nodeMap\\\",new Map);si(this,\\\"facilityMap\\\",new Map);si(this,\\\"straightLadderMap\\\",new Map);si(this,\\\"escalatorMap\\\",new Map);si(this,\\\"staircaseMap\\\",new Map);si(this,\\\"lineMap\\\",new Map);si(this,\\\"baseRoute\\\",new xo.default);si(this,\\\"escalatorRoute\\\",new xo.default);si(this,\\\"straightLadderRoute\\\",new xo.default)}initRoute(t){this.clear(),this.roadInfo=t,t.length&&(t.forEach(e=>{e.points.forEach(o=>{let a=`${e.floor}-${o.id}`;if(this.pointMap.set(a,o),this.nodeMap.set(`${o.floor}-${o.nodeId}`,a),o.type===\\\"straightLadder\\\"){let l=this.straightLadderMap.get(o.name)||[];l.push(bl({},o)),this.straightLadderMap.set(o.name,l)}if(o.type===\\\"staircase\\\"){let l=this.staircaseMap.get(o.name)||[];l.push(bl({},o)),this.staircaseMap.set(o.name,l)}if(o.type===\\\"escalator\\\"){let l=this.escalatorMap.get(o.name)||{};o.escalatorDirection===\\\"exit\\\"?l.end={floor:o.floor,id:o.id}:l.start={floor:o.floor,id:o.id},this.escalatorMap.set(o.name,l)}if(o.type===\\\"facility\\\"){let l=this.facilityMap.get(o.targetId)||[];l.push(bl({},o)),this.facilityMap.set(o.targetId,l)}}),e.lines.filter(o=>o.direction!==\\\"no\\\").forEach(o=>{var p,d;let a=`${e.floor}-${o.from}`,l=`${e.floor}-${o.to}`,f=(p=this.pointMap.get(a))==null?void 0:p.cds,h=(d=this.pointMap.get(l))==null?void 0:d.cds;if(f!=null&&f.length&&(h!=null&&h.length)){let g=bs(f,h);this.addLineItem(a,l,g),o.direction===\\\"double\\\"&&this.addLineItem(l,a,g)}})}),this.initBaseRoute(),this.initEscalatorRoute(),this.initStraightLadderRoute())}addLineItem(t,e,o,a=this.lineMap){let l=a.get(t)||new Map;l.set(e,o),a.set(t,l)}addFacilityToLineMap(t,e,o,a){[...this.straightLadderMap,...this.staircaseMap].forEach(([l,f])=>{var h,p;if(!(f.length<2))for(let d=0;d<f.length;d++){let g=`${f[d].floor}-${f[d].id}`;for(let _=0;_<f.length;_++)if(d!==_){let y=`${f[_].floor}-${f[_].id}`,M=(h=this.pointMap.get(g))==null?void 0:h.cds,w=(p=this.pointMap.get(y))==null?void 0:p.cds;if(M!=null&&M.length&&(w!=null&&w.length))if(f[d].type===\\\"straightLadder\\\"){let T=e;this.addLineItem(g,y,T,a)}else{let T=o;this.addLineItem(g,y,T,a)}}}}),this.escalatorMap.forEach((l,f)=>{var h,p;if(l.start&&l.end){let d=`${l.start.floor}-${l.start.id}`,g=`${l.end.floor}-${l.end.id}`,_=(h=this.pointMap.get(d))==null?void 0:h.cds,y=(p=this.pointMap.get(g))==null?void 0:p.cds;if(_!=null&&_.length&&(y!=null&&y.length)){let M=t;this.addLineItem(d,g,M,a)}}})}initBaseRoute(){let t=new Map([...this.lineMap]);this.addFacilityToLineMap(1,this.lift_priority,3e4,t),this.baseRoute=new xo.default(t)}initEscalatorRoute(){let t=new Map([...this.lineMap]),e=1e4;this.addFacilityToLineMap(1*e,this.lift_priority*e,3e4*e,t),this.escalatorRoute=new xo.default(t)}initStraightLadderRoute(){let t=new Map([...this.lineMap]),e=1e4;this.addFacilityToLineMap(3*e,1*e,3e4*e,t),this.straightLadderRoute=new xo.default(t)}checkStart(t){return!(!t.floor||!t.nodeId&&(!t.coord||t.coord.length<2))}checkEnd(t){return t.facility?!0:this.checkStart(t)}transformStart(t){var e;if(t.nodeId){let o=this.nodeMap.get(`${t.floor}-${t.nodeId}`);if(o){let[a,l]=o.split(\\\"-\\\");return{floor:a,id:l}}}if((e=t.coord)!=null&&e.length){let o=this.roadInfo.find(l=>l.floor===t.floor);if(!o)return null;let a=o.points.reduce((l,f)=>{let h=bs(t.coord,f.cds);return h<l.min&&(l.min=h,l.point=f),l},{min:1/0,point:o.points[0]});return{floor:a.point.floor,id:a.point.id}}return null}transformEnd(t){if(t.floor){let e=this.transformStart(t);if(e)return e}if(t.facility){let e=this.facilityMap.get(t.facility);if(e!=null&&e.length)return{floor:t.floor,facility:t.facility}}return null}getPath(t,e,o=\\\"\\\"){if(!this.checkStart(t))return\\\"start-error\\\";if(!this.checkEnd(e))return\\\"end-error\\\";let a=this.transformStart(t);if(!a)return\\\"no-start\\\";let l=this.transformEnd(e);if(!l)return\\\"no-end\\\";let f=this.getBasePath.bind(this);switch(o){case\\\"escalator\\\":f=this.getEscalatorPath.bind(this);case\\\"straightLadder\\\":f=this.getStraightLadderPath.bind(this);default:f=this.getBasePath.bind(this)}if(l.id)return f(a,l);if(l.facility){let h=this.facilityMap.get(l.facility).filter(d=>l.floor?d.floor===l.floor:!0);if(!h.length)return null;let p=h.map(d=>f(a,{floor:d.floor,id:d.id})).filter(d=>!!d);return p.reduce((d,g)=>{let _=g.reduce((y,M)=>y+a1(M.points),0);return _<d.distance&&(d.distance=_,d.path=g),d},{distance:1/0,path:p[0]}).path}}getRoutePath(t,e,o){let a=`${t.floor}-${t.id}`,l=`${e.floor}-${e.id}`,f=o.path(a,l);if(!f)return null;let h=[];return f.map(p=>{var g;let d=this.pointMap.get(p);if(d){let{floor:_}=d;if(((g=h[h.length-1])==null?void 0:g.floor)===_){let y=h[h.length-1];y.points.push(d.cds),y.endType=d.type,y.destId=d.nodeId}else h.push({floor:_,points:[d.cds],endType:d.type,destId:d.nodeId})}}),h}getBasePath(t,e){return this.getRoutePath(t,e,this.baseRoute)}getEscalatorPath(t,e){return this.getRoutePath(t,e,this.escalatorRoute)}getStraightLadderPath(t,e){return this.getRoutePath(t,e,this.straightLadderRoute)}clear(){this.roadInfo=[],this.pointMap.clear(),this.nodeMap.clear(),this.facilityMap.clear(),this.straightLadderMap.clear(),this.escalatorMap.clear(),this.staircaseMap.clear(),this.lineMap.clear(),this.baseRoute=new xo.default,this.escalatorRoute=new xo.default,this.straightLadderRoute=new xo.default}};function b1(r){return r.replace(/[A-Z]/g,t=>\\\"_\\\"+t.toLowerCase()).replace(/^_/,\\\"\\\")}var vf=class r{constructor(){si(this,\\\"keySet\\\",new Set)}static createKey(){return Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15)}genUniqueKey(){let t=r.createKey();for(;this.keySet.has(t);)t=r.createKey();return t}removeKey(t){this.keySet.delete(t)}dispose(){this.keySet.clear()}};var W9=new vf;function T1(r){let t={};for(let o in r)o.startsWith(\\\"on\\\")&&(t[b1(o.slice(2))]=r[o]);let e=async({data:o})=>{if(t[o.type])try{let a=await t[o.type](o.data);self.postMessage({type:`${o.type}_result`,key:o.key,data:a})}catch(a){self.postMessage({type:`${o.type}_result`,key:o.key,error:a})}else self.postMessage({type:`${o.type}_result`,key:o.key,error:\\\"no_event\\\"})};return self.addEventListener(\\\"message\\\",e),()=>{self.removeEventListener(\\\"message\\\",e)}}var Hd=new yf;T1({onLoadRoad:async r=>{let e=(await hm(r.url,r)).data.map(o=>JSON.parse(o.road_info));return Hd.initRoute(e),e},onSetRoadInfo(r){Hd.initRoute(r)},onGetPath({start:r,end:t,type:e}){return Hd.getPath(r,t,e)},onGetDirectionPath(r){return l1(r)}});\\n/*! Bundled license information:\\n\\nobject-assign/index.js:\\n (*\\n object-assign\\n (c) Sindre Sorhus\\n @license MIT\\n *)\\n\\npolygon-clipping/dist/polygon-clipping.umd.js:\\n (**\\n * splaytree v3.1.0\\n * Fast Splay tree for Node and browser\\n *\\n * @author Alexander Milevski <info@w8r.name>\\n * @license MIT\\n * @preserve\\n *)\\n\\nthree/build/three.module.js:\\n (**\\n * @license\\n * Copyright 2010-2023 Three.js Authors\\n * SPDX-License-Identifier: MIT\\n *)\\n\\n@turf/isolines/dist/es/index.js:\\n (**\\n * @license GNU Affero General Public License.\\n * Copyright (c) 2015, 2015 Ronny Lorenz <ronny@tbi.univie.ac.at>\\n * v. 1.2.0\\n * https://github.com/RaumZeit/MarchingSquares.js\\n *\\n * MarchingSquaresJS is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as published by\\n * the Free Software Foundation, either version 3 of the License, or\\n * (at your option) any later version.\\n *\\n * MarchingSquaresJS is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * As additional permission under GNU Affero General Public License version 3\\n * section 7, third-party projects (personal or commercial) may distribute,\\n * include, or link against UNMODIFIED VERSIONS of MarchingSquaresJS without the\\n * requirement that said third-party project for that reason alone becomes\\n * subject to any requirement of the GNU Affero General Public License version 3.\\n * Any modifications to MarchingSquaresJS, however, must be shared with the public\\n * and made available.\\n *\\n * In summary this:\\n * - allows you to use MarchingSquaresJS at no cost\\n * - allows you to use MarchingSquaresJS for both personal and commercial purposes\\n * - allows you to distribute UNMODIFIED VERSIONS of MarchingSquaresJS under any\\n * license as long as this license notice is included\\n * - enables you to keep the source code of your program that uses MarchingSquaresJS\\n * undisclosed\\n * - forces you to share any modifications you have made to MarchingSquaresJS,\\n * e.g. bug-fixes\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with MarchingSquaresJS. If not, see <http://www.gnu.org/licenses/>.\\n *)\\n\\n@turf/isobands/dist/es/index.js:\\n (*!\\n * @license GNU Affero General Public License.\\n * Copyright (c) 2015, 2015 Ronny Lorenz <ronny@tbi.univie.ac.at>\\n * v. 1.2.0\\n * https://github.com/RaumZeit/MarchingSquares.js\\n *\\n * MarchingSquaresJS is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as published by\\n * the Free Software Foundation, either version 3 of the License, or\\n * (at your option) any later version.\\n *\\n * MarchingSquaresJS is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * As additional permission under GNU Affero General Public License version 3\\n * section 7, third-party projects (personal or commercial) may distribute,\\n * include, or link against UNMODIFIED VERSIONS of MarchingSquaresJS without the\\n * requirement that said third-party project for that reason alone becomes\\n * subject to any requirement of the GNU Affero General Public License version 3.\\n * Any modifications to MarchingSquaresJS, however, must be shared with the public\\n * and made available.\\n *\\n * In summary this:\\n * - allows you to use MarchingSquaresJS at no cost\\n * - allows you to use MarchingSquaresJS for both personal and commercial purposes\\n * - allows you to distribute UNMODIFIED VERSIONS of MarchingSquaresJS under any\\n * license as long as this license notice is included\\n * - enables you to keep the source code of your program that uses MarchingSquaresJS\\n * undisclosed\\n * - forces you to share any modifications you have made to MarchingSquaresJS,\\n * e.g. bug-fixes\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with MarchingSquaresJS. If not, see <http://www.gnu.org/licenses/>.\\n *)\\n*/\\n\");\n}\n", "import {\n Mesh,\n Object3D,\n TextureLoader,\n Color,\n Vector2,\n Vector3,\n NormalBlending,\n RepeatWrapping,\n Texture,\n} from \"three\";\nimport { Navigation } from \"./navigation\";\n// @ts-ignore\nimport { MeshLine, MeshLineMaterial } from \"../../external/meshLine\";\nimport Arrow from \"./arrow.png\";\nimport { getPathLength, vector3ToDevice } from \"../../utils\";\n\nexport interface PathConfig {\n texture_url: string;\n lineWidth: number;\n color: number;\n}\n\nexport const defaultConfig: PathConfig = {\n texture_url: Arrow,\n lineWidth: 8,\n color: 0xffffff,\n};\n\nexport class Path extends Object3D {\n mesh: Mesh | null = null;\n\n geometry: MeshLine | null = null;\n\n material: MeshLineMaterial | null = null;\n\n texture: Texture | null = null;\n\n config: PathConfig = defaultConfig;\n\n points: [number, number][] = [];\n\n basicRepeat = 1;\n\n constructor(\n public navigation: Navigation,\n config?: Partial<PathConfig>\n ) {\n super();\n this.config = Object.assign({}, defaultConfig, config);\n this.registryEvent();\n }\n\n registryEvent() {\n this.navigation.bmap.context.addEventListener(\n \"control-change\",\n this.onControlChange\n );\n this.navigation.bmap.context.addEventListener(\"update\", this.onUpdate)\n }\n\n unRegistryEvent() {\n this.navigation.bmap.context.removeEventListener(\n \"control-change\",\n this.onControlChange\n );\n this.navigation.bmap.context.removeEventListener(\"update\", this.onUpdate)\n }\n\n onControlChange = () => {\n this.changeRepeat();\n };\n\n onUpdate = () => { \n if (!this.texture) { return }\n // this.texture.offset.x -= 0.02\n // this.texture.needsUpdate = true\n }\n\n getRepeat(): number {\n const {\n points,\n navigation: {\n bmap: {\n context: {\n camera,\n clientSize: { width, height },\n },\n },\n },\n } = this;\n const screenPoints = points\n .map(([x, y]) =>\n vector3ToDevice(new Vector3(x, y, 0), camera, width, height)\n )\n .map(({ x, y }) => [x, y]) as [number, number][];\n const pointLength = getPathLength(screenPoints);\n return pointLength / 32\n }\n\n changeRepeat() {\n if (!this.material) {\n return;\n }\n const repeat = this.getRepeat();\n this.material.repeat = new Vector2(repeat, 1);\n }\n\n loadTexture(url: string): Promise<Texture> {\n return new Promise((r, j) => {\n new TextureLoader().load(url, r, undefined, j);\n });\n }\n\n transformPoints(points: [number, number][]): number[] {\n // \u9664\u4E86\u9996\u5C3E \u4E2D\u95F4\u7684\u70B9\u90FD\u9700\u8981\u4E24\u4EFD\n const _points = [];\n for (let i = 0; i < points.length; i++) {\n _points.push(...points[i], 0);\n }\n return _points;\n }\n\n updatePoints(points: [number, number][]) {\n this.points = points;\n this.changeRepeat();\n const _points = this.transformPoints(points);\n if (this.geometry) {\n this.geometry.setPoints(_points);\n }\n }\n\n async create(points: [number, number][]) {\n const lineGeometry = (this.geometry = new MeshLine());\n this.updatePoints(points);\n\n if (!this.texture) {\n const texture = (this.texture = await this.loadTexture(\n this.config.texture_url\n ));\n texture.wrapS = texture.wrapT = RepeatWrapping;\n }\n\n const material = (this.material = new MeshLineMaterial({\n useMap: true,\n color: new Color(this.config.color),\n transparent: true,\n resolution: new Vector2(\n this.navigation.bmap.context.clientSize.width,\n this.navigation.bmap.context.clientSize.height\n ),\n depthTest: true,\n sizeAttenuation: false,\n lineWidth: this.config.lineWidth * 2,\n map: this.texture,\n blending: NormalBlending,\n repeat: new Vector2(this.getRepeat(), 1),\n }));\n // \u751F\u6210\u6A21\u578B\n const mesh = (this.mesh = new Mesh(lineGeometry, material));\n this.add(mesh);\n return mesh;\n }\n\n dispose() {\n this.unRegistryEvent();\n this.clear();\n this.geometry?.dispose();\n this.material?.dispose();\n this.texture?.dispose();\n }\n}\n", "import {\n BufferGeometry,\n Matrix4,\n Vector3,\n Ray,\n Sphere,\n LineSegments,\n BufferAttribute,\n ShaderChunk,\n ShaderMaterial,\n UniformsLib,\n Color,\n Vector2\n} from \"three\";\nclass MeshLine extends BufferGeometry {\n constructor() {\n super();\n this.isMeshLine = true;\n this.type = \"MeshLine\";\n\n this.positions = [];\n\n this.previous = [];\n this.next = [];\n this.side = [];\n this.width = [];\n this.indices_array = [];\n this.uvs = [];\n this.counters = [];\n this._points = [];\n this._geom = null;\n\n this.widthCallback = null;\n\n // Used to raycast\n this.matrixWorld = new Matrix4();\n\n Object.defineProperties(this, {\n // this is now a bufferGeometry\n // add getter to support previous api\n geometry: {\n enumerable: true,\n get: function () {\n return this;\n },\n },\n geom: {\n enumerable: true,\n get: function () {\n return this._geom;\n },\n set: function (value) {\n this.setGeometry(value, this.widthCallback);\n },\n },\n // for declaritive architectures\n // to return the same value that sets the points\n // eg. this.points = points\n // console.log(this.points) -> points\n points: {\n enumerable: true,\n get: function () {\n return this._points;\n },\n set: function (value) {\n this.setPoints(value, this.widthCallback);\n },\n },\n });\n }\n}\n\nMeshLine.prototype.setMatrixWorld = function (matrixWorld) {\n this.matrixWorld = matrixWorld;\n};\n\n// setting via a geometry is rather superfluous\n// as you're creating a unecessary geometry just to throw away\n// but exists to support previous api\nMeshLine.prototype.setGeometry = function (g, c) {\n // as the input geometry are mutated we store them\n // for later retreival when necessary (declaritive architectures)\n this._geometry = g;\n this.setPoints(g.getAttribute(\"position\").array, c);\n};\n\nMeshLine.prototype.setPoints = function (points, wcb) {\n if (!(points instanceof Float32Array) && !(points instanceof Array)) {\n console.error(\n \"ERROR: The BufferArray of points is not instancied correctly.\"\n );\n return;\n }\n // as the points are mutated we store them\n // for later retreival when necessary (declaritive architectures)\n this._points = points;\n this.widthCallback = wcb;\n this.positions = [];\n this.counters = [];\n if (points.length && points[0] instanceof Vector3) {\n // could transform Vector3 array into the array used below\n // but this approach will only loop through the array once\n // and is more performant\n for (var j = 0; j < points.length; j++) {\n var p = points[j];\n var c = j / points.length;\n this.positions.push(p.x, p.y, p.z);\n this.positions.push(p.x, p.y, p.z);\n this.counters.push(c);\n this.counters.push(c);\n }\n } else {\n for (var j = 0; j < points.length; j += 3) {\n var c = j / points.length;\n this.positions.push(points[j], points[j + 1], points[j + 2]);\n this.positions.push(points[j], points[j + 1], points[j + 2]);\n this.counters.push(c);\n this.counters.push(c);\n }\n }\n this.process();\n};\n\nfunction MeshLineRaycast(raycaster, intersects) {\n var inverseMatrix = new Matrix4();\n var ray = new Ray();\n var sphere = new Sphere();\n var interRay = new Vector3();\n var geometry = this.geometry;\n // Checking boundingSphere distance to ray\n\n if (!geometry.boundingSphere) geometry.computeBoundingSphere();\n sphere.copy(geometry.boundingSphere);\n sphere.applyMatrix4(this.matrixWorld);\n\n if (raycaster.ray.intersectSphere(sphere, interRay) === false) {\n return;\n }\n\n inverseMatrix.copy(this.matrixWorld).invert();\n ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);\n\n var vStart = new Vector3();\n var vEnd = new Vector3();\n var interSegment = new Vector3();\n var step = this instanceof LineSegments ? 2 : 1;\n var index = geometry.index;\n var attributes = geometry.attributes;\n\n if (index !== null) {\n var indices = index.array;\n var positions = attributes.position.array;\n var widths = attributes.width.array;\n\n for (var i = 0, l = indices.length - 1; i < l; i += step) {\n var a = indices[i];\n var b = indices[i + 1];\n\n vStart.fromArray(positions, a * 3);\n vEnd.fromArray(positions, b * 3);\n var width =\n widths[Math.floor(i / 3)] !== undefined ? widths[Math.floor(i / 3)] : 1;\n var precision =\n raycaster.params.Line.threshold + (this.material.lineWidth * width) / 2;\n var precisionSq = precision * precision;\n\n var distSq = ray.distanceSqToSegment(\n vStart,\n vEnd,\n interRay,\n interSegment\n );\n\n if (distSq > precisionSq) continue;\n\n interRay.applyMatrix4(this.matrixWorld); //Move back to world space for distance calculation\n\n var distance = raycaster.ray.origin.distanceTo(interRay);\n\n if (distance < raycaster.near || distance > raycaster.far) continue;\n\n intersects.push({\n distance: distance,\n // What do we want? intersection point on the ray or on the segment??\n // point: raycaster.ray.at( distance ),\n point: interSegment.clone().applyMatrix4(this.matrixWorld),\n index: i,\n face: null,\n faceIndex: null,\n object: this,\n });\n // make event only fire once\n i = l;\n }\n }\n}\nMeshLine.prototype.raycast = MeshLineRaycast;\nMeshLine.prototype.compareV3 = function (a, b) {\n var aa = a * 6;\n var ab = b * 6;\n return (\n this.positions[aa] === this.positions[ab] &&\n this.positions[aa + 1] === this.positions[ab + 1] &&\n this.positions[aa + 2] === this.positions[ab + 2]\n );\n};\n\nMeshLine.prototype.copyV3 = function (a) {\n var aa = a * 6;\n return [this.positions[aa], this.positions[aa + 1], this.positions[aa + 2]];\n};\n\nMeshLine.prototype.getDistance = function (i) { \n let maxLength = 0;\n for (let k = 0; k < i; k++) {\n const index = 6 * k;\n const p0 = new Vector3(this.positions[index], this.positions[index + 1], this.positions[index + 2]);\n const p1 = new Vector3(this.positions[index + 6], this.positions[index + 7], this.positions[index + 8]);\n const distance = p0.distanceTo(p1)\n // console.log(p0, p1, distance)\n maxLength += distance;\n }\n return maxLength\n}\n\nMeshLine.prototype.process = function () {\n var l = this.positions.length / 6;\n\n this.previous = [];\n this.next = [];\n this.side = [];\n this.width = [];\n this.indices_array = [];\n this.uvs = [];\n\n var w;\n // \u8DEF\u7EBF\u7684\u8DDD\u79BB\n const maxLength = this.getDistance(l - 1);\n\n\n var v;\n // initial previous points\n if (this.compareV3(0, l - 1)) {\n v = this.copyV3(l - 2);\n } else {\n v = this.copyV3(0);\n }\n this.previous.push(v[0], v[1], v[2]);\n this.previous.push(v[0], v[1], v[2]);\n\n for (var j = 0; j < l; j++) {\n // sides\n this.side.push(1);\n this.side.push(-1);\n\n // widths\n if (this.widthCallback) w = this.widthCallback(j / (l - 1));\n else w = 1;\n this.width.push(w);\n this.width.push(w);\n\n // uvs\n // \u6839\u636E\u8DDD\u79BB\u8BA1\u7B97uv \uFF0C \u800C\u4E0D\u662F\u6839\u636E\u4E0B\u6807\n if (j === 0) { \n this.uvs.push(0, 0);\n this.uvs.push(0, 1);\n } else if (j === l - 1) {\n this.uvs.push(1, 0);\n this.uvs.push(1, 1);\n } else {\n const s = this.getDistance(j) / maxLength\n this.uvs.push(s, 0);\n this.uvs.push(s, 1);\n }\n\n if (j < l - 1) {\n // points previous to poisitions\n v = this.copyV3(j);\n this.previous.push(v[0], v[1], v[2]);\n this.previous.push(v[0], v[1], v[2]);\n\n // indices\n var n = j * 2;\n this.indices_array.push(n, n + 1, n + 2);\n this.indices_array.push(n + 2, n + 1, n + 3);\n }\n if (j > 0) {\n // points after poisitions\n v = this.copyV3(j);\n this.next.push(v[0], v[1], v[2]);\n this.next.push(v[0], v[1], v[2]);\n }\n }\n\n // last next point\n if (this.compareV3(l - 1, 0)) {\n v = this.copyV3(1);\n } else {\n v = this.copyV3(l - 1);\n }\n this.next.push(v[0], v[1], v[2]);\n this.next.push(v[0], v[1], v[2]);\n\n // redefining the attribute seems to prevent range errors\n // if the user sets a differing number of vertices\n if (\n !this._attributes ||\n this._attributes.position.count !== this.positions.length\n ) {\n this._attributes = {\n position: new BufferAttribute(new Float32Array(this.positions), 3),\n previous: new BufferAttribute(new Float32Array(this.previous), 3),\n next: new BufferAttribute(new Float32Array(this.next), 3),\n side: new BufferAttribute(new Float32Array(this.side), 1),\n width: new BufferAttribute(new Float32Array(this.width), 1),\n uv: new BufferAttribute(new Float32Array(this.uvs), 2),\n index: new BufferAttribute(new Uint16Array(this.indices_array), 1),\n counters: new BufferAttribute(new Float32Array(this.counters), 1),\n };\n } else {\n this._attributes.position.copyArray(new Float32Array(this.positions));\n this._attributes.position.needsUpdate = true;\n this._attributes.previous.copyArray(new Float32Array(this.previous));\n this._attributes.previous.needsUpdate = true;\n this._attributes.next.copyArray(new Float32Array(this.next));\n this._attributes.next.needsUpdate = true;\n this._attributes.side.copyArray(new Float32Array(this.side));\n this._attributes.side.needsUpdate = true;\n this._attributes.width.copyArray(new Float32Array(this.width));\n this._attributes.width.needsUpdate = true;\n this._attributes.uv.copyArray(new Float32Array(this.uvs));\n this._attributes.uv.needsUpdate = true;\n this._attributes.index.copyArray(new Uint16Array(this.indices_array));\n this._attributes.index.needsUpdate = true;\n }\n\n this.setAttribute(\"position\", this._attributes.position);\n this.setAttribute(\"previous\", this._attributes.previous);\n this.setAttribute(\"next\", this._attributes.next);\n this.setAttribute(\"side\", this._attributes.side);\n this.setAttribute(\"width\", this._attributes.width);\n this.setAttribute(\"uv\", this._attributes.uv);\n this.setAttribute(\"counters\", this._attributes.counters);\n\n this.setIndex(this._attributes.index);\n\n this.computeBoundingSphere();\n this.computeBoundingBox();\n};\n\nfunction memcpy(src, srcOffset, dst, dstOffset, length) {\n var i;\n\n src = src.subarray || src.slice ? src : src.buffer;\n dst = dst.subarray || dst.slice ? dst : dst.buffer;\n\n src = srcOffset\n ? src.subarray\n ? src.subarray(srcOffset, length && srcOffset + length)\n : src.slice(srcOffset, length && srcOffset + length)\n : src;\n\n if (dst.set) {\n dst.set(src, dstOffset);\n } else {\n for (i = 0; i < src.length; i++) {\n dst[i + dstOffset] = src[i];\n }\n }\n\n return dst;\n}\n\n/**\n * Fast method to advance the line by one position. The oldest position is removed.\n * @param position\n */\nMeshLine.prototype.advance = function (position) {\n var positions = this._attributes.position.array;\n var previous = this._attributes.previous.array;\n var next = this._attributes.next.array;\n var l = positions.length;\n\n // PREVIOUS\n memcpy(positions, 0, previous, 0, l);\n\n // POSITIONS\n memcpy(positions, 6, positions, 0, l - 6);\n\n positions[l - 6] = position.x;\n positions[l - 5] = position.y;\n positions[l - 4] = position.z;\n positions[l - 3] = position.x;\n positions[l - 2] = position.y;\n positions[l - 1] = position.z;\n\n // NEXT\n memcpy(positions, 6, next, 0, l - 6);\n\n next[l - 6] = position.x;\n next[l - 5] = position.y;\n next[l - 4] = position.z;\n next[l - 3] = position.x;\n next[l - 2] = position.y;\n next[l - 1] = position.z;\n\n this._attributes.position.needsUpdate = true;\n this._attributes.previous.needsUpdate = true;\n this._attributes.next.needsUpdate = true;\n};\n\nShaderChunk[\"meshline_vert\"] = [\n \"\",\n ShaderChunk.logdepthbuf_pars_vertex,\n ShaderChunk.fog_pars_vertex,\n \"\",\n \"attribute vec3 previous;\",\n \"attribute vec3 next;\",\n \"attribute float side;\",\n \"attribute float width;\",\n \"attribute float counters;\",\n \"\",\n \"uniform vec2 resolution;\",\n \"uniform float lineWidth;\",\n \"uniform vec3 color;\",\n \"uniform float opacity;\",\n \"uniform float sizeAttenuation;\",\n \"\",\n \"varying vec2 vUV;\",\n \"varying vec4 vColor;\",\n \"varying float vCounters;\",\n \"\",\n \"vec2 fix( vec4 i, float aspect ) {\",\n \"\",\n \" vec2 res = i.xy / i.w;\",\n \" res.x *= aspect;\",\n \"\t vCounters = counters;\",\n \" return res;\",\n \"\",\n \"}\",\n \"\",\n \"void main() {\",\n \"\",\n \" float aspect = resolution.x / resolution.y;\",\n \"\",\n \" vColor = vec4( color, opacity );\",\n \" vUV = uv;\",\n \"\",\n \" mat4 m = projectionMatrix * modelViewMatrix;\",\n \" vec4 finalPosition = m * vec4( position, 1.0 );\",\n \" vec4 prevPos = m * vec4( previous, 1.0 );\",\n \" vec4 nextPos = m * vec4( next, 1.0 );\",\n \"\",\n \" vec2 currentP = fix( finalPosition, aspect );\",\n \" vec2 prevP = fix( prevPos, aspect );\",\n \" vec2 nextP = fix( nextPos, aspect );\",\n \"\",\n \" float w = lineWidth * width;\",\n \"\",\n \" vec2 dir;\",\n \" if( nextP == currentP ) dir = normalize( currentP - prevP );\",\n \" else if( prevP == currentP ) dir = normalize( nextP - currentP );\",\n \" else {\",\n \" vec2 dir1 = normalize( currentP - prevP );\",\n \" vec2 dir2 = normalize( nextP - currentP );\",\n \" dir = normalize( dir1 + dir2 );\",\n \"\",\n \" vec2 perp = vec2( -dir1.y, dir1.x );\",\n \" vec2 miter = vec2( -dir.y, dir.x );\",\n \" //w = clamp( w / dot( miter, perp ), 0., 4. * lineWidth * width );\",\n \"\",\n \" }\",\n \"\",\n \" //vec2 normal = ( cross( vec3( dir, 0. ), vec3( 0., 0., 1. ) ) ).xy;\",\n \" vec4 normal = vec4( -dir.y, dir.x, 0., 1. );\",\n \" normal.xy *= .5 * w;\",\n \" normal *= projectionMatrix;\",\n \" if( sizeAttenuation == 0. ) {\",\n \" normal.xy *= finalPosition.w;\",\n \" normal.xy /= ( vec4( resolution, 0., 1. ) * projectionMatrix ).xy;\",\n \" }\",\n \"\",\n \" finalPosition.xy += normal.xy * side;\",\n \"\",\n \" gl_Position = finalPosition;\",\n \"\",\n ShaderChunk.logdepthbuf_vertex,\n ShaderChunk.fog_vertex &&\n \" vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\",\n ShaderChunk.fog_vertex,\n \"}\",\n].join(\"\\n\");\n\nShaderChunk[\"meshline_frag\"] = [\n \"\",\n ShaderChunk.fog_pars_fragment,\n ShaderChunk.logdepthbuf_pars_fragment,\n \"\",\n \"uniform sampler2D map;\",\n \"uniform sampler2D alphaMap;\",\n \"uniform float useMap;\",\n \"uniform float useAlphaMap;\",\n \"uniform float useDash;\",\n \"uniform float dashArray;\",\n \"uniform float dashOffset;\",\n \"uniform float dashRatio;\",\n \"uniform float visibility;\",\n \"uniform float alphaTest;\",\n \"uniform vec2 repeat;\",\n \"\",\n \"varying vec2 vUV;\",\n \"varying vec4 vColor;\",\n \"varying float vCounters;\",\n \"\",\n \"void main() {\",\n \"\",\n ShaderChunk.logdepthbuf_fragment,\n \"\",\n \" vec4 c = vColor;\",\n \" if( useMap == 1. ) c *= texture2D( map, vUV * repeat );\",\n \" if( useAlphaMap == 1. ) c.a *= texture2D( alphaMap, vUV * repeat ).a;\",\n \" if( c.a < alphaTest ) discard;\",\n \" if( useDash == 1. ){\",\n \" c.a *= ceil(mod(vCounters + dashOffset, dashArray) - (dashArray * dashRatio));\",\n \" }\",\n \" gl_FragColor = c;\",\n \" gl_FragColor.a *= step(vCounters, visibility);\",\n \"\",\n ShaderChunk.fog_fragment,\n \"}\",\n].join(\"\\n\");\n\nclass MeshLineMaterial extends ShaderMaterial {\n constructor(parameters) {\n super({\n uniforms: Object.assign({}, UniformsLib.fog, {\n lineWidth: { value: 1 },\n map: { value: null },\n useMap: { value: 0 },\n alphaMap: { value: null },\n useAlphaMap: { value: 0 },\n color: { value: new Color(0xffffff) },\n opacity: { value: 1 },\n resolution: { value: new Vector2(1, 1) },\n sizeAttenuation: { value: 1 },\n dashArray: { value: 0 },\n dashOffset: { value: 0 },\n dashRatio: { value: 0.5 },\n useDash: { value: 0 },\n visibility: { value: 1 },\n alphaTest: { value: 0 },\n repeat: { value: new Vector2(1, 1) },\n }),\n\n vertexShader: ShaderChunk.meshline_vert,\n\n fragmentShader: ShaderChunk.meshline_frag,\n });\n this.isMeshLineMaterial = true;\n this.type = \"MeshLineMaterial\";\n\n Object.defineProperties(this, {\n lineWidth: {\n enumerable: true,\n get: function () {\n return this.uniforms.lineWidth.value;\n },\n set: function (value) {\n this.uniforms.lineWidth.value = value;\n },\n },\n map: {\n enumerable: true,\n get: function () {\n return this.uniforms.map.value;\n },\n set: function (value) {\n this.uniforms.map.value = value;\n },\n },\n useMap: {\n enumerable: true,\n get: function () {\n return this.uniforms.useMap.value;\n },\n set: function (value) {\n this.uniforms.useMap.value = value;\n },\n },\n alphaMap: {\n enumerable: true,\n get: function () {\n return this.uniforms.alphaMap.value;\n },\n set: function (value) {\n this.uniforms.alphaMap.value = value;\n },\n },\n useAlphaMap: {\n enumerable: true,\n get: function () {\n return this.uniforms.useAlphaMap.value;\n },\n set: function (value) {\n this.uniforms.useAlphaMap.value = value;\n },\n },\n color: {\n enumerable: true,\n get: function () {\n return this.uniforms.color.value;\n },\n set: function (value) {\n this.uniforms.color.value = value;\n },\n },\n opacity: {\n enumerable: true,\n get: function () {\n return this.uniforms.opacity.value;\n },\n set: function (value) {\n this.uniforms.opacity.value = value;\n },\n },\n resolution: {\n enumerable: true,\n get: function () {\n return this.uniforms.resolution.value;\n },\n set: function (value) {\n this.uniforms.resolution.value.copy(value);\n },\n },\n sizeAttenuation: {\n enumerable: true,\n get: function () {\n return this.uniforms.sizeAttenuation.value;\n },\n set: function (value) {\n this.uniforms.sizeAttenuation.value = value;\n },\n },\n dashArray: {\n enumerable: true,\n get: function () {\n return this.uniforms.dashArray.value;\n },\n set: function (value) {\n this.uniforms.dashArray.value = value;\n this.useDash = value !== 0 ? 1 : 0;\n },\n },\n dashOffset: {\n enumerable: true,\n get: function () {\n return this.uniforms.dashOffset.value;\n },\n set: function (value) {\n this.uniforms.dashOffset.value = value;\n },\n },\n dashRatio: {\n enumerable: true,\n get: function () {\n return this.uniforms.dashRatio.value;\n },\n set: function (value) {\n this.uniforms.dashRatio.value = value;\n },\n },\n useDash: {\n enumerable: true,\n get: function () {\n return this.uniforms.useDash.value;\n },\n set: function (value) {\n this.uniforms.useDash.value = value;\n },\n },\n visibility: {\n enumerable: true,\n get: function () {\n return this.uniforms.visibility.value;\n },\n set: function (value) {\n this.uniforms.visibility.value = value;\n },\n },\n alphaTest: {\n enumerable: true,\n get: function () {\n return this.uniforms.alphaTest.value;\n },\n set: function (value) {\n this.uniforms.alphaTest.value = value;\n },\n },\n repeat: {\n enumerable: true,\n get: function () {\n return this.uniforms.repeat.value;\n },\n set: function (value) {\n this.uniforms.repeat.value.copy(value);\n },\n },\n });\n\n this.setValues(parameters);\n }\n}\n\nMeshLineMaterial.prototype.copy = function (source) {\n ShaderMaterial.prototype.copy.call(this, source);\n\n this.lineWidth = source.lineWidth;\n this.map = source.map;\n this.useMap = source.useMap;\n this.alphaMap = source.alphaMap;\n this.useAlphaMap = source.useAlphaMap;\n this.color.copy(source.color);\n this.opacity = source.opacity;\n this.resolution.copy(source.resolution);\n this.sizeAttenuation = source.sizeAttenuation;\n this.dashArray.copy(source.dashArray);\n this.dashOffset.copy(source.dashOffset);\n this.dashRatio.copy(source.dashRatio);\n this.useDash = source.useDash;\n this.visibility = source.visibility;\n this.alphaTest = source.alphaTest;\n this.repeat.copy(source.repeat);\n\n return this;\n};\n\nexport { MeshLineMaterial, MeshLine, MeshLineRaycast };\n", "import { BMap } from \"../../bmap\";\nimport { Plugin } from \"../base\";\n// @ts-ignore\nimport PathWorker from \"./path.worker\";\nimport { Path, PathConfig } from \"./path\";\nimport { End, HooksName, PathData, RoadData, RouteType, Start, UniqueKey, getLength, triggerWorker } from \"../../utils\";\nimport { Floor, Poi, PoiOptions } from \"../../elements\";\nimport {\n distancePointToSegment,\n moveOnRoute,\n simplifyPath,\n} from \"../../utils/path\";\nimport { Group as TweenGroup, Tween } from \"@tweenjs/tween.js\";\n\nexport type Point = [number, number];\n\ninterface EventMap {\n \"fetch-road-status\": {\n status: boolean;\n };\n \"path-animation\": {};\n \"path-animation-end\": {};\n \"fetch-road-data\": {\n roadInfo: RoadData[]\n }\n}\n\nexport interface NavigationConfig {\n path?: Partial<PathConfig>; // \u8DEF\u7EBF\u7684\u53C2\u6570\n speed: number; // \u52A8\u753B\u901F\u5EA6 km/h\n cheapMaximumDistance: number; // \u5438\u9644\u8DEF\u7EBF\u7684\u6700\u5927\u4FBF\u5B9C\u8DDD\u79BB, \u5982\u679C\u5B9A\u4F4D\u70B9\u79BB\u8DEF\u7F51\u8D85\u8FC7\u8FD9\u4E2A\u8DDD\u79BB\uFF0C\u5C31\u4E0D\u505A\u8DEF\u7EBF\u5438\u9644\uFF0C\u6CA1\u6709\u8DEF\u7EBF\u52A8\u753B\u4E86\n startPoi: Partial<PoiOptions>;\n needStartPoi: boolean;\n loadRoad: boolean;\n}\n\nconst defaultConfig: NavigationConfig = {\n path: {},\n speed: 10,\n cheapMaximumDistance: 20,\n needStartPoi: false,\n startPoi: {},\n loadRoad: true\n};\n\nexport class Navigation extends Plugin<EventMap> {\n path: Path | null = null;\n\n worker: any = PathWorker();\n\n fetchRoadStatus = false;\n\n uniqueKey = new UniqueKey();\n\n paths: PathData = [];\n\n options: NavigationConfig;\n\n pathTween = new TweenGroup();\n\n startPoi: Poi | null = null;\n\n // \u5904\u7406\u8DEF\u7EBF\u52A8\u753B\n animationPathOptions: {\n cPathIndex: number;\n } = {\n cPathIndex: 0, // \u5728\u5E73\u6ED1\u8DEF\u7EBF\u4E2D\u7684\u4E0B\u6807\uFF08\u5E73\u6ED1\u4F46\u662F\u672A\u505A\u63D2\u503C\u7684\u6570\u636E\uFF0C\u662F\u505A\u8DEF\u7EBF\u6E32\u67D3\u7684\uFF09\n };\n\n cPath: Point[] = []; // \u5F53\u524D\u697C\u5C42\u7684\u5E73\u6ED1\u540E\u7684\u8DEF\u7EBF\n\n constructor(\n bmap: BMap,\n project: string,\n options: Partial<NavigationConfig> = {}\n ) {\n super(bmap);\n this.options = Object.assign({}, defaultConfig, options);\n // \u8BF7\u6C42\u8DEF\u7F51\n const {\n apiDomain,\n apiPath: { roadNetwork },\n apiInfo,\n } = this.bmap.config;\n this.registryEvent();\n if (this.options.loadRoad) {\n triggerWorker<any, RoadData[]>(this.worker, \"load_road\", {\n url: `${apiDomain || location.origin}${roadNetwork}?project=${project}`,\n ...apiInfo,\n }).then((roadInfo) => { \n this.fetchRoadStatus = true;\n this.dispatchEvent({ type: \"fetch-road-status\", status: true });\n this.dispatchEvent({ type: \"fetch-road-data\", roadInfo });\n }).catch((e) => { \n console.log(\"[\u52A0\u8F7D\u8DEF\u7F51\u5931\u8D25]\", e)\n })\n }\n }\n\n registryEvent() {\n this.bmap.context.addEventListener(\"update\", this.onUpdate);\n this.bmap.addEventListener(\n HooksName.SWITCH_FLOOR_AFTER,\n this.onSwitchFloor\n );\n }\n\n unRegistryEvent() {\n this.bmap.context.removeEventListener(\"update\", this.onUpdate);\n this.bmap.removeEventListener(\n HooksName.SWITCH_FLOOR_AFTER,\n this.onSwitchFloor\n );\n }\n\n onUpdate = () => {\n this.pathTween.update();\n };\n\n async setRoadData(roadData: RoadData[]) {\n this.fetchRoadStatus = false;\n this.dispatchEvent({ type: \"fetch-road-status\", status: false });\n await triggerWorker(this.worker, \"set_road_info\", roadData)\n this.fetchRoadStatus = true;\n this.dispatchEvent({ type: \"fetch-road-status\", status: true });\n }\n\n clearPath() {\n if (this.path) {\n this.bmap.context.scene.remove(this.path);\n this.path.dispose();\n this.path = null;\n this.pathTween.getAll().forEach((item) => item.stop());\n this.pathTween.removeAll();\n }\n }\n\n onSwitchFloor = ({ data: { curFloor } }: { data: { curFloor: Floor } }) => {\n if (this.paths.length) {\n const curFloorPathData = this.paths.find(\n (item) => item.floor === curFloor.name\n );\n if (curFloorPathData) {\n this.renderPath(this.translatePoints(curFloorPathData.points));\n } else {\n this.clearPath();\n }\n } else {\n this.clearPath();\n }\n };\n\n getDirectionPath(points: Point[]) {\n return triggerWorker(this.worker, \"get_direction_path\", points)\n }\n\n addPath(paths: PathData) {\n this.paths = paths;\n const floorName = this.bmap.context.currentFloor?.name;\n const curFloorPath = paths.find((item) => item.floor === floorName);\n if (curFloorPath) {\n if (this.bmap.currentBuildGround) {\n // \u628A\u6240\u6709\u70B9\u4F4D\u79FB\u5230\u4E2D\u5FC3\u70B9\n this.renderPath(this.translatePoints(curFloorPath.points));\n } else {\n // \u76D1\u542C\u6709\u4E86\u5730\u9762\u4E8B\u4EF6\n const onCenterChange = () => {\n this.bmap.removeEventListener(\"center-change\", onCenterChange);\n this.renderPath(this.translatePoints(curFloorPath.points));\n };\n this.bmap.addEventListener(\"center-change\", onCenterChange);\n }\n } else {\n this.clearPath();\n }\n }\n\n translatePoints(points: Point[]): Point[] {\n const [x, y] = this.bmap.buildingCenter;\n return points.map((item) => {\n return [item[0] - x, item[1] - y];\n });\n }\n\n // \u89C4\u5212\u8DEF\u7EBF\n // \u8DEF\u7EBF\u7684\u683C\u5F0F\n // \u591A\u697C\u5C42\n // [{floor: \"xx\", points: Point[], endType: '\u7EC8\u70B9\u7684\u7C7B\u578B\uFF0C\u7535\u68AF/\u6276\u68AF/\u7EC8\u70B9' }, {}]\n // \u6BCF\u4E2A\u697C\u5C42\u4E2D \u6BCF\u4E2A\u70B9\u7684z\u8F74\u7684\u5750\u6807\u4ECE\u697C\u5C42\u7684\u5730\u9762\u9AD8\u5EA6\u83B7\u53D6\n\n getPath(\n start: Start,\n end: End,\n type: RouteType = \"\"\n ): Promise<PathData> {\n return new Promise((resolve, reject) => {\n const _getPath = () => {\n triggerWorker(this.worker, \"get_path\", { start, end, type })\n .then((data) => {\n if (!data) {\n reject(\"no-path\")\n } else if (typeof data === \"string\") {\n reject(data)\n } else {\n resolve(data)\n }\n })\n }\n if (this.fetchRoadStatus) {\n _getPath()\n } else {\n const onChangeStatus = ({ status }: { status: boolean }) => {\n if (status) {\n this.removeEventListener(\"fetch-road-status\", onChangeStatus);\n _getPath()\n }\n };\n this.addEventListener(\"fetch-road-status\", onChangeStatus);\n }\n });\n }\n\n renderPath(points: Point[]) {\n const cPath: Point[] = this.catmullRomCurve3(points);\n this.cPath = cPath;\n // animationPathOptions \u4FDD\u5B58\u5230\u8FD9\u91CC\n // \u91CD\u7F6E\u52A8\u753B\u53C2\u6570\n this.animationPathOptions = {\n cPathIndex: 0,\n };\n if (this.path) {\n this.path.updatePoints(cPath);\n } else {\n this.path = new Path(this, this.options.path);\n this.path.create(cPath);\n this.path.position.z =\n this.bmap.context.currentFloor!.groundMaxHeight + 0.5;\n this.bmap.context.scene.add(this.path);\n }\n if (this.startPoi) {\n this.startPoi.dispose()\n this.startPoi = null;\n }\n if (this.options.needStartPoi) {\n this.startPoi = this.bmap.context.currentFloor?.addPoi({\n ...this.options.startPoi,\n position: { x: cPath[0][0], y: cPath[0][1], z: 0.0001 },\n collision_enable: false,\n }) || null;\n }\n // test animation\n // const [x, y] = this.bmap.buildingCenter;\n // const pos = cPath.slice(-1)[0]\n // this.animationTo({floor: this.bmap.context.currentFloor!.name, pos: [pos[0] + x, pos[1] + y]})\n }\n\n catmullRomCurve3(points: Point[]) {\n return simplifyPath(points, false, true, 0.1, 150, 2.5);\n }\n\n /**\n * \u6309\u7167\u6307\u5B9A\u901F\u5EA6\u79FB\u52A8\u5230\u76EE\u6807\u4F4D\u7F6E\n * @param point \u76EE\u6807\u4F4D\u7F6E\n * @param speed \u79FB\u52A8\u901F\u5EA6\n */\n async animationTo(\n point: { floor: string; pos: [number, number] },\n speed = this.options.speed\n ) {\n if (point.floor !== this.bmap.context.currentFloor?.name || !this.path) {\n return;\n }\n const {\n animationPathOptions: { cPathIndex },\n } = this;\n // \u5269\u4E0B\u7684\u8DEF\u7EBF\n const currentPath = [\n this.path.points[0],\n ...this.cPath.slice(cPathIndex + 1),\n ];\n const translatedPos = this.translatePoints([point.pos])[0]\n // \u4F20\u5165\u4E00\u4E2A\u4F4D\u7F6E \u5148\u8BA1\u7B97\u8FD9\u4E2A\u70B9\u5438\u9644\u5230\u8DEF\u7EBF\u4E0A\u7684\u4F4D\u7F6E\u548C\u8DDD\u79BB \u548C\u8DEF\u7EBF\u6BB5\u7684\u4E0B\u6807 \n const { distance, pos, index } = currentPath.reduce(\n (res, cur, index, arr) => {\n if (index === arr.length - 1) {\n return res;\n }\n const { distance, closestPoint } = distancePointToSegment(\n translatedPos,\n cur,\n arr[index + 1]\n );\n if (distance < res.distance) {\n res.distance = distance;\n res.pos = closestPoint;\n res.index = index;\n }\n return res;\n },\n {\n distance: Number.MAX_SAFE_INTEGER,\n pos: point.pos,\n index: 0,\n }\n );\n // \u5982\u679C\u8DDD\u79BB\u8D85\u51FA\u6700\u5927\u8DDD\u79BB\u4E0D\u505A\u4FEE\u6539\n if (distance > this.options.cheapMaximumDistance) {\n return;\n }\n // \u5982\u679C\u5438\u9644\u7684\u7ED3\u679C\u662F\u7B2C\u4E00\u4E2A\u70B9\u4E5F\u4E0D\u9700\u8981\u505A\u5904\u7406\n if (\n this.path.points[0][0] === pos[0] &&\n this.path.points[0][1] === pos[1]\n ) {\n return;\n }\n // \u6839\u636E\u5438\u9644\u540E\u7684\u4F4D\u7F6E\u548C\u73B0\u5728\u8DEF\u7EBF\u7684\u8D77\u70B9\u8BA1\u7B97\u4E00\u4E2A\u9700\u8981\u79FB\u52A8\u7684\u8DDD\u79BB\n let moveDistance = 0;\n let moveDistanceArray: number[] = [];\n if (index === 0) {\n // \u8FD8\u662F\u5728\u540C\u4E00\u4E2A\u8DEF\u6BB5\u4E2D\u53EF\u4EE5\u76F4\u63A5\u8BA1\u7B97\u8DDD\u79BB\n moveDistance = getLength(currentPath[0], pos);\n moveDistanceArray = [moveDistance];\n } else {\n // \u8DE8\u8DEF\u6BB5\u4E86 \u8981\u5FAA\u73AF\u8BA1\u7B97\n // \u7B2C\u4E00\u6BB5\u662F\u88AB\u5207\u5272\u8FC7\u7684\n moveDistanceArray = [getLength(currentPath[0], currentPath[1])];\n // \u4E2D\u95F4\u7684\u8DEF\u7EBF\u662F\u5B8C\u6574\u7684\n for (let i = 1; i < index; i++) {\n moveDistanceArray.push(getLength(currentPath[i], currentPath[i + 1]));\n }\n // \u6700\u540E\u4E00\u6BB5\u53EF\u80FD\u4E5F\u662F\u88AB\u5207\u5272\u8FC7\u7684\n moveDistanceArray.push(getLength(currentPath[index], pos));\n moveDistance = moveDistanceArray.reduce((sum, cur) => sum + cur, 0);\n }\n // \u6839\u636E\u8FD9\u4E2A\u8DDD\u79BB\u8BA1\u7B97\u52A8\u753B\u65F6\u95F4\n const speedSecond = this.kmPerHourToMetersPerSecond(speed);\n const timeSecond = moveDistance / speedSecond;\n // \u6309\u7167\u8DDD\u79BB\u7684\u7EF4\u5EA6\u5F00\u59CB\u52A8\u753B\n this.pathTween.getAll().forEach((item) => item.stop());\n this.pathTween.removeAll();\n const start = { distance: 0 };\n // \u8BA1\u7B97\u51FA\u6BCF\u4E00\u8282\u8DEF\u7EBF\u7684\u8DDD\u79BB\uFF0C\u52A8\u753B\u7684\u65F6\u5019\u65B9\u4FBF\u627E\u79FB\u52A8\u540E\u7684\u4F4D\u7F6E\u5728\u90A3\u6BB5\u8DEF\u7EBF\n return new Promise((resolve) => { \n const tween = new Tween(start, this.pathTween)\n .to({ distance: moveDistance }, timeSecond * 1000)\n .onUpdate(() => {\n // \u6BCF\u6B21\u52A8\u753B\u4E2D\u83B7\u53D6\u79FB\u52A8\u7684\u8DDD\u79BB\uFF0C\u8BA1\u7B97\u4ECE\u8D77\u70B9\u5F00\u59CB\u79FB\u52A8\u8DDD\u79BB\u4E4B\u540E\u7684\u4F4D\u7F6E \uFF08\u5750\u6807\u548C\u539F\u59CB\u8DEF\u7EBF\u7684\u4E0B\u6807\uFF08\u8DEF\u7EBF\u6BB5\uFF09\uFF09\n for (let i = 0; i < moveDistanceArray.length; i++) {\n const sumDistance = moveDistanceArray\n .slice(0, i + 1)\n .reduce((sum, cur) => sum + cur, 0);\n if (sumDistance >= start.distance) {\n // \u4F4D\u79FB\u5230\u5F53\u524D\u8DEF\u6BB5 \u8BA1\u7B97\u4E00\u4E0B\u4F4D\u79FB\u540E\u7684\u4F4D\u7F6E\n const prevDistance = sumDistance - moveDistanceArray[i];\n // \u9700\u8981\u5728\u5F53\u524D\u7684\u8DEF\u6BB5\u4E2D\u79FB\u52A8\u7684\u8DDD\u79BB\n const needDistance = start.distance - prevDistance;\n const startPoint = currentPath[i];\n const nextPoint = currentPath[i + 1];\n // \u6839\u636E\u65B0\u7684\u4F4D\u7F6E\u548C\u8DEF\u7EBF\u6BB5\u4FEE\u6539\u8DEF\u7EBF\n const pos = moveOnRoute(startPoint, nextPoint, needDistance);\n this.path?.updatePoints([pos, ...currentPath.slice(i + 1)]);\n this.animationPathOptions.cPathIndex += i;\n if (this.startPoi) {\n this.startPoi.position.setX(pos[0]).setY(pos[1])\n }\n this.dispatchEvent({type: \"path-animation\"})\n return;\n }\n }\n })\n .onComplete(() => {\n this.pathTween.remove(tween);\n this.dispatchEvent({type: \"path-animation-end\"})\n resolve(true)\n })\n .start();\n })\n }\n\n kmPerHourToMetersPerSecond(speedInKmPerHour: number): number {\n const speedInMetersPerSecond = (speedInKmPerHour * 1000) / 3600;\n return speedInMetersPerSecond;\n }\n\n dispose() {\n this.worker.terminate();\n this.unRegistryEvent();\n this.path?.dispose();\n this.uniqueKey.dispose();\n this.startPoi?.dispose();\n }\n}\n", "import { loadGraphics } from \"../../api\";\nimport { Graphic } from \"../../elements\";\nimport { GraphicInfo, LoadQuery } from \"../../types\";\nimport { HooksName, generatorKeyByObj } from \"../../utils\";\nimport { Plugin } from \"../base\";\n\ntype LoadGraphicQuery = Omit<LoadQuery, \"resource_type_list\">;\n\nexport class SplitLoad extends Plugin {\n cacheData = new Map<string, GraphicInfo[]>();\n\n floorDataLengthMap = new Map();\n\n async load(query: LoadQuery): Promise<GraphicInfo[]> {\n const cacheKey = generatorKeyByObj(query);\n if (this.cacheData.has(cacheKey)) {\n return this.cacheData.get(cacheKey)!;\n }\n console.time(\"floor/get\u8BF7\u6C42\" + query.resource_type_list)\n const [,data] = await Promise.all([this.loadBuildGround(query), loadGraphics(query, this.bmap.config)]);\n console.timeEnd(\"floor/get\u8BF7\u6C42\" + query.resource_type_list)\n const lenKey = generatorKeyByObj({ floor: query.floor, ts: query.ts });\n this.bmap.transformGraphicData(data, this.bmap.buildingCenter, this.floorDataLengthMap.get(lenKey) || 0);\n data.forEach((item) => (item.info.transformToBuildingGround = false));\n this.cacheData.set(cacheKey, data);\n const len = this.floorDataLengthMap.get(lenKey) || 0;\n this.floorDataLengthMap.set(lenKey, len + data.length)\n return data;\n }\n\n isSameFloor(query: LoadGraphicQuery) {\n return this.bmap.context.currentFloor?.key === generatorKeyByObj(query);\n }\n\n switchFloorByData(data: GraphicInfo[], query: LoadGraphicQuery) {\n if (!this.isSameFloor(query)) {\n // \u9700\u8981\u5207\u6362\u697C\u5C42\n const floorName = generatorKeyByObj(query);\n const { curFloor, graphics } = this.bmap.createFloor(data);\n curFloor.name = query.floor;\n curFloor.key = floorName;\n const graphicMap = new Map<string, GraphicInfo>();\n data.forEach((graphicInfo) => {\n graphicMap.set(graphicInfo.element_uuid, graphicInfo);\n })\n curFloor.userData.graphicMap = graphicMap;\n this.bmap.triggerHooks(HooksName.SWITCH_FLOOR_BEFORE, { curFloor, graphics })\n this.bmap.context.switchFloor(curFloor);\n this.bmap.initialFloorCamera();\n this.bmap.triggerHooks(HooksName.SWITCH_FLOOR_AFTER, { curFloor, graphics })\n } else {\n if (!data.length) {\n return;\n }\n const curFloor = this.bmap.context.currentFloor!;\n const legacyToGraphicMap = curFloor.userData.legacyToGraphicMap;\n const graphicMap = curFloor.userData.graphicMap;\n const graphics: Graphic[] = [];\n for (const item of data) {\n if (item.info.group === \"ground\") {\n curFloor.createGround(item.info);\n } else {\n const graphic = curFloor.addGraphic(item.info);\n graphic.userData.data = item;\n legacyToGraphicMap.set(item.legacy_id, graphic);\n graphics.push(graphic);\n }\n graphicMap.set(item.element_uuid, item);\n }\n this.bmap.triggerHooks(HooksName.SWITCH_FLOOR_BEFORE, { curFloor, graphics })\n this.bmap.initialFloorCamera();\n this.bmap.triggerHooks(HooksName.SWITCH_FLOOR_AFTER, { curFloor, graphics })\n }\n }\n\n filterData(data: GraphicInfo[], query: LoadGraphicQuery) {\n if (!this.isSameFloor(query)) {\n // \u65B0\u7684\u697C\u5C42\u6570\u636E\n return data;\n }\n // \u8981\u548C\u5DF2\u6709\u7684\u697C\u5C42\u6570\u636E\u505A\u7ED3\u5408\n const graphicMap = this.bmap.context.currentFloor!.userData.graphicMap;\n return data.filter((graphic) => !graphicMap.has(graphic.element_uuid));\n }\n\n private async switchFloorByStoreData(query: LoadGraphicQuery) {\n const storeData = await this.load({ ...query, resource_type_list: \"6\" });\n const filterData = this.filterData(storeData, query);\n this.switchFloorByData(filterData, query);\n }\n\n private async switchFloorByOtherData(query: LoadGraphicQuery) {\n const otherData = await this.load({\n ...query,\n resource_type_list: \"1,2,3,4\",\n });\n const filterData = this.filterData(otherData, query);\n this.switchFloorByData(filterData, query);\n }\n\n async loadBuildGround({ brand, project }: LoadGraphicQuery) {\n const buildingKey = generatorKeyByObj({ brand, project })\n await this.bmap.loadBuildingGround({ brand: brand, project: project })\n this.bmap.currentBuildGround = this.bmap.buildingGroundMap.get(buildingKey) || null;\n return this.bmap.currentBuildGround\n }\n\n async changeFloor(query: LoadGraphicQuery) {\n await Promise.all([\n this.switchFloorByStoreData(query),\n this.switchFloorByOtherData(query),\n ]);\n return Array.from(this.bmap.context.currentFloor!.userData.graphicMap.values());\n }\n}\n", "import { Floor } from \"../../elements\";\nimport { BMap } from \"../../bmap\";\nimport { Plugin } from \"../base\";\nimport { PoiLayer } from \"../../layer\";\nimport { Group } from \"three\";\n\nexport class MulFloors extends Plugin {\n poiLayer: PoiLayer;\n\n floors: Floor[] = [];\n\n group = new Group();\n constructor(bmap: BMap) {\n super(bmap);\n this.poiLayer = new PoiLayer(bmap.context);\n }\n\n show(floors: Floor[]) {\n let height = floors[0].userData.height;\n floors.forEach((floor) => {\n floor.poiLayer.pois.forEach((poi) => {\n this.poiLayer.pushPoi(poi);\n });\n floor.poiLayer.pois.length = 0;\n floor.poiLayer.dispose();\n floor.position.z = height;\n height += floor.userData.height;\n });\n const { scene, currentFloor } = this.bmap.context;\n if (currentFloor) {\n scene.remove(currentFloor);\n currentFloor.dispose();\n }\n this.group.add(this.poiLayer, ...floors);\n scene.add(this.group);\n this.floors = floors;\n }\n\n hide() {\n const { scene } = this.bmap.context;\n scene.remove(this.group);\n this.poiLayer.clear(true);\n this.floors.forEach((floor) => {\n floor.dispose();\n });\n this.floors = [];\n this.group.clear();\n }\n\n fitCamera() {\n const { context, config, type } = this.bmap;\n context.cameraBound.setEnable(false);\n // \u8BBE\u7F6Ezoom\n context.control.minZoom = 0;\n context.control.maxZoom = Infinity;\n context.camera.zoom = 1;\n context.setAzimuthalAngle(config.control.defaultAzimuthal, 0);\n context.setPolarAngle(config.control.defaultPolar, 0);\n context.fitCameraToObject(this.group, undefined, 0);\n const basicZoom = context.camera.zoom;\n // \u8BBE\u7F6Ezoom\n context.control.minZoom = basicZoom;\n context.control.maxZoom = basicZoom * 25;\n if (type === \"3d\") {\n context.fitCameraToObject(this.group, config.defaultPadding, 0, false);\n }\n this.bmap.basicZoom = context.camera.zoom;\n context.control.addEventListener(\n \"change\",\n this.bmap.onControlChange.bind(this.bmap)\n );\n this.bmap.onControlChange();\n context.cameraBound.setEnable(true);\n }\n\n dispose(): void {\n this.poiLayer.dispose();\n this.floors.forEach((item) => item.dispose());\n this.floors = [];\n }\n}\n", "let _db: IDBDatabase;\n\n/**\n * \u83B7\u53D6indexDb\u8FDE\u63A5\n * @param database\n * @returns\n */\nexport function createDb(database = \"aibee_map\"): Promise<{db: IDBDatabase, type: string}> {\n return new Promise((resolve, reject) => {\n if (_db) {\n return resolve({db: _db, type: \"success\"});\n }\n const request = indexedDB.open(database);\n\n request.onupgradeneeded = function(event: any) { \n _db = event.target.result; \n console.log(\"onupgradeneeded\")\n // \u5728\u8FD9\u91CC\u8FDB\u884C createObjectStore \u64CD\u4F5C \n resolve({db: _db, type: \"onupgradeneeded\"});\n }; \n\n request.onsuccess = (event: any) => {\n _db = event.target.result;\n resolve({db: _db, type: \"success\"});\n };\n\n request.onerror = (event: any) => {\n reject(event);\n };\n });\n}\n\n/**\n * \u67E5\u8BE2\u6570\u636E\n * @param storeName \n * @param key \n * @param db \n * @returns \n */\nexport function get(storeName: string, key: string, db = _db) {\n return new Promise((resolve, reject) => {\n if (!db) {\n reject(\"\u6CA1\u6709db\");\n }\n const objectStore = db\n .transaction([storeName], \"readonly\")\n .objectStore(storeName);\n const request = objectStore.get(key);\n request.onsuccess = () => {\n if (request.result) {\n resolve(request.result.value);\n } else {\n resolve(null);\n }\n };\n request.onerror = (event) => {\n console.log(\"[getVersionByKey]\", event);\n resolve(null);\n };\n });\n}\n\n/**\n * \u6DFB\u52A0\u6570\u636E\n * @param storeName \n * @param key \n * @param value \n * @param db \n * @returns \n */\nexport function set(storeName: string, key: string, value: any, db = _db) {\n return new Promise((resolve, reject) => {\n if (!db) {\n reject(\"\u6CA1\u6709db\");\n }\n return new Promise((resolve, reject) => { \n const objectStore = db\n .transaction([storeName], \"readwrite\")\n .objectStore(storeName);\n const request = objectStore.add({ key, value })\n request.onsuccess = function (event) {\n resolve(event)\n }\n request.onerror = function (event) {\n reject(event)\n }\n })\n })\n}\n\n/**\n * \u521B\u5EFA\u6570\u636E\u8868\n * @param storeName \n * @param db \n * @returns \n */\nexport function createStore(storeName: string, db = _db) {\n if (!db) {\n return\n }\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName, { keyPath: \"key\" });\n }\n}\n\n/**\n * \u5220\u9664\u6570\u636E\n * @param storeName \n * @param key \n * @param db \n * @returns \n */\nexport function remove(storeName: string, key: string, db = _db) {\n return new Promise((resolve, reject) => {\n if (!db) {\n reject(\"\u6CA1\u6709db\");\n }\n return new Promise((resolve, reject) => {\n const objectStore = db.transaction([storeName], 'readwrite').objectStore(storeName)\n const request = objectStore.delete(key)\n request.onsuccess = function (event) {\n resolve(event)\n }\n request.onerror = function (event) {\n reject(event)\n }\n })\n })\n}\n\n/**\n * \u66F4\u65B0\u6570\u636E\n * @param storeName \n * @param key \n * @param value \n * @param db \n * @returns \n */\nexport function update(storeName: string, key: string, value: any, db = _db) {\n return new Promise((resolve, reject) => {\n if (!db) {\n reject(\"\u6CA1\u6709db\");\n }\n return new Promise((resolve, reject) => {\n const objectStore = db.transaction([storeName], 'readwrite').objectStore(storeName)\n const request = objectStore.put({ key, value })\n request.onsuccess = function (event) {\n resolve(event)\n }\n request.onerror = function (event) {\n reject(event)\n }\n })\n })\n}\n\nexport function closeDb() {\n _db?.close();\n _db = null as unknown as IDBDatabase;\n}", "import { PointGeometry, PolygonGeometry } from \"../../types\";\n\nexport function transformGraphicData(\n data: { geometry: PolygonGeometry | PointGeometry; deltaHeight?: number }[],\n center: [number, number],\n baseIndex = 0\n) {\n data.forEach((item) => {\n item.geometry.coords = JSON.parse(JSON.stringify(item.geometry.cds));\n if (item.geometry.type === \"polygon\") {\n item.geometry.coords.map((cds) => {\n if (Array.isArray(cds)) {\n cds.forEach((coord) => {\n coord[0] -= center[0];\n coord[1] -= center[1];\n });\n }\n });\n if (item.geometry.otherCds) {\n item.geometry.otherCoords = item.geometry.otherCds.map((cds) =>\n cds.map((item) => translatePosToCenter(item, center))\n );\n }\n } else {\n // point\n item.geometry.coords = translatePosToCenter(item.geometry.cds, center);\n }\n });\n for (let i = 0; i < data.length; i++) {\n const item = data[i];\n item.deltaHeight = 0.00001 * (baseIndex + i + 1);\n }\n}\n\nexport function translatePosToCenter(\n cds: [number, number],\n center: [number, number]\n): [number, number] {\n return [cds[0] - center[0], cds[1] - center[1]];\n}\n", "// \u52A0\u8F7DAibee\u5730\u56FE/\u8DEF\u7F51\u6570\u636E\n\nimport { createStore, createDb, closeDb, set, get } from \"../../utils/index-db\";\nimport { BMap } from \"../../bmap\";\nimport { Floor, Graphic, Wall, GroundTexture, GlbModel, Lane, MergeGraphic } from \"../../elements\";\nimport { AibeeFloorData, AibeeGraphicLayer, AibeeLaneLayer, AibeeRangeLayer, AibeeWallLayer } from \"./type\";\nimport { transformGraphicData, translatePosToCenter } from \"./utils\";\nimport { PointGeometry } from \"src/types\";\n\nexport interface AibeeLoaderOption {\n loadRoadNetwork: boolean; // \u52A0\u8F7D\u8DEF\u7F51\u6570\u636E\n}\n\nexport const defaultAibeeLoaderOption = {\n loadRoadNetwork: false,\n}\n\nconst VersionStoreName = \"version\"; // \u7248\u672C\nconst MapDataStoreName = \"map_data\" // \u5730\u56FE\u6570\u636E \nconst RoadNetworkDataStoreName = \"road_network_data\" // \u8DEF\u7F51\n\nexport interface AibeeFloorInfo {\n floor_id: number;\n map_url: string;\n map_url_bin: string;\n route_url: string;\n route_url_bin: string;\n version_id: string;\n floor: string;\n floor_name: string;\n}\n\nexport class AibeeLoader {\n\n floors: AibeeFloorInfo[] = []\n\n constructor(public bmap: BMap) {\n this.initDb()\n }\n\n async initDb() {\n try {\n const {db, type} = await createDb()\n if (type === \"onupgradeneeded\") {\n createStore(VersionStoreName)\n createStore(MapDataStoreName)\n createStore(RoadNetworkDataStoreName)\n }\n } catch(e) {\n console.log(\"[\u6253\u5F00indexDb\u9519\u8BEF]\", e)\n }\n }\n\n async load(data: string | AibeeFloorInfo[]) {\n this.clear()\n if (Array.isArray(data)) {\n this.floors = data;\n } else {\n const res = await fetch(data).then(res => res.json())\n if (res.code === '0') {\n this.floors = res.data.list\n }\n }\n }\n\n setCacheData(storeName: string, key: string | number, data: any) { \n return set(storeName, `${key}`, data)\n }\n\n getCacheData<T>(storeName: string, key: string | number): Promise<T> { \n return get(storeName, `${key}`) as Promise<T>\n }\n\n getFloorCacheKey(floorInfo: AibeeFloorInfo) {\n return `${floorInfo.floor_id}`\n }\n\n async getFloorData(floor: string): Promise<Floor | null> {\n const floorInfo = this.floors.find(item => item.floor === floor)\n if (!floorInfo) { return null }\n const cacheKey = this.getFloorCacheKey(floorInfo)\n try {\n const cacheVersion = await this.getCacheData(VersionStoreName, cacheKey)\n if (cacheVersion === floorInfo.version_id) {\n const res: AibeeFloorData = await this.getCacheData(MapDataStoreName, cacheKey)\n if (res) {\n return this.getDataByJson(res)\n }\n }\n return this.getFloorDataByFloorInfo(floorInfo)\n } catch {\n return this.getFloorDataByFloorInfo(floorInfo)\n }\n }\n\n async getFloorDataByFloorInfo(floorInfo: AibeeFloorInfo): Promise<Floor> { \n const cacheKey = this.getFloorCacheKey(floorInfo)\n // \u76F4\u63A5\u8BF7\u6C42json\u6570\u636E\n console.time(`zstd_json`)\n const res1 = await fetch(floorInfo.map_url).then(res => res.json())\n console.timeEnd(`zstd_json`)\n this.setCacheData(MapDataStoreName, cacheKey, res1)\n this.setCacheData(VersionStoreName, cacheKey, floorInfo.version_id)\n return this.getDataByJson(res1)\n }\n\n // \u83B7\u53D6\u8DEF\u7F51\u6570\u636E\n async getRoadNetworkData() {\n const res = await Promise.all(this.floors.map(async item => { \n const cacheKey = this.getFloorCacheKey(item)\n try {\n const cacheVersion = await this.getCacheData(VersionStoreName, cacheKey)\n if (cacheVersion === item.version_id) {\n const res: AibeeFloorData = await this.getCacheData(RoadNetworkDataStoreName, cacheKey)\n if (res) {\n return res\n }\n }\n const route = await fetch(item.route_url).then(res => res.json())\n await this.setCacheData(RoadNetworkDataStoreName, cacheKey, route)\n return route\n } catch {\n const route = await fetch(item.route_url).then(res => res.json())\n await this.setCacheData(RoadNetworkDataStoreName, cacheKey, route)\n return route\n }\n }))\n return res.filter(item => item.points)\n }\n\n // \u7A7A\u95F2\u65F6\u95F4\u8BF7\u6C42\u5176\u4ED6\u6570\u636E\n async getOtherDataByFreeTime() {\n // TODO \u53EF\u4EE5\u8003\u8651\u5728webworker\u4E2D\u8BF7\u6C42\u6570\u636E\uFF0C\u5355\u72EC\u8BA1\u7B97\u8BF7\u6C42\u7684\u5E76\u53D1\u6570\u91CF\n // TODO \u83B7\u53D6\u5176\u4ED6\u6570\u636E\n }\n\n // \u83B7\u53D6\u591A\u697C\u5C42\u6570\u636E\n async getMulFloorsData(floors: string[]): Promise<Floor[]> { \n return Promise.all(floors.map(floor => this.getFloorData(floor)))\n .then(data => data.filter(item => item)) as Promise<Floor[]>\n }\n\n async getDataByUrl(url: string): Promise<Floor> {\n const data: AibeeFloorData = await fetch(url).then(res => res.json())\n return this.getDataByJson(data)\n }\n\n getDataByJson(data: AibeeFloorData): Floor {\n const floor = new Floor(this.bmap.context)\n let center: [number, number] = [0, 0]\n data.layers.forEach(layer => { \n switch (layer.l_type) {\n case \"range\":\n const data = layer.elements[0] as AibeeRangeLayer['elements'][0]\n center = [data.center_x, data.center_y]\n break;\n case \"graph\":\n const graphics: Graphic[] = []\n const graphicMap = new Map<string, Graphic>();\n transformGraphicData(layer.elements, center)\n const canMergeGraphics: AibeeGraphicLayer['elements'] = []\n layer.elements.forEach(options => { \n if (options.group === \"ground\") {\n floor.createGround(options)\n } else if (options.canMerge) { \n canMergeGraphics.push(options)\n } else {\n const graphic = floor.addGraphic(options)\n graphics.push(graphic)\n graphicMap.set(options.id, graphic)\n }\n })\n floor.userData.graphics = graphics\n floor.userData.graphicMap = graphicMap\n // \u5BF9\u53EF\u4EE5\u5408\u5E76\u7684\u56FE\u5F62\u505A\u5408\u5E76\u5904\u7406\n const group = canMergeGraphics.reduce((obj, options) => { \n const { fillColor, fillOpacity, strokeColor, strokeOpacity, height } = options\n const key = `${fillColor}-${fillOpacity}-${strokeColor}-${strokeOpacity}-${height}`\n if (obj[key]) {\n obj[key].push(options)\n } else {\n obj[key] = [options]\n }\n return obj\n }, {} as Record<string, AibeeGraphicLayer[\"elements\"]>)\n Object.values(group).forEach(options => { \n const mergeGeometries = new MergeGraphic(this.bmap.context, options)\n floor.mergeGraphicLayer.add(mergeGeometries)\n })\n break;\n case \"ground\":\n transformGraphicData(layer.elements, center)\n const grounds = layer.elements.map(options => new Graphic(this.bmap.context, options))\n floor.addGrounds(grounds)\n break;\n case \"wall\":\n transformGraphicData(layer.elements, center)\n // \u5206\u7EC4\n const wallGroup = layer.elements.reduce((obj, options) => { \n const { fillColor, fillOpacity, strokeColor, strokeOpacity, height } = options\n const key = `${fillColor}-${fillOpacity}-${strokeColor}-${strokeOpacity}-${height}`\n if (obj[key]) {\n obj[key].push(options)\n } else {\n obj[key] = [options]\n }\n return obj\n }, {} as Record<string, AibeeWallLayer[\"elements\"]>)\n Object.values(wallGroup).forEach(optionArray => { \n const wall = new Wall(this.bmap.context, optionArray as any)\n floor.wallLayer.add(wall)\n })\n break;\n case \"lane\":\n transformGraphicData(layer.elements, center)\n // \u5206\u7EC4\n const laneGroup = layer.elements.reduce((obj, options) => { \n const { fillColor, fillOpacity, strokeColor, strokeOpacity } = options\n const key = `${fillColor}-${fillOpacity}-${strokeColor}-${strokeOpacity}`\n if (obj[key]) {\n obj[key].push(options)\n } else {\n obj[key] = [options]\n }\n return obj\n }, {} as Record<string, AibeeLaneLayer[\"elements\"]>)\n Object.values(laneGroup).forEach(optionArray => { \n const lane = new Lane(this.bmap.context, optionArray as any)\n floor.laneLayer.add(lane)\n })\n break;\n case \"texture2d\":\n case \"texture3d\":\n transformGraphicData(layer.elements, center)\n layer.elements.forEach(options => {\n const texture = new GroundTexture(this.bmap.context, options)\n floor.textureLayer.add(texture)\n })\n break;\n case \"glb\":\n transformGraphicData(layer.elements, center)\n layer.elements.forEach(options => {\n const model = new GlbModel(this.bmap.context, {\n ...options,\n url: options.secondUrl,\n rotate: options.secondRotate,\n width: options.secondWidth,\n })\n floor.glbModelLayer.add(model)\n })\n break;\n case \"store\":\n transformGraphicData(layer.elements, center)\n layer.elements.map(options => { \n const pos = translatePosToCenter([options.center_x, options.center_y], center)\n const graphic = floor.addGraphic(options)\n floor.userData.graphics.push(graphic)\n floor.userData.graphicMap.set(options.id, graphic)\n floor.poiLayer.createPoi({\n id: options.id,\n icon: options.poi_info.icon,\n texts: [{ text: options.store_name || options.poi_info.name }],\n position: { x: pos[0], y: pos[1], z: options.airHeight },\n icon_size: [18, 18]\n })\n })\n break;\n case \"facility\":\n transformGraphicData(layer.elements, center)\n layer.elements.map(options => { \n const pos = translatePosToCenter(options.geometry.cds as PointGeometry['cds'], center)\n const graphic = floor.addGraphic(options)\n floor.userData.graphics.push(graphic)\n floor.userData.graphicMap.set(options.id, graphic)\n if (options.poi_info) {\n floor.poiLayer.createPoi({\n id: options.id,\n icon: options.poi_info.icon,\n texts: [{ text: options.store_name || options.poi_info.name }],\n position: { x: pos[0], y: pos[1], z: options.airHeight },\n icon_size: [18, 18]\n })\n }\n })\n break;\n case \"parkingSpace\":\n transformGraphicData(layer.elements, center)\n let parkingSpacesGraphics: Graphic[] = [];\n let parkingSpacesGraphicMap = new Map<string, Graphic>()\n layer.elements.forEach(options => { \n const graphic = floor.addGraphic(options)\n parkingSpacesGraphics.push(graphic)\n parkingSpacesGraphicMap.set(options.id, graphic)\n const pos = translatePosToCenter([options.center_x, options.center_y], center)\n if (options.texts[0]) {\n floor.poiLayer.createPoi({\n id: options.id,\n texts: [{ text: options.texts[0] }],\n position: { x: pos[0], y: pos[1], z: options.airHeight }\n })\n }\n })\n floor.userData.parkingSpaces = parkingSpacesGraphics\n floor.userData.parkingSpacesGraphicMap = parkingSpacesGraphicMap\n break;\n }\n })\n floor.userData.center = center\n floor.userData.height = data.floorHeight\n floor.name = data.floor\n return floor\n }\n\n clear() {\n // TODO \u6E05\u9664\u7F13\u5B58\u7684\u6570\u636E\n }\n\n dispose() {\n this.clear()\n closeDb()\n }\n}"],
|
|
5
|
+
"mappings": "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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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,4BACA,GACA,2BACA,2BACA,sBACA,yBACA,iCACA,GACA,oBACA,uBACA,2BACA,GACA,qCACA,GACA,6BACA,uBACA,0BACA,kBACA,GACA,IACA,GACA,gBACA,GACA,kDACA,GACA,uCACA,gBACA,GACA,mDACA,sDACA,gDACA,4CACA,GACA,oDACA,2CACA,2CACA,GACA,mCACA,GACA,gBACA,mEACA,wEACA,aACA,qDACA,qDACA,0CACA,GACA,+CACA,8CACA,6EACA,GACA,QACA,GACA,2EACA,mDACA,2BACA,kCACA,oCACA,wCACA,6EACA,QACA,GACA,4CACA,GACA,mCACA,GACA,cAAY,mBACZ,cAAY,YACV,iEACF,cAAY,WACZ,GACF,EAAE,KAAK;AAAA,CAAI,EAEX,cAAY,cAAmB,CAC7B,GACA,cAAY,kBACZ,cAAY,0BACZ,GACA,yBACA,8BACA,wBACA,6BACA,yBACA,2BACA,4BACA,2BACA,4BACA,2BACA,uBACA,GACA,oBACA,uBACA,2BACA,GACA,gBACA,GACA,cAAY,qBACZ,GACA,uBACA,8DACA,4EACA,qCACA,2BACA,yFACA,QACA,wBACA,qDACA,GACA,cAAY,aACZ,GACF,EAAE,KAAK;AAAA,CAAI,EAEX,IAAMG,GAAN,cAA+B,gBAAe,CAC5C,YAAYC,EAAY,CACtB,MAAM,CACJ,SAAU,OAAO,OAAO,CAAC,EAAG,cAAY,IAAK,CAC3C,UAAW,CAAE,MAAO,CAAE,EACtB,IAAK,CAAE,MAAO,IAAK,EACnB,OAAQ,CAAE,MAAO,CAAE,EACnB,SAAU,CAAE,MAAO,IAAK,EACxB,YAAa,CAAE,MAAO,CAAE,EACxB,MAAO,CAAE,MAAO,IAAI,QAAM,QAAQ,CAAE,EACpC,QAAS,CAAE,MAAO,CAAE,EACpB,WAAY,CAAE,MAAO,IAAI,UAAQ,EAAG,CAAC,CAAE,EACvC,gBAAiB,CAAE,MAAO,CAAE,EAC5B,UAAW,CAAE,MAAO,CAAE,EACtB,WAAY,CAAE,MAAO,CAAE,EACvB,UAAW,CAAE,MAAO,EAAI,EACxB,QAAS,CAAE,MAAO,CAAE,EACpB,WAAY,CAAE,MAAO,CAA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",
|
|
6
|
+
"names": ["require_vec2_copy", "__commonJSMin", "exports", "module", "out", "a", "require_chaikin_smooth", "__commonJSMin", "exports", "module", "copy", "input", "output", "i", "p0", "p1", "p0x", "p0y", "p1x", "p1y", "Q", "R", "require_PriorityQueue", "__commonJSMin", "exports", "module", "PriorityQueue", "a", "b", "key", "value", "priority", "element", "require_removeDeepFromMap", "__commonJSMin", "exports", "module", "removeDeepFromMap", "map", "key", "newMap", "aKey", "val", "require_toDeepMap", "__commonJSMin", "exports", "module", "isValidNode", "val", "cost", "toDeepMap", "source", "map", "key", "require_validateDeep", "__commonJSMin", "exports", "module", "validateDeep", "map", "value", "key", "require_Graph", "__commonJSMin", "exports", "module", "Queue", "removeDeepFromMap", "toDeepMap", "validateDeep", "Graph", "graph", "name", "neighbors", "nodes", "key", "start", "goal", "options", "explored", "frontier", "previous", "path", "totalCost", "avoid", "node", "nodeKey", "nCost", "nNode", "frontierPriority", "nodeCost", "args", "import_three", "Timer", "fn", "timer", "wait", "import_three", "import_MapControls", "initScene", "scene", "initRenderer", "renderer", "initCamera", "width", "height", "camera", "initLight", "lights", "ambientLight", "initControl", "domElement", "control", "initShape", "path", "holePath", "shape", "item", "cur", "hole", "initDirectionalLight", "color", "intensity", "directionalLight", "dispose", "recursive", "child", "m", "mat", "hasChinese", "str", "import_three", "textTextureMap", "initCanvas", "canvas", "ctx", "createCanvas", "c", "t", "getTextureByText", "text", "y", "hasChinese", "width", "imageData", "texture", "clearTextTexture", "clearCanvas", "import_three", "import_turf", "vector3ToDevice", "vector", "camera", "w", "h", "_vector", "_w", "_h", "x", "y", "getCenter", "coordinates", "features", "item", "isContain", "point", "start", "end", "getLongestSideDir", "cds", "maxDistance", "dir", "i", "point_0", "point_1", "distance", "getLength", "getPathLength", "path", "length", "calc_angle", "p0", "p1", "p2", "line1", "line2", "angle", "l01", "proxyOptions", "target", "master", "p", "receiver", "newValue", "oldValue", "res", "timeoutPromise", "promise", "timeout", "resolve", "reject", "createSvgElement", "tag", "createSvg", "w", "h", "svg", "createCircle", "radius", "fill", "circle", "createLine", "stroke", "line", "createRect", "rect", "setCirclePosition", "x", "y", "setLineStartEnd", "start", "end", "setRectPosition", "sleepOnePromise", "sleepOneRf", "resolve", "strToNumber", "str", "addAlphaToHexColor", "hexColor", "alpha", "r", "g", "b", "newR", "newG", "newB", "darkenColor", "factor", "numbers", "import_GLTFLoader", "createLoader", "loader", "modelMap", "loadModel", "url", "gltf", "p", "resolve", "reject", "disposeLoader", "isMac", "isControl", "key", "isMac", "oncePrefix", "Events", "type", "callback", "events", "event", "onceEvents", "args", "fn", "HooksName", "generatorKeyByObj", "obj", "key", "xhrGet", "url", "options", "resolve", "reject", "xhr", "key", "response", "error", "UniqueKey", "_UniqueKey", "key", "import_three", "import_chaikin_smooth", "getAngle", "vec0", "vec1", "v0", "v1", "averageStepLength", "path", "sum", "x0", "y0", "x1", "y1", "smoothPath", "threshold", "result", "smooth", "simplifyPath", "ignoreFirst", "smoothingOptimization", "simplifyDistanceThreshold", "maximumTurningDegree", "smoothingDistance", "joints", "firstIgnored", "i", "p0", "p1", "p2", "deg", "dist", "simplifiedPath", "head", "mid", "tail", "halfHeadMidDist", "halfMidTailDist", "curveHead", "curveTail", "curveToSmooth", "removeWeightPath", "points", "checkedPath", "lastCheckedPoint", "x", "y", "distancePointToSegment", "point", "start", "end", "segmentLength", "t", "closestPoint", "moveOnRoute", "startPoint", "endPoint", "distance", "startX", "startY", "endX", "endY", "routeLength", "ratio", "newX", "newY", "PathDirection", "calc_direction", "angle", "calc_angle", "getDirectPath", "arr", "getLength", "direction", "last", "import_node_dijkstra", "RoadNetwork", "lift_priority", "Graph", "roadInfo", "floorRoadInfo", "point", "pointKey", "arr", "obj", "item", "fromKey", "toKey", "fromCds", "toCds", "distance", "getLength", "start", "end", "lineMap", "map", "escalatorPriority", "straightLadderPriority", "staircasePriority", "_", "value", "i", "j", "step", "floor", "id", "cur", "data", "type", "transformedStart", "transformedEnd", "getPathFn", "facilityPoints", "paths", "sum", "getPathLength", "route", "startPointId", "endPointId", "pathData", "convertToSnakeCase", "str", "match", "uniqueKey", "UniqueKey", "triggerWorker", "worker", "type", "data", "resolve", "reject", "key", "onMessage", "toWebWorker", "obj", "events", "convertToSnakeCase", "result", "e", "import_three", "import_tween", "import_three", "import_three", "defaultGraphicOptions", "Graphic", "context", "options", "proxyOptions", "x", "y", "value", "center", "box", "size", "shape", "initShape", "material", "material1", "darkenColor", "pos", "dir", "minOrigin", "raycaster", "min", "maxOrigin", "raycaster2", "max", "_max", "maxValue", "__max", "_min", "dir2", "___max", "__min", "lineMaterial", "points", "height", "coords", "j", "curCds", "i", "cur", "next", "lineGeometry", "line", "intersects", "position", "distance", "import_three", "Shadow", "directionalLight", "initDirectionalLight", "size", "x", "y", "color", "position", "width", "height", "geometry", "material", "mesh", "target", "opacity", "dispose", "import_three", "import_three", "import_lodash", "defaultOptions", "Overlay", "context", "options", "observer", "Graphic", "max", "min", "centerX", "centerY", "x", "y", "z", "width", "height", "positions", "obj", "key", "vector3ToDevice", "clientWidth", "clientHeight", "halfWidth", "halfHeight", "placements", "i", "placement", "position", "div", "element", "visible", "display", "opacity", "clientX", "clientY", "force", "vector", "defaultOptions", "Poi", "context", "options", "proxyOptions", "Overlay", "x", "y", "height", "value", "div", "text", "sleepOnePromise", "width", "icon", "textDiv", "f", "item", "key", "img", "visible", "boxScale", "w", "h", "box", "import_three", "import_three", "import_heatmap", "import_turf", "HeatmapElement", "context", "data", "width", "height", "leftTop", "center", "geometry", "texture", "material", "x", "y", "matrix", "item", "vector", "features", "box", "getCenter", "import_three", "Model", "context", "options", "object", "loadModel", "dispose", "import_three", "import_three", "Layer", "context", "dispose", "item", "GraphicLayer", "Layer", "context", "options", "graphic", "Graphic", "id", "raycaster", "initData", "data", "res", "item", "pos", "distance", "import_lodash", "PoiLayer", "Layer", "Timer", "context", "force", "item", "options", "poi", "Poi", "index", "id", "i", "x", "y", "range", "left", "right", "top", "bottom", "valid", "box", "Floor", "context", "Layer", "GraphicLayer", "PoiLayer", "Shadow", "options", "ground", "Graphic", "grounds", "model", "Model", "box", "center", "size", "graphicOptions", "poiOptions", "data", "HeatmapElement", "opacity", "visible", "import_three", "BaseSvg", "context", "createSvg", "width", "height", "enable", "e", "camera", "renderer", "x", "y", "clientWidth", "clientHeight", "nx", "ny", "vector", "container", "vector3ToDevice", "SvgLine", "BaseSvg", "context", "circle", "line", "createCircle", "createLine", "enable", "point1", "setCirclePosition", "setLineStartEnd", "point2", "e", "point", "x", "y", "vector", "distance", "x1", "y1", "x2", "y2", "SvgPolygon", "BaseSvg", "context", "enable", "circle", "line", "point", "index", "devicePoint", "setCirclePosition", "setLineStartEnd", "e", "x", "y", "fill", "radius", "stroke", "createCircle", "createLine", "cx", "cy", "vector", "area", "cds", "item", "numPoints", "i", "j", "import_three", "SelectBox", "BaseSvg", "context", "line", "createRect", "i", "enable", "box", "camera", "w", "h", "min", "max", "leftBottom", "vector3ToDevice", "rightTop", "setRectPosition", "left", "bottom", "right", "top", "halfWidth", "corners", "centerHalfWidth", "centerX", "centerY", "centers", "graphic", "import_three", "import_BufferGeometryUtils", "Wall", "context", "options", "geometries", "option", "shape", "initShape", "item", "vertexShader", "fragmentShader", "maxZ", "positionAttribute", "i", "z", "shaderMaterial", "darkenColor", "strokeColor", "strokeOpacity", "lineMaterial", "height", "deltaHeight", "geometry", "points", "_height", "coords", "j", "curCds", "cur", "next", "line", "mesh", "import_three", "defaultOptions", "GroundTexture", "context", "options", "proxyOptions", "deltaHeight", "airHeight", "geometry", "iconUrl", "opacity", "shape", "initShape", "extrudeGeometry", "planeMaterial", "mesh", "import_three", "defaultGlbOptions", "GlbModel", "context", "options", "object", "loadModel", "box", "size", "max", "scale", "dispose", "import_three", "import_BufferGeometryUtils", "import_Line2", "import_LineGeometry", "Lane", "context", "options", "geometries", "option", "shape", "initShape", "item", "fillColor", "fillOpacity", "material", "strokeColor", "strokeOpacity", "lineMaterial", "deltaHeight", "geometry", "points", "_height", "coords", "j", "curCds", "i", "cur", "next", "group", "obj", "key", "vec", "line", "mesh", "import_three", "import_BufferGeometryUtils", "MergeGraphic", "context", "options", "option", "defaultGraphicOptions", "geometries", "shape", "initShape", "geometry", "vertexShader", "fragmentShader", "maxZ", "positionAttribute", "i", "z", "shaderMaterial", "darkenColor", "lineMaterial", "points", "height", "coords", "j", "curCds", "cur", "next", "lineGeometry", "line", "import_three", "BoxSelection", "BaseSvg", "context", "fill", "stroke", "createRect", "enable", "setRectPosition", "e", "point", "startPoint", "endPoint", "leftTop", "width", "height", "camera", "w", "h", "startDevice", "vector3ToDevice", "endDevice", "rightBottom", "list", "item", "Graphic", "object", "position", "position2d", "isContain", "box", "min", "max", "minDevice", "maxDevice", "Selection", "context", "BoxSelection", "e", "offsetX", "offsetY", "x", "y", "graphics", "graphicIdSet", "item", "graphic", "isMac", "isControl", "list", "import_three", "HoverHelper", "context", "Timer", "graphics", "pois", "e", "poiGraphics", "item", "graphic", "time", "allGraphics", "resGraphic", "distance", "poi", "x", "y", "curDistance", "timer", "size", "rect", "import_LineMaterial", "import_three", "vectorToString", "vector", "MaterialFactory", "context", "color", "opacity", "key", "lineMaterial", "material", "gradualColor", "center", "maxValue", "direction", "max", "min", "vertexShader", "fragmentShader", "url", "texture", "width", "dashed", "val", "_", "import_three", "CameraBound", "context", "enable", "el", "Floor", "box", "camera", "w", "h", "min", "max", "lb", "vector3ToDevice", "rt", "lt", "rb", "left", "right", "top", "bottom", "width", "height", "pt", "pr", "pb", "pl", "checkedRight", "checkedLeft", "checkedTop", "checkedBottom", "bound", "import_three", "TextureFactory", "context", "url", "texture", "Context", "container", "config", "Selection", "HoverHelper", "MaterialFactory", "TextureFactory", "initScene", "initRenderer", "initLight", "Timer", "TweenGroup", "x", "y", "width", "height", "w", "h", "initCamera", "initControl", "polarAngle", "CameraBound", "point1", "point2", "clientWidth", "clientHeight", "device1", "vector3ToDevice", "device2", "color", "item", "floor", "position", "camera", "renderer", "e", "graphics", "pois", "point", "raycaster", "isMultipleSelect", "polar", "duration", "timeoutPromise", "resolve", "start", "end", "tween", "azimuthal", "maxAzimuthAngle", "minAzimuthAngle", "disable", "zoom", "center", "lookAtVector", "object", "padding", "force2DView", "top", "right", "bottom", "left", "boundingBox", "max", "min", "leftTop", "rightTop", "rightBottom", "leftBottom", "leftTop2d", "rightTop2d", "leftBottom2d", "rightBottom2d", "size", "xScale", "yScale", "scale", "light", "dispose", "import_lodash", "defaultConfig", "getConfig", "config", "import_lodash", "loadBuildingGround", "brand", "project", "config", "apiDomain", "floorRange", "apiInfo", "url", "res", "data", "loadGraphics", "floor", "ts", "resource_type_list", "floorGraphic", "item", "MapTypePolar", "BMap", "container", "config", "getConfig", "Context", "Timer", "brand", "project", "floor", "ts", "resource_type_list", "loadGraphics", "data", "center", "getCenter", "key", "generatorKeyByObj", "p", "resolve", "loadBuildingGround", "floorKey", "buildGround", "item", "baseIndex", "cds", "coord", "x", "y", "ground", "markGraphic", "graphic", "i", "plugin", "curFloor", "Floor", "legacyToGraphicMap", "graphics", "hooks", "curFloorData", "buildingKey", "createdFloor", "name", "graphicMap", "graphicInfo", "basicZoom", "zoom", "options", "model", "facilityAngle", "facilityXScale", "facilityYScale", "Graphic", "position", "ele", "duration", "timeoutPromise", "target", "width", "height", "camera", "offsetX", "vector3ToDevice", "v3", "vector", "clientWidth", "clientHeight", "type", "time", "cameraZoom", "e", "polar", "azimuthal", "observe", "keys", "radius", "reject", "SvgLine", "dispose", "distance", "SvgPolygon", "area", "nodeId", "id", "clearTextTexture", "clearCanvas", "disposeLoader", "import_three", "Plugin", "bmap", "Equipment", "Plugin", "bmap", "apiDomain", "equipmentList", "apiInfo", "url", "res", "item", "graphics", "graphic", "equipment", "poi", "inlineWorker", "scriptText", "blob", "url", "worker", "Worker", "inlineWorker", "import_three", "import_three", "MeshLine", "value", "matrixWorld", "g", "c", "points", "wcb", "j", "p", "MeshLineRaycast", "raycaster", "intersects", "inverseMatrix", "ray", "sphere", "interRay", "geometry", "vStart", "vEnd", "interSegment", "step", "index", "attributes", "indices", "positions", "widths", "i", "l", "a", "b", "width", "precision", "precisionSq", "distSq", "distance", "aa", "ab", "maxLength", "k", "p0", "p1", "w", "v", "n", "memcpy", "src", "srcOffset", "dst", "dstOffset", "length", "position", "previous", "next", "MeshLineMaterial", "parameters", "source", "defaultConfig", "arrow_default", "Path", "navigation", "config", "points", "camera", "width", "height", "screenPoints", "x", "y", "vector3ToDevice", "getPathLength", "repeat", "url", "r", "j", "_points", "i", "lineGeometry", "MeshLine", "texture", "material", "MeshLineMaterial", "mesh", "import_tween", "defaultConfig", "Navigation", "Plugin", "Worker", "UniqueKey", "TweenGroup", "bmap", "project", "options", "apiDomain", "roadNetwork", "apiInfo", "triggerWorker", "roadInfo", "e", "roadData", "item", "curFloor", "curFloorPathData", "points", "paths", "floorName", "curFloorPath", "onCenterChange", "x", "y", "start", "end", "type", "resolve", "reject", "_getPath", "data", "onChangeStatus", "status", "cPath", "Path", "simplifyPath", "point", "speed", "cPathIndex", "currentPath", "translatedPos", "distance", "pos", "index", "res", "cur", "arr", "closestPoint", "distancePointToSegment", "moveDistance", "moveDistanceArray", "getLength", "i", "sum", "speedSecond", "timeSecond", "tween", "sumDistance", "prevDistance", "needDistance", "startPoint", "nextPoint", "moveOnRoute", "speedInKmPerHour", "SplitLoad", "Plugin", "query", "cacheKey", "generatorKeyByObj", "data", "loadGraphics", "lenKey", "item", "len", "curFloor", "legacyToGraphicMap", "graphicMap", "graphics", "graphic", "floorName", "graphicInfo", "storeData", "filterData", "otherData", "brand", "project", "buildingKey", "import_three", "MulFloors", "Plugin", "bmap", "PoiLayer", "floors", "height", "floor", "poi", "scene", "currentFloor", "context", "config", "type", "basicZoom", "item", "_db", "createDb", "database", "resolve", "reject", "request", "event", "get", "storeName", "key", "db", "set", "value", "createStore", "closeDb", "_db", "transformGraphicData", "data", "center", "baseIndex", "item", "cds", "coord", "translatePosToCenter", "i", "defaultAibeeLoaderOption", "VersionStoreName", "MapDataStoreName", "RoadNetworkDataStoreName", "AibeeLoader", "bmap", "db", "type", "createDb", "createStore", "e", "data", "res", "storeName", "key", "set", "get", "floorInfo", "floor", "item", "cacheKey", "res1", "route", "floors", "url", "Floor", "center", "layer", "graphics", "graphicMap", "transformGraphicData", "canMergeGraphics", "options", "graphic", "group", "obj", "fillColor", "fillOpacity", "strokeColor", "strokeOpacity", "height", "mergeGeometries", "MergeGraphic", "grounds", "Graphic", "wallGroup", "optionArray", "wall", "Wall", "laneGroup", "lane", "Lane", "texture", "GroundTexture", "model", "GlbModel", "pos", "translatePosToCenter", "parkingSpacesGraphics", "parkingSpacesGraphicMap", "closeDb"]
|
|
7
7
|
}
|