`\n * element instead of an image. Inherits from `Icon` but ignores the `iconUrl` and shadow options.\n *\n * @example\n * ```js\n * var myIcon = L.divIcon({className: 'my-div-icon'});\n * // you can set .my-div-icon styles in CSS\n *\n * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\n * ```\n *\n * By default, it has a 'leaflet-div-icon' CSS class and is styled as a little white square with a shadow.\n */\n\nexport var DivIcon = Icon.extend({\n\toptions: {\n\t\t// @section\n\t\t// @aka DivIcon options\n\t\ticonSize: [12, 12], // also can be set through CSS\n\n\t\t// iconAnchor: (Point),\n\t\t// popupAnchor: (Point),\n\n\t\t// @option html: String|HTMLElement = ''\n\t\t// Custom HTML code to put inside the div element, empty by default. Alternatively,\n\t\t// an instance of `HTMLElement`.\n\t\thtml: false,\n\n\t\t// @option bgPos: Point = [0, 0]\n\t\t// Optional relative position of the background, in pixels\n\t\tbgPos: null,\n\n\t\tclassName: 'leaflet-div-icon'\n\t},\n\n\tcreateIcon: function (oldIcon) {\n\t\tvar div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'),\n\t\t options = this.options;\n\n\t\tif (options.html instanceof Element) {\n\t\t\tempty(div);\n\t\t\tdiv.appendChild(options.html);\n\t\t} else {\n\t\t\tdiv.innerHTML = options.html !== false ? options.html : '';\n\t\t}\n\n\t\tif (options.bgPos) {\n\t\t\tvar bgPos = point(options.bgPos);\n\t\t\tdiv.style.backgroundPosition = (-bgPos.x) + 'px ' + (-bgPos.y) + 'px';\n\t\t}\n\t\tthis._setIconStyles(div, 'icon');\n\n\t\treturn div;\n\t},\n\n\tcreateShadow: function () {\n\t\treturn null;\n\t}\n});\n\n// @factory L.divIcon(options: DivIcon options)\n// Creates a `DivIcon` instance with the given options.\nexport function divIcon(options) {\n\treturn new DivIcon(options);\n}\n","import {Icon} from './Icon';\nexport {icon} from './Icon';\nimport {IconDefault} from './Icon.Default';\nIcon.Default = IconDefault;\nexport {Icon};\n\nexport {DivIcon, divIcon} from './DivIcon';\nexport {Marker, marker} from './Marker';\n","import {Layer} from '../Layer';\nimport Browser from '../../core/Browser';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {Point} from '../../geometry/Point';\nimport {Bounds} from '../../geometry/Bounds';\nimport {LatLngBounds, toLatLngBounds as latLngBounds} from '../../geo/LatLngBounds';\n\n/*\n * @class GridLayer\n * @inherits Layer\n * @aka L.GridLayer\n *\n * Generic class for handling a tiled grid of HTML elements. This is the base class for all tile layers and replaces `TileLayer.Canvas`.\n * GridLayer can be extended to create a tiled grid of HTML elements like `
`, ` ` or ``. GridLayer will handle creating and animating these DOM elements for you.\n *\n *\n * @section Synchronous usage\n * @example\n *\n * To create a custom layer, extend GridLayer and implement the `createTile()` method, which will be passed a `Point` object with the `x`, `y`, and `z` (zoom level) coordinates to draw your tile.\n *\n * ```js\n * var CanvasLayer = L.GridLayer.extend({\n * createTile: function(coords){\n * // create a
element for drawing\n * var tile = L.DomUtil.create('canvas', 'leaflet-tile');\n *\n * // setup tile width and height according to the options\n * var size = this.getTileSize();\n * tile.width = size.x;\n * tile.height = size.y;\n *\n * // get a canvas context and draw something on it using coords.x, coords.y and coords.z\n * var ctx = tile.getContext('2d');\n *\n * // return the tile so it can be rendered on screen\n * return tile;\n * }\n * });\n * ```\n *\n * @section Asynchronous usage\n * @example\n *\n * Tile creation can also be asynchronous, this is useful when using a third-party drawing library. Once the tile is finished drawing it can be passed to the `done()` callback.\n *\n * ```js\n * var CanvasLayer = L.GridLayer.extend({\n * createTile: function(coords, done){\n * var error;\n *\n * // create a element for drawing\n * var tile = L.DomUtil.create('canvas', 'leaflet-tile');\n *\n * // setup tile width and height according to the options\n * var size = this.getTileSize();\n * tile.width = size.x;\n * tile.height = size.y;\n *\n * // draw something asynchronously and pass the tile to the done() callback\n * setTimeout(function() {\n * done(error, tile);\n * }, 1000);\n *\n * return tile;\n * }\n * });\n * ```\n *\n * @section\n */\n\n\nexport var GridLayer = Layer.extend({\n\n\t// @section\n\t// @aka GridLayer options\n\toptions: {\n\t\t// @option tileSize: Number|Point = 256\n\t\t// Width and height of tiles in the grid. Use a number if width and height are equal, or `L.point(width, height)` otherwise.\n\t\ttileSize: 256,\n\n\t\t// @option opacity: Number = 1.0\n\t\t// Opacity of the tiles. Can be used in the `createTile()` function.\n\t\topacity: 1,\n\n\t\t// @option updateWhenIdle: Boolean = (depends)\n\t\t// Load new tiles only when panning ends.\n\t\t// `true` by default on mobile browsers, in order to avoid too many requests and keep smooth navigation.\n\t\t// `false` otherwise in order to display new tiles _during_ panning, since it is easy to pan outside the\n\t\t// [`keepBuffer`](#gridlayer-keepbuffer) option in desktop browsers.\n\t\tupdateWhenIdle: Browser.mobile,\n\n\t\t// @option updateWhenZooming: Boolean = true\n\t\t// By default, a smooth zoom animation (during a [touch zoom](#map-touchzoom) or a [`flyTo()`](#map-flyto)) will update grid layers every integer zoom level. Setting this option to `false` will update the grid layer only when the smooth animation ends.\n\t\tupdateWhenZooming: true,\n\n\t\t// @option updateInterval: Number = 200\n\t\t// Tiles will not update more than once every `updateInterval` milliseconds when panning.\n\t\tupdateInterval: 200,\n\n\t\t// @option zIndex: Number = 1\n\t\t// The explicit zIndex of the tile layer.\n\t\tzIndex: 1,\n\n\t\t// @option bounds: LatLngBounds = undefined\n\t\t// If set, tiles will only be loaded inside the set `LatLngBounds`.\n\t\tbounds: null,\n\n\t\t// @option minZoom: Number = 0\n\t\t// The minimum zoom level down to which this layer will be displayed (inclusive).\n\t\tminZoom: 0,\n\n\t\t// @option maxZoom: Number = undefined\n\t\t// The maximum zoom level up to which this layer will be displayed (inclusive).\n\t\tmaxZoom: undefined,\n\n\t\t// @option maxNativeZoom: Number = undefined\n\t\t// Maximum zoom number the tile source has available. If it is specified,\n\t\t// the tiles on all zoom levels higher than `maxNativeZoom` will be loaded\n\t\t// from `maxNativeZoom` level and auto-scaled.\n\t\tmaxNativeZoom: undefined,\n\n\t\t// @option minNativeZoom: Number = undefined\n\t\t// Minimum zoom number the tile source has available. If it is specified,\n\t\t// the tiles on all zoom levels lower than `minNativeZoom` will be loaded\n\t\t// from `minNativeZoom` level and auto-scaled.\n\t\tminNativeZoom: undefined,\n\n\t\t// @option noWrap: Boolean = false\n\t\t// Whether the layer is wrapped around the antimeridian. If `true`, the\n\t\t// GridLayer will only be displayed once at low zoom levels. Has no\n\t\t// effect when the [map CRS](#map-crs) doesn't wrap around. Can be used\n\t\t// in combination with [`bounds`](#gridlayer-bounds) to prevent requesting\n\t\t// tiles outside the CRS limits.\n\t\tnoWrap: false,\n\n\t\t// @option pane: String = 'tilePane'\n\t\t// `Map pane` where the grid layer will be added.\n\t\tpane: 'tilePane',\n\n\t\t// @option className: String = ''\n\t\t// A custom class name to assign to the tile layer. Empty by default.\n\t\tclassName: '',\n\n\t\t// @option keepBuffer: Number = 2\n\t\t// When panning the map, keep this many rows and columns of tiles before unloading them.\n\t\tkeepBuffer: 2\n\t},\n\n\tinitialize: function (options) {\n\t\tUtil.setOptions(this, options);\n\t},\n\n\tonAdd: function () {\n\t\tthis._initContainer();\n\n\t\tthis._levels = {};\n\t\tthis._tiles = {};\n\n\t\tthis._resetView(); // implicit _update() call\n\t},\n\n\tbeforeAdd: function (map) {\n\t\tmap._addZoomLimit(this);\n\t},\n\n\tonRemove: function (map) {\n\t\tthis._removeAllTiles();\n\t\tDomUtil.remove(this._container);\n\t\tmap._removeZoomLimit(this);\n\t\tthis._container = null;\n\t\tthis._tileZoom = undefined;\n\t},\n\n\t// @method bringToFront: this\n\t// Brings the tile layer to the top of all tile layers.\n\tbringToFront: function () {\n\t\tif (this._map) {\n\t\t\tDomUtil.toFront(this._container);\n\t\t\tthis._setAutoZIndex(Math.max);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToBack: this\n\t// Brings the tile layer to the bottom of all tile layers.\n\tbringToBack: function () {\n\t\tif (this._map) {\n\t\t\tDomUtil.toBack(this._container);\n\t\t\tthis._setAutoZIndex(Math.min);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getContainer: HTMLElement\n\t// Returns the HTML element that contains the tiles for this layer.\n\tgetContainer: function () {\n\t\treturn this._container;\n\t},\n\n\t// @method setOpacity(opacity: Number): this\n\t// Changes the [opacity](#gridlayer-opacity) of the grid layer.\n\tsetOpacity: function (opacity) {\n\t\tthis.options.opacity = opacity;\n\t\tthis._updateOpacity();\n\t\treturn this;\n\t},\n\n\t// @method setZIndex(zIndex: Number): this\n\t// Changes the [zIndex](#gridlayer-zindex) of the grid layer.\n\tsetZIndex: function (zIndex) {\n\t\tthis.options.zIndex = zIndex;\n\t\tthis._updateZIndex();\n\n\t\treturn this;\n\t},\n\n\t// @method isLoading: Boolean\n\t// Returns `true` if any tile in the grid layer has not finished loading.\n\tisLoading: function () {\n\t\treturn this._loading;\n\t},\n\n\t// @method redraw: this\n\t// Causes the layer to clear all the tiles and request them again.\n\tredraw: function () {\n\t\tif (this._map) {\n\t\t\tthis._removeAllTiles();\n\t\t\tvar tileZoom = this._clampZoom(this._map.getZoom());\n\t\t\tif (tileZoom !== this._tileZoom) {\n\t\t\t\tthis._tileZoom = tileZoom;\n\t\t\t\tthis._updateLevels();\n\t\t\t}\n\t\t\tthis._update();\n\t\t}\n\t\treturn this;\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = {\n\t\t\tviewprereset: this._invalidateAll,\n\t\t\tviewreset: this._resetView,\n\t\t\tzoom: this._resetView,\n\t\t\tmoveend: this._onMoveEnd\n\t\t};\n\n\t\tif (!this.options.updateWhenIdle) {\n\t\t\t// update tiles on move, but not more often than once per given interval\n\t\t\tif (!this._onMove) {\n\t\t\t\tthis._onMove = Util.throttle(this._onMoveEnd, this.options.updateInterval, this);\n\t\t\t}\n\n\t\t\tevents.move = this._onMove;\n\t\t}\n\n\t\tif (this._zoomAnimated) {\n\t\t\tevents.zoomanim = this._animateZoom;\n\t\t}\n\n\t\treturn events;\n\t},\n\n\t// @section Extension methods\n\t// Layers extending `GridLayer` shall reimplement the following method.\n\t// @method createTile(coords: Object, done?: Function): HTMLElement\n\t// Called only internally, must be overridden by classes extending `GridLayer`.\n\t// Returns the `HTMLElement` corresponding to the given `coords`. If the `done` callback\n\t// is specified, it must be called when the tile has finished loading and drawing.\n\tcreateTile: function () {\n\t\treturn document.createElement('div');\n\t},\n\n\t// @section\n\t// @method getTileSize: Point\n\t// Normalizes the [tileSize option](#gridlayer-tilesize) into a point. Used by the `createTile()` method.\n\tgetTileSize: function () {\n\t\tvar s = this.options.tileSize;\n\t\treturn s instanceof Point ? s : new Point(s, s);\n\t},\n\n\t_updateZIndex: function () {\n\t\tif (this._container && this.options.zIndex !== undefined && this.options.zIndex !== null) {\n\t\t\tthis._container.style.zIndex = this.options.zIndex;\n\t\t}\n\t},\n\n\t_setAutoZIndex: function (compare) {\n\t\t// go through all other layers of the same pane, set zIndex to max + 1 (front) or min - 1 (back)\n\n\t\tvar layers = this.getPane().children,\n\t\t edgeZIndex = -compare(-Infinity, Infinity); // -Infinity for max, Infinity for min\n\n\t\tfor (var i = 0, len = layers.length, zIndex; i < len; i++) {\n\n\t\t\tzIndex = layers[i].style.zIndex;\n\n\t\t\tif (layers[i] !== this._container && zIndex) {\n\t\t\t\tedgeZIndex = compare(edgeZIndex, +zIndex);\n\t\t\t}\n\t\t}\n\n\t\tif (isFinite(edgeZIndex)) {\n\t\t\tthis.options.zIndex = edgeZIndex + compare(-1, 1);\n\t\t\tthis._updateZIndex();\n\t\t}\n\t},\n\n\t_updateOpacity: function () {\n\t\tif (!this._map) { return; }\n\n\t\t// IE doesn't inherit filter opacity properly, so we're forced to set it on tiles\n\t\tif (Browser.ielt9) { return; }\n\n\t\tDomUtil.setOpacity(this._container, this.options.opacity);\n\n\t\tvar now = +new Date(),\n\t\t nextFrame = false,\n\t\t willPrune = false;\n\n\t\tfor (var key in this._tiles) {\n\t\t\tvar tile = this._tiles[key];\n\t\t\tif (!tile.current || !tile.loaded) { continue; }\n\n\t\t\tvar fade = Math.min(1, (now - tile.loaded) / 200);\n\n\t\t\tDomUtil.setOpacity(tile.el, fade);\n\t\t\tif (fade < 1) {\n\t\t\t\tnextFrame = true;\n\t\t\t} else {\n\t\t\t\tif (tile.active) {\n\t\t\t\t\twillPrune = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis._onOpaqueTile(tile);\n\t\t\t\t}\n\t\t\t\ttile.active = true;\n\t\t\t}\n\t\t}\n\n\t\tif (willPrune && !this._noPrune) { this._pruneTiles(); }\n\n\t\tif (nextFrame) {\n\t\t\tUtil.cancelAnimFrame(this._fadeFrame);\n\t\t\tthis._fadeFrame = Util.requestAnimFrame(this._updateOpacity, this);\n\t\t}\n\t},\n\n\t_onOpaqueTile: Util.falseFn,\n\n\t_initContainer: function () {\n\t\tif (this._container) { return; }\n\n\t\tthis._container = DomUtil.create('div', 'leaflet-layer ' + (this.options.className || ''));\n\t\tthis._updateZIndex();\n\n\t\tif (this.options.opacity < 1) {\n\t\t\tthis._updateOpacity();\n\t\t}\n\n\t\tthis.getPane().appendChild(this._container);\n\t},\n\n\t_updateLevels: function () {\n\n\t\tvar zoom = this._tileZoom,\n\t\t maxZoom = this.options.maxZoom;\n\n\t\tif (zoom === undefined) { return undefined; }\n\n\t\tfor (var z in this._levels) {\n\t\t\tz = Number(z);\n\t\t\tif (this._levels[z].el.children.length || z === zoom) {\n\t\t\t\tthis._levels[z].el.style.zIndex = maxZoom - Math.abs(zoom - z);\n\t\t\t\tthis._onUpdateLevel(z);\n\t\t\t} else {\n\t\t\t\tDomUtil.remove(this._levels[z].el);\n\t\t\t\tthis._removeTilesAtZoom(z);\n\t\t\t\tthis._onRemoveLevel(z);\n\t\t\t\tdelete this._levels[z];\n\t\t\t}\n\t\t}\n\n\t\tvar level = this._levels[zoom],\n\t\t map = this._map;\n\n\t\tif (!level) {\n\t\t\tlevel = this._levels[zoom] = {};\n\n\t\t\tlevel.el = DomUtil.create('div', 'leaflet-tile-container leaflet-zoom-animated', this._container);\n\t\t\tlevel.el.style.zIndex = maxZoom;\n\n\t\t\tlevel.origin = map.project(map.unproject(map.getPixelOrigin()), zoom).round();\n\t\t\tlevel.zoom = zoom;\n\n\t\t\tthis._setZoomTransform(level, map.getCenter(), map.getZoom());\n\n\t\t\t// force the browser to consider the newly added element for transition\n\t\t\tUtil.falseFn(level.el.offsetWidth);\n\n\t\t\tthis._onCreateLevel(level);\n\t\t}\n\n\t\tthis._level = level;\n\n\t\treturn level;\n\t},\n\n\t_onUpdateLevel: Util.falseFn,\n\n\t_onRemoveLevel: Util.falseFn,\n\n\t_onCreateLevel: Util.falseFn,\n\n\t_pruneTiles: function () {\n\t\tif (!this._map) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar key, tile;\n\n\t\tvar zoom = this._map.getZoom();\n\t\tif (zoom > this.options.maxZoom ||\n\t\t\tzoom < this.options.minZoom) {\n\t\t\tthis._removeAllTiles();\n\t\t\treturn;\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\ttile = this._tiles[key];\n\t\t\ttile.retain = tile.current;\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\ttile = this._tiles[key];\n\t\t\tif (tile.current && !tile.active) {\n\t\t\t\tvar coords = tile.coords;\n\t\t\t\tif (!this._retainParent(coords.x, coords.y, coords.z, coords.z - 5)) {\n\t\t\t\t\tthis._retainChildren(coords.x, coords.y, coords.z, coords.z + 2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\tif (!this._tiles[key].retain) {\n\t\t\t\tthis._removeTile(key);\n\t\t\t}\n\t\t}\n\t},\n\n\t_removeTilesAtZoom: function (zoom) {\n\t\tfor (var key in this._tiles) {\n\t\t\tif (this._tiles[key].coords.z !== zoom) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis._removeTile(key);\n\t\t}\n\t},\n\n\t_removeAllTiles: function () {\n\t\tfor (var key in this._tiles) {\n\t\t\tthis._removeTile(key);\n\t\t}\n\t},\n\n\t_invalidateAll: function () {\n\t\tfor (var z in this._levels) {\n\t\t\tDomUtil.remove(this._levels[z].el);\n\t\t\tthis._onRemoveLevel(Number(z));\n\t\t\tdelete this._levels[z];\n\t\t}\n\t\tthis._removeAllTiles();\n\n\t\tthis._tileZoom = undefined;\n\t},\n\n\t_retainParent: function (x, y, z, minZoom) {\n\t\tvar x2 = Math.floor(x / 2),\n\t\t y2 = Math.floor(y / 2),\n\t\t z2 = z - 1,\n\t\t coords2 = new Point(+x2, +y2);\n\t\tcoords2.z = +z2;\n\n\t\tvar key = this._tileCoordsToKey(coords2),\n\t\t tile = this._tiles[key];\n\n\t\tif (tile && tile.active) {\n\t\t\ttile.retain = true;\n\t\t\treturn true;\n\n\t\t} else if (tile && tile.loaded) {\n\t\t\ttile.retain = true;\n\t\t}\n\n\t\tif (z2 > minZoom) {\n\t\t\treturn this._retainParent(x2, y2, z2, minZoom);\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_retainChildren: function (x, y, z, maxZoom) {\n\n\t\tfor (var i = 2 * x; i < 2 * x + 2; i++) {\n\t\t\tfor (var j = 2 * y; j < 2 * y + 2; j++) {\n\n\t\t\t\tvar coords = new Point(i, j);\n\t\t\t\tcoords.z = z + 1;\n\n\t\t\t\tvar key = this._tileCoordsToKey(coords),\n\t\t\t\t tile = this._tiles[key];\n\n\t\t\t\tif (tile && tile.active) {\n\t\t\t\t\ttile.retain = true;\n\t\t\t\t\tcontinue;\n\n\t\t\t\t} else if (tile && tile.loaded) {\n\t\t\t\t\ttile.retain = true;\n\t\t\t\t}\n\n\t\t\t\tif (z + 1 < maxZoom) {\n\t\t\t\t\tthis._retainChildren(i, j, z + 1, maxZoom);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_resetView: function (e) {\n\t\tvar animating = e && (e.pinch || e.flyTo);\n\t\tthis._setView(this._map.getCenter(), this._map.getZoom(), animating, animating);\n\t},\n\n\t_animateZoom: function (e) {\n\t\tthis._setView(e.center, e.zoom, true, e.noUpdate);\n\t},\n\n\t_clampZoom: function (zoom) {\n\t\tvar options = this.options;\n\n\t\tif (undefined !== options.minNativeZoom && zoom < options.minNativeZoom) {\n\t\t\treturn options.minNativeZoom;\n\t\t}\n\n\t\tif (undefined !== options.maxNativeZoom && options.maxNativeZoom < zoom) {\n\t\t\treturn options.maxNativeZoom;\n\t\t}\n\n\t\treturn zoom;\n\t},\n\n\t_setView: function (center, zoom, noPrune, noUpdate) {\n\t\tvar tileZoom = Math.round(zoom);\n\t\tif ((this.options.maxZoom !== undefined && tileZoom > this.options.maxZoom) ||\n\t\t (this.options.minZoom !== undefined && tileZoom < this.options.minZoom)) {\n\t\t\ttileZoom = undefined;\n\t\t} else {\n\t\t\ttileZoom = this._clampZoom(tileZoom);\n\t\t}\n\n\t\tvar tileZoomChanged = this.options.updateWhenZooming && (tileZoom !== this._tileZoom);\n\n\t\tif (!noUpdate || tileZoomChanged) {\n\n\t\t\tthis._tileZoom = tileZoom;\n\n\t\t\tif (this._abortLoading) {\n\t\t\t\tthis._abortLoading();\n\t\t\t}\n\n\t\t\tthis._updateLevels();\n\t\t\tthis._resetGrid();\n\n\t\t\tif (tileZoom !== undefined) {\n\t\t\t\tthis._update(center);\n\t\t\t}\n\n\t\t\tif (!noPrune) {\n\t\t\t\tthis._pruneTiles();\n\t\t\t}\n\n\t\t\t// Flag to prevent _updateOpacity from pruning tiles during\n\t\t\t// a zoom anim or a pinch gesture\n\t\t\tthis._noPrune = !!noPrune;\n\t\t}\n\n\t\tthis._setZoomTransforms(center, zoom);\n\t},\n\n\t_setZoomTransforms: function (center, zoom) {\n\t\tfor (var i in this._levels) {\n\t\t\tthis._setZoomTransform(this._levels[i], center, zoom);\n\t\t}\n\t},\n\n\t_setZoomTransform: function (level, center, zoom) {\n\t\tvar scale = this._map.getZoomScale(zoom, level.zoom),\n\t\t translate = level.origin.multiplyBy(scale)\n\t\t .subtract(this._map._getNewPixelOrigin(center, zoom)).round();\n\n\t\tif (Browser.any3d) {\n\t\t\tDomUtil.setTransform(level.el, translate, scale);\n\t\t} else {\n\t\t\tDomUtil.setPosition(level.el, translate);\n\t\t}\n\t},\n\n\t_resetGrid: function () {\n\t\tvar map = this._map,\n\t\t crs = map.options.crs,\n\t\t tileSize = this._tileSize = this.getTileSize(),\n\t\t tileZoom = this._tileZoom;\n\n\t\tvar bounds = this._map.getPixelWorldBounds(this._tileZoom);\n\t\tif (bounds) {\n\t\t\tthis._globalTileRange = this._pxBoundsToTileRange(bounds);\n\t\t}\n\n\t\tthis._wrapX = crs.wrapLng && !this.options.noWrap && [\n\t\t\tMath.floor(map.project([0, crs.wrapLng[0]], tileZoom).x / tileSize.x),\n\t\t\tMath.ceil(map.project([0, crs.wrapLng[1]], tileZoom).x / tileSize.y)\n\t\t];\n\t\tthis._wrapY = crs.wrapLat && !this.options.noWrap && [\n\t\t\tMath.floor(map.project([crs.wrapLat[0], 0], tileZoom).y / tileSize.x),\n\t\t\tMath.ceil(map.project([crs.wrapLat[1], 0], tileZoom).y / tileSize.y)\n\t\t];\n\t},\n\n\t_onMoveEnd: function () {\n\t\tif (!this._map || this._map._animatingZoom) { return; }\n\n\t\tthis._update();\n\t},\n\n\t_getTiledPixelBounds: function (center) {\n\t\tvar map = this._map,\n\t\t mapZoom = map._animatingZoom ? Math.max(map._animateToZoom, map.getZoom()) : map.getZoom(),\n\t\t scale = map.getZoomScale(mapZoom, this._tileZoom),\n\t\t pixelCenter = map.project(center, this._tileZoom).floor(),\n\t\t halfSize = map.getSize().divideBy(scale * 2);\n\n\t\treturn new Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize));\n\t},\n\n\t// Private method to load tiles in the grid's active zoom level according to map bounds\n\t_update: function (center) {\n\t\tvar map = this._map;\n\t\tif (!map) { return; }\n\t\tvar zoom = this._clampZoom(map.getZoom());\n\n\t\tif (center === undefined) { center = map.getCenter(); }\n\t\tif (this._tileZoom === undefined) { return; }\t// if out of minzoom/maxzoom\n\n\t\tvar pixelBounds = this._getTiledPixelBounds(center),\n\t\t tileRange = this._pxBoundsToTileRange(pixelBounds),\n\t\t tileCenter = tileRange.getCenter(),\n\t\t queue = [],\n\t\t margin = this.options.keepBuffer,\n\t\t noPruneRange = new Bounds(tileRange.getBottomLeft().subtract([margin, -margin]),\n\t\t tileRange.getTopRight().add([margin, -margin]));\n\n\t\t// Sanity check: panic if the tile range contains Infinity somewhere.\n\t\tif (!(isFinite(tileRange.min.x) &&\n\t\t isFinite(tileRange.min.y) &&\n\t\t isFinite(tileRange.max.x) &&\n\t\t isFinite(tileRange.max.y))) { throw new Error('Attempted to load an infinite number of tiles'); }\n\n\t\tfor (var key in this._tiles) {\n\t\t\tvar c = this._tiles[key].coords;\n\t\t\tif (c.z !== this._tileZoom || !noPruneRange.contains(new Point(c.x, c.y))) {\n\t\t\t\tthis._tiles[key].current = false;\n\t\t\t}\n\t\t}\n\n\t\t// _update just loads more tiles. If the tile zoom level differs too much\n\t\t// from the map's, let _setView reset levels and prune old tiles.\n\t\tif (Math.abs(zoom - this._tileZoom) > 1) { this._setView(center, zoom); return; }\n\n\t\t// create a queue of coordinates to load tiles from\n\t\tfor (var j = tileRange.min.y; j <= tileRange.max.y; j++) {\n\t\t\tfor (var i = tileRange.min.x; i <= tileRange.max.x; i++) {\n\t\t\t\tvar coords = new Point(i, j);\n\t\t\t\tcoords.z = this._tileZoom;\n\n\t\t\t\tif (!this._isValidTile(coords)) { continue; }\n\n\t\t\t\tvar tile = this._tiles[this._tileCoordsToKey(coords)];\n\t\t\t\tif (tile) {\n\t\t\t\t\ttile.current = true;\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push(coords);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// sort tile queue to load tiles in order of their distance to center\n\t\tqueue.sort(function (a, b) {\n\t\t\treturn a.distanceTo(tileCenter) - b.distanceTo(tileCenter);\n\t\t});\n\n\t\tif (queue.length !== 0) {\n\t\t\t// if it's the first batch of tiles to load\n\t\t\tif (!this._loading) {\n\t\t\t\tthis._loading = true;\n\t\t\t\t// @event loading: Event\n\t\t\t\t// Fired when the grid layer starts loading tiles.\n\t\t\t\tthis.fire('loading');\n\t\t\t}\n\n\t\t\t// create DOM fragment to append tiles in one batch\n\t\t\tvar fragment = document.createDocumentFragment();\n\n\t\t\tfor (i = 0; i < queue.length; i++) {\n\t\t\t\tthis._addTile(queue[i], fragment);\n\t\t\t}\n\n\t\t\tthis._level.el.appendChild(fragment);\n\t\t}\n\t},\n\n\t_isValidTile: function (coords) {\n\t\tvar crs = this._map.options.crs;\n\n\t\tif (!crs.infinite) {\n\t\t\t// don't load tile if it's out of bounds and not wrapped\n\t\t\tvar bounds = this._globalTileRange;\n\t\t\tif ((!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||\n\t\t\t (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))) { return false; }\n\t\t}\n\n\t\tif (!this.options.bounds) { return true; }\n\n\t\t// don't load tile if it doesn't intersect the bounds in options\n\t\tvar tileBounds = this._tileCoordsToBounds(coords);\n\t\treturn latLngBounds(this.options.bounds).overlaps(tileBounds);\n\t},\n\n\t_keyToBounds: function (key) {\n\t\treturn this._tileCoordsToBounds(this._keyToTileCoords(key));\n\t},\n\n\t_tileCoordsToNwSe: function (coords) {\n\t\tvar map = this._map,\n\t\t tileSize = this.getTileSize(),\n\t\t nwPoint = coords.scaleBy(tileSize),\n\t\t sePoint = nwPoint.add(tileSize),\n\t\t nw = map.unproject(nwPoint, coords.z),\n\t\t se = map.unproject(sePoint, coords.z);\n\t\treturn [nw, se];\n\t},\n\n\t// converts tile coordinates to its geographical bounds\n\t_tileCoordsToBounds: function (coords) {\n\t\tvar bp = this._tileCoordsToNwSe(coords),\n\t\t bounds = new LatLngBounds(bp[0], bp[1]);\n\n\t\tif (!this.options.noWrap) {\n\t\t\tbounds = this._map.wrapLatLngBounds(bounds);\n\t\t}\n\t\treturn bounds;\n\t},\n\t// converts tile coordinates to key for the tile cache\n\t_tileCoordsToKey: function (coords) {\n\t\treturn coords.x + ':' + coords.y + ':' + coords.z;\n\t},\n\n\t// converts tile cache key to coordinates\n\t_keyToTileCoords: function (key) {\n\t\tvar k = key.split(':'),\n\t\t coords = new Point(+k[0], +k[1]);\n\t\tcoords.z = +k[2];\n\t\treturn coords;\n\t},\n\n\t_removeTile: function (key) {\n\t\tvar tile = this._tiles[key];\n\t\tif (!tile) { return; }\n\n\t\tDomUtil.remove(tile.el);\n\n\t\tdelete this._tiles[key];\n\n\t\t// @event tileunload: TileEvent\n\t\t// Fired when a tile is removed (e.g. when a tile goes off the screen).\n\t\tthis.fire('tileunload', {\n\t\t\ttile: tile.el,\n\t\t\tcoords: this._keyToTileCoords(key)\n\t\t});\n\t},\n\n\t_initTile: function (tile) {\n\t\tDomUtil.addClass(tile, 'leaflet-tile');\n\n\t\tvar tileSize = this.getTileSize();\n\t\ttile.style.width = tileSize.x + 'px';\n\t\ttile.style.height = tileSize.y + 'px';\n\n\t\ttile.onselectstart = Util.falseFn;\n\t\ttile.onmousemove = Util.falseFn;\n\n\t\t// update opacity on tiles in IE7-8 because of filter inheritance problems\n\t\tif (Browser.ielt9 && this.options.opacity < 1) {\n\t\t\tDomUtil.setOpacity(tile, this.options.opacity);\n\t\t}\n\t},\n\n\t_addTile: function (coords, container) {\n\t\tvar tilePos = this._getTilePos(coords),\n\t\t key = this._tileCoordsToKey(coords);\n\n\t\tvar tile = this.createTile(this._wrapCoords(coords), Util.bind(this._tileReady, this, coords));\n\n\t\tthis._initTile(tile);\n\n\t\t// if createTile is defined with a second argument (\"done\" callback),\n\t\t// we know that tile is async and will be ready later; otherwise\n\t\tif (this.createTile.length < 2) {\n\t\t\t// mark tile as ready, but delay one frame for opacity animation to happen\n\t\t\tUtil.requestAnimFrame(Util.bind(this._tileReady, this, coords, null, tile));\n\t\t}\n\n\t\tDomUtil.setPosition(tile, tilePos);\n\n\t\t// save tile in cache\n\t\tthis._tiles[key] = {\n\t\t\tel: tile,\n\t\t\tcoords: coords,\n\t\t\tcurrent: true\n\t\t};\n\n\t\tcontainer.appendChild(tile);\n\t\t// @event tileloadstart: TileEvent\n\t\t// Fired when a tile is requested and starts loading.\n\t\tthis.fire('tileloadstart', {\n\t\t\ttile: tile,\n\t\t\tcoords: coords\n\t\t});\n\t},\n\n\t_tileReady: function (coords, err, tile) {\n\t\tif (err) {\n\t\t\t// @event tileerror: TileErrorEvent\n\t\t\t// Fired when there is an error loading a tile.\n\t\t\tthis.fire('tileerror', {\n\t\t\t\terror: err,\n\t\t\t\ttile: tile,\n\t\t\t\tcoords: coords\n\t\t\t});\n\t\t}\n\n\t\tvar key = this._tileCoordsToKey(coords);\n\n\t\ttile = this._tiles[key];\n\t\tif (!tile) { return; }\n\n\t\ttile.loaded = +new Date();\n\t\tif (this._map._fadeAnimated) {\n\t\t\tDomUtil.setOpacity(tile.el, 0);\n\t\t\tUtil.cancelAnimFrame(this._fadeFrame);\n\t\t\tthis._fadeFrame = Util.requestAnimFrame(this._updateOpacity, this);\n\t\t} else {\n\t\t\ttile.active = true;\n\t\t\tthis._pruneTiles();\n\t\t}\n\n\t\tif (!err) {\n\t\t\tDomUtil.addClass(tile.el, 'leaflet-tile-loaded');\n\n\t\t\t// @event tileload: TileEvent\n\t\t\t// Fired when a tile loads.\n\t\t\tthis.fire('tileload', {\n\t\t\t\ttile: tile.el,\n\t\t\t\tcoords: coords\n\t\t\t});\n\t\t}\n\n\t\tif (this._noTilesToLoad()) {\n\t\t\tthis._loading = false;\n\t\t\t// @event load: Event\n\t\t\t// Fired when the grid layer loaded all visible tiles.\n\t\t\tthis.fire('load');\n\n\t\t\tif (Browser.ielt9 || !this._map._fadeAnimated) {\n\t\t\t\tUtil.requestAnimFrame(this._pruneTiles, this);\n\t\t\t} else {\n\t\t\t\t// Wait a bit more than 0.2 secs (the duration of the tile fade-in)\n\t\t\t\t// to trigger a pruning.\n\t\t\t\tsetTimeout(Util.bind(this._pruneTiles, this), 250);\n\t\t\t}\n\t\t}\n\t},\n\n\t_getTilePos: function (coords) {\n\t\treturn coords.scaleBy(this.getTileSize()).subtract(this._level.origin);\n\t},\n\n\t_wrapCoords: function (coords) {\n\t\tvar newCoords = new Point(\n\t\t\tthis._wrapX ? Util.wrapNum(coords.x, this._wrapX) : coords.x,\n\t\t\tthis._wrapY ? Util.wrapNum(coords.y, this._wrapY) : coords.y);\n\t\tnewCoords.z = coords.z;\n\t\treturn newCoords;\n\t},\n\n\t_pxBoundsToTileRange: function (bounds) {\n\t\tvar tileSize = this.getTileSize();\n\t\treturn new Bounds(\n\t\t\tbounds.min.unscaleBy(tileSize).floor(),\n\t\t\tbounds.max.unscaleBy(tileSize).ceil().subtract([1, 1]));\n\t},\n\n\t_noTilesToLoad: function () {\n\t\tfor (var key in this._tiles) {\n\t\t\tif (!this._tiles[key].loaded) { return false; }\n\t\t}\n\t\treturn true;\n\t}\n});\n\n// @factory L.gridLayer(options?: GridLayer options)\n// Creates a new instance of GridLayer with the supplied options.\nexport function gridLayer(options) {\n\treturn new GridLayer(options);\n}\n","import {GridLayer} from './GridLayer';\r\nimport Browser from '../../core/Browser';\r\nimport * as Util from '../../core/Util';\r\nimport * as DomEvent from '../../dom/DomEvent';\r\nimport * as DomUtil from '../../dom/DomUtil';\r\n\r\n\r\n/*\r\n * @class TileLayer\r\n * @inherits GridLayer\r\n * @aka L.TileLayer\r\n * Used to load and display tile layers on the map. Note that most tile servers require attribution, which you can set under `Layer`. Extends `GridLayer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png?{foo}', {foo: 'bar', attribution: '© OpenStreetMap contributors'}).addTo(map);\n * ```\r\n *\r\n * @section URL template\r\n * @example\r\n *\r\n * A string of the following form:\r\n *\r\n * ```\r\n * 'https://{s}.somedomain.com/blabla/{z}/{x}/{y}{r}.png'\r\n * ```\r\n *\r\n * `{s}` means one of the available subdomains (used sequentially to help with browser parallel requests per domain limitation; subdomain values are specified in options; `a`, `b` or `c` by default, can be omitted), `{z}` — zoom level, `{x}` and `{y}` — tile coordinates. `{r}` can be used to add \"@2x\" to the URL to load retina tiles.\r\n *\r\n * You can use custom keys in the template, which will be [evaluated](#util-template) from TileLayer options, like this:\r\n *\r\n * ```\r\n * L.tileLayer('https://{s}.somedomain.com/{foo}/{z}/{x}/{y}.png', {foo: 'bar'});\r\n * ```\r\n */\r\n\r\n\r\nexport var TileLayer = GridLayer.extend({\r\n\r\n\t// @section\r\n\t// @aka TileLayer options\r\n\toptions: {\r\n\t\t// @option minZoom: Number = 0\r\n\t\t// The minimum zoom level down to which this layer will be displayed (inclusive).\r\n\t\tminZoom: 0,\r\n\r\n\t\t// @option maxZoom: Number = 18\r\n\t\t// The maximum zoom level up to which this layer will be displayed (inclusive).\r\n\t\tmaxZoom: 18,\r\n\r\n\t\t// @option subdomains: String|String[] = 'abc'\r\n\t\t// Subdomains of the tile service. Can be passed in the form of one string (where each letter is a subdomain name) or an array of strings.\r\n\t\tsubdomains: 'abc',\r\n\r\n\t\t// @option errorTileUrl: String = ''\r\n\t\t// URL to the tile image to show in place of the tile that failed to load.\r\n\t\terrorTileUrl: '',\r\n\r\n\t\t// @option zoomOffset: Number = 0\r\n\t\t// The zoom number used in tile URLs will be offset with this value.\r\n\t\tzoomOffset: 0,\r\n\r\n\t\t// @option tms: Boolean = false\r\n\t\t// If `true`, inverses Y axis numbering for tiles (turn this on for [TMS](https://en.wikipedia.org/wiki/Tile_Map_Service) services).\r\n\t\ttms: false,\r\n\r\n\t\t// @option zoomReverse: Boolean = false\r\n\t\t// If set to true, the zoom number used in tile URLs will be reversed (`maxZoom - zoom` instead of `zoom`)\r\n\t\tzoomReverse: false,\r\n\r\n\t\t// @option detectRetina: Boolean = false\r\n\t\t// If `true` and user is on a retina display, it will request four tiles of half the specified size and a bigger zoom level in place of one to utilize the high resolution.\r\n\t\tdetectRetina: false,\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the tiles.\r\n\t\t// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false,\r\n\r\n\t\t// @option referrerPolicy: Boolean|String = false\r\n\t\t// Whether the referrerPolicy attribute will be added to the tiles.\r\n\t\t// If a String is provided, all tiles will have their referrerPolicy attribute set to the String provided.\r\n\t\t// This may be needed if your map's rendering context has a strict default but your tile provider expects a valid referrer\r\n\t\t// (e.g. to validate an API token).\r\n\t\t// Refer to [HTMLImageElement.referrerPolicy](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/referrerPolicy) for valid String values.\r\n\t\treferrerPolicy: false\r\n\t},\r\n\r\n\tinitialize: function (url, options) {\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\toptions = Util.setOptions(this, options);\r\n\r\n\t\t// detecting retina displays, adjusting tileSize and zoom levels\r\n\t\tif (options.detectRetina && Browser.retina && options.maxZoom > 0) {\r\n\r\n\t\t\toptions.tileSize = Math.floor(options.tileSize / 2);\r\n\r\n\t\t\tif (!options.zoomReverse) {\r\n\t\t\t\toptions.zoomOffset++;\r\n\t\t\t\toptions.maxZoom = Math.max(options.minZoom, options.maxZoom - 1);\r\n\t\t\t} else {\r\n\t\t\t\toptions.zoomOffset--;\r\n\t\t\t\toptions.minZoom = Math.min(options.maxZoom, options.minZoom + 1);\r\n\t\t\t}\r\n\r\n\t\t\toptions.minZoom = Math.max(0, options.minZoom);\r\n\t\t} else if (!options.zoomReverse) {\r\n\t\t\t// make sure maxZoom is gte minZoom\r\n\t\t\toptions.maxZoom = Math.max(options.minZoom, options.maxZoom);\r\n\t\t} else {\r\n\t\t\t// make sure minZoom is lte maxZoom\r\n\t\t\toptions.minZoom = Math.min(options.maxZoom, options.minZoom);\r\n\t\t}\r\n\r\n\t\tif (typeof options.subdomains === 'string') {\r\n\t\t\toptions.subdomains = options.subdomains.split('');\r\n\t\t}\r\n\r\n\t\tthis.on('tileunload', this._onTileRemove);\r\n\t},\r\n\r\n\t// @method setUrl(url: String, noRedraw?: Boolean): this\r\n\t// Updates the layer's URL template and redraws it (unless `noRedraw` is set to `true`).\r\n\t// If the URL does not change, the layer will not be redrawn unless\r\n\t// the noRedraw parameter is set to false.\r\n\tsetUrl: function (url, noRedraw) {\r\n\t\tif (this._url === url && noRedraw === undefined) {\r\n\t\t\tnoRedraw = true;\r\n\t\t}\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\tif (!noRedraw) {\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method createTile(coords: Object, done?: Function): HTMLElement\r\n\t// Called only internally, overrides GridLayer's [`createTile()`](#gridlayer-createtile)\r\n\t// to return an ` ` HTML element with the appropriate image URL given `coords`. The `done`\r\n\t// callback is called when the tile has been loaded.\r\n\tcreateTile: function (coords, done) {\r\n\t\tvar tile = document.createElement('img');\r\n\r\n\t\tDomEvent.on(tile, 'load', Util.bind(this._tileOnLoad, this, done, tile));\r\n\t\tDomEvent.on(tile, 'error', Util.bind(this._tileOnError, this, done, tile));\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\ttile.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\t// for this new option we follow the documented behavior\r\n\t\t// more closely by only setting the property when string\r\n\t\tif (typeof this.options.referrerPolicy === 'string') {\r\n\t\t\ttile.referrerPolicy = this.options.referrerPolicy;\r\n\t\t}\r\n\r\n\t\t// The alt attribute is set to the empty string,\r\n\t\t// allowing screen readers to ignore the decorative image tiles.\r\n\t\t// https://www.w3.org/WAI/tutorials/images/decorative/\r\n\t\t// https://www.w3.org/TR/html-aria/#el-img-empty-alt\r\n\t\ttile.alt = '';\r\n\r\n\t\ttile.src = this.getTileUrl(coords);\r\n\r\n\t\treturn tile;\r\n\t},\r\n\r\n\t// @section Extension methods\r\n\t// @uninheritable\r\n\t// Layers extending `TileLayer` might reimplement the following method.\r\n\t// @method getTileUrl(coords: Object): String\r\n\t// Called only internally, returns the URL for a tile given its coordinates.\r\n\t// Classes extending `TileLayer` can override this function to provide custom tile URL naming schemes.\r\n\tgetTileUrl: function (coords) {\r\n\t\tvar data = {\r\n\t\t\tr: Browser.retina ? '@2x' : '',\r\n\t\t\ts: this._getSubdomain(coords),\r\n\t\t\tx: coords.x,\r\n\t\t\ty: coords.y,\r\n\t\t\tz: this._getZoomForUrl()\r\n\t\t};\r\n\t\tif (this._map && !this._map.options.crs.infinite) {\r\n\t\t\tvar invertedY = this._globalTileRange.max.y - coords.y;\r\n\t\t\tif (this.options.tms) {\r\n\t\t\t\tdata['y'] = invertedY;\r\n\t\t\t}\r\n\t\t\tdata['-y'] = invertedY;\r\n\t\t}\r\n\r\n\t\treturn Util.template(this._url, Util.extend(data, this.options));\r\n\t},\r\n\r\n\t_tileOnLoad: function (done, tile) {\r\n\t\t// For https://github.com/Leaflet/Leaflet/issues/3332\r\n\t\tif (Browser.ielt9) {\r\n\t\t\tsetTimeout(Util.bind(done, this, null, tile), 0);\r\n\t\t} else {\r\n\t\t\tdone(null, tile);\r\n\t\t}\r\n\t},\r\n\r\n\t_tileOnError: function (done, tile, e) {\r\n\t\tvar errorUrl = this.options.errorTileUrl;\r\n\t\tif (errorUrl && tile.getAttribute('src') !== errorUrl) {\r\n\t\t\ttile.src = errorUrl;\r\n\t\t}\r\n\t\tdone(e, tile);\r\n\t},\r\n\r\n\t_onTileRemove: function (e) {\r\n\t\te.tile.onload = null;\r\n\t},\r\n\r\n\t_getZoomForUrl: function () {\r\n\t\tvar zoom = this._tileZoom,\r\n\t\tmaxZoom = this.options.maxZoom,\r\n\t\tzoomReverse = this.options.zoomReverse,\r\n\t\tzoomOffset = this.options.zoomOffset;\r\n\r\n\t\tif (zoomReverse) {\r\n\t\t\tzoom = maxZoom - zoom;\r\n\t\t}\r\n\r\n\t\treturn zoom + zoomOffset;\r\n\t},\r\n\r\n\t_getSubdomain: function (tilePoint) {\r\n\t\tvar index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length;\r\n\t\treturn this.options.subdomains[index];\r\n\t},\r\n\r\n\t// stops loading all tiles in the background layer\r\n\t_abortLoading: function () {\r\n\t\tvar i, tile;\r\n\t\tfor (i in this._tiles) {\r\n\t\t\tif (this._tiles[i].coords.z !== this._tileZoom) {\r\n\t\t\t\ttile = this._tiles[i].el;\r\n\r\n\t\t\t\ttile.onload = Util.falseFn;\r\n\t\t\t\ttile.onerror = Util.falseFn;\r\n\r\n\t\t\t\tif (!tile.complete) {\r\n\t\t\t\t\ttile.src = Util.emptyImageUrl;\r\n\t\t\t\t\tvar coords = this._tiles[i].coords;\r\n\t\t\t\t\tDomUtil.remove(tile);\r\n\t\t\t\t\tdelete this._tiles[i];\r\n\t\t\t\t\t// @event tileabort: TileEvent\r\n\t\t\t\t\t// Fired when a tile was loading but is now not wanted.\r\n\t\t\t\t\tthis.fire('tileabort', {\r\n\t\t\t\t\t\ttile: tile,\r\n\t\t\t\t\t\tcoords: coords\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_removeTile: function (key) {\r\n\t\tvar tile = this._tiles[key];\r\n\t\tif (!tile) { return; }\r\n\r\n\t\t// Cancels any pending http requests associated with the tile\r\n\t\ttile.el.setAttribute('src', Util.emptyImageUrl);\r\n\r\n\t\treturn GridLayer.prototype._removeTile.call(this, key);\r\n\t},\r\n\r\n\t_tileReady: function (coords, err, tile) {\r\n\t\tif (!this._map || (tile && tile.getAttribute('src') === Util.emptyImageUrl)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn GridLayer.prototype._tileReady.call(this, coords, err, tile);\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.tilelayer(urlTemplate: String, options?: TileLayer options)\r\n// Instantiates a tile layer object given a `URL template` and optionally an options object.\r\n\r\nexport function tileLayer(url, options) {\r\n\treturn new TileLayer(url, options);\r\n}\r\n","import {TileLayer} from './TileLayer';\r\nimport {extend, setOptions, getParamString} from '../../core/Util';\r\nimport Browser from '../../core/Browser';\r\nimport {EPSG4326} from '../../geo/crs/CRS.EPSG4326';\r\nimport {toBounds} from '../../geometry/Bounds';\r\n\r\n/*\r\n * @class TileLayer.WMS\r\n * @inherits TileLayer\r\n * @aka L.TileLayer.WMS\r\n * Used to display [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services as tile layers on the map. Extends `TileLayer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var nexrad = L.tileLayer.wms(\"http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi\", {\r\n * \tlayers: 'nexrad-n0r-900913',\r\n * \tformat: 'image/png',\r\n * \ttransparent: true,\r\n * \tattribution: \"Weather data © 2012 IEM Nexrad\"\r\n * });\r\n * ```\r\n */\r\n\r\nexport var TileLayerWMS = TileLayer.extend({\r\n\r\n\t// @section\r\n\t// @aka TileLayer.WMS options\r\n\t// If any custom options not documented here are used, they will be sent to the\r\n\t// WMS server as extra parameters in each request URL. This can be useful for\r\n\t// [non-standard vendor WMS parameters](https://docs.geoserver.org/stable/en/user/services/wms/vendor.html).\r\n\tdefaultWmsParams: {\r\n\t\tservice: 'WMS',\r\n\t\trequest: 'GetMap',\r\n\r\n\t\t// @option layers: String = ''\r\n\t\t// **(required)** Comma-separated list of WMS layers to show.\r\n\t\tlayers: '',\r\n\r\n\t\t// @option styles: String = ''\r\n\t\t// Comma-separated list of WMS styles.\r\n\t\tstyles: '',\r\n\r\n\t\t// @option format: String = 'image/jpeg'\r\n\t\t// WMS image format (use `'image/png'` for layers with transparency).\r\n\t\tformat: 'image/jpeg',\r\n\r\n\t\t// @option transparent: Boolean = false\r\n\t\t// If `true`, the WMS service will return images with transparency.\r\n\t\ttransparent: false,\r\n\r\n\t\t// @option version: String = '1.1.1'\r\n\t\t// Version of the WMS service to use\r\n\t\tversion: '1.1.1'\r\n\t},\r\n\r\n\toptions: {\r\n\t\t// @option crs: CRS = null\r\n\t\t// Coordinate Reference System to use for the WMS requests, defaults to\r\n\t\t// map CRS. Don't change this if you're not sure what it means.\r\n\t\tcrs: null,\r\n\r\n\t\t// @option uppercase: Boolean = false\r\n\t\t// If `true`, WMS request parameter keys will be uppercase.\r\n\t\tuppercase: false\r\n\t},\r\n\r\n\tinitialize: function (url, options) {\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\tvar wmsParams = extend({}, this.defaultWmsParams);\r\n\r\n\t\t// all keys that are not TileLayer options go to WMS params\r\n\t\tfor (var i in options) {\r\n\t\t\tif (!(i in this.options)) {\r\n\t\t\t\twmsParams[i] = options[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\toptions = setOptions(this, options);\r\n\r\n\t\tvar realRetina = options.detectRetina && Browser.retina ? 2 : 1;\r\n\t\tvar tileSize = this.getTileSize();\r\n\t\twmsParams.width = tileSize.x * realRetina;\r\n\t\twmsParams.height = tileSize.y * realRetina;\r\n\r\n\t\tthis.wmsParams = wmsParams;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\r\n\t\tthis._crs = this.options.crs || map.options.crs;\r\n\t\tthis._wmsVersion = parseFloat(this.wmsParams.version);\r\n\r\n\t\tvar projectionKey = this._wmsVersion >= 1.3 ? 'crs' : 'srs';\r\n\t\tthis.wmsParams[projectionKey] = this._crs.code;\r\n\r\n\t\tTileLayer.prototype.onAdd.call(this, map);\r\n\t},\r\n\r\n\tgetTileUrl: function (coords) {\r\n\r\n\t\tvar tileBounds = this._tileCoordsToNwSe(coords),\r\n\t\t crs = this._crs,\r\n\t\t bounds = toBounds(crs.project(tileBounds[0]), crs.project(tileBounds[1])),\r\n\t\t min = bounds.min,\r\n\t\t max = bounds.max,\r\n\t\t bbox = (this._wmsVersion >= 1.3 && this._crs === EPSG4326 ?\r\n\t\t [min.y, min.x, max.y, max.x] :\r\n\t\t [min.x, min.y, max.x, max.y]).join(','),\r\n\t\t url = TileLayer.prototype.getTileUrl.call(this, coords);\r\n\t\treturn url +\r\n\t\t\tgetParamString(this.wmsParams, url, this.options.uppercase) +\r\n\t\t\t(this.options.uppercase ? '&BBOX=' : '&bbox=') + bbox;\r\n\t},\r\n\r\n\t// @method setParams(params: Object, noRedraw?: Boolean): this\r\n\t// Merges an object with the new parameters and re-requests tiles on the current screen (unless `noRedraw` was set to true).\r\n\tsetParams: function (params, noRedraw) {\r\n\r\n\t\textend(this.wmsParams, params);\r\n\r\n\t\tif (!noRedraw) {\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.tileLayer.wms(baseUrl: String, options: TileLayer.WMS options)\r\n// Instantiates a WMS tile layer object given a base URL of the WMS service and a WMS parameters/options object.\r\nexport function tileLayerWMS(url, options) {\r\n\treturn new TileLayerWMS(url, options);\r\n}\r\n","export {GridLayer, gridLayer} from './GridLayer';\nimport {TileLayer, tileLayer} from './TileLayer';\nimport {TileLayerWMS, tileLayerWMS} from './TileLayer.WMS';\nTileLayer.WMS = TileLayerWMS;\ntileLayer.wms = tileLayerWMS;\nexport {TileLayer, tileLayer};\n","import {Layer} from '../Layer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as Util from '../../core/Util';\nimport Browser from '../../core/Browser';\nimport {Bounds} from '../../geometry/Bounds';\n\n\n\n/*\n * @class Renderer\n * @inherits Layer\n * @aka L.Renderer\n *\n * Base class for vector renderer implementations (`SVG`, `Canvas`). Handles the\n * DOM container of the renderer, its bounds, and its zoom animation.\n *\n * A `Renderer` works as an implicit layer group for all `Path`s - the renderer\n * itself can be added or removed to the map. All paths use a renderer, which can\n * be implicit (the map will decide the type of renderer and use it automatically)\n * or explicit (using the [`renderer`](#path-renderer) option of the path).\n *\n * Do not use this class directly, use `SVG` and `Canvas` instead.\n *\n * @event update: Event\n * Fired when the renderer updates its bounds, center and zoom, for example when\n * its map has moved\n */\n\nexport var Renderer = Layer.extend({\n\n\t// @section\n\t// @aka Renderer options\n\toptions: {\n\t\t// @option padding: Number = 0.1\n\t\t// How much to extend the clip area around the map view (relative to its size)\n\t\t// e.g. 0.1 would be 10% of map view in each direction\n\t\tpadding: 0.1\n\t},\n\n\tinitialize: function (options) {\n\t\tUtil.setOptions(this, options);\n\t\tUtil.stamp(this);\n\t\tthis._layers = this._layers || {};\n\t},\n\n\tonAdd: function () {\n\t\tif (!this._container) {\n\t\t\tthis._initContainer(); // defined by renderer implementations\n\n\t\t\t// always keep transform-origin as 0 0\n\t\t\tDomUtil.addClass(this._container, 'leaflet-zoom-animated');\n\t\t}\n\n\t\tthis.getPane().appendChild(this._container);\n\t\tthis._update();\n\t\tthis.on('update', this._updatePaths, this);\n\t},\n\n\tonRemove: function () {\n\t\tthis.off('update', this._updatePaths, this);\n\t\tthis._destroyContainer();\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = {\n\t\t\tviewreset: this._reset,\n\t\t\tzoom: this._onZoom,\n\t\t\tmoveend: this._update,\n\t\t\tzoomend: this._onZoomEnd\n\t\t};\n\t\tif (this._zoomAnimated) {\n\t\t\tevents.zoomanim = this._onAnimZoom;\n\t\t}\n\t\treturn events;\n\t},\n\n\t_onAnimZoom: function (ev) {\n\t\tthis._updateTransform(ev.center, ev.zoom);\n\t},\n\n\t_onZoom: function () {\n\t\tthis._updateTransform(this._map.getCenter(), this._map.getZoom());\n\t},\n\n\t_updateTransform: function (center, zoom) {\n\t\tvar scale = this._map.getZoomScale(zoom, this._zoom),\n\t\t viewHalf = this._map.getSize().multiplyBy(0.5 + this.options.padding),\n\t\t currentCenterPoint = this._map.project(this._center, zoom),\n\n\t\t topLeftOffset = viewHalf.multiplyBy(-scale).add(currentCenterPoint)\n\t\t\t\t .subtract(this._map._getNewPixelOrigin(center, zoom));\n\n\t\tif (Browser.any3d) {\n\t\t\tDomUtil.setTransform(this._container, topLeftOffset, scale);\n\t\t} else {\n\t\t\tDomUtil.setPosition(this._container, topLeftOffset);\n\t\t}\n\t},\n\n\t_reset: function () {\n\t\tthis._update();\n\t\tthis._updateTransform(this._center, this._zoom);\n\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._reset();\n\t\t}\n\t},\n\n\t_onZoomEnd: function () {\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._project();\n\t\t}\n\t},\n\n\t_updatePaths: function () {\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._update();\n\t\t}\n\t},\n\n\t_update: function () {\n\t\t// Update pixel bounds of renderer container (for positioning/sizing/clipping later)\n\t\t// Subclasses are responsible of firing the 'update' event.\n\t\tvar p = this.options.padding,\n\t\t size = this._map.getSize(),\n\t\t min = this._map.containerPointToLayerPoint(size.multiplyBy(-p)).round();\n\n\t\tthis._bounds = new Bounds(min, min.add(size.multiplyBy(1 + p * 2)).round());\n\n\t\tthis._center = this._map.getCenter();\n\t\tthis._zoom = this._map.getZoom();\n\t}\n});\n","import {Renderer} from './Renderer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport Browser from '../../core/Browser';\nimport * as Util from '../../core/Util';\nimport {Bounds} from '../../geometry/Bounds';\n\n/*\n * @class Canvas\n * @inherits Renderer\n * @aka L.Canvas\n *\n * Allows vector layers to be displayed with [``](https://developer.mozilla.org/docs/Web/API/Canvas_API).\n * Inherits `Renderer`.\n *\n * Due to [technical limitations](https://caniuse.com/canvas), Canvas is not\n * available in all web browsers, notably IE8, and overlapping geometries might\n * not display properly in some edge cases.\n *\n * @example\n *\n * Use Canvas by default for all paths in the map:\n *\n * ```js\n * var map = L.map('map', {\n * \trenderer: L.canvas()\n * });\n * ```\n *\n * Use a Canvas renderer with extra padding for specific vector geometries:\n *\n * ```js\n * var map = L.map('map');\n * var myRenderer = L.canvas({ padding: 0.5 });\n * var line = L.polyline( coordinates, { renderer: myRenderer } );\n * var circle = L.circle( center, { renderer: myRenderer } );\n * ```\n */\n\nexport var Canvas = Renderer.extend({\n\n\t// @section\n\t// @aka Canvas options\n\toptions: {\n\t\t// @option tolerance: Number = 0\n\t\t// How much to extend the click tolerance around a path/object on the map.\n\t\ttolerance: 0\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = Renderer.prototype.getEvents.call(this);\n\t\tevents.viewprereset = this._onViewPreReset;\n\t\treturn events;\n\t},\n\n\t_onViewPreReset: function () {\n\t\t// Set a flag so that a viewprereset+moveend+viewreset only updates&redraws once\n\t\tthis._postponeUpdatePaths = true;\n\t},\n\n\tonAdd: function () {\n\t\tRenderer.prototype.onAdd.call(this);\n\n\t\t// Redraw vectors since canvas is cleared upon removal,\n\t\t// in case of removing the renderer itself from the map.\n\t\tthis._draw();\n\t},\n\n\t_initContainer: function () {\n\t\tvar container = this._container = document.createElement('canvas');\n\n\t\tDomEvent.on(container, 'mousemove', this._onMouseMove, this);\n\t\tDomEvent.on(container, 'click dblclick mousedown mouseup contextmenu', this._onClick, this);\n\t\tDomEvent.on(container, 'mouseout', this._handleMouseOut, this);\n\t\tcontainer['_leaflet_disable_events'] = true;\n\n\t\tthis._ctx = container.getContext('2d');\n\t},\n\n\t_destroyContainer: function () {\n\t\tUtil.cancelAnimFrame(this._redrawRequest);\n\t\tdelete this._ctx;\n\t\tDomUtil.remove(this._container);\n\t\tDomEvent.off(this._container);\n\t\tdelete this._container;\n\t},\n\n\t_updatePaths: function () {\n\t\tif (this._postponeUpdatePaths) { return; }\n\n\t\tvar layer;\n\t\tthis._redrawBounds = null;\n\t\tfor (var id in this._layers) {\n\t\t\tlayer = this._layers[id];\n\t\t\tlayer._update();\n\t\t}\n\t\tthis._redraw();\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom && this._bounds) { return; }\n\n\t\tRenderer.prototype._update.call(this);\n\n\t\tvar b = this._bounds,\n\t\t container = this._container,\n\t\t size = b.getSize(),\n\t\t m = Browser.retina ? 2 : 1;\n\n\t\tDomUtil.setPosition(container, b.min);\n\n\t\t// set canvas size (also clearing it); use double size on retina\n\t\tcontainer.width = m * size.x;\n\t\tcontainer.height = m * size.y;\n\t\tcontainer.style.width = size.x + 'px';\n\t\tcontainer.style.height = size.y + 'px';\n\n\t\tif (Browser.retina) {\n\t\t\tthis._ctx.scale(2, 2);\n\t\t}\n\n\t\t// translate so we use the same path coordinates after canvas element moves\n\t\tthis._ctx.translate(-b.min.x, -b.min.y);\n\n\t\t// Tell paths to redraw themselves\n\t\tthis.fire('update');\n\t},\n\n\t_reset: function () {\n\t\tRenderer.prototype._reset.call(this);\n\n\t\tif (this._postponeUpdatePaths) {\n\t\t\tthis._postponeUpdatePaths = false;\n\t\t\tthis._updatePaths();\n\t\t}\n\t},\n\n\t_initPath: function (layer) {\n\t\tthis._updateDashArray(layer);\n\t\tthis._layers[Util.stamp(layer)] = layer;\n\n\t\tvar order = layer._order = {\n\t\t\tlayer: layer,\n\t\t\tprev: this._drawLast,\n\t\t\tnext: null\n\t\t};\n\t\tif (this._drawLast) { this._drawLast.next = order; }\n\t\tthis._drawLast = order;\n\t\tthis._drawFirst = this._drawFirst || this._drawLast;\n\t},\n\n\t_addPath: function (layer) {\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_removePath: function (layer) {\n\t\tvar order = layer._order;\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else {\n\t\t\tthis._drawLast = prev;\n\t\t}\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else {\n\t\t\tthis._drawFirst = next;\n\t\t}\n\n\t\tdelete layer._order;\n\n\t\tdelete this._layers[Util.stamp(layer)];\n\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updatePath: function (layer) {\n\t\t// Redraw the union of the layer's old pixel\n\t\t// bounds and the new pixel bounds.\n\t\tthis._extendRedrawBounds(layer);\n\t\tlayer._project();\n\t\tlayer._update();\n\t\t// The redraw will extend the redraw bounds\n\t\t// with the new pixel bounds.\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tthis._updateDashArray(layer);\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updateDashArray: function (layer) {\n\t\tif (typeof layer.options.dashArray === 'string') {\n\t\t\tvar parts = layer.options.dashArray.split(/[, ]+/),\n\t\t\t dashArray = [],\n\t\t\t dashValue,\n\t\t\t i;\n\t\t\tfor (i = 0; i < parts.length; i++) {\n\t\t\t\tdashValue = Number(parts[i]);\n\t\t\t\t// Ignore dash array containing invalid lengths\n\t\t\t\tif (isNaN(dashValue)) { return; }\n\t\t\t\tdashArray.push(dashValue);\n\t\t\t}\n\t\t\tlayer.options._dashArray = dashArray;\n\t\t} else {\n\t\t\tlayer.options._dashArray = layer.options.dashArray;\n\t\t}\n\t},\n\n\t_requestRedraw: function (layer) {\n\t\tif (!this._map) { return; }\n\n\t\tthis._extendRedrawBounds(layer);\n\t\tthis._redrawRequest = this._redrawRequest || Util.requestAnimFrame(this._redraw, this);\n\t},\n\n\t_extendRedrawBounds: function (layer) {\n\t\tif (layer._pxBounds) {\n\t\t\tvar padding = (layer.options.weight || 0) + 1;\n\t\t\tthis._redrawBounds = this._redrawBounds || new Bounds();\n\t\t\tthis._redrawBounds.extend(layer._pxBounds.min.subtract([padding, padding]));\n\t\t\tthis._redrawBounds.extend(layer._pxBounds.max.add([padding, padding]));\n\t\t}\n\t},\n\n\t_redraw: function () {\n\t\tthis._redrawRequest = null;\n\n\t\tif (this._redrawBounds) {\n\t\t\tthis._redrawBounds.min._floor();\n\t\t\tthis._redrawBounds.max._ceil();\n\t\t}\n\n\t\tthis._clear(); // clear layers in redraw bounds\n\t\tthis._draw(); // draw layers\n\n\t\tthis._redrawBounds = null;\n\t},\n\n\t_clear: function () {\n\t\tvar bounds = this._redrawBounds;\n\t\tif (bounds) {\n\t\t\tvar size = bounds.getSize();\n\t\t\tthis._ctx.clearRect(bounds.min.x, bounds.min.y, size.x, size.y);\n\t\t} else {\n\t\t\tthis._ctx.save();\n\t\t\tthis._ctx.setTransform(1, 0, 0, 1, 0, 0);\n\t\t\tthis._ctx.clearRect(0, 0, this._container.width, this._container.height);\n\t\t\tthis._ctx.restore();\n\t\t}\n\t},\n\n\t_draw: function () {\n\t\tvar layer, bounds = this._redrawBounds;\n\t\tthis._ctx.save();\n\t\tif (bounds) {\n\t\t\tvar size = bounds.getSize();\n\t\t\tthis._ctx.beginPath();\n\t\t\tthis._ctx.rect(bounds.min.x, bounds.min.y, size.x, size.y);\n\t\t\tthis._ctx.clip();\n\t\t}\n\n\t\tthis._drawing = true;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (!bounds || (layer._pxBounds && layer._pxBounds.intersects(bounds))) {\n\t\t\t\tlayer._updatePath();\n\t\t\t}\n\t\t}\n\n\t\tthis._drawing = false;\n\n\t\tthis._ctx.restore(); // Restore state before clipping.\n\t},\n\n\t_updatePoly: function (layer, closed) {\n\t\tif (!this._drawing) { return; }\n\n\t\tvar i, j, len2, p,\n\t\t parts = layer._parts,\n\t\t len = parts.length,\n\t\t ctx = this._ctx;\n\n\t\tif (!len) { return; }\n\n\t\tctx.beginPath();\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tfor (j = 0, len2 = parts[i].length; j < len2; j++) {\n\t\t\t\tp = parts[i][j];\n\t\t\t\tctx[j ? 'lineTo' : 'moveTo'](p.x, p.y);\n\t\t\t}\n\t\t\tif (closed) {\n\t\t\t\tctx.closePath();\n\t\t\t}\n\t\t}\n\n\t\tthis._fillStroke(ctx, layer);\n\n\t\t// TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature\n\t},\n\n\t_updateCircle: function (layer) {\n\n\t\tif (!this._drawing || layer._empty()) { return; }\n\n\t\tvar p = layer._point,\n\t\t ctx = this._ctx,\n\t\t r = Math.max(Math.round(layer._radius), 1),\n\t\t s = (Math.max(Math.round(layer._radiusY), 1) || r) / r;\n\n\t\tif (s !== 1) {\n\t\t\tctx.save();\n\t\t\tctx.scale(1, s);\n\t\t}\n\n\t\tctx.beginPath();\n\t\tctx.arc(p.x, p.y / s, r, 0, Math.PI * 2, false);\n\n\t\tif (s !== 1) {\n\t\t\tctx.restore();\n\t\t}\n\n\t\tthis._fillStroke(ctx, layer);\n\t},\n\n\t_fillStroke: function (ctx, layer) {\n\t\tvar options = layer.options;\n\n\t\tif (options.fill) {\n\t\t\tctx.globalAlpha = options.fillOpacity;\n\t\t\tctx.fillStyle = options.fillColor || options.color;\n\t\t\tctx.fill(options.fillRule || 'evenodd');\n\t\t}\n\n\t\tif (options.stroke && options.weight !== 0) {\n\t\t\tif (ctx.setLineDash) {\n\t\t\t\tctx.setLineDash(layer.options && layer.options._dashArray || []);\n\t\t\t}\n\t\t\tctx.globalAlpha = options.opacity;\n\t\t\tctx.lineWidth = options.weight;\n\t\t\tctx.strokeStyle = options.color;\n\t\t\tctx.lineCap = options.lineCap;\n\t\t\tctx.lineJoin = options.lineJoin;\n\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t// Canvas obviously doesn't have mouse events for individual drawn objects,\n\t// so we emulate that by calculating what's under the mouse on mousemove/click manually\n\n\t_onClick: function (e) {\n\t\tvar point = this._map.mouseEventToLayerPoint(e), layer, clickedLayer;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (layer.options.interactive && layer._containsPoint(point)) {\n\t\t\t\tif (!(e.type === 'click' || e.type === 'preclick') || !this._map._draggableMoved(layer)) {\n\t\t\t\t\tclickedLayer = layer;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._fireEvent(clickedLayer ? [clickedLayer] : false, e);\n\t},\n\n\t_onMouseMove: function (e) {\n\t\tif (!this._map || this._map.dragging.moving() || this._map._animatingZoom) { return; }\n\n\t\tvar point = this._map.mouseEventToLayerPoint(e);\n\t\tthis._handleMouseHover(e, point);\n\t},\n\n\n\t_handleMouseOut: function (e) {\n\t\tvar layer = this._hoveredLayer;\n\t\tif (layer) {\n\t\t\t// if we're leaving the layer, fire mouseout\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-interactive');\n\t\t\tthis._fireEvent([layer], e, 'mouseout');\n\t\t\tthis._hoveredLayer = null;\n\t\t\tthis._mouseHoverThrottled = false;\n\t\t}\n\t},\n\n\t_handleMouseHover: function (e, point) {\n\t\tif (this._mouseHoverThrottled) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar layer, candidateHoveredLayer;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (layer.options.interactive && layer._containsPoint(point)) {\n\t\t\t\tcandidateHoveredLayer = layer;\n\t\t\t}\n\t\t}\n\n\t\tif (candidateHoveredLayer !== this._hoveredLayer) {\n\t\t\tthis._handleMouseOut(e);\n\n\t\t\tif (candidateHoveredLayer) {\n\t\t\t\tDomUtil.addClass(this._container, 'leaflet-interactive'); // change cursor\n\t\t\t\tthis._fireEvent([candidateHoveredLayer], e, 'mouseover');\n\t\t\t\tthis._hoveredLayer = candidateHoveredLayer;\n\t\t\t}\n\t\t}\n\n\t\tthis._fireEvent(this._hoveredLayer ? [this._hoveredLayer] : false, e);\n\n\t\tthis._mouseHoverThrottled = true;\n\t\tsetTimeout(Util.bind(function () {\n\t\t\tthis._mouseHoverThrottled = false;\n\t\t}, this), 32);\n\t},\n\n\t_fireEvent: function (layers, e, type) {\n\t\tthis._map._fireDOMEvent(e, type || e.type, layers);\n\t},\n\n\t_bringToFront: function (layer) {\n\t\tvar order = layer._order;\n\n\t\tif (!order) { return; }\n\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else {\n\t\t\t// Already last\n\t\t\treturn;\n\t\t}\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else if (next) {\n\t\t\t// Update first entry unless this is the\n\t\t\t// single entry\n\t\t\tthis._drawFirst = next;\n\t\t}\n\n\t\torder.prev = this._drawLast;\n\t\tthis._drawLast.next = order;\n\n\t\torder.next = null;\n\t\tthis._drawLast = order;\n\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tvar order = layer._order;\n\n\t\tif (!order) { return; }\n\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else {\n\t\t\t// Already first\n\t\t\treturn;\n\t\t}\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else if (prev) {\n\t\t\t// Update last entry unless this is the\n\t\t\t// single entry\n\t\t\tthis._drawLast = prev;\n\t\t}\n\n\t\torder.prev = null;\n\n\t\torder.next = this._drawFirst;\n\t\tthis._drawFirst.prev = order;\n\t\tthis._drawFirst = order;\n\n\t\tthis._requestRedraw(layer);\n\t}\n});\n\n// @factory L.canvas(options?: Renderer options)\n// Creates a Canvas renderer with the given options.\nexport function canvas(options) {\n\treturn Browser.canvas ? new Canvas(options) : null;\n}\n","import * as DomUtil from '../../dom/DomUtil';\nimport * as Util from '../../core/Util';\nimport {Renderer} from './Renderer';\n\n/*\n * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!\n */\n\n\nexport var vmlCreate = (function () {\n\ttry {\n\t\tdocument.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');\n\t\treturn function (name) {\n\t\t\treturn document.createElement('');\n\t\t};\n\t} catch (e) {\n\t\t// Do not return fn from catch block so `e` can be garbage collected\n\t\t// See https://github.com/Leaflet/Leaflet/pull/7279\n\t}\n\treturn function (name) {\n\t\treturn document.createElement('<' + name + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"lvml\">');\n\t};\n})();\n\n\n/*\n * @class SVG\n *\n *\n * VML was deprecated in 2012, which means VML functionality exists only for backwards compatibility\n * with old versions of Internet Explorer.\n */\n\n// mixin to redefine some SVG methods to handle VML syntax which is similar but with some differences\nexport var vmlMixin = {\n\n\t_initContainer: function () {\n\t\tthis._container = DomUtil.create('div', 'leaflet-vml-container');\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom) { return; }\n\t\tRenderer.prototype._update.call(this);\n\t\tthis.fire('update');\n\t},\n\n\t_initPath: function (layer) {\n\t\tvar container = layer._container = vmlCreate('shape');\n\n\t\tDomUtil.addClass(container, 'leaflet-vml-shape ' + (this.options.className || ''));\n\n\t\tcontainer.coordsize = '1 1';\n\n\t\tlayer._path = vmlCreate('path');\n\t\tcontainer.appendChild(layer._path);\n\n\t\tthis._updateStyle(layer);\n\t\tthis._layers[Util.stamp(layer)] = layer;\n\t},\n\n\t_addPath: function (layer) {\n\t\tvar container = layer._container;\n\t\tthis._container.appendChild(container);\n\n\t\tif (layer.options.interactive) {\n\t\t\tlayer.addInteractiveTarget(container);\n\t\t}\n\t},\n\n\t_removePath: function (layer) {\n\t\tvar container = layer._container;\n\t\tDomUtil.remove(container);\n\t\tlayer.removeInteractiveTarget(container);\n\t\tdelete this._layers[Util.stamp(layer)];\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tvar stroke = layer._stroke,\n\t\t fill = layer._fill,\n\t\t options = layer.options,\n\t\t container = layer._container;\n\n\t\tcontainer.stroked = !!options.stroke;\n\t\tcontainer.filled = !!options.fill;\n\n\t\tif (options.stroke) {\n\t\t\tif (!stroke) {\n\t\t\t\tstroke = layer._stroke = vmlCreate('stroke');\n\t\t\t}\n\t\t\tcontainer.appendChild(stroke);\n\t\t\tstroke.weight = options.weight + 'px';\n\t\t\tstroke.color = options.color;\n\t\t\tstroke.opacity = options.opacity;\n\n\t\t\tif (options.dashArray) {\n\t\t\t\tstroke.dashStyle = Util.isArray(options.dashArray) ?\n\t\t\t\t options.dashArray.join(' ') :\n\t\t\t\t options.dashArray.replace(/( *, *)/g, ' ');\n\t\t\t} else {\n\t\t\t\tstroke.dashStyle = '';\n\t\t\t}\n\t\t\tstroke.endcap = options.lineCap.replace('butt', 'flat');\n\t\t\tstroke.joinstyle = options.lineJoin;\n\n\t\t} else if (stroke) {\n\t\t\tcontainer.removeChild(stroke);\n\t\t\tlayer._stroke = null;\n\t\t}\n\n\t\tif (options.fill) {\n\t\t\tif (!fill) {\n\t\t\t\tfill = layer._fill = vmlCreate('fill');\n\t\t\t}\n\t\t\tcontainer.appendChild(fill);\n\t\t\tfill.color = options.fillColor || options.color;\n\t\t\tfill.opacity = options.fillOpacity;\n\n\t\t} else if (fill) {\n\t\t\tcontainer.removeChild(fill);\n\t\t\tlayer._fill = null;\n\t\t}\n\t},\n\n\t_updateCircle: function (layer) {\n\t\tvar p = layer._point.round(),\n\t\t r = Math.round(layer._radius),\n\t\t r2 = Math.round(layer._radiusY || r);\n\n\t\tthis._setPath(layer, layer._empty() ? 'M0 0' :\n\t\t\t'AL ' + p.x + ',' + p.y + ' ' + r + ',' + r2 + ' 0,' + (65535 * 360));\n\t},\n\n\t_setPath: function (layer, path) {\n\t\tlayer._path.v = path;\n\t},\n\n\t_bringToFront: function (layer) {\n\t\tDomUtil.toFront(layer._container);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tDomUtil.toBack(layer._container);\n\t}\n};\n","import {Renderer} from './Renderer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport Browser from '../../core/Browser';\nimport {stamp} from '../../core/Util';\nimport {svgCreate, pointsToPath} from './SVG.Util';\nexport {pointsToPath};\nimport {vmlMixin, vmlCreate} from './SVG.VML';\n\nexport var create = Browser.vml ? vmlCreate : svgCreate;\n\n/*\n * @class SVG\n * @inherits Renderer\n * @aka L.SVG\n *\n * Allows vector layers to be displayed with [SVG](https://developer.mozilla.org/docs/Web/SVG).\n * Inherits `Renderer`.\n *\n * Due to [technical limitations](https://caniuse.com/svg), SVG is not\n * available in all web browsers, notably Android 2.x and 3.x.\n *\n * Although SVG is not available on IE7 and IE8, these browsers support\n * [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language)\n * (a now deprecated technology), and the SVG renderer will fall back to VML in\n * this case.\n *\n * @example\n *\n * Use SVG by default for all paths in the map:\n *\n * ```js\n * var map = L.map('map', {\n * \trenderer: L.svg()\n * });\n * ```\n *\n * Use a SVG renderer with extra padding for specific vector geometries:\n *\n * ```js\n * var map = L.map('map');\n * var myRenderer = L.svg({ padding: 0.5 });\n * var line = L.polyline( coordinates, { renderer: myRenderer } );\n * var circle = L.circle( center, { renderer: myRenderer } );\n * ```\n */\n\nexport var SVG = Renderer.extend({\n\n\t_initContainer: function () {\n\t\tthis._container = create('svg');\n\n\t\t// makes it possible to click through svg root; we'll reset it back in individual paths\n\t\tthis._container.setAttribute('pointer-events', 'none');\n\n\t\tthis._rootGroup = create('g');\n\t\tthis._container.appendChild(this._rootGroup);\n\t},\n\n\t_destroyContainer: function () {\n\t\tDomUtil.remove(this._container);\n\t\tDomEvent.off(this._container);\n\t\tdelete this._container;\n\t\tdelete this._rootGroup;\n\t\tdelete this._svgSize;\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom && this._bounds) { return; }\n\n\t\tRenderer.prototype._update.call(this);\n\n\t\tvar b = this._bounds,\n\t\t size = b.getSize(),\n\t\t container = this._container;\n\n\t\t// set size of svg-container if changed\n\t\tif (!this._svgSize || !this._svgSize.equals(size)) {\n\t\t\tthis._svgSize = size;\n\t\t\tcontainer.setAttribute('width', size.x);\n\t\t\tcontainer.setAttribute('height', size.y);\n\t\t}\n\n\t\t// movement: update container viewBox so that we don't have to change coordinates of individual layers\n\t\tDomUtil.setPosition(container, b.min);\n\t\tcontainer.setAttribute('viewBox', [b.min.x, b.min.y, size.x, size.y].join(' '));\n\n\t\tthis.fire('update');\n\t},\n\n\t// methods below are called by vector layers implementations\n\n\t_initPath: function (layer) {\n\t\tvar path = layer._path = create('path');\n\n\t\t// @namespace Path\n\t\t// @option className: String = null\n\t\t// Custom class name set on an element. Only for SVG renderer.\n\t\tif (layer.options.className) {\n\t\t\tDomUtil.addClass(path, layer.options.className);\n\t\t}\n\n\t\tif (layer.options.interactive) {\n\t\t\tDomUtil.addClass(path, 'leaflet-interactive');\n\t\t}\n\n\t\tthis._updateStyle(layer);\n\t\tthis._layers[stamp(layer)] = layer;\n\t},\n\n\t_addPath: function (layer) {\n\t\tif (!this._rootGroup) { this._initContainer(); }\n\t\tthis._rootGroup.appendChild(layer._path);\n\t\tlayer.addInteractiveTarget(layer._path);\n\t},\n\n\t_removePath: function (layer) {\n\t\tDomUtil.remove(layer._path);\n\t\tlayer.removeInteractiveTarget(layer._path);\n\t\tdelete this._layers[stamp(layer)];\n\t},\n\n\t_updatePath: function (layer) {\n\t\tlayer._project();\n\t\tlayer._update();\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tvar path = layer._path,\n\t\t options = layer.options;\n\n\t\tif (!path) { return; }\n\n\t\tif (options.stroke) {\n\t\t\tpath.setAttribute('stroke', options.color);\n\t\t\tpath.setAttribute('stroke-opacity', options.opacity);\n\t\t\tpath.setAttribute('stroke-width', options.weight);\n\t\t\tpath.setAttribute('stroke-linecap', options.lineCap);\n\t\t\tpath.setAttribute('stroke-linejoin', options.lineJoin);\n\n\t\t\tif (options.dashArray) {\n\t\t\t\tpath.setAttribute('stroke-dasharray', options.dashArray);\n\t\t\t} else {\n\t\t\t\tpath.removeAttribute('stroke-dasharray');\n\t\t\t}\n\n\t\t\tif (options.dashOffset) {\n\t\t\t\tpath.setAttribute('stroke-dashoffset', options.dashOffset);\n\t\t\t} else {\n\t\t\t\tpath.removeAttribute('stroke-dashoffset');\n\t\t\t}\n\t\t} else {\n\t\t\tpath.setAttribute('stroke', 'none');\n\t\t}\n\n\t\tif (options.fill) {\n\t\t\tpath.setAttribute('fill', options.fillColor || options.color);\n\t\t\tpath.setAttribute('fill-opacity', options.fillOpacity);\n\t\t\tpath.setAttribute('fill-rule', options.fillRule || 'evenodd');\n\t\t} else {\n\t\t\tpath.setAttribute('fill', 'none');\n\t\t}\n\t},\n\n\t_updatePoly: function (layer, closed) {\n\t\tthis._setPath(layer, pointsToPath(layer._parts, closed));\n\t},\n\n\t_updateCircle: function (layer) {\n\t\tvar p = layer._point,\n\t\t r = Math.max(Math.round(layer._radius), 1),\n\t\t r2 = Math.max(Math.round(layer._radiusY), 1) || r,\n\t\t arc = 'a' + r + ',' + r2 + ' 0 1,0 ';\n\n\t\t// drawing a circle with two half-arcs\n\t\tvar d = layer._empty() ? 'M0 0' :\n\t\t\t'M' + (p.x - r) + ',' + p.y +\n\t\t\tarc + (r * 2) + ',0 ' +\n\t\t\tarc + (-r * 2) + ',0 ';\n\n\t\tthis._setPath(layer, d);\n\t},\n\n\t_setPath: function (layer, path) {\n\t\tlayer._path.setAttribute('d', path);\n\t},\n\n\t// SVG does not have the concept of zIndex so we resort to changing the DOM order of elements\n\t_bringToFront: function (layer) {\n\t\tDomUtil.toFront(layer._path);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tDomUtil.toBack(layer._path);\n\t}\n});\n\nif (Browser.vml) {\n\tSVG.include(vmlMixin);\n}\n\n// @namespace SVG\n// @factory L.svg(options?: Renderer options)\n// Creates a SVG renderer with the given options.\nexport function svg(options) {\n\treturn Browser.svg || Browser.vml ? new SVG(options) : null;\n}\n","import {Map} from '../../map/Map';\nimport {canvas} from './Canvas';\nimport {svg} from './SVG';\n\nMap.include({\n\t// @namespace Map; @method getRenderer(layer: Path): Renderer\n\t// Returns the instance of `Renderer` that should be used to render the given\n\t// `Path`. It will ensure that the `renderer` options of the map and paths\n\t// are respected, and that the renderers do exist on the map.\n\tgetRenderer: function (layer) {\n\t\t// @namespace Path; @option renderer: Renderer\n\t\t// Use this specific instance of `Renderer` for this path. Takes\n\t\t// precedence over the map's [default renderer](#map-renderer).\n\t\tvar renderer = layer.options.renderer || this._getPaneRenderer(layer.options.pane) || this.options.renderer || this._renderer;\n\n\t\tif (!renderer) {\n\t\t\trenderer = this._renderer = this._createRenderer();\n\t\t}\n\n\t\tif (!this.hasLayer(renderer)) {\n\t\t\tthis.addLayer(renderer);\n\t\t}\n\t\treturn renderer;\n\t},\n\n\t_getPaneRenderer: function (name) {\n\t\tif (name === 'overlayPane' || name === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar renderer = this._paneRenderers[name];\n\t\tif (renderer === undefined) {\n\t\t\trenderer = this._createRenderer({pane: name});\n\t\t\tthis._paneRenderers[name] = renderer;\n\t\t}\n\t\treturn renderer;\n\t},\n\n\t_createRenderer: function (options) {\n\t\t// @namespace Map; @option preferCanvas: Boolean = false\n\t\t// Whether `Path`s should be rendered on a `Canvas` renderer.\n\t\t// By default, all `Path`s are rendered in a `SVG` renderer.\n\t\treturn (this.options.preferCanvas && canvas(options)) || svg(options);\n\t}\n});\n","import {Polygon} from './Polygon';\nimport {toLatLngBounds} from '../../geo/LatLngBounds';\n\n/*\n * L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object.\n */\n\n/*\n * @class Rectangle\n * @aka L.Rectangle\n * @inherits Polygon\n *\n * A class for drawing rectangle overlays on a map. Extends `Polygon`.\n *\n * @example\n *\n * ```js\n * // define rectangle geographical bounds\n * var bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]];\n *\n * // create an orange rectangle\n * L.rectangle(bounds, {color: \"#ff7800\", weight: 1}).addTo(map);\n *\n * // zoom the map to the rectangle bounds\n * map.fitBounds(bounds);\n * ```\n *\n */\n\n\nexport var Rectangle = Polygon.extend({\n\tinitialize: function (latLngBounds, options) {\n\t\tPolygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options);\n\t},\n\n\t// @method setBounds(latLngBounds: LatLngBounds): this\n\t// Redraws the rectangle with the passed bounds.\n\tsetBounds: function (latLngBounds) {\n\t\treturn this.setLatLngs(this._boundsToLatLngs(latLngBounds));\n\t},\n\n\t_boundsToLatLngs: function (latLngBounds) {\n\t\tlatLngBounds = toLatLngBounds(latLngBounds);\n\t\treturn [\n\t\t\tlatLngBounds.getSouthWest(),\n\t\t\tlatLngBounds.getNorthWest(),\n\t\t\tlatLngBounds.getNorthEast(),\n\t\t\tlatLngBounds.getSouthEast()\n\t\t];\n\t}\n});\n\n\n// @factory L.rectangle(latLngBounds: LatLngBounds, options?: Polyline options)\nexport function rectangle(latLngBounds, options) {\n\treturn new Rectangle(latLngBounds, options);\n}\n","export {Renderer} from './Renderer';\nexport {Canvas, canvas} from './Canvas';\nimport {SVG, create, pointsToPath, svg} from './SVG';\nSVG.create = create;\nSVG.pointsToPath = pointsToPath;\nexport {SVG, svg};\nimport './Renderer.getRenderer';\t// This is a bit of a hack, but needed because circular dependencies\n\nexport {Path} from './Path';\nexport {CircleMarker, circleMarker} from './CircleMarker';\nexport {Circle, circle} from './Circle';\nexport {Polyline, polyline} from './Polyline';\nexport {Polygon, polygon} from './Polygon';\nexport {Rectangle, rectangle} from './Rectangle';\n","export {Layer} from './Layer';\nexport {LayerGroup, layerGroup} from './LayerGroup';\nexport {FeatureGroup, featureGroup} from './FeatureGroup';\nimport {GeoJSON, geoJSON, geoJson, geometryToLayer, coordsToLatLng, coordsToLatLngs, latLngToCoords, latLngsToCoords, getFeature, asFeature} from './GeoJSON';\nGeoJSON.geometryToLayer = geometryToLayer;\nGeoJSON.coordsToLatLng = coordsToLatLng;\nGeoJSON.coordsToLatLngs = coordsToLatLngs;\nGeoJSON.latLngToCoords = latLngToCoords;\nGeoJSON.latLngsToCoords = latLngsToCoords;\nGeoJSON.getFeature = getFeature;\nGeoJSON.asFeature = asFeature;\nexport {GeoJSON, geoJSON, geoJson};\n\nexport {ImageOverlay, imageOverlay} from './ImageOverlay';\nexport {VideoOverlay, videoOverlay} from './VideoOverlay';\nexport {SVGOverlay, svgOverlay} from './SVGOverlay';\n\nexport {DivOverlay} from './DivOverlay';\nexport {Popup, popup} from './Popup';\nexport {Tooltip, tooltip} from './Tooltip';\n\nexport * from './marker/index';\nexport * from './tile/index';\nexport * from './vector/index';\n","import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Bounds} from '../../geometry/Bounds';\n\n/*\n * L.Handler.BoxZoom is used to add shift-drag zoom interaction to the map\n * (zoom to a selected bounding box), enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @option boxZoom: Boolean = true\n\t// Whether the map can be zoomed to a rectangular area specified by\n\t// dragging the mouse while pressing the shift key.\n\tboxZoom: true\n});\n\nexport var BoxZoom = Handler.extend({\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\t\tthis._container = map._container;\n\t\tthis._pane = map._panes.overlayPane;\n\t\tthis._resetStateTimeout = 0;\n\t\tmap.on('unload', this._destroy, this);\n\t},\n\n\taddHooks: function () {\n\t\tDomEvent.on(this._container, 'mousedown', this._onMouseDown, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._container, 'mousedown', this._onMouseDown, this);\n\t},\n\n\tmoved: function () {\n\t\treturn this._moved;\n\t},\n\n\t_destroy: function () {\n\t\tDomUtil.remove(this._pane);\n\t\tdelete this._pane;\n\t},\n\n\t_resetState: function () {\n\t\tthis._resetStateTimeout = 0;\n\t\tthis._moved = false;\n\t},\n\n\t_clearDeferredResetState: function () {\n\t\tif (this._resetStateTimeout !== 0) {\n\t\t\tclearTimeout(this._resetStateTimeout);\n\t\t\tthis._resetStateTimeout = 0;\n\t\t}\n\t},\n\n\t_onMouseDown: function (e) {\n\t\tif (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; }\n\n\t\t// Clear the deferred resetState if it hasn't executed yet, otherwise it\n\t\t// will interrupt the interaction and orphan a box element in the container.\n\t\tthis._clearDeferredResetState();\n\t\tthis._resetState();\n\n\t\tDomUtil.disableTextSelection();\n\t\tDomUtil.disableImageDrag();\n\n\t\tthis._startPoint = this._map.mouseEventToContainerPoint(e);\n\n\t\tDomEvent.on(document, {\n\t\t\tcontextmenu: DomEvent.stop,\n\t\t\tmousemove: this._onMouseMove,\n\t\t\tmouseup: this._onMouseUp,\n\t\t\tkeydown: this._onKeyDown\n\t\t}, this);\n\t},\n\n\t_onMouseMove: function (e) {\n\t\tif (!this._moved) {\n\t\t\tthis._moved = true;\n\n\t\t\tthis._box = DomUtil.create('div', 'leaflet-zoom-box', this._container);\n\t\t\tDomUtil.addClass(this._container, 'leaflet-crosshair');\n\n\t\t\tthis._map.fire('boxzoomstart');\n\t\t}\n\n\t\tthis._point = this._map.mouseEventToContainerPoint(e);\n\n\t\tvar bounds = new Bounds(this._point, this._startPoint),\n\t\t size = bounds.getSize();\n\n\t\tDomUtil.setPosition(this._box, bounds.min);\n\n\t\tthis._box.style.width = size.x + 'px';\n\t\tthis._box.style.height = size.y + 'px';\n\t},\n\n\t_finish: function () {\n\t\tif (this._moved) {\n\t\t\tDomUtil.remove(this._box);\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-crosshair');\n\t\t}\n\n\t\tDomUtil.enableTextSelection();\n\t\tDomUtil.enableImageDrag();\n\n\t\tDomEvent.off(document, {\n\t\t\tcontextmenu: DomEvent.stop,\n\t\t\tmousemove: this._onMouseMove,\n\t\t\tmouseup: this._onMouseUp,\n\t\t\tkeydown: this._onKeyDown\n\t\t}, this);\n\t},\n\n\t_onMouseUp: function (e) {\n\t\tif ((e.which !== 1) && (e.button !== 1)) { return; }\n\n\t\tthis._finish();\n\n\t\tif (!this._moved) { return; }\n\t\t// Postpone to next JS tick so internal click event handling\n\t\t// still see it as \"moved\".\n\t\tthis._clearDeferredResetState();\n\t\tthis._resetStateTimeout = setTimeout(Util.bind(this._resetState, this), 0);\n\n\t\tvar bounds = new LatLngBounds(\n\t\t this._map.containerPointToLatLng(this._startPoint),\n\t\t this._map.containerPointToLatLng(this._point));\n\n\t\tthis._map\n\t\t\t.fitBounds(bounds)\n\t\t\t.fire('boxzoomend', {boxZoomBounds: bounds});\n\t},\n\n\t_onKeyDown: function (e) {\n\t\tif (e.keyCode === 27) {\n\t\t\tthis._finish();\n\t\t\tthis._clearDeferredResetState();\n\t\t\tthis._resetState();\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property boxZoom: Handler\n// Box (shift-drag with mouse) zoom handler.\nMap.addInitHook('addHandler', 'boxZoom', BoxZoom);\n","import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\n\n/*\n * L.Handler.DoubleClickZoom is used to handle double-click zoom on the map, enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\n\nMap.mergeOptions({\n\t// @option doubleClickZoom: Boolean|String = true\n\t// Whether the map can be zoomed in by double clicking on it and\n\t// zoomed out by double clicking while holding shift. If passed\n\t// `'center'`, double-click zoom will zoom to the center of the\n\t// view regardless of where the mouse was.\n\tdoubleClickZoom: true\n});\n\nexport var DoubleClickZoom = Handler.extend({\n\taddHooks: function () {\n\t\tthis._map.on('dblclick', this._onDoubleClick, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._map.off('dblclick', this._onDoubleClick, this);\n\t},\n\n\t_onDoubleClick: function (e) {\n\t\tvar map = this._map,\n\t\t oldZoom = map.getZoom(),\n\t\t delta = map.options.zoomDelta,\n\t\t zoom = e.originalEvent.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n\t\tif (map.options.doubleClickZoom === 'center') {\n\t\t\tmap.setZoom(zoom);\n\t\t} else {\n\t\t\tmap.setZoomAround(e.containerPoint, zoom);\n\t\t}\n\t}\n});\n\n// @section Handlers\n//\n// Map properties include interaction handlers that allow you to control\n// interaction behavior in runtime, enabling or disabling certain features such\n// as dragging or touch zoom (see `Handler` methods). For example:\n//\n// ```js\n// map.doubleClickZoom.disable();\n// ```\n//\n// @property doubleClickZoom: Handler\n// Double click zoom handler.\nMap.addInitHook('addHandler', 'doubleClickZoom', DoubleClickZoom);\n","import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport {Draggable} from '../../dom/Draggable';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {toLatLngBounds as latLngBounds} from '../../geo/LatLngBounds';\nimport {toBounds} from '../../geometry/Bounds';\n\n/*\n * L.Handler.MapDrag is used to make the map draggable (with panning inertia), enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @option dragging: Boolean = true\n\t// Whether the map is draggable with mouse/touch or not.\n\tdragging: true,\n\n\t// @section Panning Inertia Options\n\t// @option inertia: Boolean = *\n\t// If enabled, panning of the map will have an inertia effect where\n\t// the map builds momentum while dragging and continues moving in\n\t// the same direction for some time. Feels especially nice on touch\n\t// devices. Enabled by default.\n\tinertia: true,\n\n\t// @option inertiaDeceleration: Number = 3000\n\t// The rate with which the inertial movement slows down, in pixels/second².\n\tinertiaDeceleration: 3400, // px/s^2\n\n\t// @option inertiaMaxSpeed: Number = Infinity\n\t// Max speed of the inertial movement, in pixels/second.\n\tinertiaMaxSpeed: Infinity, // px/s\n\n\t// @option easeLinearity: Number = 0.2\n\teaseLinearity: 0.2,\n\n\t// TODO refactor, move to CRS\n\t// @option worldCopyJump: Boolean = false\n\t// With this option enabled, the map tracks when you pan to another \"copy\"\n\t// of the world and seamlessly jumps to the original one so that all overlays\n\t// like markers and vector layers are still visible.\n\tworldCopyJump: false,\n\n\t// @option maxBoundsViscosity: Number = 0.0\n\t// If `maxBounds` is set, this option will control how solid the bounds\n\t// are when dragging the map around. The default value of `0.0` allows the\n\t// user to drag outside the bounds at normal speed, higher values will\n\t// slow down map dragging outside bounds, and `1.0` makes the bounds fully\n\t// solid, preventing the user from dragging outside the bounds.\n\tmaxBoundsViscosity: 0.0\n});\n\nexport var Drag = Handler.extend({\n\taddHooks: function () {\n\t\tif (!this._draggable) {\n\t\t\tvar map = this._map;\n\n\t\t\tthis._draggable = new Draggable(map._mapPane, map._container);\n\n\t\t\tthis._draggable.on({\n\t\t\t\tdragstart: this._onDragStart,\n\t\t\t\tdrag: this._onDrag,\n\t\t\t\tdragend: this._onDragEnd\n\t\t\t}, this);\n\n\t\t\tthis._draggable.on('predrag', this._onPreDragLimit, this);\n\t\t\tif (map.options.worldCopyJump) {\n\t\t\t\tthis._draggable.on('predrag', this._onPreDragWrap, this);\n\t\t\t\tmap.on('zoomend', this._onZoomEnd, this);\n\n\t\t\t\tmap.whenReady(this._onZoomEnd, this);\n\t\t\t}\n\t\t}\n\t\tDomUtil.addClass(this._map._container, 'leaflet-grab leaflet-touch-drag');\n\t\tthis._draggable.enable();\n\t\tthis._positions = [];\n\t\tthis._times = [];\n\t},\n\n\tremoveHooks: function () {\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-grab');\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-touch-drag');\n\t\tthis._draggable.disable();\n\t},\n\n\tmoved: function () {\n\t\treturn this._draggable && this._draggable._moved;\n\t},\n\n\tmoving: function () {\n\t\treturn this._draggable && this._draggable._moving;\n\t},\n\n\t_onDragStart: function () {\n\t\tvar map = this._map;\n\n\t\tmap._stop();\n\t\tif (this._map.options.maxBounds && this._map.options.maxBoundsViscosity) {\n\t\t\tvar bounds = latLngBounds(this._map.options.maxBounds);\n\n\t\t\tthis._offsetLimit = toBounds(\n\t\t\t\tthis._map.latLngToContainerPoint(bounds.getNorthWest()).multiplyBy(-1),\n\t\t\t\tthis._map.latLngToContainerPoint(bounds.getSouthEast()).multiplyBy(-1)\n\t\t\t\t\t.add(this._map.getSize()));\n\n\t\t\tthis._viscosity = Math.min(1.0, Math.max(0.0, this._map.options.maxBoundsViscosity));\n\t\t} else {\n\t\t\tthis._offsetLimit = null;\n\t\t}\n\n\t\tmap\n\t\t .fire('movestart')\n\t\t .fire('dragstart');\n\n\t\tif (map.options.inertia) {\n\t\t\tthis._positions = [];\n\t\t\tthis._times = [];\n\t\t}\n\t},\n\n\t_onDrag: function (e) {\n\t\tif (this._map.options.inertia) {\n\t\t\tvar time = this._lastTime = +new Date(),\n\t\t\t pos = this._lastPos = this._draggable._absPos || this._draggable._newPos;\n\n\t\t\tthis._positions.push(pos);\n\t\t\tthis._times.push(time);\n\n\t\t\tthis._prunePositions(time);\n\t\t}\n\n\t\tthis._map\n\t\t .fire('move', e)\n\t\t .fire('drag', e);\n\t},\n\n\t_prunePositions: function (time) {\n\t\twhile (this._positions.length > 1 && time - this._times[0] > 50) {\n\t\t\tthis._positions.shift();\n\t\t\tthis._times.shift();\n\t\t}\n\t},\n\n\t_onZoomEnd: function () {\n\t\tvar pxCenter = this._map.getSize().divideBy(2),\n\t\t pxWorldCenter = this._map.latLngToLayerPoint([0, 0]);\n\n\t\tthis._initialWorldOffset = pxWorldCenter.subtract(pxCenter).x;\n\t\tthis._worldWidth = this._map.getPixelWorldBounds().getSize().x;\n\t},\n\n\t_viscousLimit: function (value, threshold) {\n\t\treturn value - (value - threshold) * this._viscosity;\n\t},\n\n\t_onPreDragLimit: function () {\n\t\tif (!this._viscosity || !this._offsetLimit) { return; }\n\n\t\tvar offset = this._draggable._newPos.subtract(this._draggable._startPos);\n\n\t\tvar limit = this._offsetLimit;\n\t\tif (offset.x < limit.min.x) { offset.x = this._viscousLimit(offset.x, limit.min.x); }\n\t\tif (offset.y < limit.min.y) { offset.y = this._viscousLimit(offset.y, limit.min.y); }\n\t\tif (offset.x > limit.max.x) { offset.x = this._viscousLimit(offset.x, limit.max.x); }\n\t\tif (offset.y > limit.max.y) { offset.y = this._viscousLimit(offset.y, limit.max.y); }\n\n\t\tthis._draggable._newPos = this._draggable._startPos.add(offset);\n\t},\n\n\t_onPreDragWrap: function () {\n\t\t// TODO refactor to be able to adjust map pane position after zoom\n\t\tvar worldWidth = this._worldWidth,\n\t\t halfWidth = Math.round(worldWidth / 2),\n\t\t dx = this._initialWorldOffset,\n\t\t x = this._draggable._newPos.x,\n\t\t newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,\n\t\t newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,\n\t\t newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;\n\n\t\tthis._draggable._absPos = this._draggable._newPos.clone();\n\t\tthis._draggable._newPos.x = newX;\n\t},\n\n\t_onDragEnd: function (e) {\n\t\tvar map = this._map,\n\t\t options = map.options,\n\n\t\t noInertia = !options.inertia || e.noInertia || this._times.length < 2;\n\n\t\tmap.fire('dragend', e);\n\n\t\tif (noInertia) {\n\t\t\tmap.fire('moveend');\n\n\t\t} else {\n\t\t\tthis._prunePositions(+new Date());\n\n\t\t\tvar direction = this._lastPos.subtract(this._positions[0]),\n\t\t\t duration = (this._lastTime - this._times[0]) / 1000,\n\t\t\t ease = options.easeLinearity,\n\n\t\t\t speedVector = direction.multiplyBy(ease / duration),\n\t\t\t speed = speedVector.distanceTo([0, 0]),\n\n\t\t\t limitedSpeed = Math.min(options.inertiaMaxSpeed, speed),\n\t\t\t limitedSpeedVector = speedVector.multiplyBy(limitedSpeed / speed),\n\n\t\t\t decelerationDuration = limitedSpeed / (options.inertiaDeceleration * ease),\n\t\t\t offset = limitedSpeedVector.multiplyBy(-decelerationDuration / 2).round();\n\n\t\t\tif (!offset.x && !offset.y) {\n\t\t\t\tmap.fire('moveend');\n\n\t\t\t} else {\n\t\t\t\toffset = map._limitOffset(offset, map.options.maxBounds);\n\n\t\t\t\tUtil.requestAnimFrame(function () {\n\t\t\t\t\tmap.panBy(offset, {\n\t\t\t\t\t\tduration: decelerationDuration,\n\t\t\t\t\t\teaseLinearity: ease,\n\t\t\t\t\t\tnoMoveStart: true,\n\t\t\t\t\t\tanimate: true\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property dragging: Handler\n// Map dragging handler (by both mouse and touch).\nMap.addInitHook('addHandler', 'dragging', Drag);\n","import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport {on, off, stop} from '../../dom/DomEvent';\nimport {toPoint} from '../../geometry/Point';\n\n\n/*\n * L.Map.Keyboard is handling keyboard interaction with the map, enabled by default.\n */\n\n// @namespace Map\n// @section Keyboard Navigation Options\nMap.mergeOptions({\n\t// @option keyboard: Boolean = true\n\t// Makes the map focusable and allows users to navigate the map with keyboard\n\t// arrows and `+`/`-` keys.\n\tkeyboard: true,\n\n\t// @option keyboardPanDelta: Number = 80\n\t// Amount of pixels to pan when pressing an arrow key.\n\tkeyboardPanDelta: 80\n});\n\nexport var Keyboard = Handler.extend({\n\n\tkeyCodes: {\n\t\tleft: [37],\n\t\tright: [39],\n\t\tdown: [40],\n\t\tup: [38],\n\t\tzoomIn: [187, 107, 61, 171],\n\t\tzoomOut: [189, 109, 54, 173]\n\t},\n\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\n\t\tthis._setPanDelta(map.options.keyboardPanDelta);\n\t\tthis._setZoomDelta(map.options.zoomDelta);\n\t},\n\n\taddHooks: function () {\n\t\tvar container = this._map._container;\n\n\t\t// make the container focusable by tabbing\n\t\tif (container.tabIndex <= 0) {\n\t\t\tcontainer.tabIndex = '0';\n\t\t}\n\n\t\ton(container, {\n\t\t\tfocus: this._onFocus,\n\t\t\tblur: this._onBlur,\n\t\t\tmousedown: this._onMouseDown\n\t\t}, this);\n\n\t\tthis._map.on({\n\t\t\tfocus: this._addHooks,\n\t\t\tblur: this._removeHooks\n\t\t}, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._removeHooks();\n\n\t\toff(this._map._container, {\n\t\t\tfocus: this._onFocus,\n\t\t\tblur: this._onBlur,\n\t\t\tmousedown: this._onMouseDown\n\t\t}, this);\n\n\t\tthis._map.off({\n\t\t\tfocus: this._addHooks,\n\t\t\tblur: this._removeHooks\n\t\t}, this);\n\t},\n\n\t_onMouseDown: function () {\n\t\tif (this._focused) { return; }\n\n\t\tvar body = document.body,\n\t\t docEl = document.documentElement,\n\t\t top = body.scrollTop || docEl.scrollTop,\n\t\t left = body.scrollLeft || docEl.scrollLeft;\n\n\t\tthis._map._container.focus();\n\n\t\twindow.scrollTo(left, top);\n\t},\n\n\t_onFocus: function () {\n\t\tthis._focused = true;\n\t\tthis._map.fire('focus');\n\t},\n\n\t_onBlur: function () {\n\t\tthis._focused = false;\n\t\tthis._map.fire('blur');\n\t},\n\n\t_setPanDelta: function (panDelta) {\n\t\tvar keys = this._panKeys = {},\n\t\t codes = this.keyCodes,\n\t\t i, len;\n\n\t\tfor (i = 0, len = codes.left.length; i < len; i++) {\n\t\t\tkeys[codes.left[i]] = [-1 * panDelta, 0];\n\t\t}\n\t\tfor (i = 0, len = codes.right.length; i < len; i++) {\n\t\t\tkeys[codes.right[i]] = [panDelta, 0];\n\t\t}\n\t\tfor (i = 0, len = codes.down.length; i < len; i++) {\n\t\t\tkeys[codes.down[i]] = [0, panDelta];\n\t\t}\n\t\tfor (i = 0, len = codes.up.length; i < len; i++) {\n\t\t\tkeys[codes.up[i]] = [0, -1 * panDelta];\n\t\t}\n\t},\n\n\t_setZoomDelta: function (zoomDelta) {\n\t\tvar keys = this._zoomKeys = {},\n\t\t codes = this.keyCodes,\n\t\t i, len;\n\n\t\tfor (i = 0, len = codes.zoomIn.length; i < len; i++) {\n\t\t\tkeys[codes.zoomIn[i]] = zoomDelta;\n\t\t}\n\t\tfor (i = 0, len = codes.zoomOut.length; i < len; i++) {\n\t\t\tkeys[codes.zoomOut[i]] = -zoomDelta;\n\t\t}\n\t},\n\n\t_addHooks: function () {\n\t\ton(document, 'keydown', this._onKeyDown, this);\n\t},\n\n\t_removeHooks: function () {\n\t\toff(document, 'keydown', this._onKeyDown, this);\n\t},\n\n\t_onKeyDown: function (e) {\n\t\tif (e.altKey || e.ctrlKey || e.metaKey) { return; }\n\n\t\tvar key = e.keyCode,\n\t\t map = this._map,\n\t\t offset;\n\n\t\tif (key in this._panKeys) {\n\t\t\tif (!map._panAnim || !map._panAnim._inProgress) {\n\t\t\t\toffset = this._panKeys[key];\n\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\toffset = toPoint(offset).multiplyBy(3);\n\t\t\t\t}\n\n\t\t\t\tif (map.options.maxBounds) {\n\t\t\t\t\toffset = map._limitOffset(toPoint(offset), map.options.maxBounds);\n\t\t\t\t}\n\n\t\t\t\tif (map.options.worldCopyJump) {\n\t\t\t\t\tvar newLatLng = map.wrapLatLng(map.unproject(map.project(map.getCenter()).add(offset)));\n\t\t\t\t\tmap.panTo(newLatLng);\n\t\t\t\t} else {\n\t\t\t\t\tmap.panBy(offset);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (key in this._zoomKeys) {\n\t\t\tmap.setZoom(map.getZoom() + (e.shiftKey ? 3 : 1) * this._zoomKeys[key]);\n\n\t\t} else if (key === 27 && map._popup && map._popup.options.closeOnEscapeKey) {\n\t\t\tmap.closePopup();\n\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\tstop(e);\n\t}\n});\n\n// @section Handlers\n// @section Handlers\n// @property keyboard: Handler\n// Keyboard navigation handler.\nMap.addInitHook('addHandler', 'keyboard', Keyboard);\n","import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport * as Util from '../../core/Util';\n\n/*\n * L.Handler.ScrollWheelZoom is used by L.Map to enable mouse scroll wheel zoom on the map.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Mouse wheel options\n\t// @option scrollWheelZoom: Boolean|String = true\n\t// Whether the map can be zoomed by using the mouse wheel. If passed `'center'`,\n\t// it will zoom to the center of the view regardless of where the mouse was.\n\tscrollWheelZoom: true,\n\n\t// @option wheelDebounceTime: Number = 40\n\t// Limits the rate at which a wheel can fire (in milliseconds). By default\n\t// user can't zoom via wheel more often than once per 40 ms.\n\twheelDebounceTime: 40,\n\n\t// @option wheelPxPerZoomLevel: Number = 60\n\t// How many scroll pixels (as reported by [L.DomEvent.getWheelDelta](#domevent-getwheeldelta))\n\t// mean a change of one full zoom level. Smaller values will make wheel-zooming\n\t// faster (and vice versa).\n\twheelPxPerZoomLevel: 60\n});\n\nexport var ScrollWheelZoom = Handler.extend({\n\taddHooks: function () {\n\t\tDomEvent.on(this._map._container, 'wheel', this._onWheelScroll, this);\n\n\t\tthis._delta = 0;\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._map._container, 'wheel', this._onWheelScroll, this);\n\t},\n\n\t_onWheelScroll: function (e) {\n\t\tvar delta = DomEvent.getWheelDelta(e);\n\n\t\tvar debounce = this._map.options.wheelDebounceTime;\n\n\t\tthis._delta += delta;\n\t\tthis._lastMousePos = this._map.mouseEventToContainerPoint(e);\n\n\t\tif (!this._startTime) {\n\t\t\tthis._startTime = +new Date();\n\t\t}\n\n\t\tvar left = Math.max(debounce - (+new Date() - this._startTime), 0);\n\n\t\tclearTimeout(this._timer);\n\t\tthis._timer = setTimeout(Util.bind(this._performZoom, this), left);\n\n\t\tDomEvent.stop(e);\n\t},\n\n\t_performZoom: function () {\n\t\tvar map = this._map,\n\t\t zoom = map.getZoom(),\n\t\t snap = this._map.options.zoomSnap || 0;\n\n\t\tmap._stop(); // stop panning and fly animations if any\n\n\t\t// map the delta with a sigmoid function to -4..4 range leaning on -1..1\n\t\tvar d2 = this._delta / (this._map.options.wheelPxPerZoomLevel * 4),\n\t\t d3 = 4 * Math.log(2 / (1 + Math.exp(-Math.abs(d2)))) / Math.LN2,\n\t\t d4 = snap ? Math.ceil(d3 / snap) * snap : d3,\n\t\t delta = map._limitZoom(zoom + (this._delta > 0 ? d4 : -d4)) - zoom;\n\n\t\tthis._delta = 0;\n\t\tthis._startTime = null;\n\n\t\tif (!delta) { return; }\n\n\t\tif (map.options.scrollWheelZoom === 'center') {\n\t\t\tmap.setZoom(zoom + delta);\n\t\t} else {\n\t\t\tmap.setZoomAround(this._lastMousePos, zoom + delta);\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property scrollWheelZoom: Handler\n// Scroll wheel zoom handler.\nMap.addInitHook('addHandler', 'scrollWheelZoom', ScrollWheelZoom);\n","import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport {Point} from '../../geometry/Point';\nimport * as Util from '../../core/Util';\nimport Browser from '../../core/Browser';\n\n/*\n * L.Map.TapHold is used to simulate `contextmenu` event on long hold,\n * which otherwise is not fired by mobile Safari.\n */\n\nvar tapHoldDelay = 600;\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Touch interaction options\n\t// @option tapHold: Boolean\n\t// Enables simulation of `contextmenu` event, default is `true` for mobile Safari.\n\ttapHold: Browser.touchNative && Browser.safari && Browser.mobile,\n\n\t// @option tapTolerance: Number = 15\n\t// The max number of pixels a user can shift his finger during touch\n\t// for it to be considered a valid tap.\n\ttapTolerance: 15\n});\n\nexport var TapHold = Handler.extend({\n\taddHooks: function () {\n\t\tDomEvent.on(this._map._container, 'touchstart', this._onDown, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._map._container, 'touchstart', this._onDown, this);\n\t},\n\n\t_onDown: function (e) {\n\t\tclearTimeout(this._holdTimeout);\n\t\tif (e.touches.length !== 1) { return; }\n\n\t\tvar first = e.touches[0];\n\t\tthis._startPos = this._newPos = new Point(first.clientX, first.clientY);\n\n\t\tthis._holdTimeout = setTimeout(Util.bind(function () {\n\t\t\tthis._cancel();\n\t\t\tif (!this._isTapValid()) { return; }\n\n\t\t\t// prevent simulated mouse events https://w3c.github.io/touch-events/#mouse-events\n\t\t\tDomEvent.on(document, 'touchend', DomEvent.preventDefault);\n\t\t\tDomEvent.on(document, 'touchend touchcancel', this._cancelClickPrevent);\n\t\t\tthis._simulateEvent('contextmenu', first);\n\t\t}, this), tapHoldDelay);\n\n\t\tDomEvent.on(document, 'touchend touchcancel contextmenu', this._cancel, this);\n\t\tDomEvent.on(document, 'touchmove', this._onMove, this);\n\t},\n\n\t_cancelClickPrevent: function cancelClickPrevent() {\n\t\tDomEvent.off(document, 'touchend', DomEvent.preventDefault);\n\t\tDomEvent.off(document, 'touchend touchcancel', cancelClickPrevent);\n\t},\n\n\t_cancel: function () {\n\t\tclearTimeout(this._holdTimeout);\n\t\tDomEvent.off(document, 'touchend touchcancel contextmenu', this._cancel, this);\n\t\tDomEvent.off(document, 'touchmove', this._onMove, this);\n\t},\n\n\t_onMove: function (e) {\n\t\tvar first = e.touches[0];\n\t\tthis._newPos = new Point(first.clientX, first.clientY);\n\t},\n\n\t_isTapValid: function () {\n\t\treturn this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance;\n\t},\n\n\t_simulateEvent: function (type, e) {\n\t\tvar simulatedEvent = new MouseEvent(type, {\n\t\t\tbubbles: true,\n\t\t\tcancelable: true,\n\t\t\tview: window,\n\t\t\t// detail: 1,\n\t\t\tscreenX: e.screenX,\n\t\t\tscreenY: e.screenY,\n\t\t\tclientX: e.clientX,\n\t\t\tclientY: e.clientY,\n\t\t\t// button: 2,\n\t\t\t// buttons: 2\n\t\t});\n\n\t\tsimulatedEvent._simulated = true;\n\n\t\te.target.dispatchEvent(simulatedEvent);\n\t}\n});\n\n// @section Handlers\n// @property tapHold: Handler\n// Long tap handler to simulate `contextmenu` event (useful in mobile Safari).\nMap.addInitHook('addHandler', 'tapHold', TapHold);\n","import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport Browser from '../../core/Browser';\n\n/*\n * L.Handler.TouchZoom is used by L.Map to add pinch zoom on supported mobile browsers.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Touch interaction options\n\t// @option touchZoom: Boolean|String = *\n\t// Whether the map can be zoomed by touch-dragging with two fingers. If\n\t// passed `'center'`, it will zoom to the center of the view regardless of\n\t// where the touch events (fingers) were. Enabled for touch-capable web\n\t// browsers.\n\ttouchZoom: Browser.touch,\n\n\t// @option bounceAtZoomLimits: Boolean = true\n\t// Set it to false if you don't want the map to zoom beyond min/max zoom\n\t// and then bounce back when pinch-zooming.\n\tbounceAtZoomLimits: true\n});\n\nexport var TouchZoom = Handler.extend({\n\taddHooks: function () {\n\t\tDomUtil.addClass(this._map._container, 'leaflet-touch-zoom');\n\t\tDomEvent.on(this._map._container, 'touchstart', this._onTouchStart, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-touch-zoom');\n\t\tDomEvent.off(this._map._container, 'touchstart', this._onTouchStart, this);\n\t},\n\n\t_onTouchStart: function (e) {\n\t\tvar map = this._map;\n\t\tif (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming) { return; }\n\n\t\tvar p1 = map.mouseEventToContainerPoint(e.touches[0]),\n\t\t p2 = map.mouseEventToContainerPoint(e.touches[1]);\n\n\t\tthis._centerPoint = map.getSize()._divideBy(2);\n\t\tthis._startLatLng = map.containerPointToLatLng(this._centerPoint);\n\t\tif (map.options.touchZoom !== 'center') {\n\t\t\tthis._pinchStartLatLng = map.containerPointToLatLng(p1.add(p2)._divideBy(2));\n\t\t}\n\n\t\tthis._startDist = p1.distanceTo(p2);\n\t\tthis._startZoom = map.getZoom();\n\n\t\tthis._moved = false;\n\t\tthis._zooming = true;\n\n\t\tmap._stop();\n\n\t\tDomEvent.on(document, 'touchmove', this._onTouchMove, this);\n\t\tDomEvent.on(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n\t\tDomEvent.preventDefault(e);\n\t},\n\n\t_onTouchMove: function (e) {\n\t\tif (!e.touches || e.touches.length !== 2 || !this._zooming) { return; }\n\n\t\tvar map = this._map,\n\t\t p1 = map.mouseEventToContainerPoint(e.touches[0]),\n\t\t p2 = map.mouseEventToContainerPoint(e.touches[1]),\n\t\t scale = p1.distanceTo(p2) / this._startDist;\n\n\t\tthis._zoom = map.getScaleZoom(scale, this._startZoom);\n\n\t\tif (!map.options.bounceAtZoomLimits && (\n\t\t\t(this._zoom < map.getMinZoom() && scale < 1) ||\n\t\t\t(this._zoom > map.getMaxZoom() && scale > 1))) {\n\t\t\tthis._zoom = map._limitZoom(this._zoom);\n\t\t}\n\n\t\tif (map.options.touchZoom === 'center') {\n\t\t\tthis._center = this._startLatLng;\n\t\t\tif (scale === 1) { return; }\n\t\t} else {\n\t\t\t// Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng\n\t\t\tvar delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);\n\t\t\tif (scale === 1 && delta.x === 0 && delta.y === 0) { return; }\n\t\t\tthis._center = map.unproject(map.project(this._pinchStartLatLng, this._zoom).subtract(delta), this._zoom);\n\t\t}\n\n\t\tif (!this._moved) {\n\t\t\tmap._moveStart(true, false);\n\t\t\tthis._moved = true;\n\t\t}\n\n\t\tUtil.cancelAnimFrame(this._animRequest);\n\n\t\tvar moveFn = Util.bind(map._move, map, this._center, this._zoom, {pinch: true, round: false}, undefined);\n\t\tthis._animRequest = Util.requestAnimFrame(moveFn, this, true);\n\n\t\tDomEvent.preventDefault(e);\n\t},\n\n\t_onTouchEnd: function () {\n\t\tif (!this._moved || !this._zooming) {\n\t\t\tthis._zooming = false;\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zooming = false;\n\t\tUtil.cancelAnimFrame(this._animRequest);\n\n\t\tDomEvent.off(document, 'touchmove', this._onTouchMove, this);\n\t\tDomEvent.off(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n\t\t// Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.\n\t\tif (this._map.options.zoomAnimation) {\n\t\t\tthis._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);\n\t\t} else {\n\t\t\tthis._map._resetView(this._center, this._map._limitZoom(this._zoom));\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property touchZoom: Handler\n// Touch zoom handler.\nMap.addInitHook('addHandler', 'touchZoom', TouchZoom);\n","import {Map} from './Map';\nimport {BoxZoom} from './handler/Map.BoxZoom';\nMap.BoxZoom = BoxZoom;\nimport {DoubleClickZoom} from './handler/Map.DoubleClickZoom';\nMap.DoubleClickZoom = DoubleClickZoom;\nimport {Drag} from './handler/Map.Drag';\nMap.Drag = Drag;\nimport {Keyboard} from './handler/Map.Keyboard';\nMap.Keyboard = Keyboard;\nimport {ScrollWheelZoom} from './handler/Map.ScrollWheelZoom';\nMap.ScrollWheelZoom = ScrollWheelZoom;\nimport {TapHold} from './handler/Map.TapHold';\nMap.TapHold = TapHold;\nimport {TouchZoom} from './handler/Map.TouchZoom';\nMap.TouchZoom = TouchZoom;\n\nexport {Map, createMap as map} from './Map';\n"],"names":["create","Util.setOptions","Util.create","Util.extend","Util.isArray","Util.splitWords","Util.falseFn","Util.stamp","Util.formatNum","Util.wrapNum","canvas","svg","DomEvent.preventDefault","DomEvent.getPropagationPath","Util.trim","DomEvent.on","DomEvent.off","Util.indexOf","DomUtil.getPosition","Util.requestAnimFrame","DomUtil.setPosition","Util.cancelAnimFrame","Util.bind","DomUtil.TRANSITION","DomUtil.TRANSITION_END","DomUtil.addClass","DomUtil.remove","DomUtil.create","DomEvent.getMousePosition","DomUtil.get","DomUtil.getStyle","DomEvent.isExternalTarget","DomUtil.preventOutline","DomUtil.removeClass","DomUtil.TRANSFORM","DomUtil.setTransform","DomEvent.disableClickPropagation","DomEvent.disableScrollPropagation","DomUtil.empty","DomEvent.stop","DomUtil.hasClass","DomUtil.disableImageDrag","DomUtil.disableTextSelection","DomUtil.getSizedParentNode","DomUtil.getScale","DomUtil.enableImageDrag","DomUtil.enableTextSelection","LineUtil._getBitCode","LineUtil._getEdgeIntersection","LineUtil.isFlat","point","latLng","DomUtil.setOpacity","LineUtil._sqClosestPointOnSegment","LineUtil.polylineCenter","LineUtil.clipSegment","LineUtil.simplify","LineUtil.pointToSegmentDistance","LineUtil._flat","PolyUtil.polygonCenter","PolyUtil.clipPolygon","DomUtil.toFront","DomUtil.toBack","DomEvent.stopPropagation","Util.throttle","latLngBounds","Util.template","Util.emptyImageUrl","DomEvent.getWheelDelta"],"mappings":"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,CAAC;;EClVF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AACA;EACA;AACU,MAAC,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;AACrC;EACA;EACA;EACA,CAAC,OAAO,EAAE;EACV;EACA;EACA,EAAE,IAAI,EAAE,WAAW;AACnB;EACA;EACA;EACA,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAChB;EACA;EACA;EACA,EAAE,QAAQ,EAAE,GAAG;AACf;EACA;EACA;EACA,EAAE,QAAQ,EAAE,EAAE;AACd;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,SAAS,EAAE,IAAI;AACjB;EACA;EACA;EACA;EACA,EAAE,OAAO,EAAE,IAAI;AACf;EACA;EACA;EACA;EACA,EAAE,qBAAqB,EAAE,IAAI;AAC7B;EACA;EACA;EACA;EACA,EAAE,yBAAyB,EAAE,IAAI;AACjC;EACA;EACA;EACA,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB;EACA;EACA;EACA;EACA,EAAE,UAAU,EAAE,KAAK;AACnB;EACA;EACA;EACA,EAAE,WAAW,EAAE,IAAI;AACnB;EACA;EACA;EACA;EACA,EAAE,SAAS,EAAE,IAAI;AACjB;EACA;EACA;EACA;EACA,EAAE,gBAAgB,EAAE,IAAI;AACxB;EACA;EACA;EACA;AACA;EACA;EACA;EACA,EAAE,SAAS,EAAE,EAAE;EACf,EAAE;AACF;EACA;EACA;EACA;EACA;EACA,CAAC,MAAM,EAAE,UAAU,GAAG,EAAE;EACxB,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACnD;EACA,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAA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;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AACA;AACU,MAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;AACpC;EACA;EACA;EACA,CAAC,OAAO,EAAE;EACV;EACA;EACA,EAAE,QAAQ,EAAE,GAAG;AACf;EACA;EACA;EACA,EAAE,OAAO,EAAE,CAAC;AACZ;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,cAAc,EAAE,OAAO,CAAC,MAAM;AAChC;EACA;EACA;EACA,EAAE,iBAAiB,EAAE,IAAI;AACzB;EACA;EACA;EACA,EAAE,cAAc,EAAE,GAAG;AACrB;EACA;EACA;EACA,EAAE,MAAM,EAAE,CAAC;AACX;EACA;EACA;EACA,EAAE,MAAM,EAAE,IAAI;AACd;EACA;EACA;EACA,EAAE,OAAO,EAAE,CAAC;AACZ;EACA;EACA;EACA,EAAE,OAAO,EAAE,SAAS;AACpB;EACA;EACA;EACA;EACA;EACA,EAAE,aAAa,EAAE,SAAS;AAC1B;EACA;EACA;EACA;EACA;EACA,EAAE,aAAa,EAAE,SAAS;AAC1B;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,MAAM,EAAE,KAAK;AACf;EACA;EACA;EACA,EAAE,IAAI,EAAE,UAAU;AAClB;EACA;EACA;EACA,EAAE,SAAS,EAAE,EAAE;AACf;EACA;EACA;EACA,EAAE,UAAU,EAAE,CAAC;EACf,EAAE;AACF;EACA,CAAC,UAAU,EAAE,UAAU,OAAO,EAAE;EAChC,EAAEjD,UAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EACjC,EAAE;AACF;EACA,CAAC,KAAK,EAAE,YAAY;EACpB,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;AACxB;EACA,EAAE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;EACpB,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACnB;EACA,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;EACpB,EAAE;AACF;EACA,CAAC,SAAS,EAAE,UAAU,GAAG,EAAE;EAC3B,EAAE,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;EAC1B,EAAE;AACF;EACA,CAAC,QAAQ,EAAE,UAAU,GAAG,EAAE;EAC1B,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;EACzB,EAAEyB,MAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EAClC,EAAE,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;EAC7B,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;EACzB,EAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;EAC7B,EAAE;AACF;EACA;EACA;EACA,CAAC,YAAY,EAAE,YAAY;EAC3B,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE;EACjB,GAAGmC,OAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EACpC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACjC,GAAG;EACH,EAAE,OAAO,IAAI,CAAC;EACd,EAAE;AACF;EACA;EACA;EACA,CAAC,WAAW,EAAE,YAAY;EAC1B,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE;EACjB,GAAGC,MAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EACnC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACjC,GAAG;EACH,EAAE,OAAO,IAAI,CAAC;EACd,EAAE;AACF;EACA;EACA;EACA,CAAC,YAAY,EAAE,YAAY;EAC3B,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC;EACzB,EAAE;AACF;EACA;EACA;EACA,CAAC,UAAU,EAAE,UAAU,OAAO,EAAE;EAChC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;EACjC,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;EACxB,EAAE,OAAO,IAAI,CAAC;EACd,EAAE;AACF;EACA;EACA;EACA,CAAC,SAAS,EAAE,UAAU,MAAM,EAAE;EAC9B,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;EAC/B,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB;EACA,EAAE,OAAO,IAAI,CAAC;EACd,EAAE;AACF;EACA;EACA;EACA,CAAC,SAAS,EAAE,YAAY;EACxB,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;EACvB,EAAE;AACF;EACA;EACA;EACA,CAAC,MAAM,EAAE,YAAY;EACrB,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE;EACjB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;EAC1B,GAAG,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;EACvD,GAAG,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;EACpC,IAAI,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;EAC9B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;EACzB,IAAI;EACJ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;EAClB,GAAG;EACH,EAAE,OAAO,IAAI,CAAC;EACd,EAAE;AACF;EACA,CAAC,SAAS,EAAE,YAAY;EACxB,EAAE,IAAI,MAAM,GAAG;EACf,GAAG,YAAY,EAAE,IAAI,CAAC,cAAc;EACpC,GAAG,SAAS,EAAE,IAAI,CAAC,UAAU;EAC7B,GAAG,IAAI,EAAE,IAAI,CAAC,UAAU;EACxB,GAAG,OAAO,EAAE,IAAI,CAAC,UAAU;EAC3B,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;EACpC;EACA,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;EACtB,IAAI,IAAI,CAAC,OAAO,GAAGE,QAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;EACrF,IAAI;AACJ;EACA,GAAG,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;EAC9B,GAAG;AACH;EACA,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE;EAC1B,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;EACvC,GAAG;AACH;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,EAAE;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA,CAAC,UAAU,EAAE,YAAY;EACzB,EAAE,OAAO,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;EACvC,EAAE;AACF;EACA;EACA;EACA;EACA,CAAC,WAAW,EAAE,YAAY;EAC1B,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;EAChC,EAAE,OAAO,CAAC,YAAY,KAAK,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAClD,EAAE;AACF;EACA,CAAC,aAAa,EAAE,YAAY;EAC5B,EAAE,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE;EAC5F,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;EACtD,GAAG;EACH,EAAE;AACF;EACA,CAAC,cAAc,EAAE,UAAU,OAAO,EAAE;EACpC;AACA;EACA,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ;EACtC,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACjD;EACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC7D;EACA,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;AACnC;EACA,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,IAAI,MAAM,EAAE;EAChD,IAAI,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;EAC9C,IAAI;EACJ,GAAG;AACH;EACA,EAAE,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE;EAC5B,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACrD,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;EACxB,GAAG;EACH,EAAE;AACF;EACA,CAAC,cAAc,EAAE,YAAY;EAC7B,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE;AAC7B;EACA;EACA,EAAE,IAAI,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE;AAChC;EACA,EAAEZ,UAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC5D;EACA,EAAE,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE;EACvB,MAAM,SAAS,GAAG,KAAK;EACvB,MAAM,SAAS,GAAG,KAAK,CAAC;AACxB;EACA,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE;EAC/B,GAAG,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;EAC/B,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE;AACnD;EACA,GAAG,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;AACrD;EACA,GAAGA,UAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;EACrC,GAAG,IAAI,IAAI,GAAG,CAAC,EAAE;EACjB,IAAI,SAAS,GAAG,IAAI,CAAC;EACrB,IAAI,MAAM;EACV,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;EACrB,KAAK,SAAS,GAAG,IAAI,CAAC;EACtB,KAAK,MAAM;EACX,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;EAC9B,KAAK;EACL,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;EACvB,IAAI;EACJ,GAAG;AACH;EACA,EAAE,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE;AAC1D;EACA,EAAE,IAAI,SAAS,EAAE;EACjB,GAAG/B,eAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EACzC,GAAG,IAAI,CAAC,UAAU,GAAGF,gBAAqB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;EACtE,GAAG;EACH,EAAE;AACF;EACA,CAAC,aAAa,EAAEb,OAAY;AAC5B;EACA,CAAC,cAAc,EAAE,YAAY;EAC7B,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE;AAClC;EACA,EAAE,IAAI,CAAC,UAAU,GAAGqB,QAAc,CAAC,KAAK,EAAE,gBAAgB,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;EAC7F,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB;EACA,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE;EAChC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;EACzB,GAAG;AACH;EACA,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EAC9C,EAAE;AACF;EACA,CAAC,aAAa,EAAE,YAAY;AAC5B;EACA,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS;EAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AACrC;EACA,EAAE,IAAI,IAAI,KAAK,SAAS,EAAE,EAAE,OAAO,SAAS,CAAC,EAAE;AAC/C;EACA,EAAE,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;EAC9B,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACjB,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE;EACzD,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;EACnE,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;EAC3B,IAAI,MAAM;EACV,IAAID,MAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EACvC,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;EAC/B,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;EAC3B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;EAC3B,IAAI;EACJ,GAAG;AACH;EACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;EAChC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;AACtB;EACA,EAAE,IAAI,CAAC,KAAK,EAAE;EACd,GAAG,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACnC;EACA,GAAG,KAAK,CAAC,EAAE,GAAGC,QAAc,CAAC,KAAK,EAAE,8CAA8C,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;EACrG,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;AACnC;EACA,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;EACjF,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB;EACA,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;AACjE;EACA;EACA,GAAGrB,OAAY,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;AACtC;EACA,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;EAC9B,GAAG;AACH;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACtB;EACA,EAAE,OAAO,KAAK,CAAC;EACf,EAAE;AACF;EACA,CAAC,cAAc,EAAEA,OAAY;AAC7B;EACA,CAAC,cAAc,EAAEA,OAAY;AAC7B;EACA,CAAC,cAAc,EAAEA,OAAY;AAC7B;EACA,CAAC,WAAW,EAAE,YAAY;EAC1B,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;EAClB,GAAG,OAAO;EACV,GAAG;AACH;EACA,EAAE,IAAI,GAAG,EAAE,IAAI,CAAC;AAChB;EACA,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;EACjC,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;EACjC,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;EAChC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;EAC1B,GAAG,OAAO;EACV,GAAG;AACH;EACA,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE;EAC3B,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;EAC3B,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;EAC9B,GAAG;AACH;EACA,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE;EAC3B,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;EAC3B,GAAG,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;EACrC,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;EAC7B,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;EACzE,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EACtE,KAAK;EACL,IAAI;EACJ,GAAG;AACH;EACA,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE;EAC3B,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;EACjC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;EAC1B,IAAI;EACJ,GAAG;EACH,EAAE;AACF;EACA,CAAC,kBAAkB,EAAE,UAAU,IAAI,EAAE;EACrC,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE;EAC/B,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE;EAC3C,IAAI,SAAS;EACb,IAAI;EACJ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;EACzB,GAAG;EACH,EAAE;AACF;EACA,CAAC,eAAe,EAAE,YAAY;EAC9B,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE;EAC/B,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;EACzB,GAAG;EACH,EAAE;AACF;EACA,CAAC,cAAc,EAAE,YAAY;EAC7B,EAAE,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;EAC9B,GAAGoB,MAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EACtC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EAClC,GAAG,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;EAC1B,GAAG;EACH,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;AACzB;EACA,EAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;EAC7B,EAAE;AACF;EACA,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE;EAC5C,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;EAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;EAC5B,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;EAChB,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;EACpC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;AAClB;EACA,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;EAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC9B;EACA,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;EAC3B,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;EACtB,GAAG,OAAO,IAAI,CAAC;AACf;EACA,GAAG,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;EAClC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;EACtB,GAAG;AACH;EACA,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE;EACpB,GAAG,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;EAClD,GAAG;AACH;EACA,EAAE,OAAO,KAAK,CAAC;EACf,EAAE;AACF;EACA,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE;AAC9C;EACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;EAC1C,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C;EACA,IAAI,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACjC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrB;EACA,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;EAC3C,QAAQ,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAChC;EACA,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;EAC7B,KAAK,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;EACxB,KAAK,SAAS;AACd;EACA,KAAK,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;EACpC,KAAK,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;EACxB,KAAK;AACL;EACA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE;EACzB,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;EAChD,KAAK;EACL,IAAI;EACJ,GAAG;EACH,EAAE;AACF;EACA,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE;EAC1B,EAAE,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;EAC5C,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;EAClF,EAAE;AACF;EACA,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE;EAC5B,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;EACpD,EAAE;AACF;EACA,CAAC,UAAU,EAAE,UAAU,IAAI,EAAE;EAC7B,EAAE,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B;EACA,EAAE,IAAI,SAAS,KAAK,OAAO,CAAC,aAAa,IAAI,IAAI,GAAG,OAAO,CAAC,aAAa,EAAE;EAC3E,GAAG,OAAO,OAAO,CAAC,aAAa,CAAC;EAChC,GAAG;AACH;EACA,EAAE,IAAI,SAAS,KAAK,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,EAAE;EAC3E,GAAG,OAAO,OAAO,CAAC,aAAa,CAAC;EAChC,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,EAAE;AACF;EACA,CAAC,QAAQ,EAAE,UAAU,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE;EACtD,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;EAClC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;EAC5E,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;EAC/E,GAAG,QAAQ,GAAG,SAAS,CAAC;EACxB,GAAG,MAAM;EACT,GAAG,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;EACxC,GAAG;AACH;EACA,EAAE,IAAI,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,KAAK,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;AACxF;EACA,EAAE,IAAI,CAAC,QAAQ,IAAI,eAAe,EAAE;AACpC;EACA,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC7B;EACA,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE;EAC3B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;EACzB,IAAI;AACJ;EACA,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;EACxB,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACrB;EACA,GAAG,IAAI,QAAQ,KAAK,SAAS,EAAE;EAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;EACzB,IAAI;AACJ;EACA,GAAG,IAAI,CAAC,OAAO,EAAE;EACjB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;EACvB,IAAI;AACJ;EACA;EACA;EACA,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC;EAC7B,GAAG;AACH;EACA,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACxC,EAAE;AACF;EACA,CAAC,kBAAkB,EAAE,UAAU,MAAM,EAAE,IAAI,EAAE;EAC7C,EAAE,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;EAC9B,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;EACzD,GAAG;EACH,EAAE;AACF;EACA,CAAC,iBAAiB,EAAE,UAAU,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;EACnD,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;EACtD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;EAChD,WAAW,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AACxE;EACA,EAAE,IAAI,OAAO,CAAC,KAAK,EAAE;EACrB,GAAGS,YAAoB,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;EACpD,GAAG,MAAM;EACT,GAAGf,WAAmB,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;EAC5C,GAAG;EACH,EAAE;AACF;EACA,CAAC,UAAU,EAAE,YAAY;EACzB,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI;EACrB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG;EAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE;EACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;AAChC;EACA,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EAC7D,EAAE,IAAI,MAAM,EAAE;EACd,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;EAC7D,GAAG;AACH;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI;EACvD,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACxE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACvE,GAAG,CAAC;EACJ,EAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI;EACvD,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACxE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACvE,GAAG,CAAC;EACJ,EAAE;AACF;EACA,CAAC,UAAU,EAAE,YAAY;EACzB,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE;AACzD;EACA,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;EACjB,EAAE;AACF;EACA,CAAC,oBAAoB,EAAE,UAAU,MAAM,EAAE;EACzC,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI;EACrB,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE;EAChG,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;EACvD,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE;EAC/D,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACnD;EACA,EAAE,OAAO,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;EAC/E,EAAE;AACF;EACA;EACA,CAAC,OAAO,EAAE,UAAU,MAAM,EAAE;EAC5B,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;EACtB,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE;EACvB,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5C;EACA,EAAE,IAAI,MAAM,KAAK,SAAS,EAAE,EAAE,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,EAAE;EACzD,EAAE,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,EAAE,OAAO,EAAE;AAC/C;EACA,EAAE,IAAI,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;EACrD,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC;EACxD,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,EAAE;EACxC,MAAM,KAAK,GAAG,EAAE;EAChB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU;EACtC,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;EACrF,gCAAgC,SAAS,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAChF;EACA;EACA,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;EACjC,QAAQ,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;EACjC,QAAQ,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;EACjC,QAAQ,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC,EAAE;AACzG;EACA,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE;EAC/B,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;EACnC,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;EAC9E,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;EACrC,IAAI;EACJ,GAAG;AACH;EACA;EACA;EACA,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AACnF;EACA;EACA,EAAE,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;EAC3D,GAAG,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;EAC5D,IAAI,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACjC,IAAI,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;AAC9B;EACA,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE;AACjD;EACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;EAC1D,IAAI,IAAI,IAAI,EAAE;EACd,KAAK,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;EACzB,KAAK,MAAM;EACX,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EACxB,KAAK;EACL,IAAI;EACJ,GAAG;AACH;EACA;EACA,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;EAC7B,GAAG,OAAO,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;EAC9D,GAAG,CAAC,CAAC;AACL;EACA,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;EAC1B;EACA,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;EACvB,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;EACzB;EACA;EACA,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EACzB,IAAI;AACJ;EACA;EACA,GAAG,IAAI,QAAQ,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAC;AACpD;EACA,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;EACtC,IAAI;AACJ;EACA,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;EACxC,GAAG;EACH,EAAE;AACF;EACA,CAAC,YAAY,EAAE,UAAU,MAAM,EAAE;EACjC,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAClC;EACA,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;EACrB;EACA,GAAG,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC;EACtC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;EAC5E,QAAQ,CAAC,GAAG,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,KAAK,CAAC,EAAE;EAChG,GAAG;AACH;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,IAAI,CAAC,EAAE;AAC5C;EACA;EACA,EAAE,IAAI,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;EACpD,EAAE,OAAO6C,cAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;EAChE,EAAE;AACF;EACA,CAAC,YAAY,EAAE,UAAU,GAAG,EAAE;EAC9B,EAAE,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;EAC9D,EAAE;AACF;EACA,CAAC,iBAAiB,EAAE,UAAU,MAAM,EAAE;EACtC,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI;EACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;EACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;EACxC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;EACrC,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;EAC3C,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;EAC5C,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;EAClB,EAAE;AACF;EACA;EACA,CAAC,mBAAmB,EAAE,UAAU,MAAM,EAAE;EACxC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;EACzC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;EAC5B,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;EAC/C,GAAG;EACH,EAAE,OAAO,MAAM,CAAC;EAChB,EAAE;EACF;EACA,CAAC,gBAAgB,EAAE,UAAU,MAAM,EAAE;EACrC,EAAE,OAAO,MAAM,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;EACpD,EAAE;AACF;EACA;EACA,CAAC,gBAAgB,EAAE,UAAU,GAAG,EAAE;EAClC,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;EACxB,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACvC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACnB,EAAE,OAAO,MAAM,CAAC;EAChB,EAAE;AACF;EACA,CAAC,WAAW,EAAE,UAAU,GAAG,EAAE;EAC7B,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;EAC9B,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE;AACxB;EACA,EAAEvC,MAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B;EACA,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1B;EACA;EACA;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;EAC1B,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE;EAChB,GAAG,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;EACrC,GAAG,CAAC,CAAC;EACL,EAAE;AACF;EACA,CAAC,SAAS,EAAE,UAAU,IAAI,EAAE;EAC5B,EAAED,QAAgB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;AACzC;EACA,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;EACpC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC;EACvC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC;AACxC;EACA,EAAE,IAAI,CAAC,aAAa,GAAGnB,OAAY,CAAC;EACpC,EAAE,IAAI,CAAC,WAAW,GAAGA,OAAY,CAAC;AAClC;EACA;EACA,EAAE,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE;EACjD,GAAG8C,UAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;EAClD,GAAG;EACH,EAAE;AACF;EACA,CAAC,QAAQ,EAAE,UAAU,MAAM,EAAE,SAAS,EAAE;EACxC,EAAE,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;EACxC,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC1C;EACA,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE9B,IAAS,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AACjG;EACA,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACvB;EACA;EACA;EACA,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;EAClC;EACA,GAAGH,gBAAqB,CAACG,IAAS,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;EAC/E,GAAG;AACH;EACA,EAAEF,WAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACrC;EACA;EACA,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG;EACrB,GAAG,EAAE,EAAE,IAAI;EACX,GAAG,MAAM,EAAE,MAAM;EACjB,GAAG,OAAO,EAAE,IAAI;EAChB,GAAG,CAAC;AACJ;EACA,EAAE,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;EAC9B;EACA;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;EAC7B,GAAG,IAAI,EAAE,IAAI;EACb,GAAG,MAAM,EAAE,MAAM;EACjB,GAAG,CAAC,CAAC;EACL,EAAE;AACF;EACA,CAAC,UAAU,EAAE,UAAU,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;EAC1C,EAAE,IAAI,GAAG,EAAE;EACX;EACA;EACA,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;EAC1B,IAAI,KAAK,EAAE,GAAG;EACd,IAAI,IAAI,EAAE,IAAI;EACd,IAAI,MAAM,EAAE,MAAM;EAClB,IAAI,CAAC,CAAC;EACN,GAAG;AACH;EACA,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC1C;EACA,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;EAC1B,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE;AACxB;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;EAC5B,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;EAC/B,GAAGgC,UAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;EAClC,GAAG/B,eAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EACzC,GAAG,IAAI,CAAC,UAAU,GAAGF,gBAAqB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;EACtE,GAAG,MAAM;EACT,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;EACtB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;EACtB,GAAG;AACH;EACA,EAAE,IAAI,CAAC,GAAG,EAAE;EACZ,GAAGM,QAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC;AACpD;EACA;EACA;EACA,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;EACzB,IAAI,IAAI,EAAE,IAAI,CAAC,EAAE;EACjB,IAAI,MAAM,EAAE,MAAM;EAClB,IAAI,CAAC,CAAC;EACN,GAAG;AACH;EACA,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;EAC7B,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;EACzB;EACA;EACA,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACrB;EACA,GAAG,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;EAClD,IAAIN,gBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;EAClD,IAAI,MAAM;EACV;EACA;EACA,IAAI,UAAU,CAACG,IAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;EACvD,IAAI;EACJ,GAAG;EACH,EAAE;AACF;EACA,CAAC,WAAW,EAAE,UAAU,MAAM,EAAE;EAChC,EAAE,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;EACzE,EAAE;AACF;EACA,CAAC,WAAW,EAAE,UAAU,MAAM,EAAE;EAChC,EAAE,IAAI,SAAS,GAAG,IAAI,KAAK;EAC3B,GAAG,IAAI,CAAC,MAAM,GAAGb,OAAY,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;EAC/D,GAAG,IAAI,CAAC,MAAM,GAAGA,OAAY,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACjE,EAAE,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;EACzB,EAAE,OAAO,SAAS,CAAC;EACnB,EAAE;AACF;EACA,CAAC,oBAAoB,EAAE,UAAU,MAAM,EAAE;EACzC,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;EACpC,EAAE,OAAO,IAAI,MAAM;EACnB,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE;EACzC,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;EAC3D,EAAE;AACF;EACA,CAAC,cAAc,EAAE,YAAY;EAC7B,EAAE,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE;EAC/B,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,KAAK,CAAC,EAAE;EAClD,GAAG;EACH,EAAE,OAAO,IAAI,CAAC;EACd,EAAE;EACF,CAAC,EAAE;AACH;EACA;EACA;EACO,SAAS,SAAS,CAAC,OAAO,EAAE;EACnC,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;EAC/B;;ECn5BA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AACA;AACU,MAAC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;AACxC;EACA;EACA;EACA,CAAC,OAAO,EAAE;EACV;EACA;EACA,EAAE,OAAO,EAAE,CAAC;AACZ;EACA;EACA;EACA,EAAE,OAAO,EAAE,EAAE;AACb;EACA;EACA;EACA,EAAE,UAAU,EAAE,KAAK;AACnB;EACA;EACA;EACA,EAAE,YAAY,EAAE,EAAE;AAClB;EACA;EACA;EACA,EAAE,UAAU,EAAE,CAAC;AACf;EACA;EACA;EACA,EAAE,GAAG,EAAE,KAAK;AACZ;EACA;EACA;EACA,EAAE,WAAW,EAAE,KAAK;AACpB;EACA;EACA;EACA,EAAE,YAAY,EAAE,KAAK;AACrB;EACA;EACA;EACA;EACA;EACA,EAAE,WAAW,EAAE,KAAK;AACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,cAAc,EAAE,KAAK;EACvB,EAAE;AACF;EACA,CAAC,UAAU,EAAE,UAAU,GAAG,EAAE,OAAO,EAAE;AACrC;EACA,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;AAClB;EACA,EAAE,OAAO,GAAGR,UAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3C;EACA;EACA,EAAE,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE;AACrE;EACA,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;AACvD;EACA,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;EAC7B,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;EACzB,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;EACrE,IAAI,MAAM;EACV,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;EACzB,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;EACrE,IAAI;AACJ;EACA,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;EAClD,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;EACnC;EACA,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;EAChE,GAAG,MAAM;EACT;EACA,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;EAChE,GAAG;AACH;EACA,EAAE,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE;EAC9C,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;EACrD,GAAG;AACH;EACA,EAAE,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;EAC5C,EAAE;AACF;EACA;EACA;EACA;EACA;EACA,CAAC,MAAM,EAAE,UAAU,GAAG,EAAE,QAAQ,EAAE;EAClC,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,SAAS,EAAE;EACnD,GAAG,QAAQ,GAAG,IAAI,CAAC;EACnB,GAAG;AACH;EACA,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;AAClB;EACA,EAAE,IAAI,CAAC,QAAQ,EAAE;EACjB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;EACjB,GAAG;EACH,EAAE,OAAO,IAAI,CAAC;EACd,EAAE;AACF;EACA;EACA;EACA;EACA;EACA,CAAC,UAAU,EAAE,UAAU,MAAM,EAAE,IAAI,EAAE;EACrC,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC3C;EACA,EAAEc,EAAW,CAAC,IAAI,EAAE,MAAM,EAAEO,IAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;EAC3E,EAAEP,EAAW,CAAC,IAAI,EAAE,OAAO,EAAEO,IAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7E;EACA,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,EAAE,EAAE;EACnE,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;EACxF,GAAG;AACH;EACA;EACA;EACA,EAAE,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,KAAK,QAAQ,EAAE;EACvD,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;EACrD,GAAG;AACH;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;AAChB;EACA,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACrC;EACA,EAAE,OAAO,IAAI,CAAC;EACd,EAAE;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA,CAAC,UAAU,EAAE,UAAU,MAAM,EAAE;EAC/B,EAAE,IAAI,IAAI,GAAG;EACb,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,KAAK,GAAG,EAAE;EACjC,GAAG,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;EAChC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;EACd,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;EACd,GAAG,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE;EAC3B,GAAG,CAAC;EACJ,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;EACpD,GAAG,IAAI,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;EAC1D,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;EACzB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;EAC1B,IAAI;EACJ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;EAC1B,GAAG;AACH;EACA,EAAE,OAAO4C,QAAa,CAAC,IAAI,CAAC,IAAI,EAAE/D,MAAW,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;EACnE,EAAE;AACF;EACA,CAAC,WAAW,EAAE,UAAU,IAAI,EAAE,IAAI,EAAE;EACpC;EACA,EAAE,IAAI,OAAO,CAAC,KAAK,EAAE;EACrB,GAAG,UAAU,CAACmB,IAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;EACpD,GAAG,MAAM;EACT,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;EACpB,GAAG;EACH,EAAE;AACF;EACA,CAAC,YAAY,EAAE,UAAU,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE;EACxC,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;EAC3C,EAAE,IAAI,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE;EACzD,GAAG,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC;EACvB,GAAG;EACH,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;EAChB,EAAE;AACF;EACA,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE;EAC7B,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;EACvB,EAAE;AACF;EACA,CAAC,cAAc,EAAE,YAAY;EAC7B,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS;EAC3B,EAAE,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;EAChC,EAAE,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW;EACxC,EAAE,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;AACvC;EACA,EAAE,IAAI,WAAW,EAAE;EACnB,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC;EACzB,GAAG;AACH;EACA,EAAE,OAAO,IAAI,GAAG,UAAU,CAAC;EAC3B,EAAE;AACF;EACA,CAAC,aAAa,EAAE,UAAU,SAAS,EAAE;EACrC,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;EACnF,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;EACxC,EAAE;AACF;EACA;EACA,CAAC,aAAa,EAAE,YAAY;EAC5B,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;EACd,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;EACzB,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE;EACnD,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7B;EACA,IAAI,IAAI,CAAC,MAAM,GAAGhB,OAAY,CAAC;EAC/B,IAAI,IAAI,CAAC,OAAO,GAAGA,OAAY,CAAC;AAChC;EACA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;EACxB,KAAK,IAAI,CAAC,GAAG,GAAG6D,aAAkB,CAAC;EACnC,KAAK,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;EACxC,KAAKzC,MAAc,CAAC,IAAI,CAAC,CAAC;EAC1B,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EAC3B;EACA;EACA,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;EAC5B,MAAM,IAAI,EAAE,IAAI;EAChB,MAAM,MAAM,EAAE,MAAM;EACpB,MAAM,CAAC,CAAC;EACR,KAAK;EACL,IAAI;EACJ,GAAG;EACH,EAAE;AACF;EACA,CAAC,WAAW,EAAE,UAAU,GAAG,EAAE;EAC7B,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;EAC9B,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE;AACxB;EACA;EACA,EAAE,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAEyC,aAAkB,CAAC,CAAC;AAClD;EACA,EAAE,OAAO,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;EACzD,EAAE;AACF;EACA,CAAC,UAAU,EAAE,UAAU,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;EAC1C,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAKA,aAAkB,CAAC,EAAE;EAC/E,GAAG,OAAO;EACV,GAAG;AACH;EACA,EAAE,OAAO,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;EACtE,EAAE;EACF,CAAC,EAAE;AACH;AACA;EACA;EACA;AACA;EACO,SAAS,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE;EACxC,CAAC,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;EACpC;;EC1RA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACO,IAAI,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC;AAC3C;EACA;EACA;EACA;EACA;EACA;EACA,CAAC,gBAAgB,EAAE;EACnB,EAAE,OAAO,EAAE,KAAK;EAChB,EAAE,OAAO,EAAE,QAAQ;AACnB;EACA;EACA;EACA,EAAE,MAAM,EAAE,EAAE;AACZ;EACA;EACA;EACA,EAAE,MAAM,EAAE,EAAE;AACZ;EACA;EACA;EACA,EAAE,MAAM,EAAE,YAAY;AACtB;EACA;EACA;EACA,EAAE,WAAW,EAAE,KAAK;AACpB;EACA;EACA;EACA,EAAE,OAAO,EAAE,OAAO;EAClB,EAAE;AACF;EACA,CAAC,OAAO,EAAE;EACV;EACA;EACA;EACA,EAAE,GAAG,EAAE,IAAI;AACX;EACA;EACA;EACA,EAAE,SAAS,EAAE,KAAK;EAClB,EAAE;AACF;EACA,CAAC,UAAU,EAAE,UAAU,GAAG,EAAE,OAAO,EAAE;AACrC;EACA,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;AAClB;EACA,EAAE,IAAI,SAAS,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACpD;EACA;EACA,EAAE,KAAK,IAAI,CAAC,IAAI,OAAO,EAAE;EACzB,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE;EAC7B,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;EAC9B,IAAI;EACJ,GAAG;AACH;EACA,EAAE,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACtC;EACA,EAAE,IAAI,UAAU,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;EAClE,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;EACpC,EAAE,SAAS,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC;EAC5C,EAAE,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC;AAC7C;EACA,EAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;EAC7B,EAAE;AACF;EACA,CAAC,KAAK,EAAE,UAAU,GAAG,EAAE;AACvB;EACA,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;EAClD,EAAE,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACxD;EACA,EAAE,IAAI,aAAa,GAAG,IAAI,CAAC,WAAW,IAAI,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC;EAC9D,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjD;EACA,EAAE,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;EAC5C,EAAE;AACF;EACA,CAAC,UAAU,EAAE,UAAU,MAAM,EAAE;AAC/B;EACA,EAAE,IAAI,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;EACjD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI;EACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;EAC/E,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG;EACtB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG;EACtB,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;EAC/D,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;EAClC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC;EAC7C,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;EAC9D,EAAE,OAAO,GAAG;EACZ,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;EAC9D,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;EACzD,EAAE;AACF;EACA;EACA;EACA,CAAC,SAAS,EAAE,UAAU,MAAM,EAAE,QAAQ,EAAE;AACxC;EACA,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AACjC;EACA,EAAE,IAAI,CAAC,QAAQ,EAAE;EACjB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;EACjB,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,EAAE;EACF,CAAC,CAAC,CAAC;AACH;AACA;EACA;EACA;EACO,SAAS,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE;EAC3C,CAAC,OAAO,IAAI,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;EACvC;;ECrIA,SAAS,CAAC,GAAG,GAAG,YAAY,CAAC;EAC7B,SAAS,CAAC,GAAG,GAAG,YAAY;;ECI5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AACU,MAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;AACnC;EACA;EACA;EACA,CAAC,OAAO,EAAE;EACV;EACA;EACA;EACA,EAAE,OAAO,EAAE,GAAG;EACd,EAAE;AACF;EACA,CAAC,UAAU,EAAE,UAAU,OAAO,EAAE;EAChC,EAAElE,UAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EACjC,EAAEM,KAAU,CAAC,IAAI,CAAC,CAAC;EACnB,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;EACpC,EAAE;AACF;EACA,CAAC,KAAK,EAAE,YAAY;EACpB,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;EACxB,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB;EACA;EACA,GAAGkB,QAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;EAC9D,GAAG;AACH;EACA,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EAC9C,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;EACjB,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;EAC7C,EAAE;AACF;EACA,CAAC,QAAQ,EAAE,YAAY;EACvB,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;EAC9C,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;EAC3B,EAAE;AACF;EACA,CAAC,SAAS,EAAE,YAAY;EACxB,EAAE,IAAI,MAAM,GAAG;EACf,GAAG,SAAS,EAAE,IAAI,CAAC,MAAM;EACzB,GAAG,IAAI,EAAE,IAAI,CAAC,OAAO;EACrB,GAAG,OAAO,EAAE,IAAI,CAAC,OAAO;EACxB,GAAG,OAAO,EAAE,IAAI,CAAC,UAAU;EAC3B,GAAG,CAAC;EACJ,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE;EAC1B,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;EACtC,GAAG;EACH,EAAE,OAAO,MAAM,CAAC;EAChB,EAAE;AACF;EACA,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE;EAC5B,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;EAC5C,EAAE;AACF;EACA,CAAC,OAAO,EAAE,YAAY;EACtB,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;EACpE,EAAE;AACF;EACA,CAAC,gBAAgB,EAAE,UAAU,MAAM,EAAE,IAAI,EAAE;EAC3C,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;EACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;EAC3E,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;AAChE;EACA,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC;EACzE,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAC5D;EACA,EAAE,IAAI,OAAO,CAAC,KAAK,EAAE;EACrB,GAAGU,YAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;EAC/D,GAAG,MAAM;EACT,GAAGf,WAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;EACvD,GAAG;EACH,EAAE;AACF;EACA,CAAC,MAAM,EAAE,YAAY;EACrB,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;EACjB,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAClD;EACA,EAAE,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;EAC/B,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;EAC7B,GAAG;EACH,EAAE;AACF;EACA,CAAC,UAAU,EAAE,YAAY;EACzB,EAAE,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;EAC/B,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;EAC/B,GAAG;EACH,EAAE;AACF;EACA,CAAC,YAAY,EAAE,YAAY;EAC3B,EAAE,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;EAC/B,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;EAC9B,GAAG;EACH,EAAE;AACF;EACA,CAAC,OAAO,EAAE,YAAY;EACtB;EACA;EACA,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;EAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;EAChC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AAC9E;EACA,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9E;EACA,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;EACvC,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;EACnC,EAAE;EACF,CAAC;;EC7HD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AACU,MAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AACpC;EACA;EACA;EACA,CAAC,OAAO,EAAE;EACV;EACA;EACA,EAAE,SAAS,EAAE,CAAC;EACd,EAAE;AACF;EACA,CAAC,SAAS,EAAE,YAAY;EACxB,EAAE,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACvD,EAAE,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC;EAC7C,EAAE,OAAO,MAAM,CAAC;EAChB,EAAE;AACF;EACA,CAAC,eAAe,EAAE,YAAY;EAC9B;EACA,EAAE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;EACnC,EAAE;AACF;EACA,CAAC,KAAK,EAAE,YAAY;EACpB,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC;EACA;EACA;EACA,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;EACf,EAAE;AACF;EACA,CAAC,cAAc,EAAE,YAAY;EAC7B,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACrE;EACA,EAAEL,EAAW,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;EAC/D,EAAEA,EAAW,CAAC,SAAS,EAAE,8CAA8C,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;EAC9F,EAAEA,EAAW,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;EACjE,EAAE,SAAS,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAAC;AAC9C;EACA,EAAE,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;EACzC,EAAE;AACF;EACA,CAAC,iBAAiB,EAAE,YAAY;EAChC,EAAEM,eAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;EAC5C,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC;EACnB,EAAEK,MAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EAClC,EAAEV,GAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EAChC,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC;EACzB,EAAE;AACF;EACA,CAAC,YAAY,EAAE,YAAY;EAC3B,EAAE,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE;AAC5C;EACA,EAAE,IAAI,KAAK,CAAC;EACZ,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;EAC5B,EAAE,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;EAC/B,GAAG,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;EAC5B,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;EACnB,GAAG;EACH,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;EACjB,EAAE;AACF;EACA,CAAC,OAAO,EAAE,YAAY;EACtB,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE;AAC3D;EACA,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxC;EACA,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO;EACtB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU;EACjC,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE;EACxB,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AACjC;EACA,EAAEI,WAAmB,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AACxC;EACA;EACA,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;EAC/B,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;EAChC,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;EACxC,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;AACzC;EACA,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE;EACtB,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACzB,GAAG;AACH;EACA;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1C;EACA;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;EACtB,EAAE;AACF;EACA,CAAC,MAAM,EAAE,YAAY;EACrB,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvC;EACA,EAAE,IAAI,IAAI,CAAC,oBAAoB,EAAE;EACjC,GAAG,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;EACrC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;EACvB,GAAG;EACH,EAAE;AACF;EACA,CAAC,SAAS,EAAE,UAAU,KAAK,EAAE;EAC7B,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;EAC/B,EAAE,IAAI,CAAC,OAAO,CAACb,KAAU,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC;AAC1C;EACA,EAAE,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG;EAC7B,GAAG,KAAK,EAAE,KAAK;EACf,GAAG,IAAI,EAAE,IAAI,CAAC,SAAS;EACvB,GAAG,IAAI,EAAE,IAAI;EACb,GAAG,CAAC;EACJ,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE;EACtD,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;EACzB,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC;EACtD,EAAE;AACF;EACA,CAAC,QAAQ,EAAE,UAAU,KAAK,EAAE;EAC5B,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;EAC7B,EAAE;AACF;EACA,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE;EAC/B,EAAE,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;EAC3B,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;EACxB,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AACxB;EACA,EAAE,IAAI,IAAI,EAAE;EACZ,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACpB,GAAG,MAAM;EACT,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;EACzB,GAAG;EACH,EAAE,IAAI,IAAI,EAAE;EACZ,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACpB,GAAG,MAAM;EACT,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;EAC1B,GAAG;AACH;EACA,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC;AACtB;EACA,EAAE,OAAO,IAAI,CAAC,OAAO,CAACA,KAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC;EACA,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;EAC7B,EAAE;AACF;EACA,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE;EAC/B;EACA;EACA,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;EAClC,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;EACnB,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;EAClB;EACA;EACA,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;EAC7B,EAAE;AACF;EACA,CAAC,YAAY,EAAE,UAAU,KAAK,EAAE;EAChC,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;EAC/B,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;EAC7B,EAAE;AACF;EACA,CAAC,gBAAgB,EAAE,UAAU,KAAK,EAAE;EACpC,EAAE,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE;EACnD,GAAG,IAAI,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;EACrD,OAAO,SAAS,GAAG,EAAE;EACrB,OAAO,SAAS;EAChB,OAAO,CAAC,CAAC;EACT,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EACtC,IAAI,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;EACjC;EACA,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE;EACrC,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EAC9B,IAAI;EACJ,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;EACxC,GAAG,MAAM;EACT,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;EACtD,GAAG;EACH,EAAE;AACF;EACA,CAAC,cAAc,EAAE,UAAU,KAAK,EAAE;EAClC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE;AAC7B;EACA,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;EAClC,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAIY,gBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EACzF,EAAE;AACF;EACA,CAAC,mBAAmB,EAAE,UAAU,KAAK,EAAE;EACvC,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE;EACvB,GAAG,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;EACjD,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,MAAM,EAAE,CAAC;EAC3D,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;EAC/E,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;EAC1E,GAAG;EACH,EAAE;AACF;EACA,CAAC,OAAO,EAAE,YAAY;EACtB,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC7B;EACA,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE;EAC1B,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;EACnC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;EAClC,GAAG;AACH;EACA,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;EAChB,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACf;EACA,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;EAC5B,EAAE;AACF;EACA,CAAC,MAAM,EAAE,YAAY;EACrB,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;EAClC,EAAE,IAAI,MAAM,EAAE;EACd,GAAG,IAAI,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;EAC/B,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;EACnE,GAAG,MAAM;EACT,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;EACpB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EAC5C,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;EAC5E,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;EACvB,GAAG;EACH,EAAE;AACF;EACA,CAAC,KAAK,EAAE,YAAY;EACpB,EAAE,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;EACzC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;EACnB,EAAE,IAAI,MAAM,EAAE;EACd,GAAG,IAAI,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;EAC/B,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;EACzB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;EAC9D,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;EACpB,GAAG;AACH;EACA,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB;EACA,EAAE,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE;EAC/D,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;EACvB,GAAG,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE;EAC3E,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;EACxB,IAAI;EACJ,GAAG;AACH;EACA,EAAE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;EACtB,EAAE;AACF;EACA,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE,MAAM,EAAE;EACvC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE;AACjC;EACA,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;EACnB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM;EAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM;EACxB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;AACtB;EACA,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE;AACvB;EACA,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;AAClB;EACA,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;EAC5B,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;EACtD,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACpB,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;EAC3C,IAAI;EACJ,GAAG,IAAI,MAAM,EAAE;EACf,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;EACpB,IAAI;EACJ,GAAG;AACH;EACA,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC/B;EACA;EACA,EAAE;AACF;EACA,CAAC,aAAa,EAAE,UAAU,KAAK,EAAE;AACjC;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE;AACnD;EACA,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM;EACtB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI;EACrB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;EAChD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7D;EACA,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;EACf,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;EACd,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACnB,GAAG;AACH;EACA,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;EAClB,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;AAClD;EACA,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;EACf,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;EACjB,GAAG;AACH;EACA,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;EAC/B,EAAE;AACF;EACA,CAAC,WAAW,EAAE,UAAU,GAAG,EAAE,KAAK,EAAE;EACpC,EAAE,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAC9B;EACA,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE;EACpB,GAAG,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;EACzC,GAAG,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC;EACtD,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;EAC3C,GAAG;AACH;EACA,EAAE,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;EAC9C,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE;EACxB,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;EACrE,IAAI;EACJ,GAAG,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;EACrC,GAAG,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;EAClC,GAAG,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC;EACnC,GAAG,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;EACjC,GAAG,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;EACnC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;EAChB,GAAG;EACH,EAAE;AACF;EACA;EACA;AACA;EACA,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE;EACxB,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC;AACvE;EACA,EAAE,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE;EAC/D,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;EACvB,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;EACjE,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;EAC7F,KAAK,YAAY,GAAG,KAAK,CAAC;EAC1B,KAAK;EACL,IAAI;EACJ,GAAG;EACH,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,CAAC,YAAY,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;EAC5D,EAAE;AACF;EACA,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE;EAC5B,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE;AACxF;EACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;EAClD,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;EACnC,EAAE;AACF;AACA;EACA,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE;EAC/B,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;EACjC,EAAE,IAAI,KAAK,EAAE;EACb;EACA,GAAGc,WAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;EAC/D,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;EAC3C,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;EAC7B,GAAG,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;EACrC,GAAG;EACH,EAAE;AACF;EACA,CAAC,iBAAiB,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE;EACxC,EAAE,IAAI,IAAI,CAAC,oBAAoB,EAAE;EACjC,GAAG,OAAO;EACV,GAAG;AACH;EACA,EAAE,IAAI,KAAK,EAAE,qBAAqB,CAAC;AACnC;EACA,EAAE,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE;EAC/D,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;EACvB,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;EACjE,IAAI,qBAAqB,GAAG,KAAK,CAAC;EAClC,IAAI;EACJ,GAAG;AACH;EACA,EAAE,IAAI,qBAAqB,KAAK,IAAI,CAAC,aAAa,EAAE;EACpD,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAC3B;EACA,GAAG,IAAI,qBAAqB,EAAE;EAC9B,IAAIR,QAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;EAC7D,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;EAC7D,IAAI,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC;EAC/C,IAAI;EACJ,GAAG;AACH;EACA,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;AACxE;EACA,EAAE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;EACnC,EAAE,UAAU,CAACH,IAAS,CAAC,YAAY;EACnC,GAAG,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;EACrC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;EAChB,EAAE;AACF;EACA,CAAC,UAAU,EAAE,UAAU,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE;EACxC,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;EACrD,EAAE;AACF;EACA,CAAC,aAAa,EAAE,UAAU,KAAK,EAAE;EACjC,EAAE,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;AAC3B;EACA,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE;AACzB;EACA,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;EACxB,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AACxB;EACA,EAAE,IAAI,IAAI,EAAE;EACZ,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACpB,GAAG,MAAM;EACT;EACA,GAAG,OAAO;EACV,GAAG;EACH,EAAE,IAAI,IAAI,EAAE;EACZ,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACpB,GAAG,MAAM,IAAI,IAAI,EAAE;EACnB;EACA;EACA,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;EAC1B,GAAG;AACH;EACA,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;EAC9B,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,KAAK,CAAC;AAC9B;EACA,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;EACpB,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB;EACA,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;EAC7B,EAAE;AACF;EACA,CAAC,YAAY,EAAE,UAAU,KAAK,EAAE;EAChC,EAAE,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;AAC3B;EACA,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE;AACzB;EACA,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;EACxB,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AACxB;EACA,EAAE,IAAI,IAAI,EAAE;EACZ,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACpB,GAAG,MAAM;EACT;EACA,GAAG,OAAO;EACV,GAAG;EACH,EAAE,IAAI,IAAI,EAAE;EACZ,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACpB,GAAG,MAAM,IAAI,IAAI,EAAE;EACnB;EACA;EACA,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;EACzB,GAAG;AACH;EACA,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;AACpB;EACA,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;EAC/B,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC;EAC/B,EAAE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC1B;EACA,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;EAC7B,EAAE;EACF,CAAC,EAAE;AACH;EACA;EACA;EACO,SAAS,MAAM,CAAC,OAAO,EAAE;EAChC,CAAC,OAAO,OAAO,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;EACpD;;ECveA;EACA;EACA;AACA;AACA;EACO,IAAI,SAAS,GAAG,CAAC,YAAY;EACpC,CAAC,IAAI;EACL,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC;EACnE,EAAE,OAAO,UAAU,IAAI,EAAE;EACzB,GAAG,OAAO,QAAQ,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,GAAG,gBAAgB,CAAC,CAAC;EACrE,GAAG,CAAC;EACJ,EAAE,CAAC,OAAO,CAAC,EAAE;EACb;EACA;EACA,EAAE;EACF,CAAC,OAAO,UAAU,IAAI,EAAE;EACxB,EAAE,OAAO,QAAQ,CAAC,aAAa,CAAC,GAAG,GAAG,IAAI,GAAG,sDAAsD,CAAC,CAAC;EACrG,EAAE,CAAC;EACH,CAAC,GAAG,CAAC;AACL;AACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACO,IAAI,QAAQ,GAAG;AACtB;EACA,CAAC,cAAc,EAAE,YAAY;EAC7B,EAAE,IAAI,CAAC,UAAU,GAAGK,QAAc,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;EACnE,EAAE;AACF;EACA,CAAC,OAAO,EAAE,YAAY;EACtB,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE;EAC3C,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACxC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;EACtB,EAAE;AACF;EACA,CAAC,SAAS,EAAE,UAAU,KAAK,EAAE;EAC7B,EAAE,IAAI,SAAS,GAAG,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AACxD;EACA,EAAEF,QAAgB,CAAC,SAAS,EAAE,oBAAoB,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;AACrF;EACA,EAAE,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC;AAC9B;EACA,EAAE,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;EAClC,EAAE,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrC;EACA,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;EAC3B,EAAE,IAAI,CAAC,OAAO,CAAClB,KAAU,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC;EAC1C,EAAE;AACF;EACA,CAAC,QAAQ,EAAE,UAAU,KAAK,EAAE;EAC5B,EAAE,IAAI,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC;EACnC,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACzC;EACA,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE;EACjC,GAAG,KAAK,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;EACzC,GAAG;EACH,EAAE;AACF;EACA,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE;EAC/B,EAAE,IAAI,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC;EACnC,EAAEmB,MAAc,CAAC,SAAS,CAAC,CAAC;EAC5B,EAAE,KAAK,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;EAC3C,EAAE,OAAO,IAAI,CAAC,OAAO,CAACnB,KAAU,CAAC,KAAK,CAAC,CAAC,CAAC;EACzC,EAAE;AACF;EACA,CAAC,YAAY,EAAE,UAAU,KAAK,EAAE;EAChC,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO;EAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK;EACxB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;EAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC;AACnC;EACA,EAAE,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;EACvC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;AACpC;EACA,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE;EACtB,GAAG,IAAI,CAAC,MAAM,EAAE;EAChB,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;EACjD,IAAI;EACJ,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;EACjC,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;EACzC,GAAG,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;EAChC,GAAG,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;AACpC;EACA,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE;EAC1B,IAAI,MAAM,CAAC,SAAS,GAAGH,OAAY,CAAC,OAAO,CAAC,SAAS,CAAC;EACtD,QAAQ,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;EACnC,QAAQ,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;EACnD,IAAI,MAAM;EACV,IAAI,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC;EAC1B,IAAI;EACJ,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EAC3D,GAAG,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;AACvC;EACA,GAAG,MAAM,IAAI,MAAM,EAAE;EACrB,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;EACjC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;EACxB,GAAG;AACH;EACA,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE;EACpB,GAAG,IAAI,CAAC,IAAI,EAAE;EACd,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;EAC3C,IAAI;EACJ,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;EAC/B,GAAG,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC;EACnD,GAAG,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;AACtC;EACA,GAAG,MAAM,IAAI,IAAI,EAAE;EACnB,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;EAC/B,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;EACtB,GAAG;EACH,EAAE;AACF;EACA,CAAC,aAAa,EAAE,UAAU,KAAK,EAAE;EACjC,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE;EAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;EACnC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;AAC3C;EACA,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,MAAM;EAC9C,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;EACzE,EAAE;AACF;EACA,CAAC,QAAQ,EAAE,UAAU,KAAK,EAAE,IAAI,EAAE;EAClC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;EACvB,EAAE;AACF;EACA,CAAC,aAAa,EAAE,UAAU,KAAK,EAAE;EACjC,EAAEyD,OAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;EACpC,EAAE;AACF;EACA,CAAC,YAAY,EAAE,UAAU,KAAK,EAAE;EAChC,EAAEC,MAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;EACnC,EAAE;EACF,CAAC;;ECtIM,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,GAAG,SAAS,CAAC;AACxD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AACU,MAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC;AACjC;EACA,CAAC,cAAc,EAAE,YAAY;EAC7B,EAAE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAClC;EACA;EACA,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AACzD;EACA,EAAE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;EAChC,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EAC/C,EAAE;AACF;EACA,CAAC,iBAAiB,EAAE,YAAY;EAChC,EAAEpC,MAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EAClC,EAAEV,GAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EAChC,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC;EACzB,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC;EACzB,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;EACvB,EAAE;AACF;EACA,CAAC,OAAO,EAAE,YAAY;EACtB,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE;AAC3D;EACA,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxC;EACA,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO;EACtB,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE;EACxB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;AAClC;EACA;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;EACrD,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;EACxB,GAAG,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;EAC3C,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;EAC5C,GAAG;AACH;EACA;EACA,EAAEI,WAAmB,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;EACxC,EAAE,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAClF;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;EACtB,EAAE;AACF;EACA;AACA;EACA,CAAC,SAAS,EAAE,UAAU,KAAK,EAAE;EAC7B,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAC1C;EACA;EACA;EACA;EACA,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE;EAC/B,GAAGK,QAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;EACnD,GAAG;AACH;EACA,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE;EACjC,GAAGA,QAAgB,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;EACjD,GAAG;AACH;EACA,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;EAC3B,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC;EACrC,EAAE;AACF;EACA,CAAC,QAAQ,EAAE,UAAU,KAAK,EAAE;EAC5B,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE;EAClD,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EAC3C,EAAE,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EAC1C,EAAE;AACF;EACA,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE;EAC/B,EAAEC,MAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EAC9B,EAAE,KAAK,CAAC,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EAC7C,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;EACpC,EAAE;AACF;EACA,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE;EAC/B,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;EACnB,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;EAClB,EAAE;AACF;EACA,CAAC,YAAY,EAAE,UAAU,KAAK,EAAE;EAChC,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK;EACxB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAC9B;EACA,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE;AACxB;EACA,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE;EACtB,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;EAC9C,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;EACxD,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;EACrD,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;EACxD,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC1D;EACA,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE;EAC1B,IAAI,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;EAC7D,IAAI,MAAM;EACV,IAAI,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;EAC7C,IAAI;AACJ;EACA,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE;EAC3B,IAAI,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;EAC/D,IAAI,MAAM;EACV,IAAI,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;EAC9C,IAAI;EACJ,GAAG,MAAM;EACT,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACvC,GAAG;AACH;EACA,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE;EACpB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;EACjE,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;EAC1D,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;EACjE,GAAG,MAAM;EACT,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EACrC,GAAG;EACH,EAAE;AACF;EACA,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE,MAAM,EAAE;EACvC,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;EAC3D,EAAE;AACF;EACA,CAAC,aAAa,EAAE,UAAU,KAAK,EAAE;EACjC,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM;EACtB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;EAChD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;EACvD,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,SAAS,CAAC;AAC3C;EACA;EACA,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,MAAM;EACjC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;EAC9B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;EACxB,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AAC1B;EACA,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;EAC1B,EAAE;AACF;EACA,CAAC,QAAQ,EAAE,UAAU,KAAK,EAAE,IAAI,EAAE;EAClC,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;EACtC,EAAE;AACF;EACA;EACA,CAAC,aAAa,EAAE,UAAU,KAAK,EAAE;EACjC,EAAEmC,OAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EAC/B,EAAE;AACF;EACA,CAAC,YAAY,EAAE,UAAU,KAAK,EAAE;EAChC,EAAEC,MAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EAC9B,EAAE;EACF,CAAC,EAAE;AACH;EACA,IAAI,OAAO,CAAC,GAAG,EAAE;EACjB,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;EACvB,CAAC;AACD;EACA;EACA;EACA;EACO,SAAS,GAAG,CAAC,OAAO,EAAE;EAC7B,CAAC,OAAO,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;EAC7D;;EC1MA,GAAG,CAAC,OAAO,CAAC;EACZ;EACA;EACA;EACA;EACA,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE;EAC/B;EACA;EACA;EACA,EAAE,IAAI,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC;AAChI;EACA,EAAE,IAAI,CAAC,QAAQ,EAAE;EACjB,GAAG,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;EACtD,GAAG;AACH;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;EAChC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;EAC3B,GAAG;EACH,EAAE,OAAO,QAAQ,CAAC;EAClB,EAAE;AACF;EACA,CAAC,gBAAgB,EAAE,UAAU,IAAI,EAAE;EACnC,EAAE,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,SAAS,EAAE;EACpD,GAAG,OAAO,KAAK,CAAC;EAChB,GAAG;AACH;EACA,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;EAC3C,EAAE,IAAI,QAAQ,KAAK,SAAS,EAAE;EAC9B,GAAG,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;EACjD,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;EACxC,GAAG;EACH,EAAE,OAAO,QAAQ,CAAC;EAClB,EAAE;AACF;EACA,CAAC,eAAe,EAAE,UAAU,OAAO,EAAE;EACrC;EACA;EACA;EACA,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;EACxE,EAAE;EACF,CAAC,CAAC;;ECzCF;EACA;EACA;AACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;AACA;AACU,MAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;EACtC,CAAC,UAAU,EAAE,UAAU,YAAY,EAAE,OAAO,EAAE;EAC9C,EAAE,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;EACxF,EAAE;AACF;EACA;EACA;EACA,CAAC,SAAS,EAAE,UAAU,YAAY,EAAE;EACpC,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC;EAC9D,EAAE;AACF;EACA,CAAC,gBAAgB,EAAE,UAAU,YAAY,EAAE;EAC3C,EAAE,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;EAC9C,EAAE,OAAO;EACT,GAAG,YAAY,CAAC,YAAY,EAAE;EAC9B,GAAG,YAAY,CAAC,YAAY,EAAE;EAC9B,GAAG,YAAY,CAAC,YAAY,EAAE;EAC9B,GAAG,YAAY,CAAC,YAAY,EAAE;EAC9B,GAAG,CAAC;EACJ,EAAE;EACF,CAAC,EAAE;AACH;AACA;EACA;EACO,SAAS,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE;EACjD,CAAC,OAAO,IAAI,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;EAC7C;;ECrDA,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;EACpB,GAAG,CAAC,YAAY,GAAG,YAAY;;ECA/B,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC;EAC1C,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;EACxC,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC;EAC1C,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;EACxC,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC;EAC1C,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;EAChC,OAAO,CAAC,SAAS,GAAG,SAAS;;ECF7B;EACA;EACA;EACA;AACA;EACA;EACA;EACA,GAAG,CAAC,YAAY,CAAC;EACjB;EACA;EACA;EACA,CAAC,OAAO,EAAE,IAAI;EACd,CAAC,CAAC,CAAC;AACH;EACO,IAAI,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;EACpC,CAAC,UAAU,EAAE,UAAU,GAAG,EAAE;EAC5B,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;EAClB,EAAE,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;EACnC,EAAE,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;EACtC,EAAE,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;EAC9B,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;EACxC,EAAE;AACF;EACA,CAAC,QAAQ,EAAE,YAAY;EACvB,EAAE/C,EAAW,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;EACrE,EAAE;AACF;EACA,CAAC,WAAW,EAAE,YAAY;EAC1B,EAAEC,GAAY,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;EACtE,EAAE;AACF;EACA,CAAC,KAAK,EAAE,YAAY;EACpB,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC;EACrB,EAAE;AACF;EACA,CAAC,QAAQ,EAAE,YAAY;EACvB,EAAEU,MAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EAC7B,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC;EACpB,EAAE;AACF;EACA,CAAC,WAAW,EAAE,YAAY;EAC1B,EAAE,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;EAC9B,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;EACtB,EAAE;AACF;EACA,CAAC,wBAAwB,EAAE,YAAY;EACvC,EAAE,IAAI,IAAI,CAAC,kBAAkB,KAAK,CAAC,EAAE;EACrC,GAAG,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;EACzC,GAAG,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;EAC/B,GAAG;EACH,EAAE;AACF;EACA,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE;EAC5B,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,KAAK,CAAC,EAAE;AAC7E;EACA;EACA;EACA,EAAE,IAAI,CAAC,wBAAwB,EAAE,CAAC;EAClC,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;AACrB;EACA,EAAEgB,oBAA4B,EAAE,CAAC;EACjC,EAAED,gBAAwB,EAAE,CAAC;AAC7B;EACA,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;AAC7D;EACA,EAAE1B,EAAW,CAAC,QAAQ,EAAE;EACxB,GAAG,WAAW,EAAEwB,IAAa;EAC7B,GAAG,SAAS,EAAE,IAAI,CAAC,YAAY;EAC/B,GAAG,OAAO,EAAE,IAAI,CAAC,UAAU;EAC3B,GAAG,OAAO,EAAE,IAAI,CAAC,UAAU;EAC3B,GAAG,EAAE,IAAI,CAAC,CAAC;EACX,EAAE;AACF;EACA,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE;EAC5B,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;EACpB,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACtB;EACA,GAAG,IAAI,CAAC,IAAI,GAAGZ,QAAc,CAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;EAC1E,GAAGF,QAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;AAC1D;EACA,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;EAClC,GAAG;AACH;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;AACxD;EACA,EAAE,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC;EACxD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;AAC9B;EACA,EAAEL,WAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AAC7C;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;EACzC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;EACzC,EAAE;AACF;EACA,CAAC,OAAO,EAAE,YAAY;EACtB,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;EACnB,GAAGM,MAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC7B,GAAGO,WAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;EAC7D,GAAG;AACH;EACA,EAAEa,mBAA2B,EAAE,CAAC;EAChC,EAAED,eAAuB,EAAE,CAAC;AAC5B;EACA,EAAE7B,GAAY,CAAC,QAAQ,EAAE;EACzB,GAAG,WAAW,EAAEuB,IAAa;EAC7B,GAAG,SAAS,EAAE,IAAI,CAAC,YAAY;EAC/B,GAAG,OAAO,EAAE,IAAI,CAAC,UAAU;EAC3B,GAAG,OAAO,EAAE,IAAI,CAAC,UAAU;EAC3B,GAAG,EAAE,IAAI,CAAC,CAAC;EACX,EAAE;AACF;EACA,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE;EAC1B,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE;AACtD;EACA,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AACjB;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE;EAC/B;EACA;EACA,EAAE,IAAI,CAAC,wBAAwB,EAAE,CAAC;EAClC,EAAE,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAACjB,IAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7E;EACA,EAAE,IAAI,MAAM,GAAG,IAAI,YAAY;EAC/B,UAAU,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC;EAC5D,UAAU,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACzD;EACA,EAAE,IAAI,CAAC,IAAI;EACX,IAAI,SAAS,CAAC,MAAM,CAAC;EACrB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;EAChD,EAAE;AACF;EACA,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE;EAC1B,EAAE,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE,EAAE;EACxB,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;EAClB,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;EACnC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;EACtB,GAAG;EACH,EAAE;EACF,CAAC,CAAC,CAAC;AACH;EACA;EACA;EACA;EACA,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC;;ECpJjD;EACA;EACA;AACA;EACA;EACA;AACA;EACA,GAAG,CAAC,YAAY,CAAC;EACjB;EACA;EACA;EACA;EACA;EACA,CAAC,eAAe,EAAE,IAAI;EACtB,CAAC,CAAC,CAAC;AACH;EACO,IAAI,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;EAC5C,CAAC,QAAQ,EAAE,YAAY;EACvB,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;EACtD,EAAE;AACF;EACA,CAAC,WAAW,EAAE,YAAY;EAC1B,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;EACvD,EAAE;AACF;EACA,CAAC,cAAc,EAAE,UAAU,CAAC,EAAE;EAC9B,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI;EACrB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE;EAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS;EACnC,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,CAAC;AAC1E;EACA,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,QAAQ,EAAE;EAChD,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;EACrB,GAAG,MAAM;EACT,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;EAC7C,GAAG;EACH,EAAE;EACF,CAAC,CAAC,CAAC;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,iBAAiB,EAAE,eAAe,CAAC;;EC9CjE;EACA;EACA;AACA;EACA;EACA;EACA,GAAG,CAAC,YAAY,CAAC;EACjB;EACA;EACA,CAAC,QAAQ,EAAE,IAAI;AACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA,CAAC,OAAO,EAAE,IAAI;AACd;EACA;EACA;EACA,CAAC,mBAAmB,EAAE,IAAI;AAC1B;EACA;EACA;EACA,CAAC,eAAe,EAAE,QAAQ;AAC1B;EACA;EACA,CAAC,aAAa,EAAE,GAAG;AACnB;EACA;EACA;EACA;EACA;EACA;EACA,CAAC,aAAa,EAAE,KAAK;AACrB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,CAAC,kBAAkB,EAAE,GAAG;EACxB,CAAC,CAAC,CAAC;AACH;EACO,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;EACjC,CAAC,QAAQ,EAAE,YAAY;EACvB,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;EACxB,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;AACvB;EACA,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;AACjE;EACA,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;EACtB,IAAI,SAAS,EAAE,IAAI,CAAC,YAAY;EAChC,IAAI,IAAI,EAAE,IAAI,CAAC,OAAO;EACtB,IAAI,OAAO,EAAE,IAAI,CAAC,UAAU;EAC5B,IAAI,EAAE,IAAI,CAAC,CAAC;AACZ;EACA,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;EAC7D,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE;EAClC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;EAC7D,IAAI,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAC7C;EACA,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;EACzC,IAAI;EACJ,GAAG;EACH,EAAEG,QAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iCAAiC,CAAC,CAAC;EAC5E,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;EAC3B,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;EACvB,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;EACnB,EAAE;AACF;EACA,CAAC,WAAW,EAAE,YAAY;EAC1B,EAAEQ,WAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;EAC5D,EAAEA,WAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;EAClE,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;EAC5B,EAAE;AACF;EACA,CAAC,KAAK,EAAE,YAAY;EACpB,EAAE,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;EACnD,EAAE;AACF;EACA,CAAC,MAAM,EAAE,YAAY;EACrB,EAAE,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;EACpD,EAAE;AACF;EACA,CAAC,YAAY,EAAE,YAAY;EAC3B,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;AACtB;EACA,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;EACd,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE;EAC3E,GAAG,IAAI,MAAM,GAAGgC,cAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC1D;EACA,GAAG,IAAI,CAAC,YAAY,GAAG,QAAQ;EAC/B,IAAI,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;EAC1E,IAAI,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;EAC1E,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAChC;EACA,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;EACxF,GAAG,MAAM;EACT,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;EAC5B,GAAG;AACH;EACA,EAAE,GAAG;EACL,OAAO,IAAI,CAAC,WAAW,CAAC;EACxB,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC;AACzB;EACA,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE;EAC3B,GAAG,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;EACxB,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;EACpB,GAAG;EACH,EAAE;AACF;EACA,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;EACvB,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;EACjC,GAAG,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,EAAE;EAC1C,OAAO,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AAChF;EACA,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EAC7B,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B;EACA,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;EAC9B,GAAG;AACH;EACA,EAAE,IAAI,CAAC,IAAI;EACX,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;EACtB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;EACvB,EAAE;AACF;EACA,CAAC,eAAe,EAAE,UAAU,IAAI,EAAE;EAClC,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE;EACnE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;EAC3B,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;EACvB,GAAG;EACH,EAAE;AACF;EACA,CAAC,UAAU,EAAE,YAAY;EACzB,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;EAChD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3D;EACA,EAAE,IAAI,CAAC,mBAAmB,GAAG,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;EAChE,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;EACjE,EAAE;AACF;EACA,CAAC,aAAa,EAAE,UAAU,KAAK,EAAE,SAAS,EAAE;EAC5C,EAAE,OAAO,KAAK,GAAG,CAAC,KAAK,GAAG,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC;EACvD,EAAE;AACF;EACA,CAAC,eAAe,EAAE,YAAY;EAC9B,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE;AACzD;EACA,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC3E;EACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;EAChC,EAAE,IAAI,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;EACvF,EAAE,IAAI,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;EACvF,EAAE,IAAI,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;EACvF,EAAE,IAAI,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;AACvF;EACA,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;EAClE,EAAE;AACF;EACA,CAAC,cAAc,EAAE,YAAY;EAC7B;EACA,EAAE,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW;EACnC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;EAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB;EACnC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;EACnC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,SAAS,GAAG,EAAE,IAAI,UAAU,GAAG,SAAS,GAAG,EAAE;EAChE,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,SAAS,GAAG,EAAE,IAAI,UAAU,GAAG,SAAS,GAAG,EAAE;EAChE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;AACzE;EACA,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;EAC5D,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;EACnC,EAAE;AACF;EACA,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE;EAC1B,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI;EACrB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO;AAC3B;EACA,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5E;EACA,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACzB;EACA,EAAE,IAAI,SAAS,EAAE;EACjB,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACvB;EACA,GAAG,MAAM;EACT,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACrC;EACA,GAAG,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;EAC7D,OAAO,QAAQ,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI;EAC1D,OAAO,IAAI,GAAG,OAAO,CAAC,aAAa;AACnC;EACA,OAAO,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC;EAC1D,OAAO,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7C;EACA,OAAO,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC;EAC9D,OAAO,kBAAkB,GAAG,WAAW,CAAC,UAAU,CAAC,YAAY,GAAG,KAAK,CAAC;AACxE;EACA,OAAO,oBAAoB,GAAG,YAAY,IAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;EACjF,OAAO,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AACjF;EACA,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE;EAC/B,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACxB;EACA,IAAI,MAAM;EACV,IAAI,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC7D;EACA,IAAI9C,gBAAqB,CAAC,YAAY;EACtC,KAAK,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE;EACvB,MAAM,QAAQ,EAAE,oBAAoB;EACpC,MAAM,aAAa,EAAE,IAAI;EACzB,MAAM,WAAW,EAAE,IAAI;EACvB,MAAM,OAAO,EAAE,IAAI;EACnB,MAAM,CAAC,CAAC;EACR,KAAK,CAAC,CAAC;EACP,IAAI;EACJ,GAAG;EACH,EAAE;EACF,CAAC,CAAC,CAAC;AACH;EACA;EACA;EACA;EACA,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC;;ECpO/C;EACA;EACA;AACA;EACA;EACA;EACA,GAAG,CAAC,YAAY,CAAC;EACjB;EACA;EACA;EACA,CAAC,QAAQ,EAAE,IAAI;AACf;EACA;EACA;EACA,CAAC,gBAAgB,EAAE,EAAE;EACrB,CAAC,CAAC,CAAC;AACH;EACO,IAAI,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;AACrC;EACA,CAAC,QAAQ,EAAE;EACX,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC;EACf,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;EACf,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC;EACf,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC;EACf,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;EAC9B,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;EAC9B,EAAE;AACF;EACA,CAAC,UAAU,EAAE,UAAU,GAAG,EAAE;EAC5B,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;AAClB;EACA,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;EAClD,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;EAC5C,EAAE;AACF;EACA,CAAC,QAAQ,EAAE,YAAY;EACvB,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACvC;EACA;EACA,EAAE,IAAI,SAAS,CAAC,QAAQ,IAAI,CAAC,EAAE;EAC/B,GAAG,SAAS,CAAC,QAAQ,GAAG,GAAG,CAAC;EAC5B,GAAG;AACH;EACA,EAAE,EAAE,CAAC,SAAS,EAAE;EAChB,GAAG,KAAK,EAAE,IAAI,CAAC,QAAQ;EACvB,GAAG,IAAI,EAAE,IAAI,CAAC,OAAO;EACrB,GAAG,SAAS,EAAE,IAAI,CAAC,YAAY;EAC/B,GAAG,EAAE,IAAI,CAAC,CAAC;AACX;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;EACf,GAAG,KAAK,EAAE,IAAI,CAAC,SAAS;EACxB,GAAG,IAAI,EAAE,IAAI,CAAC,YAAY;EAC1B,GAAG,EAAE,IAAI,CAAC,CAAC;EACX,EAAE;AACF;EACA,CAAC,WAAW,EAAE,YAAY;EAC1B,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AACtB;EACA,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;EAC5B,GAAG,KAAK,EAAE,IAAI,CAAC,QAAQ;EACvB,GAAG,IAAI,EAAE,IAAI,CAAC,OAAO;EACrB,GAAG,SAAS,EAAE,IAAI,CAAC,YAAY;EAC/B,GAAG,EAAE,IAAI,CAAC,CAAC;AACX;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;EAChB,GAAG,KAAK,EAAE,IAAI,CAAC,SAAS;EACxB,GAAG,IAAI,EAAE,IAAI,CAAC,YAAY;EAC1B,GAAG,EAAE,IAAI,CAAC,CAAC;EACX,EAAE;AACF;EACA,CAAC,YAAY,EAAE,YAAY;EAC3B,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE;AAChC;EACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI;EAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,eAAe;EACtC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS;EAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC;AACjD;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AAC/B;EACA,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;EAC7B,EAAE;AACF;EACA,CAAC,QAAQ,EAAE,YAAY;EACvB,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;EACvB,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;EAC1B,EAAE;AACF;EACA,CAAC,OAAO,EAAE,YAAY;EACtB,EAAE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;EACxB,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EACzB,EAAE;AACF;EACA,CAAC,YAAY,EAAE,UAAU,QAAQ,EAAE;EACnC,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE;EAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ;EAC3B,MAAM,CAAC,EAAE,GAAG,CAAC;AACb;EACA,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;EACrD,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;EAC5C,GAAG;EACH,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;EACtD,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;EACxC,GAAG;EACH,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;EACrD,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;EACvC,GAAG;EACH,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;EACnD,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;EAC1C,GAAG;EACH,EAAE;AACF;EACA,CAAC,aAAa,EAAE,UAAU,SAAS,EAAE;EACrC,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,EAAE;EAChC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ;EAC3B,MAAM,CAAC,EAAE,GAAG,CAAC;AACb;EACA,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;EACvD,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;EACrC,GAAG;EACH,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;EACxD,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;EACvC,GAAG;EACH,EAAE;AACF;EACA,CAAC,SAAS,EAAE,YAAY;EACxB,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;EACjD,EAAE;AACF;EACA,CAAC,YAAY,EAAE,YAAY;EAC3B,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;EAClD,EAAE;AACF;EACA,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE;EAC1B,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE;AACrD;EACA,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO;EACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI;EACrB,MAAM,MAAM,CAAC;AACb;EACA,EAAE,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE;EAC5B,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE;EACnD,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;EAChC,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE;EACpB,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;EAC5C,KAAK;AACL;EACA,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE;EAC/B,KAAK,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;EACvE,KAAK;AACL;EACA,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE;EACnC,KAAK,IAAI,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EAC7F,KAAK,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EAC1B,KAAK,MAAM;EACX,KAAK,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;EACvB,KAAK;EACL,IAAI;EACJ,GAAG,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE;EACpC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3E;EACA,GAAG,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE;EAC9E,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;AACpB;EACA,GAAG,MAAM;EACT,GAAG,OAAO;EACV,GAAG;AACH;EACA,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;EACV,EAAE;EACF,CAAC,CAAC,CAAC;AACH;EACA;EACA;EACA;EACA;EACA,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC;;ECjLnD;EACA;EACA;AACA;EACA;EACA;EACA,GAAG,CAAC,YAAY,CAAC;EACjB;EACA;EACA;EACA;EACA,CAAC,eAAe,EAAE,IAAI;AACtB;EACA;EACA;EACA;EACA,CAAC,iBAAiB,EAAE,EAAE;AACtB;EACA;EACA;EACA;EACA;EACA,CAAC,mBAAmB,EAAE,EAAE;EACxB,CAAC,CAAC,CAAC;AACH;EACO,IAAI,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;EAC5C,CAAC,QAAQ,EAAE,YAAY;EACvB,EAAEJ,EAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;AACxE;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;EAClB,EAAE;AACF;EACA,CAAC,WAAW,EAAE,YAAY;EAC1B,EAAEC,GAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;EACzE,EAAE;AACF;EACA,CAAC,cAAc,EAAE,UAAU,CAAC,EAAE;EAC9B,EAAE,IAAI,KAAK,GAAGoD,aAAsB,CAAC,CAAC,CAAC,CAAC;AACxC;EACA,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;AACrD;EACA,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;EACvB,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;AAC/D;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;EACxB,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;EACjC,GAAG;AACH;EACA,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;AACrE;EACA,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EAC5B,EAAE,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC9C,IAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AACrE;EACA,EAAEiB,IAAa,CAAC,CAAC,CAAC,CAAC;EACnB,EAAE;AACF;EACA,CAAC,YAAY,EAAE,YAAY;EAC3B,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI;EACrB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE;EAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;AAC7C;EACA,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;AACd;EACA;EACA,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,GAAG,CAAC,CAAC;EACpE,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG;EACrE,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE;EAClD,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AACzE;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;EAClB,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACzB;EACA,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE;AACzB;EACA,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,QAAQ,EAAE;EAChD,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;EAC7B,GAAG,MAAM;EACT,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;EACvD,GAAG;EACH,EAAE;EACF,CAAC,CAAC,CAAC;AACH;EACA;EACA;EACA;EACA,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,iBAAiB,EAAE,eAAe,CAAC;;ECnFjE;EACA;EACA;EACA;AACA;EACA,IAAI,YAAY,GAAG,GAAG,CAAC;AACvB;EACA;EACA;EACA,GAAG,CAAC,YAAY,CAAC;EACjB;EACA;EACA;EACA,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM;AACjE;EACA;EACA;EACA;EACA,CAAC,YAAY,EAAE,EAAE;EACjB,CAAC,CAAC,CAAC;AACH;EACO,IAAI,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;EACpC,CAAC,QAAQ,EAAE,YAAY;EACvB,EAAExB,EAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EACtE,EAAE;AACF;EACA,CAAC,WAAW,EAAE,YAAY;EAC1B,EAAEC,GAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EACvE,EAAE;AACF;EACA,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;EACvB,EAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;EAClC,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE;AACzC;EACA,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;EAC3B,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AAC1E;EACA,EAAE,IAAI,CAAC,YAAY,GAAG,UAAU,CAACM,IAAS,CAAC,YAAY;EACvD,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;EAClB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE;AACvC;EACA;EACA,GAAGP,EAAW,CAAC,QAAQ,EAAE,UAAU,EAAEH,cAAuB,CAAC,CAAC;EAC9D,GAAGG,EAAW,CAAC,QAAQ,EAAE,sBAAsB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;EAC3E,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;EAC7C,GAAG,EAAE,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;AAC1B;EACA,EAAEA,EAAW,CAAC,QAAQ,EAAE,kCAAkC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EAChF,EAAEA,EAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EACzD,EAAE;AACF;EACA,CAAC,mBAAmB,EAAE,SAAS,kBAAkB,GAAG;EACpD,EAAEC,GAAY,CAAC,QAAQ,EAAE,UAAU,EAAEJ,cAAuB,CAAC,CAAC;EAC9D,EAAEI,GAAY,CAAC,QAAQ,EAAE,sBAAsB,EAAE,kBAAkB,CAAC,CAAC;EACrE,EAAE;AACF;EACA,CAAC,OAAO,EAAE,YAAY;EACtB,EAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;EAClC,EAAEA,GAAY,CAAC,QAAQ,EAAE,kCAAkC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EACjF,EAAEA,GAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EAC1D,EAAE;AACF;EACA,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;EACvB,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;EAC3B,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;EACzD,EAAE;AACF;EACA,CAAC,WAAW,EAAE,YAAY;EAC1B,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;EACnF,EAAE;AACF;EACA,CAAC,cAAc,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE;EACpC,EAAE,IAAI,cAAc,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE;EAC5C,GAAG,OAAO,EAAE,IAAI;EAChB,GAAG,UAAU,EAAE,IAAI;EACnB,GAAG,IAAI,EAAE,MAAM;EACf;EACA,GAAG,OAAO,EAAE,CAAC,CAAC,OAAO;EACrB,GAAG,OAAO,EAAE,CAAC,CAAC,OAAO;EACrB,GAAG,OAAO,EAAE,CAAC,CAAC,OAAO;EACrB,GAAG,OAAO,EAAE,CAAC,CAAC,OAAO;EACrB;EACA;EACA,GAAG,CAAC,CAAC;AACL;EACA,EAAE,cAAc,CAAC,UAAU,GAAG,IAAI,CAAC;AACnC;EACA,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;EACzC,EAAE;EACF,CAAC,CAAC,CAAC;AACH;EACA;EACA;EACA;EACA,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC;;EC9FjD;EACA;EACA;AACA;EACA;EACA;EACA,GAAG,CAAC,YAAY,CAAC;EACjB;EACA;EACA;EACA;EACA;EACA;EACA,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK;AACzB;EACA;EACA;EACA;EACA,CAAC,kBAAkB,EAAE,IAAI;EACzB,CAAC,CAAC,CAAC;AACH;EACO,IAAI,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;EACtC,CAAC,QAAQ,EAAE,YAAY;EACvB,EAAES,QAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;EAC/D,EAAEV,EAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;EAC5E,EAAE;AACF;EACA,CAAC,WAAW,EAAE,YAAY;EAC1B,EAAEkB,WAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;EAClE,EAAEjB,GAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;EAC7E,EAAE;AACF;EACA,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE;EAC7B,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;EACtB,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE;AAC9F;EACA,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;EACvD,MAAM,EAAE,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD;EACA,EAAE,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;EACjD,EAAE,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;EACpE,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE;EAC1C,GAAG,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,sBAAsB,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;EAChF,GAAG;AACH;EACA,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;EACtC,EAAE,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;AAClC;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;EACtB,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB;EACA,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;AACd;EACA,EAAED,EAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;EAC9D,EAAEA,EAAW,CAAC,QAAQ,EAAE,sBAAsB,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AACxE;EACA,EAAEH,cAAuB,CAAC,CAAC,CAAC,CAAC;EAC7B,EAAE;AACF;EACA,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE;EAC5B,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE;AACzE;EACA,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI;EACrB,MAAM,EAAE,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;EACvD,MAAM,EAAE,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;EACvD,MAAM,KAAK,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;AAClD;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACxD;EACA,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB;EACrC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,UAAU,EAAE,IAAI,KAAK,GAAG,CAAC;EAC9C,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,UAAU,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE;EAClD,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EAC3C,GAAG;AACH;EACA,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE;EAC1C,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;EACpC,GAAG,IAAI,KAAK,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE;EAC/B,GAAG,MAAM;EACT;EACA,GAAG,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;EACrE,GAAG,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE;EACjE,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;EAC7G,GAAG;AACH;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;EACpB,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;EAC/B,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;EACtB,GAAG;AACH;EACA,EAAES,eAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC1C;EACA,EAAE,IAAI,MAAM,GAAGC,IAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;EAC3G,EAAE,IAAI,CAAC,YAAY,GAAGH,gBAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAChE;EACA,EAAEP,cAAuB,CAAC,CAAC,CAAC,CAAC;EAC7B,EAAE;AACF;EACA,CAAC,WAAW,EAAE,YAAY;EAC1B,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;EACtC,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;EACzB,GAAG,OAAO;EACV,GAAG;AACH;EACA,EAAE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;EACxB,EAAES,eAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC1C;EACA,EAAEL,GAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;EAC/D,EAAEA,GAAY,CAAC,QAAQ,EAAE,sBAAsB,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AACzE;EACA;EACA,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;EACvC,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;EAC5G,GAAG,MAAM;EACT,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;EACxE,GAAG;EACH,EAAE;EACF,CAAC,CAAC,CAAC;AACH;EACA;EACA;EACA;EACA,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,WAAW,EAAE,SAAS,CAAC;;EC/HrD,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;EAEtB,GAAG,CAAC,eAAe,GAAG,eAAe,CAAC;EAEtC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;EAEhB,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;EAExB,GAAG,CAAC,eAAe,GAAG,eAAe,CAAC;EAEtC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;EAEtB,GAAG,CAAC,SAAS,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
\ No newline at end of file
diff --git a/public old/scripts/dist/leaflet.css b/public old/scripts/dist/leaflet.css
deleted file mode 100644
index 2961b76..0000000
--- a/public old/scripts/dist/leaflet.css
+++ /dev/null
@@ -1,661 +0,0 @@
-/* required styles */
-
-.leaflet-pane,
-.leaflet-tile,
-.leaflet-marker-icon,
-.leaflet-marker-shadow,
-.leaflet-tile-container,
-.leaflet-pane > svg,
-.leaflet-pane > canvas,
-.leaflet-zoom-box,
-.leaflet-image-layer,
-.leaflet-layer {
- position: absolute;
- left: 0;
- top: 0;
- }
-.leaflet-container {
- overflow: hidden;
- }
-.leaflet-tile,
-.leaflet-marker-icon,
-.leaflet-marker-shadow {
- -webkit-user-select: none;
- -moz-user-select: none;
- user-select: none;
- -webkit-user-drag: none;
- }
-/* Prevents IE11 from highlighting tiles in blue */
-.leaflet-tile::selection {
- background: transparent;
-}
-/* Safari renders non-retina tile on retina better with this, but Chrome is worse */
-.leaflet-safari .leaflet-tile {
- image-rendering: -webkit-optimize-contrast;
- }
-/* hack that prevents hw layers "stretching" when loading new tiles */
-.leaflet-safari .leaflet-tile-container {
- width: 1600px;
- height: 1600px;
- -webkit-transform-origin: 0 0;
- }
-.leaflet-marker-icon,
-.leaflet-marker-shadow {
- display: block;
- }
-/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
-/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
-.leaflet-container .leaflet-overlay-pane svg {
- max-width: none !important;
- max-height: none !important;
- }
-.leaflet-container .leaflet-marker-pane img,
-.leaflet-container .leaflet-shadow-pane img,
-.leaflet-container .leaflet-tile-pane img,
-.leaflet-container img.leaflet-image-layer,
-.leaflet-container .leaflet-tile {
- max-width: none !important;
- max-height: none !important;
- width: auto;
- padding: 0;
- }
-
-.leaflet-container img.leaflet-tile {
- /* See: https://bugs.chromium.org/p/chromium/issues/detail?id=600120 */
- mix-blend-mode: plus-lighter;
-}
-
-.leaflet-container.leaflet-touch-zoom {
- -ms-touch-action: pan-x pan-y;
- touch-action: pan-x pan-y;
- }
-.leaflet-container.leaflet-touch-drag {
- -ms-touch-action: pinch-zoom;
- /* Fallback for FF which doesn't support pinch-zoom */
- touch-action: none;
- touch-action: pinch-zoom;
-}
-.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
- -ms-touch-action: none;
- touch-action: none;
-}
-.leaflet-container {
- -webkit-tap-highlight-color: transparent;
-}
-.leaflet-container a {
- -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
-}
-.leaflet-tile {
- filter: inherit;
- visibility: hidden;
- }
-.leaflet-tile-loaded {
- visibility: inherit;
- }
-.leaflet-zoom-box {
- width: 0;
- height: 0;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- z-index: 800;
- }
-/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
-.leaflet-overlay-pane svg {
- -moz-user-select: none;
- }
-
-.leaflet-pane { z-index: 400; }
-
-.leaflet-tile-pane { z-index: 200; }
-.leaflet-overlay-pane { z-index: 400; }
-.leaflet-shadow-pane { z-index: 500; }
-.leaflet-marker-pane { z-index: 600; }
-.leaflet-tooltip-pane { z-index: 650; }
-.leaflet-popup-pane { z-index: 700; }
-
-.leaflet-map-pane canvas { z-index: 100; }
-.leaflet-map-pane svg { z-index: 200; }
-
-.leaflet-vml-shape {
- width: 1px;
- height: 1px;
- }
-.lvml {
- behavior: url(#default#VML);
- display: inline-block;
- position: absolute;
- }
-
-
-/* control positioning */
-
-.leaflet-control {
- position: relative;
- z-index: 800;
- pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
- pointer-events: auto;
- }
-.leaflet-top,
-.leaflet-bottom {
- position: absolute;
- z-index: 1000;
- pointer-events: none;
- }
-.leaflet-top {
- top: 0;
- }
-.leaflet-right {
- right: 0;
- }
-.leaflet-bottom {
- bottom: 0;
- }
-.leaflet-left {
- left: 0;
- }
-.leaflet-control {
- float: left;
- clear: both;
- }
-.leaflet-right .leaflet-control {
- float: right;
- }
-.leaflet-top .leaflet-control {
- margin-top: 10px;
- }
-.leaflet-bottom .leaflet-control {
- margin-bottom: 10px;
- }
-.leaflet-left .leaflet-control {
- margin-left: 10px;
- }
-.leaflet-right .leaflet-control {
- margin-right: 10px;
- }
-
-
-/* zoom and fade animations */
-
-.leaflet-fade-anim .leaflet-popup {
- opacity: 0;
- -webkit-transition: opacity 0.2s linear;
- -moz-transition: opacity 0.2s linear;
- transition: opacity 0.2s linear;
- }
-.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
- opacity: 1;
- }
-.leaflet-zoom-animated {
- -webkit-transform-origin: 0 0;
- -ms-transform-origin: 0 0;
- transform-origin: 0 0;
- }
-svg.leaflet-zoom-animated {
- will-change: transform;
-}
-
-.leaflet-zoom-anim .leaflet-zoom-animated {
- -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
- -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
- transition: transform 0.25s cubic-bezier(0,0,0.25,1);
- }
-.leaflet-zoom-anim .leaflet-tile,
-.leaflet-pan-anim .leaflet-tile {
- -webkit-transition: none;
- -moz-transition: none;
- transition: none;
- }
-
-.leaflet-zoom-anim .leaflet-zoom-hide {
- visibility: hidden;
- }
-
-
-/* cursors */
-
-.leaflet-interactive {
- cursor: pointer;
- }
-.leaflet-grab {
- cursor: -webkit-grab;
- cursor: -moz-grab;
- cursor: grab;
- }
-.leaflet-crosshair,
-.leaflet-crosshair .leaflet-interactive {
- cursor: crosshair;
- }
-.leaflet-popup-pane,
-.leaflet-control {
- cursor: auto;
- }
-.leaflet-dragging .leaflet-grab,
-.leaflet-dragging .leaflet-grab .leaflet-interactive,
-.leaflet-dragging .leaflet-marker-draggable {
- cursor: move;
- cursor: -webkit-grabbing;
- cursor: -moz-grabbing;
- cursor: grabbing;
- }
-
-/* marker & overlays interactivity */
-.leaflet-marker-icon,
-.leaflet-marker-shadow,
-.leaflet-image-layer,
-.leaflet-pane > svg path,
-.leaflet-tile-container {
- pointer-events: none;
- }
-
-.leaflet-marker-icon.leaflet-interactive,
-.leaflet-image-layer.leaflet-interactive,
-.leaflet-pane > svg path.leaflet-interactive,
-svg.leaflet-image-layer.leaflet-interactive path {
- pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
- pointer-events: auto;
- }
-
-/* visual tweaks */
-
-.leaflet-container {
- background: #ddd;
- outline-offset: 1px;
- }
-.leaflet-container a {
- color: #0078A8;
- }
-.leaflet-zoom-box {
- border: 2px dotted #38f;
- background: rgba(255,255,255,0.5);
- }
-
-
-/* general typography */
-.leaflet-container {
- font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
- font-size: 12px;
- font-size: 0.75rem;
- line-height: 1.5;
- }
-
-
-/* general toolbar styles */
-
-.leaflet-bar {
- box-shadow: 0 1px 5px rgba(0,0,0,0.65);
- border-radius: 4px;
- }
-.leaflet-bar a {
- background-color: #fff;
- border-bottom: 1px solid #ccc;
- width: 26px;
- height: 26px;
- line-height: 26px;
- display: block;
- text-align: center;
- text-decoration: none;
- color: black;
- }
-.leaflet-bar a,
-.leaflet-control-layers-toggle {
- background-position: 50% 50%;
- background-repeat: no-repeat;
- display: block;
- }
-.leaflet-bar a:hover,
-.leaflet-bar a:focus {
- background-color: #f4f4f4;
- }
-.leaflet-bar a:first-child {
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
- }
-.leaflet-bar a:last-child {
- border-bottom-left-radius: 4px;
- border-bottom-right-radius: 4px;
- border-bottom: none;
- }
-.leaflet-bar a.leaflet-disabled {
- cursor: default;
- background-color: #f4f4f4;
- color: #bbb;
- }
-
-.leaflet-touch .leaflet-bar a {
- width: 30px;
- height: 30px;
- line-height: 30px;
- }
-.leaflet-touch .leaflet-bar a:first-child {
- border-top-left-radius: 2px;
- border-top-right-radius: 2px;
- }
-.leaflet-touch .leaflet-bar a:last-child {
- border-bottom-left-radius: 2px;
- border-bottom-right-radius: 2px;
- }
-
-/* zoom control */
-
-.leaflet-control-zoom-in,
-.leaflet-control-zoom-out {
- font: bold 18px 'Lucida Console', Monaco, monospace;
- text-indent: 1px;
- }
-
-.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {
- font-size: 22px;
- }
-
-
-/* layers control */
-
-.leaflet-control-layers {
- box-shadow: 0 1px 5px rgba(0,0,0,0.4);
- background: #fff;
- border-radius: 5px;
- }
-.leaflet-control-layers-toggle {
- background-image: url(images/layers.png);
- width: 36px;
- height: 36px;
- }
-.leaflet-retina .leaflet-control-layers-toggle {
- background-image: url(images/layers-2x.png);
- background-size: 26px 26px;
- }
-.leaflet-touch .leaflet-control-layers-toggle {
- width: 44px;
- height: 44px;
- }
-.leaflet-control-layers .leaflet-control-layers-list,
-.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
- display: none;
- }
-.leaflet-control-layers-expanded .leaflet-control-layers-list {
- display: block;
- position: relative;
- }
-.leaflet-control-layers-expanded {
- padding: 6px 10px 6px 6px;
- color: #333;
- background: #fff;
- }
-.leaflet-control-layers-scrollbar {
- overflow-y: scroll;
- overflow-x: hidden;
- padding-right: 5px;
- }
-.leaflet-control-layers-selector {
- margin-top: 2px;
- position: relative;
- top: 1px;
- }
-.leaflet-control-layers label {
- display: block;
- font-size: 13px;
- font-size: 1.08333em;
- }
-.leaflet-control-layers-separator {
- height: 0;
- border-top: 1px solid #ddd;
- margin: 5px -10px 5px -6px;
- }
-
-/* Default icon URLs */
-.leaflet-default-icon-path { /* used only in path-guessing heuristic, see L.Icon.Default */
- background-image: url(images/marker-icon.png);
- }
-
-
-/* attribution and scale controls */
-
-.leaflet-container .leaflet-control-attribution {
- background: #fff;
- background: rgba(255, 255, 255, 0.8);
- margin: 0;
- }
-.leaflet-control-attribution,
-.leaflet-control-scale-line {
- padding: 0 5px;
- color: #333;
- line-height: 1.4;
- }
-.leaflet-control-attribution a {
- text-decoration: none;
- }
-.leaflet-control-attribution a:hover,
-.leaflet-control-attribution a:focus {
- text-decoration: underline;
- }
-.leaflet-attribution-flag {
- display: inline !important;
- vertical-align: baseline !important;
- width: 1em;
- height: 0.6669em;
- }
-.leaflet-left .leaflet-control-scale {
- margin-left: 5px;
- }
-.leaflet-bottom .leaflet-control-scale {
- margin-bottom: 5px;
- }
-.leaflet-control-scale-line {
- border: 2px solid #777;
- border-top: none;
- line-height: 1.1;
- padding: 2px 5px 1px;
- white-space: nowrap;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- background: rgba(255, 255, 255, 0.8);
- text-shadow: 1px 1px #fff;
- }
-.leaflet-control-scale-line:not(:first-child) {
- border-top: 2px solid #777;
- border-bottom: none;
- margin-top: -2px;
- }
-.leaflet-control-scale-line:not(:first-child):not(:last-child) {
- border-bottom: 2px solid #777;
- }
-
-.leaflet-touch .leaflet-control-attribution,
-.leaflet-touch .leaflet-control-layers,
-.leaflet-touch .leaflet-bar {
- box-shadow: none;
- }
-.leaflet-touch .leaflet-control-layers,
-.leaflet-touch .leaflet-bar {
- border: 2px solid rgba(0,0,0,0.2);
- background-clip: padding-box;
- }
-
-
-/* popup */
-
-.leaflet-popup {
- position: absolute;
- text-align: center;
- margin-bottom: 20px;
- }
-.leaflet-popup-content-wrapper {
- padding: 1px;
- text-align: left;
- border-radius: 12px;
- }
-.leaflet-popup-content {
- margin: 13px 24px 13px 20px;
- line-height: 1.3;
- font-size: 13px;
- font-size: 1.08333em;
- min-height: 1px;
- }
-.leaflet-popup-content p {
- margin: 17px 0;
- margin: 1.3em 0;
- }
-.leaflet-popup-tip-container {
- width: 40px;
- height: 20px;
- position: absolute;
- left: 50%;
- margin-top: -1px;
- margin-left: -20px;
- overflow: hidden;
- pointer-events: none;
- }
-.leaflet-popup-tip {
- width: 17px;
- height: 17px;
- padding: 1px;
-
- margin: -10px auto 0;
- pointer-events: auto;
-
- -webkit-transform: rotate(45deg);
- -moz-transform: rotate(45deg);
- -ms-transform: rotate(45deg);
- transform: rotate(45deg);
- }
-.leaflet-popup-content-wrapper,
-.leaflet-popup-tip {
- background: white;
- color: #333;
- box-shadow: 0 3px 14px rgba(0,0,0,0.4);
- }
-.leaflet-container a.leaflet-popup-close-button {
- position: absolute;
- top: 0;
- right: 0;
- border: none;
- text-align: center;
- width: 24px;
- height: 24px;
- font: 16px/24px Tahoma, Verdana, sans-serif;
- color: #757575;
- text-decoration: none;
- background: transparent;
- }
-.leaflet-container a.leaflet-popup-close-button:hover,
-.leaflet-container a.leaflet-popup-close-button:focus {
- color: #585858;
- }
-.leaflet-popup-scrolled {
- overflow: auto;
- }
-
-.leaflet-oldie .leaflet-popup-content-wrapper {
- -ms-zoom: 1;
- }
-.leaflet-oldie .leaflet-popup-tip {
- width: 24px;
- margin: 0 auto;
-
- -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
- filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
- }
-
-.leaflet-oldie .leaflet-control-zoom,
-.leaflet-oldie .leaflet-control-layers,
-.leaflet-oldie .leaflet-popup-content-wrapper,
-.leaflet-oldie .leaflet-popup-tip {
- border: 1px solid #999;
- }
-
-
-/* div icon */
-
-.leaflet-div-icon {
- background: #fff;
- border: 1px solid #666;
- }
-
-
-/* Tooltip */
-/* Base styles for the element that has a tooltip */
-.leaflet-tooltip {
- position: absolute;
- padding: 6px;
- background-color: #fff;
- border: 1px solid #fff;
- border-radius: 3px;
- color: #222;
- white-space: nowrap;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- pointer-events: none;
- box-shadow: 0 1px 3px rgba(0,0,0,0.4);
- }
-.leaflet-tooltip.leaflet-interactive {
- cursor: pointer;
- pointer-events: auto;
- }
-.leaflet-tooltip-top:before,
-.leaflet-tooltip-bottom:before,
-.leaflet-tooltip-left:before,
-.leaflet-tooltip-right:before {
- position: absolute;
- pointer-events: none;
- border: 6px solid transparent;
- background: transparent;
- content: "";
- }
-
-/* Directions */
-
-.leaflet-tooltip-bottom {
- margin-top: 6px;
-}
-.leaflet-tooltip-top {
- margin-top: -6px;
-}
-.leaflet-tooltip-bottom:before,
-.leaflet-tooltip-top:before {
- left: 50%;
- margin-left: -6px;
- }
-.leaflet-tooltip-top:before {
- bottom: 0;
- margin-bottom: -12px;
- border-top-color: #fff;
- }
-.leaflet-tooltip-bottom:before {
- top: 0;
- margin-top: -12px;
- margin-left: -6px;
- border-bottom-color: #fff;
- }
-.leaflet-tooltip-left {
- margin-left: -6px;
-}
-.leaflet-tooltip-right {
- margin-left: 6px;
-}
-.leaflet-tooltip-left:before,
-.leaflet-tooltip-right:before {
- top: 50%;
- margin-top: -6px;
- }
-.leaflet-tooltip-left:before {
- right: 0;
- margin-right: -12px;
- border-left-color: #fff;
- }
-.leaflet-tooltip-right:before {
- left: 0;
- margin-left: -12px;
- border-right-color: #fff;
- }
-
-/* Printing */
-
-@media print {
- /* Prevent printers from removing background-images of controls. */
- .leaflet-control {
- -webkit-print-color-adjust: exact;
- print-color-adjust: exact;
- }
- }
diff --git a/public old/scripts/dist/leaflet.js b/public old/scripts/dist/leaflet.js
deleted file mode 100644
index a3bf693..0000000
--- a/public old/scripts/dist/leaflet.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/* @preserve
- * Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com
- * (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade
- */
-!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).leaflet={})}(this,function(t){"use strict";function l(t){for(var e,i,n=1,o=arguments.length;n=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=_(t);var e=this.min,i=this.max,n=t.min,t=t.max,o=t.x>=e.x&&n.x<=i.x,t=t.y>=e.y&&n.y<=i.y;return o&&t},overlaps:function(t){t=_(t);var e=this.min,i=this.max,n=t.min,t=t.max,o=t.x>e.x&&n.xe.y&&n.y=n.lat&&i.lat<=o.lat&&e.lng>=n.lng&&i.lng<=o.lng},intersects:function(t){t=g(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),t=t.getNorthEast(),o=t.lat>=e.lat&&n.lat<=i.lat,t=t.lng>=e.lng&&n.lng<=i.lng;return o&&t},overlaps:function(t){t=g(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),t=t.getNorthEast(),o=t.lat>e.lat&&n.late.lng&&n.lng ","http://www.w3.org/2000/svg"===(Wt.firstChild&&Wt.firstChild.namespaceURI));function y(t){return 0<=navigator.userAgent.toLowerCase().indexOf(t)}var b={ie:pt,ielt9:mt,edge:n,webkit:ft,android:gt,android23:vt,androidStock:yt,opera:xt,chrome:wt,gecko:bt,safari:Pt,phantom:Lt,opera12:o,win:Tt,ie3d:Mt,webkit3d:zt,gecko3d:_t,any3d:Ct,mobile:Zt,mobileWebkit:St,mobileWebkit3d:Et,msPointer:kt,pointer:Ot,touch:Bt,touchNative:At,mobileOpera:It,mobileGecko:Rt,retina:Nt,passiveEvents:Dt,canvas:jt,svg:Ht,vml:!Ht&&function(){try{var t=document.createElement("div"),e=(t.innerHTML=' ',t.firstChild);return e.style.behavior="url(#default#VML)",e&&"object"==typeof e.adj}catch(t){return!1}}(),inlineSvg:Wt,mac:0===navigator.platform.indexOf("Mac"),linux:0===navigator.platform.indexOf("Linux")},Ft=b.msPointer?"MSPointerDown":"pointerdown",Ut=b.msPointer?"MSPointerMove":"pointermove",Vt=b.msPointer?"MSPointerUp":"pointerup",qt=b.msPointer?"MSPointerCancel":"pointercancel",Gt={touchstart:Ft,touchmove:Ut,touchend:Vt,touchcancel:qt},Kt={touchstart:function(t,e){e.MSPOINTER_TYPE_TOUCH&&e.pointerType===e.MSPOINTER_TYPE_TOUCH&&O(e);ee(t,e)},touchmove:ee,touchend:ee,touchcancel:ee},Yt={},Xt=!1;function Jt(t,e,i){return"touchstart"!==e||Xt||(document.addEventListener(Ft,$t,!0),document.addEventListener(Ut,Qt,!0),document.addEventListener(Vt,te,!0),document.addEventListener(qt,te,!0),Xt=!0),Kt[e]?(i=Kt[e].bind(this,i),t.addEventListener(Gt[e],i,!1),i):(console.warn("wrong event specified:",e),u)}function $t(t){Yt[t.pointerId]=t}function Qt(t){Yt[t.pointerId]&&(Yt[t.pointerId]=t)}function te(t){delete Yt[t.pointerId]}function ee(t,e){if(e.pointerType!==(e.MSPOINTER_TYPE_MOUSE||"mouse")){for(var i in e.touches=[],Yt)e.touches.push(Yt[i]);e.changedTouches=[e],t(e)}}var ie=200;function ne(t,i){t.addEventListener("dblclick",i);var n,o=0;function e(t){var e;1!==t.detail?n=t.detail:"mouse"===t.pointerType||t.sourceCapabilities&&!t.sourceCapabilities.firesTouchEvents||((e=Ne(t)).some(function(t){return t instanceof HTMLLabelElement&&t.attributes.for})&&!e.some(function(t){return t instanceof HTMLInputElement||t instanceof HTMLSelectElement})||((e=Date.now())-o<=ie?2===++n&&i(function(t){var e,i,n={};for(i in t)e=t[i],n[i]=e&&e.bind?e.bind(t):e;return(t=n).type="dblclick",n.detail=2,n.isTrusted=!1,n._simulated=!0,n}(t)):n=1,o=e))}return t.addEventListener("click",e),{dblclick:i,simDblclick:e}}var oe,se,re,ae,he,le,ue=we(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),ce=we(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),de="webkitTransition"===ce||"OTransition"===ce?ce+"End":"transitionend";function _e(t){return"string"==typeof t?document.getElementById(t):t}function pe(t,e){var i=t.style[e]||t.currentStyle&&t.currentStyle[e];return"auto"===(i=i&&"auto"!==i||!document.defaultView?i:(t=document.defaultView.getComputedStyle(t,null))?t[e]:null)?null:i}function P(t,e,i){t=document.createElement(t);return t.className=e||"",i&&i.appendChild(t),t}function T(t){var e=t.parentNode;e&&e.removeChild(t)}function me(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function fe(t){var e=t.parentNode;e&&e.lastChild!==t&&e.appendChild(t)}function ge(t){var e=t.parentNode;e&&e.firstChild!==t&&e.insertBefore(t,e.firstChild)}function ve(t,e){return void 0!==t.classList?t.classList.contains(e):0<(t=xe(t)).length&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(t)}function M(t,e){var i;if(void 0!==t.classList)for(var n=F(e),o=0,s=n.length;othis.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,e){this._enforcingBounds=!0;var i=this.getCenter(),t=this._limitCenter(i,this._zoom,g(t));return i.equals(t)||this.panTo(t,e),this._enforcingBounds=!1,this},panInside:function(t,e){var i=m((e=e||{}).paddingTopLeft||e.padding||[0,0]),n=m(e.paddingBottomRight||e.padding||[0,0]),o=this.project(this.getCenter()),t=this.project(t),s=this.getPixelBounds(),i=_([s.min.add(i),s.max.subtract(n)]),s=i.getSize();return i.contains(t)||(this._enforcingBounds=!0,n=t.subtract(i.getCenter()),i=i.extend(t).getSize().subtract(s),o.x+=n.x<0?-i.x:i.x,o.y+=n.y<0?-i.y:i.y,this.panTo(this.unproject(o),e),this._enforcingBounds=!1),this},invalidateSize:function(t){if(!this._loaded)return this;t=l({animate:!1,pan:!0},!0===t?{animate:!0}:t);var e=this.getSize(),i=(this._sizeChanged=!0,this._lastCenter=null,this.getSize()),n=e.divideBy(2).round(),o=i.divideBy(2).round(),n=n.subtract(o);return n.x||n.y?(t.animate&&t.pan?this.panBy(n):(t.pan&&this._rawPanBy(n),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(a(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i})):this},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){var e,i;return t=this._locateOptions=l({timeout:1e4,watch:!1},t),"geolocation"in navigator?(e=a(this._handleGeolocationResponse,this),i=a(this._handleGeolocationError,this),t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t)):this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var e;this._container._leaflet_id&&(e=t.code,t=t.message||(1===e?"permission denied":2===e?"position unavailable":"timeout"),this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+t+"."}))},_handleGeolocationResponse:function(t){if(this._container._leaflet_id){var e,i,n=new v(t.coords.latitude,t.coords.longitude),o=n.toBounds(2*t.coords.accuracy),s=this._locateOptions,r=(s.setView&&(e=this.getBoundsZoom(o),this.setView(n,s.maxZoom?Math.min(e,s.maxZoom):e)),{latlng:n,bounds:o,timestamp:t.timestamp});for(i in t.coords)"number"==typeof t.coords[i]&&(r[i]=t.coords[i]);this.fire("locationfound",r)}},addHandler:function(t,e){return e&&(e=this[t]=new e(this),this._handlers.push(e),this.options[t]&&e.enable()),this},remove:function(){if(this._initEvents(!0),this.options.maxBounds&&this.off("moveend",this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch(t){this._container._leaflet_id=void 0,this._containerId=void 0}for(var t in void 0!==this._locationWatchId&&this.stopLocate(),this._stop(),T(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(r(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire("unload"),this._layers)this._layers[t].remove();for(t in this._panes)T(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,e){e=P("div","leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),e||this._mapPane);return t&&(this._panes[t]=e),e},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter.clone():this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds();return new s(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return void 0===this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return void 0===this.options.maxZoom?void 0===this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=g(t),i=m(i||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),s=this.getMaxZoom(),r=t.getNorthWest(),t=t.getSouthEast(),i=this.getSize().subtract(i),t=_(this.project(t,n),this.project(r,n)).getSize(),r=b.any3d?this.options.zoomSnap:1,a=i.x/t.x,i=i.y/t.y,t=e?Math.max(a,i):Math.min(a,i),n=this.getScaleZoom(t,n);return r&&(n=Math.round(n/(r/100))*(r/100),n=e?Math.ceil(n/r)*r:Math.floor(n/r)*r),Math.max(o,Math.min(s,n))},getSize:function(){return this._size&&!this._sizeChanged||(this._size=new p(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,e){t=this._getTopLeftPoint(t,e);return new f(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(void 0===t?this.getZoom():t)},getPane:function(t){return"string"==typeof t?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,e){var i=this.options.crs;return e=void 0===e?this._zoom:e,i.scale(t)/i.scale(e)},getScaleZoom:function(t,e){var i=this.options.crs,t=(e=void 0===e?this._zoom:e,i.zoom(t*i.scale(e)));return isNaN(t)?1/0:t},project:function(t,e){return e=void 0===e?this._zoom:e,this.options.crs.latLngToPoint(w(t),e)},unproject:function(t,e){return e=void 0===e?this._zoom:e,this.options.crs.pointToLatLng(m(t),e)},layerPointToLatLng:function(t){t=m(t).add(this.getPixelOrigin());return this.unproject(t)},latLngToLayerPoint:function(t){return this.project(w(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(w(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(g(t))},distance:function(t,e){return this.options.crs.distance(w(t),w(e))},containerPointToLayerPoint:function(t){return m(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return m(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){t=this.containerPointToLayerPoint(m(t));return this.layerPointToLatLng(t)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(w(t)))},mouseEventToContainerPoint:function(t){return De(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){t=this._container=_e(t);if(!t)throw new Error("Map container not found.");if(t._leaflet_id)throw new Error("Map container is already initialized.");S(t,"scroll",this._onScroll,this),this._containerId=h(t)},_initLayout:function(){var t=this._container,e=(this._fadeAnimated=this.options.fadeAnimation&&b.any3d,M(t,"leaflet-container"+(b.touch?" leaflet-touch":"")+(b.retina?" leaflet-retina":"")+(b.ielt9?" leaflet-oldie":"")+(b.safari?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":"")),pe(t,"position"));"absolute"!==e&&"relative"!==e&&"fixed"!==e&&"sticky"!==e&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),Z(this._mapPane,new p(0,0)),this.createPane("tilePane"),this.createPane("overlayPane"),this.createPane("shadowPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(M(t.markerPane,"leaflet-zoom-hide"),M(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,e,i){Z(this._mapPane,new p(0,0));var n=!this._loaded,o=(this._loaded=!0,e=this._limitZoom(e),this.fire("viewprereset"),this._zoom!==e);this._moveStart(o,i)._move(t,e)._moveEnd(o),this.fire("viewreset"),n&&this.fire("load")},_moveStart:function(t,e){return t&&this.fire("zoomstart"),e||this.fire("movestart"),this},_move:function(t,e,i,n){void 0===e&&(e=this._zoom);var o=this._zoom!==e;return this._zoom=e,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),n?i&&i.pinch&&this.fire("zoom",i):((o||i&&i.pinch)&&this.fire("zoom",i),this.fire("move",i)),this},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return r(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){Z(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={};var e=t?k:S;e((this._targets[h(this._container)]=this)._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup",this._handleDOMEvent,this),this.options.trackResize&&e(window,"resize",this._onResize,this),b.any3d&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){r(this._resizeRequest),this._resizeRequest=x(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,e){for(var i,n=[],o="mouseout"===e||"mouseover"===e,s=t.target||t.srcElement,r=!1;s;){if((i=this._targets[h(s)])&&("click"===e||"preclick"===e)&&this._draggableMoved(i)){r=!0;break}if(i&&i.listens(e,!0)){if(o&&!We(s,t))break;if(n.push(i),o)break}if(s===this._container)break;s=s.parentNode}return n=n.length||r||o||!this.listens(e,!0)?n:[this]},_isClickDisabled:function(t){for(;t&&t!==this._container;){if(t._leaflet_disable_click)return!0;t=t.parentNode}},_handleDOMEvent:function(t){var e,i=t.target||t.srcElement;!this._loaded||i._leaflet_disable_events||"click"===t.type&&this._isClickDisabled(i)||("mousedown"===(e=t.type)&&Me(i),this._fireDOMEvent(t,e))},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,i){"click"===t.type&&((a=l({},t)).type="preclick",this._fireDOMEvent(a,a.type,i));var n=this._findEventTargets(t,e);if(i){for(var o=[],s=0;sthis.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),n=this._getCenterOffset(t)._divideBy(1-1/n);if(!0!==i.animate&&!this.getSize().contains(n))return!1;x(function(){this._moveStart(!0,i.noMoveStart||!1)._animateZoom(t,e,!0)},this)}return!0},_animateZoom:function(t,e,i,n){this._mapPane&&(i&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=e,M(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:e,noUpdate:n}),this._tempFireZoomEvent||(this._tempFireZoomEvent=this._zoom!==this._animateToZoom),this._move(this._animateToCenter,this._animateToZoom,void 0,!0),setTimeout(a(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&z(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom,void 0,!0),this._tempFireZoomEvent&&this.fire("zoom"),delete this._tempFireZoomEvent,this.fire("move"),this._moveEnd(!0))}});function Ue(t){return new B(t)}var B=et.extend({options:{position:"topright"},initialize:function(t){c(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),t=t._controlCorners[i];return M(e,"leaflet-control"),-1!==i.indexOf("bottom")?t.insertBefore(e,t.firstChild):t.appendChild(e),this._map.on("unload",this.remove,this),this},remove:function(){return this._map&&(T(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null),this},_refocusOnMap:function(t){this._map&&t&&0 ",e=document.createElement("div");return e.innerHTML=t,e.firstChild},_addItem:function(t){var e,i=document.createElement("label"),n=this._map.hasLayer(t.layer),n=(t.overlay?((e=document.createElement("input")).type="checkbox",e.className="leaflet-control-layers-selector",e.defaultChecked=n):e=this._createRadioElement("leaflet-base-layers_"+h(this),n),this._layerControlInputs.push(e),e.layerId=h(t.layer),S(e,"click",this._onInputClick,this),document.createElement("span")),o=(n.innerHTML=" "+t.name,document.createElement("span"));return i.appendChild(o),o.appendChild(e),o.appendChild(n),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(i),this._checkDisabledLayers(),i},_onInputClick:function(){if(!this._preventClick){var t,e,i=this._layerControlInputs,n=[],o=[];this._handlingClick=!0;for(var s=i.length-1;0<=s;s--)t=i[s],e=this._getLayer(t.layerId).layer,t.checked?n.push(e):t.checked||o.push(e);for(s=0;se.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expandSafely:function(){var t=this._section,e=(this._preventClick=!0,S(t,"click",O),this.expand(),this);setTimeout(function(){k(t,"click",O),e._preventClick=!1})}})),qe=B.extend({options:{position:"topleft",zoomInText:'+ ',zoomInTitle:"Zoom in",zoomOutText:'− ',zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=P("div",e+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,e+"-in",i,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,e+"-out",i,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,e,i,n,o){i=P("a",i,n);return i.innerHTML=t,i.href="#",i.title=e,i.setAttribute("role","button"),i.setAttribute("aria-label",e),Ie(i),S(i,"click",Re),S(i,"click",o,this),S(i,"click",this._refocusOnMap,this),i},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";z(this._zoomInButton,e),z(this._zoomOutButton,e),this._zoomInButton.setAttribute("aria-disabled","false"),this._zoomOutButton.setAttribute("aria-disabled","false"),!this._disabled&&t._zoom!==t.getMinZoom()||(M(this._zoomOutButton,e),this._zoomOutButton.setAttribute("aria-disabled","true")),!this._disabled&&t._zoom!==t.getMaxZoom()||(M(this._zoomInButton,e),this._zoomInButton.setAttribute("aria-disabled","true"))}}),Ge=(A.mergeOptions({zoomControl:!0}),A.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new qe,this.addControl(this.zoomControl))}),B.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var e="leaflet-control-scale",i=P("div",e),n=this.options;return this._addScales(n,e+"-line",i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=P("div",e,i)),t.imperial&&(this._iScale=P("div",e,i))},_update:function(){var t=this._map,e=t.getSize().y/2,t=t.distance(t.containerPointToLatLng([0,e]),t.containerPointToLatLng([this.options.maxWidth,e]));this._updateScales(t)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var e=this._getRoundNum(t);this._updateScale(this._mScale,e<1e3?e+" m":e/1e3+" km",e/t)},_updateImperial:function(t){var e,i,t=3.2808399*t;5280'+(b.inlineSvg?' ':"")+"Leaflet"},initialize:function(t){c(this,t),this._attributions={}},onAdd:function(t){for(var e in(t.attributionControl=this)._container=P("div","leaflet-control-attribution"),Ie(this._container),t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return this._update(),t.on("layeradd",this._addAttribution,this),this._container},onRemove:function(t){t.off("layeradd",this._addAttribution,this)},_addAttribution:function(t){t.layer.getAttribution&&(this.addAttribution(t.layer.getAttribution()),t.layer.once("remove",function(){this.removeAttribution(t.layer.getAttribution())},this))},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t&&(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update()),this},removeAttribution:function(t){return t&&this._attributions[t]&&(this._attributions[t]--,this._update()),this},_update:function(){if(this._map){var t,e=[];for(t in this._attributions)this._attributions[t]&&e.push(t);var i=[];this.options.prefix&&i.push(this.options.prefix),e.length&&i.push(e.join(", ")),this._container.innerHTML=i.join(' | ')}}}),n=(A.mergeOptions({attributionControl:!0}),A.addInitHook(function(){this.options.attributionControl&&(new Ke).addTo(this)}),B.Layers=Ve,B.Zoom=qe,B.Scale=Ge,B.Attribution=Ke,Ue.layers=function(t,e,i){return new Ve(t,e,i)},Ue.zoom=function(t){return new qe(t)},Ue.scale=function(t){return new Ge(t)},Ue.attribution=function(t){return new Ke(t)},et.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled||(this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled&&(this._enabled=!1,this.removeHooks()),this},enabled:function(){return!!this._enabled}})),ft=(n.addTo=function(t,e){return t.addHandler(e,this),this},{Events:e}),Ye=b.touch?"touchstart mousedown":"mousedown",Xe=it.extend({options:{clickTolerance:3},initialize:function(t,e,i,n){c(this,n),this._element=t,this._dragStartTarget=e||t,this._preventOutline=i},enable:function(){this._enabled||(S(this._dragStartTarget,Ye,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(Xe._dragging===this&&this.finishDrag(!0),k(this._dragStartTarget,Ye,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){var e,i;this._enabled&&(this._moved=!1,ve(this._element,"leaflet-zoom-anim")||(t.touches&&1!==t.touches.length?Xe._dragging===this&&this.finishDrag():Xe._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||((Xe._dragging=this)._preventOutline&&Me(this._element),Le(),re(),this._moving||(this.fire("down"),i=t.touches?t.touches[0]:t,e=Ce(this._element),this._startPoint=new p(i.clientX,i.clientY),this._startPos=Pe(this._element),this._parentScale=Ze(e),i="mousedown"===t.type,S(document,i?"mousemove":"touchmove",this._onMove,this),S(document,i?"mouseup":"touchend touchcancel",this._onUp,this)))))},_onMove:function(t){var e;this._enabled&&(t.touches&&1e&&(i.push(t[n]),o=n);oe.max.x&&(i|=2),t.ye.max.y&&(i|=8),i}function ri(t,e,i,n){var o=e.x,e=e.y,s=i.x-o,r=i.y-e,a=s*s+r*r;return 0this._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()t.y!=n.y>t.y&&t.x<(n.x-i.x)*(t.y-i.y)/(n.y-i.y)+i.x&&(l=!l);return l||yi.prototype._containsPoint.call(this,t,!0)}});var wi=ci.extend({initialize:function(t,e){c(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e,i,n,o=d(t)?t:t.features;if(o){for(e=0,i=o.length;e×',S(i,"click",function(t){O(t),this.close()},this))},_updateLayout:function(){var t=this._contentNode,e=t.style,i=(e.width="",e.whiteSpace="nowrap",t.offsetWidth),i=Math.min(i,this.options.maxWidth),i=(i=Math.max(i,this.options.minWidth),e.width=i+1+"px",e.whiteSpace="",e.height="",t.offsetHeight),n=this.options.maxHeight,o="leaflet-popup-scrolled";(n&&ns.x&&(r=i.x+a-s.x+o.x),i.x-r-n.x<(a=0)&&(r=i.x-n.x),i.y+e+o.y>s.y&&(a=i.y+e-s.y+o.y),i.y-a-n.y<0&&(a=i.y-n.y),(r||a)&&(this.options.keepInView&&(this._autopanning=!0),t.fire("autopanstart").panBy([r,a]))))},_getAnchor:function(){return m(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}})),Ii=(A.mergeOptions({closePopupOnClick:!0}),A.include({openPopup:function(t,e,i){return this._initOverlay(Bi,t,e,i).openOn(this),this},closePopup:function(t){return(t=arguments.length?t:this._popup)&&t.close(),this}}),o.include({bindPopup:function(t,e){return this._popup=this._initOverlay(Bi,this._popup,t,e),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t){return this._popup&&(this instanceof ci||(this._popup._source=this),this._popup._prepareOpen(t||this._latlng)&&this._popup.openOn(this._map)),this},closePopup:function(){return this._popup&&this._popup.close(),this},togglePopup:function(){return this._popup&&this._popup.toggle(this),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var e;this._popup&&this._map&&(Re(t),e=t.layer||t.target,this._popup._source!==e||e instanceof fi?(this._popup._source=e,this.openPopup(t.latlng)):this._map.hasLayer(this._popup)?this.closePopup():this.openPopup(t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}}),Ai.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,opacity:.9},onAdd:function(t){Ai.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&(this.addEventParent(this._source),this._source.fire("tooltipopen",{tooltip:this},!0))},onRemove:function(t){Ai.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&(this.removeEventParent(this._source),this._source.fire("tooltipclose",{tooltip:this},!0))},getEvents:function(){var t=Ai.prototype.getEvents.call(this);return this.options.permanent||(t.preclick=this.close),t},_initLayout:function(){var t="leaflet-tooltip "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=P("div",t),this._container.setAttribute("role","tooltip"),this._container.setAttribute("id","leaflet-tooltip-"+h(this))},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var e,i=this._map,n=this._container,o=i.latLngToContainerPoint(i.getCenter()),i=i.layerPointToContainerPoint(t),s=this.options.direction,r=n.offsetWidth,a=n.offsetHeight,h=m(this.options.offset),l=this._getAnchor(),i="top"===s?(e=r/2,a):"bottom"===s?(e=r/2,0):(e="center"===s?r/2:"right"===s?0:"left"===s?r:i.xthis.options.maxZoom||nthis.options.maxZoom||void 0!==this.options.minZoom&&oi.max.x)||!e.wrapLat&&(t.yi.max.y))return!1}return!this.options.bounds||(e=this._tileCoordsToBounds(t),g(this.options.bounds).overlaps(e))},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var e=this._map,i=this.getTileSize(),n=t.scaleBy(i),i=n.add(i);return[e.unproject(n,t.z),e.unproject(i,t.z)]},_tileCoordsToBounds:function(t){t=this._tileCoordsToNwSe(t),t=new s(t[0],t[1]);return t=this.options.noWrap?t:this._map.wrapLatLngBounds(t)},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var t=t.split(":"),e=new p(+t[0],+t[1]);return e.z=+t[2],e},_removeTile:function(t){var e=this._tiles[t];e&&(T(e.el),delete this._tiles[t],this.fire("tileunload",{tile:e.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){M(t,"leaflet-tile");var e=this.getTileSize();t.style.width=e.x+"px",t.style.height=e.y+"px",t.onselectstart=u,t.onmousemove=u,b.ielt9&&this.options.opacity<1&&C(t,this.options.opacity)},_addTile:function(t,e){var i=this._getTilePos(t),n=this._tileCoordsToKey(t),o=this.createTile(this._wrapCoords(t),a(this._tileReady,this,t));this._initTile(o),this.createTile.length<2&&x(a(this._tileReady,this,t,null,o)),Z(o,i),this._tiles[n]={el:o,coords:t,current:!0},e.appendChild(o),this.fire("tileloadstart",{tile:o,coords:t})},_tileReady:function(t,e,i){e&&this.fire("tileerror",{error:e,tile:i,coords:t});var n=this._tileCoordsToKey(t);(i=this._tiles[n])&&(i.loaded=+new Date,this._map._fadeAnimated?(C(i.el,0),r(this._fadeFrame),this._fadeFrame=x(this._updateOpacity,this)):(i.active=!0,this._pruneTiles()),e||(M(i.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:i.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),b.ielt9||!this._map._fadeAnimated?x(this._pruneTiles,this):setTimeout(a(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var e=new p(this._wrapX?H(t.x,this._wrapX):t.x,this._wrapY?H(t.y,this._wrapY):t.y);return e.z=t.z,e},_pxBoundsToTileRange:function(t){var e=this.getTileSize();return new f(t.min.unscaleBy(e).floor(),t.max.unscaleBy(e).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});var Di=Ni.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1,referrerPolicy:!1},initialize:function(t,e){this._url=t,(e=c(this,e)).detectRetina&&b.retina&&0')}}catch(t){}return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}(),zt={_initContainer:function(){this._container=P("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(Wi.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var e=t._container=Vi("shape");M(e,"leaflet-vml-shape "+(this.options.className||"")),e.coordsize="1 1",t._path=Vi("path"),e.appendChild(t._path),this._updateStyle(t),this._layers[h(t)]=t},_addPath:function(t){var e=t._container;this._container.appendChild(e),t.options.interactive&&t.addInteractiveTarget(e)},_removePath:function(t){var e=t._container;T(e),t.removeInteractiveTarget(e),delete this._layers[h(t)]},_updateStyle:function(t){var e=t._stroke,i=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(e=e||(t._stroke=Vi("stroke")),o.appendChild(e),e.weight=n.weight+"px",e.color=n.color,e.opacity=n.opacity,n.dashArray?e.dashStyle=d(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):e.dashStyle="",e.endcap=n.lineCap.replace("butt","flat"),e.joinstyle=n.lineJoin):e&&(o.removeChild(e),t._stroke=null),n.fill?(i=i||(t._fill=Vi("fill")),o.appendChild(i),i.color=n.fillColor||n.color,i.opacity=n.fillOpacity):i&&(o.removeChild(i),t._fill=null)},_updateCircle:function(t){var e=t._point.round(),i=Math.round(t._radius),n=Math.round(t._radiusY||i);this._setPath(t,t._empty()?"M0 0":"AL "+e.x+","+e.y+" "+i+","+n+" 0,23592600")},_setPath:function(t,e){t._path.v=e},_bringToFront:function(t){fe(t._container)},_bringToBack:function(t){ge(t._container)}},qi=b.vml?Vi:ct,Gi=Wi.extend({_initContainer:function(){this._container=qi("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=qi("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){T(this._container),k(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_update:function(){var t,e,i;this._map._animatingZoom&&this._bounds||(Wi.prototype._update.call(this),e=(t=this._bounds).getSize(),i=this._container,this._svgSize&&this._svgSize.equals(e)||(this._svgSize=e,i.setAttribute("width",e.x),i.setAttribute("height",e.y)),Z(i,t.min),i.setAttribute("viewBox",[t.min.x,t.min.y,e.x,e.y].join(" ")),this.fire("update"))},_initPath:function(t){var e=t._path=qi("path");t.options.className&&M(e,t.options.className),t.options.interactive&&M(e,"leaflet-interactive"),this._updateStyle(t),this._layers[h(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){T(t._path),t.removeInteractiveTarget(t._path),delete this._layers[h(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var e=t._path,t=t.options;e&&(t.stroke?(e.setAttribute("stroke",t.color),e.setAttribute("stroke-opacity",t.opacity),e.setAttribute("stroke-width",t.weight),e.setAttribute("stroke-linecap",t.lineCap),e.setAttribute("stroke-linejoin",t.lineJoin),t.dashArray?e.setAttribute("stroke-dasharray",t.dashArray):e.removeAttribute("stroke-dasharray"),t.dashOffset?e.setAttribute("stroke-dashoffset",t.dashOffset):e.removeAttribute("stroke-dashoffset")):e.setAttribute("stroke","none"),t.fill?(e.setAttribute("fill",t.fillColor||t.color),e.setAttribute("fill-opacity",t.fillOpacity),e.setAttribute("fill-rule",t.fillRule||"evenodd")):e.setAttribute("fill","none"))},_updatePoly:function(t,e){this._setPath(t,dt(t._parts,e))},_updateCircle:function(t){var e=t._point,i=Math.max(Math.round(t._radius),1),n="a"+i+","+(Math.max(Math.round(t._radiusY),1)||i)+" 0 1,0 ",e=t._empty()?"M0 0":"M"+(e.x-i)+","+e.y+n+2*i+",0 "+n+2*-i+",0 ";this._setPath(t,e)},_setPath:function(t,e){t._path.setAttribute("d",e)},_bringToFront:function(t){fe(t._path)},_bringToBack:function(t){ge(t._path)}});function Ki(t){return b.svg||b.vml?new Gi(t):null}b.vml&&Gi.include(zt),A.include({getRenderer:function(t){t=(t=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer)||(this._renderer=this._createRenderer());return this.hasLayer(t)||this.addLayer(t),t},_getPaneRenderer:function(t){var e;return"overlayPane"!==t&&void 0!==t&&(void 0===(e=this._paneRenderers[t])&&(e=this._createRenderer({pane:t}),this._paneRenderers[t]=e),e)},_createRenderer:function(t){return this.options.preferCanvas&&Ui(t)||Ki(t)}});var Yi=xi.extend({initialize:function(t,e){xi.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return[(t=g(t)).getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});Gi.create=qi,Gi.pointsToPath=dt,wi.geometryToLayer=bi,wi.coordsToLatLng=Li,wi.coordsToLatLngs=Ti,wi.latLngToCoords=Mi,wi.latLngsToCoords=zi,wi.getFeature=Ci,wi.asFeature=Zi,A.mergeOptions({boxZoom:!0});var _t=n.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){S(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){k(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){T(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),re(),Le(),this._startPoint=this._map.mouseEventToContainerPoint(t),S(document,{contextmenu:Re,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=P("div","leaflet-zoom-box",this._container),M(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var t=new f(this._point,this._startPoint),e=t.getSize();Z(this._box,t.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(T(this._box),z(this._container,"leaflet-crosshair")),ae(),Te(),k(document,{contextmenu:Re,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){1!==t.which&&1!==t.button||(this._finish(),this._moved&&(this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(a(this._resetState,this),0),t=new s(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point)),this._map.fitBounds(t).fire("boxzoomend",{boxZoomBounds:t})))},_onKeyDown:function(t){27===t.keyCode&&(this._finish(),this._clearDeferredResetState(),this._resetState())}}),Ct=(A.addInitHook("addHandler","boxZoom",_t),A.mergeOptions({doubleClickZoom:!0}),n.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom(),n=e.options.zoomDelta,i=t.originalEvent.shiftKey?i-n:i+n;"center"===e.options.doubleClickZoom?e.setZoom(i):e.setZoomAround(t.containerPoint,i)}})),Zt=(A.addInitHook("addHandler","doubleClickZoom",Ct),A.mergeOptions({dragging:!0,inertia:!0,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0}),n.extend({addHooks:function(){var t;this._draggable||(t=this._map,this._draggable=new Xe(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))),M(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){z(this._map._container,"leaflet-grab"),z(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t,e=this._map;e._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity?(t=g(this._map.options.maxBounds),this._offsetLimit=_(this._map.latLngToContainerPoint(t.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(t.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))):this._offsetLimit=null,e.fire("movestart").fire("dragstart"),e.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){var e,i;this._map.options.inertia&&(e=this._lastTime=+new Date,i=this._lastPos=this._draggable._absPos||this._draggable._newPos,this._positions.push(i),this._times.push(e),this._prunePositions(e)),this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;1e.max.x&&(t.x=this._viscousLimit(t.x,e.max.x)),t.y>e.max.y&&(t.y=this._viscousLimit(t.y,e.max.y)),this._draggable._newPos=this._draggable._startPos.add(t))},_onPreDragWrap:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,n=(n+e+i)%t-e-i,t=Math.abs(o+i)e.getMaxZoom()&&1= currentZoom) {
- visibleLayer = visibleLayer.__parent;
- }
- }
-
- if (this._currentShownBounds.contains(visibleLayer.getLatLng())) {
- if (this.options.animateAddingMarkers) {
- this._animationAddLayer(layer, visibleLayer);
- } else {
- this._animationAddLayerNonAnimated(layer, visibleLayer);
- }
- }
- return this;
- },
-
- removeLayer: function (layer) {
-
- if (layer instanceof L.LayerGroup) {
- return this.removeLayers([layer]);
- }
-
- //Non point layers
- if (!layer.getLatLng) {
- this._nonPointGroup.removeLayer(layer);
- this.fire('layerremove', { layer: layer });
- return this;
- }
-
- if (!this._map) {
- if (!this._arraySplice(this._needsClustering, layer) && this.hasLayer(layer)) {
- this._needsRemoving.push({ layer: layer, latlng: layer._latlng });
- }
- this.fire('layerremove', { layer: layer });
- return this;
- }
-
- if (!layer.__parent) {
- return this;
- }
-
- if (this._unspiderfy) {
- this._unspiderfy();
- this._unspiderfyLayer(layer);
- }
-
- //Remove the marker from clusters
- this._removeLayer(layer, true);
- this.fire('layerremove', { layer: layer });
-
- // Refresh bounds and weighted positions.
- this._topClusterLevel._recalculateBounds();
-
- this._refreshClustersIcons();
-
- layer.off(this._childMarkerEventHandlers, this);
-
- if (this._featureGroup.hasLayer(layer)) {
- this._featureGroup.removeLayer(layer);
- if (layer.clusterShow) {
- layer.clusterShow();
- }
- }
-
- return this;
- },
-
- //Takes an array of markers and adds them in bulk
- addLayers: function (layersArray, skipLayerAddEvent) {
- if (!L.Util.isArray(layersArray)) {
- return this.addLayer(layersArray);
- }
-
- var fg = this._featureGroup,
- npg = this._nonPointGroup,
- chunked = this.options.chunkedLoading,
- chunkInterval = this.options.chunkInterval,
- chunkProgress = this.options.chunkProgress,
- l = layersArray.length,
- offset = 0,
- originalArray = true,
- m;
-
- if (this._map) {
- var started = (new Date()).getTime();
- var process = L.bind(function () {
- var start = (new Date()).getTime();
-
- // Make sure to unspiderfy before starting to add some layers
- if (this._map && this._unspiderfy) {
- this._unspiderfy();
- }
-
- for (; offset < l; offset++) {
- if (chunked && offset % 200 === 0) {
- // every couple hundred markers, instrument the time elapsed since processing started:
- var elapsed = (new Date()).getTime() - start;
- if (elapsed > chunkInterval) {
- break; // been working too hard, time to take a break :-)
- }
- }
-
- m = layersArray[offset];
-
- // Group of layers, append children to layersArray and skip.
- // Side effects:
- // - Total increases, so chunkProgress ratio jumps backward.
- // - Groups are not included in this group, only their non-group child layers (hasLayer).
- // Changing array length while looping does not affect performance in current browsers:
- // http://jsperf.com/for-loop-changing-length/6
- if (m instanceof L.LayerGroup) {
- if (originalArray) {
- layersArray = layersArray.slice();
- originalArray = false;
- }
- this._extractNonGroupLayers(m, layersArray);
- l = layersArray.length;
- continue;
- }
-
- //Not point data, can't be clustered
- if (!m.getLatLng) {
- npg.addLayer(m);
- if (!skipLayerAddEvent) {
- this.fire('layeradd', { layer: m });
- }
- continue;
- }
-
- if (this.hasLayer(m)) {
- continue;
- }
-
- this._addLayer(m, this._maxZoom);
- if (!skipLayerAddEvent) {
- this.fire('layeradd', { layer: m });
- }
-
- //If we just made a cluster of size 2 then we need to remove the other marker from the map (if it is) or we never will
- if (m.__parent) {
- if (m.__parent.getChildCount() === 2) {
- var markers = m.__parent.getAllChildMarkers(),
- otherMarker = markers[0] === m ? markers[1] : markers[0];
- fg.removeLayer(otherMarker);
- }
- }
- }
-
- if (chunkProgress) {
- // report progress and time elapsed:
- chunkProgress(offset, l, (new Date()).getTime() - started);
- }
-
- // Completed processing all markers.
- if (offset === l) {
-
- // Refresh bounds and weighted positions.
- this._topClusterLevel._recalculateBounds();
-
- this._refreshClustersIcons();
-
- this._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds);
- } else {
- setTimeout(process, this.options.chunkDelay);
- }
- }, this);
-
- process();
- } else {
- var needsClustering = this._needsClustering;
-
- for (; offset < l; offset++) {
- m = layersArray[offset];
-
- // Group of layers, append children to layersArray and skip.
- if (m instanceof L.LayerGroup) {
- if (originalArray) {
- layersArray = layersArray.slice();
- originalArray = false;
- }
- this._extractNonGroupLayers(m, layersArray);
- l = layersArray.length;
- continue;
- }
-
- //Not point data, can't be clustered
- if (!m.getLatLng) {
- npg.addLayer(m);
- continue;
- }
-
- if (this.hasLayer(m)) {
- continue;
- }
-
- needsClustering.push(m);
- }
- }
- return this;
- },
-
- //Takes an array of markers and removes them in bulk
- removeLayers: function (layersArray) {
- var i, m,
- l = layersArray.length,
- fg = this._featureGroup,
- npg = this._nonPointGroup,
- originalArray = true;
-
- if (!this._map) {
- for (i = 0; i < l; i++) {
- m = layersArray[i];
-
- // Group of layers, append children to layersArray and skip.
- if (m instanceof L.LayerGroup) {
- if (originalArray) {
- layersArray = layersArray.slice();
- originalArray = false;
- }
- this._extractNonGroupLayers(m, layersArray);
- l = layersArray.length;
- continue;
- }
-
- this._arraySplice(this._needsClustering, m);
- npg.removeLayer(m);
- if (this.hasLayer(m)) {
- this._needsRemoving.push({ layer: m, latlng: m._latlng });
- }
- this.fire('layerremove', { layer: m });
- }
- return this;
- }
-
- if (this._unspiderfy) {
- this._unspiderfy();
-
- // Work on a copy of the array, so that next loop is not affected.
- var layersArray2 = layersArray.slice(),
- l2 = l;
- for (i = 0; i < l2; i++) {
- m = layersArray2[i];
-
- // Group of layers, append children to layersArray and skip.
- if (m instanceof L.LayerGroup) {
- this._extractNonGroupLayers(m, layersArray2);
- l2 = layersArray2.length;
- continue;
- }
-
- this._unspiderfyLayer(m);
- }
- }
-
- for (i = 0; i < l; i++) {
- m = layersArray[i];
-
- // Group of layers, append children to layersArray and skip.
- if (m instanceof L.LayerGroup) {
- if (originalArray) {
- layersArray = layersArray.slice();
- originalArray = false;
- }
- this._extractNonGroupLayers(m, layersArray);
- l = layersArray.length;
- continue;
- }
-
- if (!m.__parent) {
- npg.removeLayer(m);
- this.fire('layerremove', { layer: m });
- continue;
- }
-
- this._removeLayer(m, true, true);
- this.fire('layerremove', { layer: m });
-
- if (fg.hasLayer(m)) {
- fg.removeLayer(m);
- if (m.clusterShow) {
- m.clusterShow();
- }
- }
- }
-
- // Refresh bounds and weighted positions.
- this._topClusterLevel._recalculateBounds();
-
- this._refreshClustersIcons();
-
- //Fix up the clusters and markers on the map
- this._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds);
-
- return this;
- },
-
- //Removes all layers from the MarkerClusterGroup
- clearLayers: function () {
- //Need our own special implementation as the LayerGroup one doesn't work for us
-
- //If we aren't on the map (yet), blow away the markers we know of
- if (!this._map) {
- this._needsClustering = [];
- this._needsRemoving = [];
- delete this._gridClusters;
- delete this._gridUnclustered;
- }
-
- if (this._noanimationUnspiderfy) {
- this._noanimationUnspiderfy();
- }
-
- //Remove all the visible layers
- this._featureGroup.clearLayers();
- this._nonPointGroup.clearLayers();
-
- this.eachLayer(function (marker) {
- marker.off(this._childMarkerEventHandlers, this);
- delete marker.__parent;
- }, this);
-
- if (this._map) {
- //Reset _topClusterLevel and the DistanceGrids
- this._generateInitialClusters();
- }
-
- return this;
- },
-
- //Override FeatureGroup.getBounds as it doesn't work
- getBounds: function () {
- var bounds = new L.LatLngBounds();
-
- if (this._topClusterLevel) {
- bounds.extend(this._topClusterLevel._bounds);
- }
-
- for (var i = this._needsClustering.length - 1; i >= 0; i--) {
- bounds.extend(this._needsClustering[i].getLatLng());
- }
-
- bounds.extend(this._nonPointGroup.getBounds());
-
- return bounds;
- },
-
- //Overrides LayerGroup.eachLayer
- eachLayer: function (method, context) {
- var markers = this._needsClustering.slice(),
- needsRemoving = this._needsRemoving,
- thisNeedsRemoving, i, j;
-
- if (this._topClusterLevel) {
- this._topClusterLevel.getAllChildMarkers(markers);
- }
-
- for (i = markers.length - 1; i >= 0; i--) {
- thisNeedsRemoving = true;
-
- for (j = needsRemoving.length - 1; j >= 0; j--) {
- if (needsRemoving[j].layer === markers[i]) {
- thisNeedsRemoving = false;
- break;
- }
- }
-
- if (thisNeedsRemoving) {
- method.call(context, markers[i]);
- }
- }
-
- this._nonPointGroup.eachLayer(method, context);
- },
-
- //Overrides LayerGroup.getLayers
- getLayers: function () {
- var layers = [];
- this.eachLayer(function (l) {
- layers.push(l);
- });
- return layers;
- },
-
- //Overrides LayerGroup.getLayer, WARNING: Really bad performance
- getLayer: function (id) {
- var result = null;
-
- id = parseInt(id, 10);
-
- this.eachLayer(function (l) {
- if (L.stamp(l) === id) {
- result = l;
- }
- });
-
- return result;
- },
-
- //Returns true if the given layer is in this MarkerClusterGroup
- hasLayer: function (layer) {
- if (!layer) {
- return false;
- }
-
- var i, anArray = this._needsClustering;
-
- for (i = anArray.length - 1; i >= 0; i--) {
- if (anArray[i] === layer) {
- return true;
- }
- }
-
- anArray = this._needsRemoving;
- for (i = anArray.length - 1; i >= 0; i--) {
- if (anArray[i].layer === layer) {
- return false;
- }
- }
-
- return !!(layer.__parent && layer.__parent._group === this) || this._nonPointGroup.hasLayer(layer);
- },
-
- //Zoom down to show the given layer (spiderfying if necessary) then calls the callback
- zoomToShowLayer: function (layer, callback) {
-
- var map = this._map;
-
- if (typeof callback !== 'function') {
- callback = function () {};
- }
-
- var showMarker = function () {
- // Assumes that map.hasLayer checks for direct appearance on map, not recursively calling
- // hasLayer on Layer Groups that are on map (typically not calling this MarkerClusterGroup.hasLayer, which would always return true)
- if ((map.hasLayer(layer) || map.hasLayer(layer.__parent)) && !this._inZoomAnimation) {
- this._map.off('moveend', showMarker, this);
- this.off('animationend', showMarker, this);
-
- if (map.hasLayer(layer)) {
- callback();
- } else if (layer.__parent._icon) {
- this.once('spiderfied', callback, this);
- layer.__parent.spiderfy();
- }
- }
- };
-
- if (layer._icon && this._map.getBounds().contains(layer.getLatLng())) {
- //Layer is visible ond on screen, immediate return
- callback();
- } else if (layer.__parent._zoom < Math.round(this._map._zoom)) {
- //Layer should be visible at this zoom level. It must not be on screen so just pan over to it
- this._map.on('moveend', showMarker, this);
- this._map.panTo(layer.getLatLng());
- } else {
- this._map.on('moveend', showMarker, this);
- this.on('animationend', showMarker, this);
- layer.__parent.zoomToBounds();
- }
- },
-
- //Overrides FeatureGroup.onAdd
- onAdd: function (map) {
- this._map = map;
- var i, l, layer;
-
- if (!isFinite(this._map.getMaxZoom())) {
- throw "Map has no maxZoom specified";
- }
-
- this._featureGroup.addTo(map);
- this._nonPointGroup.addTo(map);
-
- if (!this._gridClusters) {
- this._generateInitialClusters();
- }
-
- this._maxLat = map.options.crs.projection.MAX_LATITUDE;
-
- //Restore all the positions as they are in the MCG before removing them
- for (i = 0, l = this._needsRemoving.length; i < l; i++) {
- layer = this._needsRemoving[i];
- layer.newlatlng = layer.layer._latlng;
- layer.layer._latlng = layer.latlng;
- }
- //Remove them, then restore their new positions
- for (i = 0, l = this._needsRemoving.length; i < l; i++) {
- layer = this._needsRemoving[i];
- this._removeLayer(layer.layer, true);
- layer.layer._latlng = layer.newlatlng;
- }
- this._needsRemoving = [];
-
- //Remember the current zoom level and bounds
- this._zoom = Math.round(this._map._zoom);
- this._currentShownBounds = this._getExpandedVisibleBounds();
-
- this._map.on('zoomend', this._zoomEnd, this);
- this._map.on('moveend', this._moveEnd, this);
-
- if (this._spiderfierOnAdd) { //TODO FIXME: Not sure how to have spiderfier add something on here nicely
- this._spiderfierOnAdd();
- }
-
- this._bindEvents();
-
- //Actually add our markers to the map:
- l = this._needsClustering;
- this._needsClustering = [];
- this.addLayers(l, true);
- },
-
- //Overrides FeatureGroup.onRemove
- onRemove: function (map) {
- map.off('zoomend', this._zoomEnd, this);
- map.off('moveend', this._moveEnd, this);
-
- this._unbindEvents();
-
- //In case we are in a cluster animation
- this._map._mapPane.className = this._map._mapPane.className.replace(' leaflet-cluster-anim', '');
-
- if (this._spiderfierOnRemove) { //TODO FIXME: Not sure how to have spiderfier add something on here nicely
- this._spiderfierOnRemove();
- }
-
- delete this._maxLat;
-
- //Clean up all the layers we added to the map
- this._hideCoverage();
- this._featureGroup.remove();
- this._nonPointGroup.remove();
-
- this._featureGroup.clearLayers();
-
- this._map = null;
- },
-
- getVisibleParent: function (marker) {
- var vMarker = marker;
- while (vMarker && !vMarker._icon) {
- vMarker = vMarker.__parent;
- }
- return vMarker || null;
- },
-
- //Remove the given object from the given array
- _arraySplice: function (anArray, obj) {
- for (var i = anArray.length - 1; i >= 0; i--) {
- if (anArray[i] === obj) {
- anArray.splice(i, 1);
- return true;
- }
- }
- },
-
- /**
- * Removes a marker from all _gridUnclustered zoom levels, starting at the supplied zoom.
- * @param marker to be removed from _gridUnclustered.
- * @param z integer bottom start zoom level (included)
- * @private
- */
- _removeFromGridUnclustered: function (marker, z) {
- var map = this._map,
- gridUnclustered = this._gridUnclustered,
- minZoom = Math.floor(this._map.getMinZoom());
-
- for (; z >= minZoom; z--) {
- if (!gridUnclustered[z].removeObject(marker, map.project(marker.getLatLng(), z))) {
- break;
- }
- }
- },
-
- _childMarkerDragStart: function (e) {
- e.target.__dragStart = e.target._latlng;
- },
-
- _childMarkerMoved: function (e) {
- if (!this._ignoreMove && !e.target.__dragStart) {
- var isPopupOpen = e.target._popup && e.target._popup.isOpen();
-
- this._moveChild(e.target, e.oldLatLng, e.latlng);
-
- if (isPopupOpen) {
- e.target.openPopup();
- }
- }
- },
-
- _moveChild: function (layer, from, to) {
- layer._latlng = from;
- this.removeLayer(layer);
-
- layer._latlng = to;
- this.addLayer(layer);
- },
-
- _childMarkerDragEnd: function (e) {
- var dragStart = e.target.__dragStart;
- delete e.target.__dragStart;
- if (dragStart) {
- this._moveChild(e.target, dragStart, e.target._latlng);
- }
- },
-
-
- //Internal function for removing a marker from everything.
- //dontUpdateMap: set to true if you will handle updating the map manually (for bulk functions)
- _removeLayer: function (marker, removeFromDistanceGrid, dontUpdateMap) {
- var gridClusters = this._gridClusters,
- gridUnclustered = this._gridUnclustered,
- fg = this._featureGroup,
- map = this._map,
- minZoom = Math.floor(this._map.getMinZoom());
-
- //Remove the marker from distance clusters it might be in
- if (removeFromDistanceGrid) {
- this._removeFromGridUnclustered(marker, this._maxZoom);
- }
-
- //Work our way up the clusters removing them as we go if required
- var cluster = marker.__parent,
- markers = cluster._markers,
- otherMarker;
-
- //Remove the marker from the immediate parents marker list
- this._arraySplice(markers, marker);
-
- while (cluster) {
- cluster._childCount--;
- cluster._boundsNeedUpdate = true;
-
- if (cluster._zoom < minZoom) {
- //Top level, do nothing
- break;
- } else if (removeFromDistanceGrid && cluster._childCount <= 1) { //Cluster no longer required
- //We need to push the other marker up to the parent
- otherMarker = cluster._markers[0] === marker ? cluster._markers[1] : cluster._markers[0];
-
- //Update distance grid
- gridClusters[cluster._zoom].removeObject(cluster, map.project(cluster._cLatLng, cluster._zoom));
- gridUnclustered[cluster._zoom].addObject(otherMarker, map.project(otherMarker.getLatLng(), cluster._zoom));
-
- //Move otherMarker up to parent
- this._arraySplice(cluster.__parent._childClusters, cluster);
- cluster.__parent._markers.push(otherMarker);
- otherMarker.__parent = cluster.__parent;
-
- if (cluster._icon) {
- //Cluster is currently on the map, need to put the marker on the map instead
- fg.removeLayer(cluster);
- if (!dontUpdateMap) {
- fg.addLayer(otherMarker);
- }
- }
- } else {
- cluster._iconNeedsUpdate = true;
- }
-
- cluster = cluster.__parent;
- }
-
- delete marker.__parent;
- },
-
- _isOrIsParent: function (el, oel) {
- while (oel) {
- if (el === oel) {
- return true;
- }
- oel = oel.parentNode;
- }
- return false;
- },
-
- //Override L.Evented.fire
- fire: function (type, data, propagate) {
- if (data && data.layer instanceof L.MarkerCluster) {
- //Prevent multiple clustermouseover/off events if the icon is made up of stacked divs (Doesn't work in ie <= 8, no relatedTarget)
- if (data.originalEvent && this._isOrIsParent(data.layer._icon, data.originalEvent.relatedTarget)) {
- return;
- }
- type = 'cluster' + type;
- }
-
- L.FeatureGroup.prototype.fire.call(this, type, data, propagate);
- },
-
- //Override L.Evented.listens
- listens: function (type, propagate) {
- return L.FeatureGroup.prototype.listens.call(this, type, propagate) || L.FeatureGroup.prototype.listens.call(this, 'cluster' + type, propagate);
- },
-
- //Default functionality
- _defaultIconCreateFunction: function (cluster) {
- var childCount = cluster.getChildCount();
-
- var c = ' marker-cluster-';
- if (childCount < 10) {
- c += 'small';
- } else if (childCount < 100) {
- c += 'medium';
- } else {
- c += 'large';
- }
-
- return new L.DivIcon({ html: '' + childCount + '
', className: 'marker-cluster' + c, iconSize: new L.Point(40, 40) });
- },
-
- _bindEvents: function () {
- var map = this._map,
- spiderfyOnMaxZoom = this.options.spiderfyOnMaxZoom,
- showCoverageOnHover = this.options.showCoverageOnHover,
- zoomToBoundsOnClick = this.options.zoomToBoundsOnClick,
- spiderfyOnEveryZoom = this.options.spiderfyOnEveryZoom;
-
- //Zoom on cluster click or spiderfy if we are at the lowest level
- if (spiderfyOnMaxZoom || zoomToBoundsOnClick || spiderfyOnEveryZoom) {
- this.on('clusterclick clusterkeypress', this._zoomOrSpiderfy, this);
- }
-
- //Show convex hull (boundary) polygon on mouse over
- if (showCoverageOnHover) {
- this.on('clustermouseover', this._showCoverage, this);
- this.on('clustermouseout', this._hideCoverage, this);
- map.on('zoomend', this._hideCoverage, this);
- }
- },
-
- _zoomOrSpiderfy: function (e) {
- var cluster = e.layer,
- bottomCluster = cluster;
-
- if (e.type === 'clusterkeypress' && e.originalEvent && e.originalEvent.keyCode !== 13) {
- return;
- }
-
- while (bottomCluster._childClusters.length === 1) {
- bottomCluster = bottomCluster._childClusters[0];
- }
-
- if (bottomCluster._zoom === this._maxZoom &&
- bottomCluster._childCount === cluster._childCount &&
- this.options.spiderfyOnMaxZoom) {
-
- // All child markers are contained in a single cluster from this._maxZoom to this cluster.
- cluster.spiderfy();
- } else if (this.options.zoomToBoundsOnClick) {
- cluster.zoomToBounds();
- }
-
- if (this.options.spiderfyOnEveryZoom) {
- cluster.spiderfy();
- }
-
- // Focus the map again for keyboard users.
- if (e.originalEvent && e.originalEvent.keyCode === 13) {
- this._map._container.focus();
- }
- },
-
- _showCoverage: function (e) {
- var map = this._map;
- if (this._inZoomAnimation) {
- return;
- }
- if (this._shownPolygon) {
- map.removeLayer(this._shownPolygon);
- }
- if (e.layer.getChildCount() > 2 && e.layer !== this._spiderfied) {
- this._shownPolygon = new L.Polygon(e.layer.getConvexHull(), this.options.polygonOptions);
- map.addLayer(this._shownPolygon);
- }
- },
-
- _hideCoverage: function () {
- if (this._shownPolygon) {
- this._map.removeLayer(this._shownPolygon);
- this._shownPolygon = null;
- }
- },
-
- _unbindEvents: function () {
- var spiderfyOnMaxZoom = this.options.spiderfyOnMaxZoom,
- showCoverageOnHover = this.options.showCoverageOnHover,
- zoomToBoundsOnClick = this.options.zoomToBoundsOnClick,
- spiderfyOnEveryZoom = this.options.spiderfyOnEveryZoom,
- map = this._map;
-
- if (spiderfyOnMaxZoom || zoomToBoundsOnClick || spiderfyOnEveryZoom) {
- this.off('clusterclick clusterkeypress', this._zoomOrSpiderfy, this);
- }
- if (showCoverageOnHover) {
- this.off('clustermouseover', this._showCoverage, this);
- this.off('clustermouseout', this._hideCoverage, this);
- map.off('zoomend', this._hideCoverage, this);
- }
- },
-
- _zoomEnd: function () {
- if (!this._map) { //May have been removed from the map by a zoomEnd handler
- return;
- }
- this._mergeSplitClusters();
-
- this._zoom = Math.round(this._map._zoom);
- this._currentShownBounds = this._getExpandedVisibleBounds();
- },
-
- _moveEnd: function () {
- if (this._inZoomAnimation) {
- return;
- }
-
- var newBounds = this._getExpandedVisibleBounds();
-
- this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), this._zoom, newBounds);
- this._topClusterLevel._recursivelyAddChildrenToMap(null, Math.round(this._map._zoom), newBounds);
-
- this._currentShownBounds = newBounds;
- return;
- },
-
- _generateInitialClusters: function () {
- var maxZoom = Math.ceil(this._map.getMaxZoom()),
- minZoom = Math.floor(this._map.getMinZoom()),
- radius = this.options.maxClusterRadius,
- radiusFn = radius;
-
- //If we just set maxClusterRadius to a single number, we need to create
- //a simple function to return that number. Otherwise, we just have to
- //use the function we've passed in.
- if (typeof radius !== "function") {
- radiusFn = function () { return radius; };
- }
-
- if (this.options.disableClusteringAtZoom !== null) {
- maxZoom = this.options.disableClusteringAtZoom - 1;
- }
- this._maxZoom = maxZoom;
- this._gridClusters = {};
- this._gridUnclustered = {};
-
- //Set up DistanceGrids for each zoom
- for (var zoom = maxZoom; zoom >= minZoom; zoom--) {
- this._gridClusters[zoom] = new L.DistanceGrid(radiusFn(zoom));
- this._gridUnclustered[zoom] = new L.DistanceGrid(radiusFn(zoom));
- }
-
- // Instantiate the appropriate L.MarkerCluster class (animated or not).
- this._topClusterLevel = new this._markerCluster(this, minZoom - 1);
- },
-
- //Zoom: Zoom to start adding at (Pass this._maxZoom to start at the bottom)
- _addLayer: function (layer, zoom) {
- var gridClusters = this._gridClusters,
- gridUnclustered = this._gridUnclustered,
- minZoom = Math.floor(this._map.getMinZoom()),
- markerPoint, z;
-
- if (this.options.singleMarkerMode) {
- this._overrideMarkerIcon(layer);
- }
-
- layer.on(this._childMarkerEventHandlers, this);
-
- //Find the lowest zoom level to slot this one in
- for (; zoom >= minZoom; zoom--) {
- markerPoint = this._map.project(layer.getLatLng(), zoom); // calculate pixel position
-
- //Try find a cluster close by
- var closest = gridClusters[zoom].getNearObject(markerPoint);
- if (closest) {
- closest._addChild(layer);
- layer.__parent = closest;
- return;
- }
-
- //Try find a marker close by to form a new cluster with
- closest = gridUnclustered[zoom].getNearObject(markerPoint);
- if (closest) {
- var parent = closest.__parent;
- if (parent) {
- this._removeLayer(closest, false);
- }
-
- //Create new cluster with these 2 in it
-
- var newCluster = new this._markerCluster(this, zoom, closest, layer);
- gridClusters[zoom].addObject(newCluster, this._map.project(newCluster._cLatLng, zoom));
- closest.__parent = newCluster;
- layer.__parent = newCluster;
-
- //First create any new intermediate parent clusters that don't exist
- var lastParent = newCluster;
- for (z = zoom - 1; z > parent._zoom; z--) {
- lastParent = new this._markerCluster(this, z, lastParent);
- gridClusters[z].addObject(lastParent, this._map.project(closest.getLatLng(), z));
- }
- parent._addChild(lastParent);
-
- //Remove closest from this zoom level and any above that it is in, replace with newCluster
- this._removeFromGridUnclustered(closest, zoom);
-
- return;
- }
-
- //Didn't manage to cluster in at this zoom, record us as a marker here and continue upwards
- gridUnclustered[zoom].addObject(layer, markerPoint);
- }
-
- //Didn't get in anything, add us to the top
- this._topClusterLevel._addChild(layer);
- layer.__parent = this._topClusterLevel;
- return;
- },
-
- /**
- * Refreshes the icon of all "dirty" visible clusters.
- * Non-visible "dirty" clusters will be updated when they are added to the map.
- * @private
- */
- _refreshClustersIcons: function () {
- this._featureGroup.eachLayer(function (c) {
- if (c instanceof L.MarkerCluster && c._iconNeedsUpdate) {
- c._updateIcon();
- }
- });
- },
-
- //Enqueue code to fire after the marker expand/contract has happened
- _enqueue: function (fn) {
- this._queue.push(fn);
- if (!this._queueTimeout) {
- this._queueTimeout = setTimeout(L.bind(this._processQueue, this), 300);
- }
- },
- _processQueue: function () {
- for (var i = 0; i < this._queue.length; i++) {
- this._queue[i].call(this);
- }
- this._queue.length = 0;
- clearTimeout(this._queueTimeout);
- this._queueTimeout = null;
- },
-
- //Merge and split any existing clusters that are too big or small
- _mergeSplitClusters: function () {
- var mapZoom = Math.round(this._map._zoom);
-
- //In case we are starting to split before the animation finished
- this._processQueue();
-
- if (this._zoom < mapZoom && this._currentShownBounds.intersects(this._getExpandedVisibleBounds())) { //Zoom in, split
- this._animationStart();
- //Remove clusters now off screen
- this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), this._zoom, this._getExpandedVisibleBounds());
-
- this._animationZoomIn(this._zoom, mapZoom);
-
- } else if (this._zoom > mapZoom) { //Zoom out, merge
- this._animationStart();
-
- this._animationZoomOut(this._zoom, mapZoom);
- } else {
- this._moveEnd();
- }
- },
-
- //Gets the maps visible bounds expanded in each direction by the size of the screen (so the user cannot see an area we do not cover in one pan)
- _getExpandedVisibleBounds: function () {
- if (!this.options.removeOutsideVisibleBounds) {
- return this._mapBoundsInfinite;
- } else if (L.Browser.mobile) {
- return this._checkBoundsMaxLat(this._map.getBounds());
- }
-
- return this._checkBoundsMaxLat(this._map.getBounds().pad(1)); // Padding expands the bounds by its own dimensions but scaled with the given factor.
- },
-
- /**
- * Expands the latitude to Infinity (or -Infinity) if the input bounds reach the map projection maximum defined latitude
- * (in the case of Web/Spherical Mercator, it is 85.0511287798 / see https://en.wikipedia.org/wiki/Web_Mercator#Formulas).
- * Otherwise, the removeOutsideVisibleBounds option will remove markers beyond that limit, whereas the same markers without
- * this option (or outside MCG) will have their position floored (ceiled) by the projection and rendered at that limit,
- * making the user think that MCG "eats" them and never displays them again.
- * @param bounds L.LatLngBounds
- * @returns {L.LatLngBounds}
- * @private
- */
- _checkBoundsMaxLat: function (bounds) {
- var maxLat = this._maxLat;
-
- if (maxLat !== undefined) {
- if (bounds.getNorth() >= maxLat) {
- bounds._northEast.lat = Infinity;
- }
- if (bounds.getSouth() <= -maxLat) {
- bounds._southWest.lat = -Infinity;
- }
- }
-
- return bounds;
- },
-
- //Shared animation code
- _animationAddLayerNonAnimated: function (layer, newCluster) {
- if (newCluster === layer) {
- this._featureGroup.addLayer(layer);
- } else if (newCluster._childCount === 2) {
- newCluster._addToMap();
-
- var markers = newCluster.getAllChildMarkers();
- this._featureGroup.removeLayer(markers[0]);
- this._featureGroup.removeLayer(markers[1]);
- } else {
- newCluster._updateIcon();
- }
- },
-
- /**
- * Extracts individual (i.e. non-group) layers from a Layer Group.
- * @param group to extract layers from.
- * @param output {Array} in which to store the extracted layers.
- * @returns {*|Array}
- * @private
- */
- _extractNonGroupLayers: function (group, output) {
- var layers = group.getLayers(),
- i = 0,
- layer;
-
- output = output || [];
-
- for (; i < layers.length; i++) {
- layer = layers[i];
-
- if (layer instanceof L.LayerGroup) {
- this._extractNonGroupLayers(layer, output);
- continue;
- }
-
- output.push(layer);
- }
-
- return output;
- },
-
- /**
- * Implements the singleMarkerMode option.
- * @param layer Marker to re-style using the Clusters iconCreateFunction.
- * @returns {L.Icon} The newly created icon.
- * @private
- */
- _overrideMarkerIcon: function (layer) {
- var icon = layer.options.icon = this.options.iconCreateFunction({
- getChildCount: function () {
- return 1;
- },
- getAllChildMarkers: function () {
- return [layer];
- }
- });
-
- return icon;
- }
- });
-
- // Constant bounds used in case option "removeOutsideVisibleBounds" is set to false.
- L.MarkerClusterGroup.include({
- _mapBoundsInfinite: new L.LatLngBounds(new L.LatLng(-Infinity, -Infinity), new L.LatLng(Infinity, Infinity))
- });
-
- L.MarkerClusterGroup.include({
- _noAnimation: {
- //Non Animated versions of everything
- _animationStart: function () {
- //Do nothing...
- },
- _animationZoomIn: function (previousZoomLevel, newZoomLevel) {
- this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel);
- this._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());
-
- //We didn't actually animate, but we use this event to mean "clustering animations have finished"
- this.fire('animationend');
- },
- _animationZoomOut: function (previousZoomLevel, newZoomLevel) {
- this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel);
- this._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());
-
- //We didn't actually animate, but we use this event to mean "clustering animations have finished"
- this.fire('animationend');
- },
- _animationAddLayer: function (layer, newCluster) {
- this._animationAddLayerNonAnimated(layer, newCluster);
- }
- },
-
- _withAnimation: {
- //Animated versions here
- _animationStart: function () {
- this._map._mapPane.className += ' leaflet-cluster-anim';
- this._inZoomAnimation++;
- },
-
- _animationZoomIn: function (previousZoomLevel, newZoomLevel) {
- var bounds = this._getExpandedVisibleBounds(),
- fg = this._featureGroup,
- minZoom = Math.floor(this._map.getMinZoom()),
- i;
-
- this._ignoreMove = true;
-
- //Add all children of current clusters to map and remove those clusters from map
- this._topClusterLevel._recursively(bounds, previousZoomLevel, minZoom, function (c) {
- var startPos = c._latlng,
- markers = c._markers,
- m;
-
- if (!bounds.contains(startPos)) {
- startPos = null;
- }
-
- if (c._isSingleParent() && previousZoomLevel + 1 === newZoomLevel) { //Immediately add the new child and remove us
- fg.removeLayer(c);
- c._recursivelyAddChildrenToMap(null, newZoomLevel, bounds);
- } else {
- //Fade out old cluster
- c.clusterHide();
- c._recursivelyAddChildrenToMap(startPos, newZoomLevel, bounds);
- }
-
- //Remove all markers that aren't visible any more
- //TODO: Do we actually need to do this on the higher levels too?
- for (i = markers.length - 1; i >= 0; i--) {
- m = markers[i];
- if (!bounds.contains(m._latlng)) {
- fg.removeLayer(m);
- }
- }
-
- });
-
- this._forceLayout();
-
- //Update opacities
- this._topClusterLevel._recursivelyBecomeVisible(bounds, newZoomLevel);
- //TODO Maybe? Update markers in _recursivelyBecomeVisible
- fg.eachLayer(function (n) {
- if (!(n instanceof L.MarkerCluster) && n._icon) {
- n.clusterShow();
- }
- });
-
- //update the positions of the just added clusters/markers
- this._topClusterLevel._recursively(bounds, previousZoomLevel, newZoomLevel, function (c) {
- c._recursivelyRestoreChildPositions(newZoomLevel);
- });
-
- this._ignoreMove = false;
-
- //Remove the old clusters and close the zoom animation
- this._enqueue(function () {
- //update the positions of the just added clusters/markers
- this._topClusterLevel._recursively(bounds, previousZoomLevel, minZoom, function (c) {
- fg.removeLayer(c);
- c.clusterShow();
- });
-
- this._animationEnd();
- });
- },
-
- _animationZoomOut: function (previousZoomLevel, newZoomLevel) {
- this._animationZoomOutSingle(this._topClusterLevel, previousZoomLevel - 1, newZoomLevel);
-
- //Need to add markers for those that weren't on the map before but are now
- this._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());
- //Remove markers that were on the map before but won't be now
- this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel, this._getExpandedVisibleBounds());
- },
-
- _animationAddLayer: function (layer, newCluster) {
- var me = this,
- fg = this._featureGroup;
-
- fg.addLayer(layer);
- if (newCluster !== layer) {
- if (newCluster._childCount > 2) { //Was already a cluster
-
- newCluster._updateIcon();
- this._forceLayout();
- this._animationStart();
-
- layer._setPos(this._map.latLngToLayerPoint(newCluster.getLatLng()));
- layer.clusterHide();
-
- this._enqueue(function () {
- fg.removeLayer(layer);
- layer.clusterShow();
-
- me._animationEnd();
- });
-
- } else { //Just became a cluster
- this._forceLayout();
-
- me._animationStart();
- me._animationZoomOutSingle(newCluster, this._map.getMaxZoom(), this._zoom);
- }
- }
- }
- },
-
- // Private methods for animated versions.
- _animationZoomOutSingle: function (cluster, previousZoomLevel, newZoomLevel) {
- var bounds = this._getExpandedVisibleBounds(),
- minZoom = Math.floor(this._map.getMinZoom());
-
- //Animate all of the markers in the clusters to move to their cluster center point
- cluster._recursivelyAnimateChildrenInAndAddSelfToMap(bounds, minZoom, previousZoomLevel + 1, newZoomLevel);
-
- var me = this;
-
- //Update the opacity (If we immediately set it they won't animate)
- this._forceLayout();
- cluster._recursivelyBecomeVisible(bounds, newZoomLevel);
-
- //TODO: Maybe use the transition timing stuff to make this more reliable
- //When the animations are done, tidy up
- this._enqueue(function () {
-
- //This cluster stopped being a cluster before the timeout fired
- if (cluster._childCount === 1) {
- var m = cluster._markers[0];
- //If we were in a cluster animation at the time then the opacity and position of our child could be wrong now, so fix it
- this._ignoreMove = true;
- m.setLatLng(m.getLatLng());
- this._ignoreMove = false;
- if (m.clusterShow) {
- m.clusterShow();
- }
- } else {
- cluster._recursively(bounds, newZoomLevel, minZoom, function (c) {
- c._recursivelyRemoveChildrenFromMap(bounds, minZoom, previousZoomLevel + 1);
- });
- }
- me._animationEnd();
- });
- },
-
- _animationEnd: function () {
- if (this._map) {
- this._map._mapPane.className = this._map._mapPane.className.replace(' leaflet-cluster-anim', '');
- }
- this._inZoomAnimation--;
- this.fire('animationend');
- },
-
- //Force a browser layout of stuff in the map
- // Should apply the current opacity and location to all elements so we can update them again for an animation
- _forceLayout: function () {
- //In my testing this works, infact offsetWidth of any element seems to work.
- //Could loop all this._layers and do this for each _icon if it stops working
-
- L.Util.falseFn(document.body.offsetWidth);
- }
- });
-
- L.markerClusterGroup = function (options) {
- return new L.MarkerClusterGroup(options);
- };
-
- var MarkerCluster = L.MarkerCluster = L.Marker.extend({
- options: L.Icon.prototype.options,
-
- initialize: function (group, zoom, a, b) {
-
- L.Marker.prototype.initialize.call(this, a ? (a._cLatLng || a.getLatLng()) : new L.LatLng(0, 0),
- { icon: this, pane: group.options.clusterPane });
-
- this._group = group;
- this._zoom = zoom;
-
- this._markers = [];
- this._childClusters = [];
- this._childCount = 0;
- this._iconNeedsUpdate = true;
- this._boundsNeedUpdate = true;
-
- this._bounds = new L.LatLngBounds();
-
- if (a) {
- this._addChild(a);
- }
- if (b) {
- this._addChild(b);
- }
- },
-
- //Recursively retrieve all child markers of this cluster
- getAllChildMarkers: function (storageArray, ignoreDraggedMarker) {
- storageArray = storageArray || [];
-
- for (var i = this._childClusters.length - 1; i >= 0; i--) {
- this._childClusters[i].getAllChildMarkers(storageArray, ignoreDraggedMarker);
- }
-
- for (var j = this._markers.length - 1; j >= 0; j--) {
- if (ignoreDraggedMarker && this._markers[j].__dragStart) {
- continue;
- }
- storageArray.push(this._markers[j]);
- }
-
- return storageArray;
- },
-
- //Returns the count of how many child markers we have
- getChildCount: function () {
- return this._childCount;
- },
-
- //Zoom to the minimum of showing all of the child markers, or the extents of this cluster
- zoomToBounds: function (fitBoundsOptions) {
- var childClusters = this._childClusters.slice(),
- map = this._group._map,
- boundsZoom = map.getBoundsZoom(this._bounds),
- zoom = this._zoom + 1,
- mapZoom = map.getZoom(),
- i;
-
- //calculate how far we need to zoom down to see all of the markers
- while (childClusters.length > 0 && boundsZoom > zoom) {
- zoom++;
- var newClusters = [];
- for (i = 0; i < childClusters.length; i++) {
- newClusters = newClusters.concat(childClusters[i]._childClusters);
- }
- childClusters = newClusters;
- }
-
- if (boundsZoom > zoom) {
- this._group._map.setView(this._latlng, zoom);
- } else if (boundsZoom <= mapZoom) { //If fitBounds wouldn't zoom us down, zoom us down instead
- this._group._map.setView(this._latlng, mapZoom + 1);
- } else {
- this._group._map.fitBounds(this._bounds, fitBoundsOptions);
- }
- },
-
- getBounds: function () {
- var bounds = new L.LatLngBounds();
- bounds.extend(this._bounds);
- return bounds;
- },
-
- _updateIcon: function () {
- this._iconNeedsUpdate = true;
- if (this._icon) {
- this.setIcon(this);
- }
- },
-
- //Cludge for Icon, we pretend to be an icon for performance
- createIcon: function () {
- if (this._iconNeedsUpdate) {
- this._iconObj = this._group.options.iconCreateFunction(this);
- this._iconNeedsUpdate = false;
- }
- return this._iconObj.createIcon();
- },
- createShadow: function () {
- return this._iconObj.createShadow();
- },
-
-
- _addChild: function (new1, isNotificationFromChild) {
-
- this._iconNeedsUpdate = true;
-
- this._boundsNeedUpdate = true;
- this._setClusterCenter(new1);
-
- if (new1 instanceof L.MarkerCluster) {
- if (!isNotificationFromChild) {
- this._childClusters.push(new1);
- new1.__parent = this;
- }
- this._childCount += new1._childCount;
- } else {
- if (!isNotificationFromChild) {
- this._markers.push(new1);
- }
- this._childCount++;
- }
-
- if (this.__parent) {
- this.__parent._addChild(new1, true);
- }
- },
-
- /**
- * Makes sure the cluster center is set. If not, uses the child center if it is a cluster, or the marker position.
- * @param child L.MarkerCluster|L.Marker that will be used as cluster center if not defined yet.
- * @private
- */
- _setClusterCenter: function (child) {
- if (!this._cLatLng) {
- // when clustering, take position of the first point as the cluster center
- this._cLatLng = child._cLatLng || child._latlng;
- }
- },
-
- /**
- * Assigns impossible bounding values so that the next extend entirely determines the new bounds.
- * This method avoids having to trash the previous L.LatLngBounds object and to create a new one, which is much slower for this class.
- * As long as the bounds are not extended, most other methods would probably fail, as they would with bounds initialized but not extended.
- * @private
- */
- _resetBounds: function () {
- var bounds = this._bounds;
-
- if (bounds._southWest) {
- bounds._southWest.lat = Infinity;
- bounds._southWest.lng = Infinity;
- }
- if (bounds._northEast) {
- bounds._northEast.lat = -Infinity;
- bounds._northEast.lng = -Infinity;
- }
- },
-
- _recalculateBounds: function () {
- var markers = this._markers,
- childClusters = this._childClusters,
- latSum = 0,
- lngSum = 0,
- totalCount = this._childCount,
- i, child, childLatLng, childCount;
-
- // Case where all markers are removed from the map and we are left with just an empty _topClusterLevel.
- if (totalCount === 0) {
- return;
- }
-
- // Reset rather than creating a new object, for performance.
- this._resetBounds();
-
- // Child markers.
- for (i = 0; i < markers.length; i++) {
- childLatLng = markers[i]._latlng;
-
- this._bounds.extend(childLatLng);
-
- latSum += childLatLng.lat;
- lngSum += childLatLng.lng;
- }
-
- // Child clusters.
- for (i = 0; i < childClusters.length; i++) {
- child = childClusters[i];
-
- // Re-compute child bounds and weighted position first if necessary.
- if (child._boundsNeedUpdate) {
- child._recalculateBounds();
- }
-
- this._bounds.extend(child._bounds);
-
- childLatLng = child._wLatLng;
- childCount = child._childCount;
-
- latSum += childLatLng.lat * childCount;
- lngSum += childLatLng.lng * childCount;
- }
-
- this._latlng = this._wLatLng = new L.LatLng(latSum / totalCount, lngSum / totalCount);
-
- // Reset dirty flag.
- this._boundsNeedUpdate = false;
- },
-
- //Set our markers position as given and add it to the map
- _addToMap: function (startPos) {
- if (startPos) {
- this._backupLatlng = this._latlng;
- this.setLatLng(startPos);
- }
- this._group._featureGroup.addLayer(this);
- },
-
- _recursivelyAnimateChildrenIn: function (bounds, center, maxZoom) {
- this._recursively(bounds, this._group._map.getMinZoom(), maxZoom - 1,
- function (c) {
- var markers = c._markers,
- i, m;
- for (i = markers.length - 1; i >= 0; i--) {
- m = markers[i];
-
- //Only do it if the icon is still on the map
- if (m._icon) {
- m._setPos(center);
- m.clusterHide();
- }
- }
- },
- function (c) {
- var childClusters = c._childClusters,
- j, cm;
- for (j = childClusters.length - 1; j >= 0; j--) {
- cm = childClusters[j];
- if (cm._icon) {
- cm._setPos(center);
- cm.clusterHide();
- }
- }
- }
- );
- },
-
- _recursivelyAnimateChildrenInAndAddSelfToMap: function (bounds, mapMinZoom, previousZoomLevel, newZoomLevel) {
- this._recursively(bounds, newZoomLevel, mapMinZoom,
- function (c) {
- c._recursivelyAnimateChildrenIn(bounds, c._group._map.latLngToLayerPoint(c.getLatLng()).round(), previousZoomLevel);
-
- //TODO: depthToAnimateIn affects _isSingleParent, if there is a multizoom we may/may not be.
- //As a hack we only do a animation free zoom on a single level zoom, if someone does multiple levels then we always animate
- if (c._isSingleParent() && previousZoomLevel - 1 === newZoomLevel) {
- c.clusterShow();
- c._recursivelyRemoveChildrenFromMap(bounds, mapMinZoom, previousZoomLevel); //Immediately remove our children as we are replacing them. TODO previousBounds not bounds
- } else {
- c.clusterHide();
- }
-
- c._addToMap();
- }
- );
- },
-
- _recursivelyBecomeVisible: function (bounds, zoomLevel) {
- this._recursively(bounds, this._group._map.getMinZoom(), zoomLevel, null, function (c) {
- c.clusterShow();
- });
- },
-
- _recursivelyAddChildrenToMap: function (startPos, zoomLevel, bounds) {
- this._recursively(bounds, this._group._map.getMinZoom() - 1, zoomLevel,
- function (c) {
- if (zoomLevel === c._zoom) {
- return;
- }
-
- //Add our child markers at startPos (so they can be animated out)
- for (var i = c._markers.length - 1; i >= 0; i--) {
- var nm = c._markers[i];
-
- if (!bounds.contains(nm._latlng)) {
- continue;
- }
-
- if (startPos) {
- nm._backupLatlng = nm.getLatLng();
-
- nm.setLatLng(startPos);
- if (nm.clusterHide) {
- nm.clusterHide();
- }
- }
-
- c._group._featureGroup.addLayer(nm);
- }
- },
- function (c) {
- c._addToMap(startPos);
- }
- );
- },
-
- _recursivelyRestoreChildPositions: function (zoomLevel) {
- //Fix positions of child markers
- for (var i = this._markers.length - 1; i >= 0; i--) {
- var nm = this._markers[i];
- if (nm._backupLatlng) {
- nm.setLatLng(nm._backupLatlng);
- delete nm._backupLatlng;
- }
- }
-
- if (zoomLevel - 1 === this._zoom) {
- //Reposition child clusters
- for (var j = this._childClusters.length - 1; j >= 0; j--) {
- this._childClusters[j]._restorePosition();
- }
- } else {
- for (var k = this._childClusters.length - 1; k >= 0; k--) {
- this._childClusters[k]._recursivelyRestoreChildPositions(zoomLevel);
- }
- }
- },
-
- _restorePosition: function () {
- if (this._backupLatlng) {
- this.setLatLng(this._backupLatlng);
- delete this._backupLatlng;
- }
- },
-
- //exceptBounds: If set, don't remove any markers/clusters in it
- _recursivelyRemoveChildrenFromMap: function (previousBounds, mapMinZoom, zoomLevel, exceptBounds) {
- var m, i;
- this._recursively(previousBounds, mapMinZoom - 1, zoomLevel - 1,
- function (c) {
- //Remove markers at every level
- for (i = c._markers.length - 1; i >= 0; i--) {
- m = c._markers[i];
- if (!exceptBounds || !exceptBounds.contains(m._latlng)) {
- c._group._featureGroup.removeLayer(m);
- if (m.clusterShow) {
- m.clusterShow();
- }
- }
- }
- },
- function (c) {
- //Remove child clusters at just the bottom level
- for (i = c._childClusters.length - 1; i >= 0; i--) {
- m = c._childClusters[i];
- if (!exceptBounds || !exceptBounds.contains(m._latlng)) {
- c._group._featureGroup.removeLayer(m);
- if (m.clusterShow) {
- m.clusterShow();
- }
- }
- }
- }
- );
- },
-
- //Run the given functions recursively to this and child clusters
- // boundsToApplyTo: a L.LatLngBounds representing the bounds of what clusters to recurse in to
- // zoomLevelToStart: zoom level to start running functions (inclusive)
- // zoomLevelToStop: zoom level to stop running functions (inclusive)
- // runAtEveryLevel: function that takes an L.MarkerCluster as an argument that should be applied on every level
- // runAtBottomLevel: function that takes an L.MarkerCluster as an argument that should be applied at only the bottom level
- _recursively: function (boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel) {
- var childClusters = this._childClusters,
- zoom = this._zoom,
- i, c;
-
- if (zoomLevelToStart <= zoom) {
- if (runAtEveryLevel) {
- runAtEveryLevel(this);
- }
- if (runAtBottomLevel && zoom === zoomLevelToStop) {
- runAtBottomLevel(this);
- }
- }
-
- if (zoom < zoomLevelToStart || zoom < zoomLevelToStop) {
- for (i = childClusters.length - 1; i >= 0; i--) {
- c = childClusters[i];
- if (c._boundsNeedUpdate) {
- c._recalculateBounds();
- }
- if (boundsToApplyTo.intersects(c._bounds)) {
- c._recursively(boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel);
- }
- }
- }
- },
-
- //Returns true if we are the parent of only one cluster and that cluster is the same as us
- _isSingleParent: function () {
- //Don't need to check this._markers as the rest won't work if there are any
- return this._childClusters.length > 0 && this._childClusters[0]._childCount === this._childCount;
- }
- });
-
- /*
- * Extends L.Marker to include two extra methods: clusterHide and clusterShow.
- *
- * They work as setOpacity(0) and setOpacity(1) respectively, but
- * don't overwrite the options.opacity
- *
- */
-
- L.Marker.include({
- clusterHide: function () {
- var backup = this.options.opacity;
- this.setOpacity(0);
- this.options.opacity = backup;
- return this;
- },
-
- clusterShow: function () {
- return this.setOpacity(this.options.opacity);
- }
- });
-
- L.DistanceGrid = function (cellSize) {
- this._cellSize = cellSize;
- this._sqCellSize = cellSize * cellSize;
- this._grid = {};
- this._objectPoint = { };
- };
-
- L.DistanceGrid.prototype = {
-
- addObject: function (obj, point) {
- var x = this._getCoord(point.x),
- y = this._getCoord(point.y),
- grid = this._grid,
- row = grid[y] = grid[y] || {},
- cell = row[x] = row[x] || [],
- stamp = L.Util.stamp(obj);
-
- this._objectPoint[stamp] = point;
-
- cell.push(obj);
- },
-
- updateObject: function (obj, point) {
- this.removeObject(obj);
- this.addObject(obj, point);
- },
-
- //Returns true if the object was found
- removeObject: function (obj, point) {
- var x = this._getCoord(point.x),
- y = this._getCoord(point.y),
- grid = this._grid,
- row = grid[y] = grid[y] || {},
- cell = row[x] = row[x] || [],
- i, len;
-
- delete this._objectPoint[L.Util.stamp(obj)];
-
- for (i = 0, len = cell.length; i < len; i++) {
- if (cell[i] === obj) {
-
- cell.splice(i, 1);
-
- if (len === 1) {
- delete row[x];
- }
-
- return true;
- }
- }
-
- },
-
- eachObject: function (fn, context) {
- var i, j, k, len, row, cell, removed,
- grid = this._grid;
-
- for (i in grid) {
- row = grid[i];
-
- for (j in row) {
- cell = row[j];
-
- for (k = 0, len = cell.length; k < len; k++) {
- removed = fn.call(context, cell[k]);
- if (removed) {
- k--;
- len--;
- }
- }
- }
- }
- },
-
- getNearObject: function (point) {
- var x = this._getCoord(point.x),
- y = this._getCoord(point.y),
- i, j, k, row, cell, len, obj, dist,
- objectPoint = this._objectPoint,
- closestDistSq = this._sqCellSize,
- closest = null;
-
- for (i = y - 1; i <= y + 1; i++) {
- row = this._grid[i];
- if (row) {
-
- for (j = x - 1; j <= x + 1; j++) {
- cell = row[j];
- if (cell) {
-
- for (k = 0, len = cell.length; k < len; k++) {
- obj = cell[k];
- dist = this._sqDist(objectPoint[L.Util.stamp(obj)], point);
- if (dist < closestDistSq ||
- dist <= closestDistSq && closest === null) {
- closestDistSq = dist;
- closest = obj;
- }
- }
- }
- }
- }
- }
- return closest;
- },
-
- _getCoord: function (x) {
- var coord = Math.floor(x / this._cellSize);
- return isFinite(coord) ? coord : x;
- },
-
- _sqDist: function (p, p2) {
- var dx = p2.x - p.x,
- dy = p2.y - p.y;
- return dx * dx + dy * dy;
- }
- };
-
- /* Copyright (c) 2012 the authors listed at the following URL, and/or
- the authors of referenced articles or incorporated external code:
- http://en.literateprograms.org/Quickhull_(Javascript)?action=history&offset=20120410175256
-
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
- Retrieved from: http://en.literateprograms.org/Quickhull_(Javascript)?oldid=18434
- */
-
- (function () {
- L.QuickHull = {
-
- /*
- * @param {Object} cpt a point to be measured from the baseline
- * @param {Array} bl the baseline, as represented by a two-element
- * array of latlng objects.
- * @returns {Number} an approximate distance measure
- */
- getDistant: function (cpt, bl) {
- var vY = bl[1].lat - bl[0].lat,
- vX = bl[0].lng - bl[1].lng;
- return (vX * (cpt.lat - bl[0].lat) + vY * (cpt.lng - bl[0].lng));
- },
-
- /*
- * @param {Array} baseLine a two-element array of latlng objects
- * representing the baseline to project from
- * @param {Array} latLngs an array of latlng objects
- * @returns {Object} the maximum point and all new points to stay
- * in consideration for the hull.
- */
- findMostDistantPointFromBaseLine: function (baseLine, latLngs) {
- var maxD = 0,
- maxPt = null,
- newPoints = [],
- i, pt, d;
-
- for (i = latLngs.length - 1; i >= 0; i--) {
- pt = latLngs[i];
- d = this.getDistant(pt, baseLine);
-
- if (d > 0) {
- newPoints.push(pt);
- } else {
- continue;
- }
-
- if (d > maxD) {
- maxD = d;
- maxPt = pt;
- }
- }
-
- return { maxPoint: maxPt, newPoints: newPoints };
- },
-
-
- /*
- * Given a baseline, compute the convex hull of latLngs as an array
- * of latLngs.
- *
- * @param {Array} latLngs
- * @returns {Array}
- */
- buildConvexHull: function (baseLine, latLngs) {
- var convexHullBaseLines = [],
- t = this.findMostDistantPointFromBaseLine(baseLine, latLngs);
-
- if (t.maxPoint) { // if there is still a point "outside" the base line
- convexHullBaseLines =
- convexHullBaseLines.concat(
- this.buildConvexHull([baseLine[0], t.maxPoint], t.newPoints)
- );
- convexHullBaseLines =
- convexHullBaseLines.concat(
- this.buildConvexHull([t.maxPoint, baseLine[1]], t.newPoints)
- );
- return convexHullBaseLines;
- } else { // if there is no more point "outside" the base line, the current base line is part of the convex hull
- return [baseLine[0]];
- }
- },
-
- /*
- * Given an array of latlngs, compute a convex hull as an array
- * of latlngs
- *
- * @param {Array} latLngs
- * @returns {Array}
- */
- getConvexHull: function (latLngs) {
- // find first baseline
- var maxLat = false, minLat = false,
- maxLng = false, minLng = false,
- maxLatPt = null, minLatPt = null,
- maxLngPt = null, minLngPt = null,
- maxPt = null, minPt = null,
- i;
-
- for (i = latLngs.length - 1; i >= 0; i--) {
- var pt = latLngs[i];
- if (maxLat === false || pt.lat > maxLat) {
- maxLatPt = pt;
- maxLat = pt.lat;
- }
- if (minLat === false || pt.lat < minLat) {
- minLatPt = pt;
- minLat = pt.lat;
- }
- if (maxLng === false || pt.lng > maxLng) {
- maxLngPt = pt;
- maxLng = pt.lng;
- }
- if (minLng === false || pt.lng < minLng) {
- minLngPt = pt;
- minLng = pt.lng;
- }
- }
-
- if (minLat !== maxLat) {
- minPt = minLatPt;
- maxPt = maxLatPt;
- } else {
- minPt = minLngPt;
- maxPt = maxLngPt;
- }
-
- var ch = [].concat(this.buildConvexHull([minPt, maxPt], latLngs),
- this.buildConvexHull([maxPt, minPt], latLngs));
- return ch;
- }
- };
- }());
-
- L.MarkerCluster.include({
- getConvexHull: function () {
- var childMarkers = this.getAllChildMarkers(),
- points = [],
- p, i;
-
- for (i = childMarkers.length - 1; i >= 0; i--) {
- p = childMarkers[i].getLatLng();
- points.push(p);
- }
-
- return L.QuickHull.getConvexHull(points);
- }
- });
-
- //This code is 100% based on https://github.com/jawj/OverlappingMarkerSpiderfier-Leaflet
- //Huge thanks to jawj for implementing it first to make my job easy :-)
-
- L.MarkerCluster.include({
-
- _2PI: Math.PI * 2,
- _circleFootSeparation: 25, //related to circumference of circle
- _circleStartAngle: 0,
-
- _spiralFootSeparation: 28, //related to size of spiral (experiment!)
- _spiralLengthStart: 11,
- _spiralLengthFactor: 5,
-
- _circleSpiralSwitchover: 9, //show spiral instead of circle from this marker count upwards.
- // 0 -> always spiral; Infinity -> always circle
-
- spiderfy: function () {
- if (this._group._spiderfied === this || this._group._inZoomAnimation) {
- return;
- }
-
- var childMarkers = this.getAllChildMarkers(null, true),
- group = this._group,
- map = group._map,
- center = map.latLngToLayerPoint(this._latlng),
- positions;
-
- this._group._unspiderfy();
- this._group._spiderfied = this;
-
- //TODO Maybe: childMarkers order by distance to center
-
- if (this._group.options.spiderfyShapePositions) {
- positions = this._group.options.spiderfyShapePositions(childMarkers.length, center);
- } else if (childMarkers.length >= this._circleSpiralSwitchover) {
- positions = this._generatePointsSpiral(childMarkers.length, center);
- } else {
- center.y += 10; // Otherwise circles look wrong => hack for standard blue icon, renders differently for other icons.
- positions = this._generatePointsCircle(childMarkers.length, center);
- }
-
- this._animationSpiderfy(childMarkers, positions);
- },
-
- unspiderfy: function (zoomDetails) {
- /// Argument from zoomanim if being called in a zoom animation or null otherwise
- if (this._group._inZoomAnimation) {
- return;
- }
- this._animationUnspiderfy(zoomDetails);
-
- this._group._spiderfied = null;
- },
-
- _generatePointsCircle: function (count, centerPt) {
- var circumference = this._group.options.spiderfyDistanceMultiplier * this._circleFootSeparation * (2 + count),
- legLength = circumference / this._2PI, //radius from circumference
- angleStep = this._2PI / count,
- res = [],
- i, angle;
-
- legLength = Math.max(legLength, 35); // Minimum distance to get outside the cluster icon.
-
- res.length = count;
-
- for (i = 0; i < count; i++) { // Clockwise, like spiral.
- angle = this._circleStartAngle + i * angleStep;
- res[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round();
- }
-
- return res;
- },
-
- _generatePointsSpiral: function (count, centerPt) {
- var spiderfyDistanceMultiplier = this._group.options.spiderfyDistanceMultiplier,
- legLength = spiderfyDistanceMultiplier * this._spiralLengthStart,
- separation = spiderfyDistanceMultiplier * this._spiralFootSeparation,
- lengthFactor = spiderfyDistanceMultiplier * this._spiralLengthFactor * this._2PI,
- angle = 0,
- res = [],
- i;
-
- res.length = count;
-
- // Higher index, closer position to cluster center.
- for (i = count; i >= 0; i--) {
- // Skip the first position, so that we are already farther from center and we avoid
- // being under the default cluster icon (especially important for Circle Markers).
- if (i < count) {
- res[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round();
- }
- angle += separation / legLength + i * 0.0005;
- legLength += lengthFactor / angle;
- }
- return res;
- },
-
- _noanimationUnspiderfy: function () {
- var group = this._group,
- map = group._map,
- fg = group._featureGroup,
- childMarkers = this.getAllChildMarkers(null, true),
- m, i;
-
- group._ignoreMove = true;
-
- this.setOpacity(1);
- for (i = childMarkers.length - 1; i >= 0; i--) {
- m = childMarkers[i];
-
- fg.removeLayer(m);
-
- if (m._preSpiderfyLatlng) {
- m.setLatLng(m._preSpiderfyLatlng);
- delete m._preSpiderfyLatlng;
- }
- if (m.setZIndexOffset) {
- m.setZIndexOffset(0);
- }
-
- if (m._spiderLeg) {
- map.removeLayer(m._spiderLeg);
- delete m._spiderLeg;
- }
- }
-
- group.fire('unspiderfied', {
- cluster: this,
- markers: childMarkers
- });
- group._ignoreMove = false;
- group._spiderfied = null;
- }
- });
-
- //Non Animated versions of everything
- L.MarkerClusterNonAnimated = L.MarkerCluster.extend({
- _animationSpiderfy: function (childMarkers, positions) {
- var group = this._group,
- map = group._map,
- fg = group._featureGroup,
- legOptions = this._group.options.spiderLegPolylineOptions,
- i, m, leg, newPos;
-
- group._ignoreMove = true;
-
- // Traverse in ascending order to make sure that inner circleMarkers are on top of further legs. Normal markers are re-ordered by newPosition.
- // The reverse order trick no longer improves performance on modern browsers.
- for (i = 0; i < childMarkers.length; i++) {
- newPos = map.layerPointToLatLng(positions[i]);
- m = childMarkers[i];
-
- // Add the leg before the marker, so that in case the latter is a circleMarker, the leg is behind it.
- leg = new L.Polyline([this._latlng, newPos], legOptions);
- map.addLayer(leg);
- m._spiderLeg = leg;
-
- // Now add the marker.
- m._preSpiderfyLatlng = m._latlng;
- m.setLatLng(newPos);
- if (m.setZIndexOffset) {
- m.setZIndexOffset(1000000); //Make these appear on top of EVERYTHING
- }
-
- fg.addLayer(m);
- }
- this.setOpacity(0.3);
-
- group._ignoreMove = false;
- group.fire('spiderfied', {
- cluster: this,
- markers: childMarkers
- });
- },
-
- _animationUnspiderfy: function () {
- this._noanimationUnspiderfy();
- }
- });
-
- //Animated versions here
- L.MarkerCluster.include({
-
- _animationSpiderfy: function (childMarkers, positions) {
- var me = this,
- group = this._group,
- map = group._map,
- fg = group._featureGroup,
- thisLayerLatLng = this._latlng,
- thisLayerPos = map.latLngToLayerPoint(thisLayerLatLng),
- svg = L.Path.SVG,
- legOptions = L.extend({}, this._group.options.spiderLegPolylineOptions), // Copy the options so that we can modify them for animation.
- finalLegOpacity = legOptions.opacity,
- i, m, leg, legPath, legLength, newPos;
-
- if (finalLegOpacity === undefined) {
- finalLegOpacity = L.MarkerClusterGroup.prototype.options.spiderLegPolylineOptions.opacity;
- }
-
- if (svg) {
- // If the initial opacity of the spider leg is not 0 then it appears before the animation starts.
- legOptions.opacity = 0;
-
- // Add the class for CSS transitions.
- legOptions.className = (legOptions.className || '') + ' leaflet-cluster-spider-leg';
- } else {
- // Make sure we have a defined opacity.
- legOptions.opacity = finalLegOpacity;
- }
-
- group._ignoreMove = true;
-
- // Add markers and spider legs to map, hidden at our center point.
- // Traverse in ascending order to make sure that inner circleMarkers are on top of further legs. Normal markers are re-ordered by newPosition.
- // The reverse order trick no longer improves performance on modern browsers.
- for (i = 0; i < childMarkers.length; i++) {
- m = childMarkers[i];
-
- newPos = map.layerPointToLatLng(positions[i]);
-
- // Add the leg before the marker, so that in case the latter is a circleMarker, the leg is behind it.
- leg = new L.Polyline([thisLayerLatLng, newPos], legOptions);
- map.addLayer(leg);
- m._spiderLeg = leg;
-
- // Explanations: https://jakearchibald.com/2013/animated-line-drawing-svg/
- // In our case the transition property is declared in the CSS file.
- if (svg) {
- legPath = leg._path;
- legLength = legPath.getTotalLength() + 0.1; // Need a small extra length to avoid remaining dot in Firefox.
- legPath.style.strokeDasharray = legLength; // Just 1 length is enough, it will be duplicated.
- legPath.style.strokeDashoffset = legLength;
- }
-
- // If it is a marker, add it now and we'll animate it out
- if (m.setZIndexOffset) {
- m.setZIndexOffset(1000000); // Make normal markers appear on top of EVERYTHING
- }
- if (m.clusterHide) {
- m.clusterHide();
- }
-
- // Vectors just get immediately added
- fg.addLayer(m);
-
- if (m._setPos) {
- m._setPos(thisLayerPos);
- }
- }
-
- group._forceLayout();
- group._animationStart();
-
- // Reveal markers and spider legs.
- for (i = childMarkers.length - 1; i >= 0; i--) {
- newPos = map.layerPointToLatLng(positions[i]);
- m = childMarkers[i];
-
- //Move marker to new position
- m._preSpiderfyLatlng = m._latlng;
- m.setLatLng(newPos);
-
- if (m.clusterShow) {
- m.clusterShow();
- }
-
- // Animate leg (animation is actually delegated to CSS transition).
- if (svg) {
- leg = m._spiderLeg;
- legPath = leg._path;
- legPath.style.strokeDashoffset = 0;
- //legPath.style.strokeOpacity = finalLegOpacity;
- leg.setStyle({opacity: finalLegOpacity});
- }
- }
- this.setOpacity(0.3);
-
- group._ignoreMove = false;
-
- setTimeout(function () {
- group._animationEnd();
- group.fire('spiderfied', {
- cluster: me,
- markers: childMarkers
- });
- }, 200);
- },
-
- _animationUnspiderfy: function (zoomDetails) {
- var me = this,
- group = this._group,
- map = group._map,
- fg = group._featureGroup,
- thisLayerPos = zoomDetails ? map._latLngToNewLayerPoint(this._latlng, zoomDetails.zoom, zoomDetails.center) : map.latLngToLayerPoint(this._latlng),
- childMarkers = this.getAllChildMarkers(null, true),
- svg = L.Path.SVG,
- m, i, leg, legPath, legLength, nonAnimatable;
-
- group._ignoreMove = true;
- group._animationStart();
-
- //Make us visible and bring the child markers back in
- this.setOpacity(1);
- for (i = childMarkers.length - 1; i >= 0; i--) {
- m = childMarkers[i];
-
- //Marker was added to us after we were spiderfied
- if (!m._preSpiderfyLatlng) {
- continue;
- }
-
- //Close any popup on the marker first, otherwise setting the location of the marker will make the map scroll
- m.closePopup();
-
- //Fix up the location to the real one
- m.setLatLng(m._preSpiderfyLatlng);
- delete m._preSpiderfyLatlng;
-
- //Hack override the location to be our center
- nonAnimatable = true;
- if (m._setPos) {
- m._setPos(thisLayerPos);
- nonAnimatable = false;
- }
- if (m.clusterHide) {
- m.clusterHide();
- nonAnimatable = false;
- }
- if (nonAnimatable) {
- fg.removeLayer(m);
- }
-
- // Animate the spider leg back in (animation is actually delegated to CSS transition).
- if (svg) {
- leg = m._spiderLeg;
- legPath = leg._path;
- legLength = legPath.getTotalLength() + 0.1;
- legPath.style.strokeDashoffset = legLength;
- leg.setStyle({opacity: 0});
- }
- }
-
- group._ignoreMove = false;
-
- setTimeout(function () {
- //If we have only <= one child left then that marker will be shown on the map so don't remove it!
- var stillThereChildCount = 0;
- for (i = childMarkers.length - 1; i >= 0; i--) {
- m = childMarkers[i];
- if (m._spiderLeg) {
- stillThereChildCount++;
- }
- }
-
-
- for (i = childMarkers.length - 1; i >= 0; i--) {
- m = childMarkers[i];
-
- if (!m._spiderLeg) { //Has already been unspiderfied
- continue;
- }
-
- if (m.clusterShow) {
- m.clusterShow();
- }
- if (m.setZIndexOffset) {
- m.setZIndexOffset(0);
- }
-
- if (stillThereChildCount > 1) {
- fg.removeLayer(m);
- }
-
- map.removeLayer(m._spiderLeg);
- delete m._spiderLeg;
- }
- group._animationEnd();
- group.fire('unspiderfied', {
- cluster: me,
- markers: childMarkers
- });
- }, 200);
- }
- });
-
-
- L.MarkerClusterGroup.include({
- //The MarkerCluster currently spiderfied (if any)
- _spiderfied: null,
-
- unspiderfy: function () {
- this._unspiderfy.apply(this, arguments);
- },
-
- _spiderfierOnAdd: function () {
- this._map.on('click', this._unspiderfyWrapper, this);
-
- if (this._map.options.zoomAnimation) {
- this._map.on('zoomstart', this._unspiderfyZoomStart, this);
- }
- //Browsers without zoomAnimation or a big zoom don't fire zoomstart
- this._map.on('zoomend', this._noanimationUnspiderfy, this);
-
- if (!L.Browser.touch) {
- this._map.getRenderer(this);
- //Needs to happen in the pageload, not after, or animations don't work in webkit
- // http://stackoverflow.com/questions/8455200/svg-animate-with-dynamically-added-elements
- //Disable on touch browsers as the animation messes up on a touch zoom and isn't very noticable
- }
- },
-
- _spiderfierOnRemove: function () {
- this._map.off('click', this._unspiderfyWrapper, this);
- this._map.off('zoomstart', this._unspiderfyZoomStart, this);
- this._map.off('zoomanim', this._unspiderfyZoomAnim, this);
- this._map.off('zoomend', this._noanimationUnspiderfy, this);
-
- //Ensure that markers are back where they should be
- // Use no animation to avoid a sticky leaflet-cluster-anim class on mapPane
- this._noanimationUnspiderfy();
- },
-
- //On zoom start we add a zoomanim handler so that we are guaranteed to be last (after markers are animated)
- //This means we can define the animation they do rather than Markers doing an animation to their actual location
- _unspiderfyZoomStart: function () {
- if (!this._map) { //May have been removed from the map by a zoomEnd handler
- return;
- }
-
- this._map.on('zoomanim', this._unspiderfyZoomAnim, this);
- },
-
- _unspiderfyZoomAnim: function (zoomDetails) {
- //Wait until the first zoomanim after the user has finished touch-zooming before running the animation
- if (L.DomUtil.hasClass(this._map._mapPane, 'leaflet-touching')) {
- return;
- }
-
- this._map.off('zoomanim', this._unspiderfyZoomAnim, this);
- this._unspiderfy(zoomDetails);
- },
-
- _unspiderfyWrapper: function () {
- /// _unspiderfy but passes no arguments
- this._unspiderfy();
- },
-
- _unspiderfy: function (zoomDetails) {
- if (this._spiderfied) {
- this._spiderfied.unspiderfy(zoomDetails);
- }
- },
-
- _noanimationUnspiderfy: function () {
- if (this._spiderfied) {
- this._spiderfied._noanimationUnspiderfy();
- }
- },
-
- //If the given layer is currently being spiderfied then we unspiderfy it so it isn't on the map anymore etc
- _unspiderfyLayer: function (layer) {
- if (layer._spiderLeg) {
- this._featureGroup.removeLayer(layer);
-
- if (layer.clusterShow) {
- layer.clusterShow();
- }
- //Position will be fixed up immediately in _animationUnspiderfy
- if (layer.setZIndexOffset) {
- layer.setZIndexOffset(0);
- }
-
- this._map.removeLayer(layer._spiderLeg);
- delete layer._spiderLeg;
- }
- }
- });
-
- /**
- * Adds 1 public method to MCG and 1 to L.Marker to facilitate changing
- * markers' icon options and refreshing their icon and their parent clusters
- * accordingly (case where their iconCreateFunction uses data of childMarkers
- * to make up the cluster icon).
- */
-
-
- L.MarkerClusterGroup.include({
- /**
- * Updates the icon of all clusters which are parents of the given marker(s).
- * In singleMarkerMode, also updates the given marker(s) icon.
- * @param layers L.MarkerClusterGroup|L.LayerGroup|Array(L.Marker)|Map(L.Marker)|
- * L.MarkerCluster|L.Marker (optional) list of markers (or single marker) whose parent
- * clusters need to be updated. If not provided, retrieves all child markers of this.
- * @returns {L.MarkerClusterGroup}
- */
- refreshClusters: function (layers) {
- if (!layers) {
- layers = this._topClusterLevel.getAllChildMarkers();
- } else if (layers instanceof L.MarkerClusterGroup) {
- layers = layers._topClusterLevel.getAllChildMarkers();
- } else if (layers instanceof L.LayerGroup) {
- layers = layers._layers;
- } else if (layers instanceof L.MarkerCluster) {
- layers = layers.getAllChildMarkers();
- } else if (layers instanceof L.Marker) {
- layers = [layers];
- } // else: must be an Array(L.Marker)|Map(L.Marker)
- this._flagParentsIconsNeedUpdate(layers);
- this._refreshClustersIcons();
-
- // In case of singleMarkerMode, also re-draw the markers.
- if (this.options.singleMarkerMode) {
- this._refreshSingleMarkerModeMarkers(layers);
- }
-
- return this;
- },
-
- /**
- * Simply flags all parent clusters of the given markers as having a "dirty" icon.
- * @param layers Array(L.Marker)|Map(L.Marker) list of markers.
- * @private
- */
- _flagParentsIconsNeedUpdate: function (layers) {
- var id, parent;
-
- // Assumes layers is an Array or an Object whose prototype is non-enumerable.
- for (id in layers) {
- // Flag parent clusters' icon as "dirty", all the way up.
- // Dumb process that flags multiple times upper parents, but still
- // much more efficient than trying to be smart and make short lists,
- // at least in the case of a hierarchy following a power law:
- // http://jsperf.com/flag-nodes-in-power-hierarchy/2
- parent = layers[id].__parent;
- while (parent) {
- parent._iconNeedsUpdate = true;
- parent = parent.__parent;
- }
- }
- },
-
- /**
- * Re-draws the icon of the supplied markers.
- * To be used in singleMarkerMode only.
- * @param layers Array(L.Marker)|Map(L.Marker) list of markers.
- * @private
- */
- _refreshSingleMarkerModeMarkers: function (layers) {
- var id, layer;
-
- for (id in layers) {
- layer = layers[id];
-
- // Make sure we do not override markers that do not belong to THIS group.
- if (this.hasLayer(layer)) {
- // Need to re-create the icon first, then re-draw the marker.
- layer.setIcon(this._overrideMarkerIcon(layer));
- }
- }
- }
- });
-
- L.Marker.include({
- /**
- * Updates the given options in the marker's icon and refreshes the marker.
- * @param options map object of icon options.
- * @param directlyRefreshClusters boolean (optional) true to trigger
- * MCG.refreshClustersOf() right away with this single marker.
- * @returns {L.Marker}
- */
- refreshIconOptions: function (options, directlyRefreshClusters) {
- var icon = this.options.icon;
-
- L.setOptions(icon, options);
-
- this.setIcon(icon);
-
- // Shortcut to refresh the associated MCG clusters right away.
- // To be used when refreshing a single marker.
- // Otherwise, better use MCG.refreshClusters() once at the end with
- // the list of modified markers.
- if (directlyRefreshClusters && this.__parent) {
- this.__parent._group.refreshClusters(this);
- }
-
- return this;
- }
- });
-
- exports.MarkerClusterGroup = MarkerClusterGroup;
- exports.MarkerCluster = MarkerCluster;
-
- Object.defineProperty(exports, '__esModule', { value: true });
-
-}));
-//# sourceMappingURL=leaflet.markercluster-src.js.map
diff --git a/public old/scripts/dist/leaflet.markercluster-src.js.map b/public old/scripts/dist/leaflet.markercluster-src.js.map
deleted file mode 100644
index b176014..0000000
--- a/public old/scripts/dist/leaflet.markercluster-src.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"leaflet.markercluster-src.js","sources":["../src/MarkerClusterGroup.js","../src/MarkerCluster.js","../src/MarkerOpacity.js","../src/DistanceGrid.js","../src/MarkerCluster.QuickHull.js","../src/MarkerCluster.Spiderfier.js","../src/MarkerClusterGroup.Refresh.js"],"sourcesContent":["/*\n * L.MarkerClusterGroup extends L.FeatureGroup by clustering the markers contained within\n */\n\nexport var MarkerClusterGroup = L.MarkerClusterGroup = L.FeatureGroup.extend({\n\n\toptions: {\n\t\tmaxClusterRadius: 80, //A cluster will cover at most this many pixels from its center\n\t\ticonCreateFunction: null,\n\t\tclusterPane: L.Marker.prototype.options.pane,\n\n\t\tspiderfyOnEveryZoom: false,\n\t\tspiderfyOnMaxZoom: true,\n\t\tshowCoverageOnHover: true,\n\t\tzoomToBoundsOnClick: true,\n\t\tsingleMarkerMode: false,\n\n\t\tdisableClusteringAtZoom: null,\n\n\t\t// Setting this to false prevents the removal of any clusters outside of the viewpoint, which\n\t\t// is the default behaviour for performance reasons.\n\t\tremoveOutsideVisibleBounds: true,\n\n\t\t// Set to false to disable all animations (zoom and spiderfy).\n\t\t// If false, option animateAddingMarkers below has no effect.\n\t\t// If L.DomUtil.TRANSITION is falsy, this option has no effect.\n\t\tanimate: true,\n\n\t\t//Whether to animate adding markers after adding the MarkerClusterGroup to the map\n\t\t// If you are adding individual markers set to true, if adding bulk markers leave false for massive performance gains.\n\t\tanimateAddingMarkers: false,\n\n\t\t// Make it possible to provide custom function to calculate spiderfy shape positions\n\t\tspiderfyShapePositions: null,\n\n\t\t//Increase to increase the distance away that spiderfied markers appear from the center\n\t\tspiderfyDistanceMultiplier: 1,\n\n\t\t// Make it possible to specify a polyline options on a spider leg\n\t\tspiderLegPolylineOptions: { weight: 1.5, color: '#222', opacity: 0.5 },\n\n\t\t// When bulk adding layers, adds markers in chunks. Means addLayers may not add all the layers in the call, others will be loaded during setTimeouts\n\t\tchunkedLoading: false,\n\t\tchunkInterval: 200, // process markers for a maximum of ~ n milliseconds (then trigger the chunkProgress callback)\n\t\tchunkDelay: 50, // at the end of each interval, give n milliseconds back to system/browser\n\t\tchunkProgress: null, // progress callback: function(processed, total, elapsed) (e.g. for a progress indicator)\n\n\t\t//Options to pass to the L.Polygon constructor\n\t\tpolygonOptions: {}\n\t},\n\n\tinitialize: function (options) {\n\t\tL.Util.setOptions(this, options);\n\t\tif (!this.options.iconCreateFunction) {\n\t\t\tthis.options.iconCreateFunction = this._defaultIconCreateFunction;\n\t\t}\n\n\t\tthis._featureGroup = L.featureGroup();\n\t\tthis._featureGroup.addEventParent(this);\n\n\t\tthis._nonPointGroup = L.featureGroup();\n\t\tthis._nonPointGroup.addEventParent(this);\n\n\t\tthis._inZoomAnimation = 0;\n\t\tthis._needsClustering = [];\n\t\tthis._needsRemoving = []; //Markers removed while we aren't on the map need to be kept track of\n\t\t//The bounds of the currently shown area (from _getExpandedVisibleBounds) Updated on zoom/move\n\t\tthis._currentShownBounds = null;\n\n\t\tthis._queue = [];\n\n\t\tthis._childMarkerEventHandlers = {\n\t\t\t'dragstart': this._childMarkerDragStart,\n\t\t\t'move': this._childMarkerMoved,\n\t\t\t'dragend': this._childMarkerDragEnd,\n\t\t};\n\n\t\t// Hook the appropriate animation methods.\n\t\tvar animate = L.DomUtil.TRANSITION && this.options.animate;\n\t\tL.extend(this, animate ? this._withAnimation : this._noAnimation);\n\t\t// Remember which MarkerCluster class to instantiate (animated or not).\n\t\tthis._markerCluster = animate ? L.MarkerCluster : L.MarkerClusterNonAnimated;\n\t},\n\n\taddLayer: function (layer) {\n\n\t\tif (layer instanceof L.LayerGroup) {\n\t\t\treturn this.addLayers([layer]);\n\t\t}\n\n\t\t//Don't cluster non point data\n\t\tif (!layer.getLatLng) {\n\t\t\tthis._nonPointGroup.addLayer(layer);\n\t\t\tthis.fire('layeradd', { layer: layer });\n\t\t\treturn this;\n\t\t}\n\n\t\tif (!this._map) {\n\t\t\tthis._needsClustering.push(layer);\n\t\t\tthis.fire('layeradd', { layer: layer });\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this.hasLayer(layer)) {\n\t\t\treturn this;\n\t\t}\n\n\n\t\t//If we have already clustered we'll need to add this one to a cluster\n\n\t\tif (this._unspiderfy) {\n\t\t\tthis._unspiderfy();\n\t\t}\n\n\t\tthis._addLayer(layer, this._maxZoom);\n\t\tthis.fire('layeradd', { layer: layer });\n\n\t\t// Refresh bounds and weighted positions.\n\t\tthis._topClusterLevel._recalculateBounds();\n\n\t\tthis._refreshClustersIcons();\n\n\t\t//Work out what is visible\n\t\tvar visibleLayer = layer,\n\t\t currentZoom = this._zoom;\n\t\tif (layer.__parent) {\n\t\t\twhile (visibleLayer.__parent._zoom >= currentZoom) {\n\t\t\t\tvisibleLayer = visibleLayer.__parent;\n\t\t\t}\n\t\t}\n\n\t\tif (this._currentShownBounds.contains(visibleLayer.getLatLng())) {\n\t\t\tif (this.options.animateAddingMarkers) {\n\t\t\t\tthis._animationAddLayer(layer, visibleLayer);\n\t\t\t} else {\n\t\t\t\tthis._animationAddLayerNonAnimated(layer, visibleLayer);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\tremoveLayer: function (layer) {\n\n\t\tif (layer instanceof L.LayerGroup) {\n\t\t\treturn this.removeLayers([layer]);\n\t\t}\n\n\t\t//Non point layers\n\t\tif (!layer.getLatLng) {\n\t\t\tthis._nonPointGroup.removeLayer(layer);\n\t\t\tthis.fire('layerremove', { layer: layer });\n\t\t\treturn this;\n\t\t}\n\n\t\tif (!this._map) {\n\t\t\tif (!this._arraySplice(this._needsClustering, layer) && this.hasLayer(layer)) {\n\t\t\t\tthis._needsRemoving.push({ layer: layer, latlng: layer._latlng });\n\t\t\t}\n\t\t\tthis.fire('layerremove', { layer: layer });\n\t\t\treturn this;\n\t\t}\n\n\t\tif (!layer.__parent) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this._unspiderfy) {\n\t\t\tthis._unspiderfy();\n\t\t\tthis._unspiderfyLayer(layer);\n\t\t}\n\n\t\t//Remove the marker from clusters\n\t\tthis._removeLayer(layer, true);\n\t\tthis.fire('layerremove', { layer: layer });\n\n\t\t// Refresh bounds and weighted positions.\n\t\tthis._topClusterLevel._recalculateBounds();\n\n\t\tthis._refreshClustersIcons();\n\n\t\tlayer.off(this._childMarkerEventHandlers, this);\n\n\t\tif (this._featureGroup.hasLayer(layer)) {\n\t\t\tthis._featureGroup.removeLayer(layer);\n\t\t\tif (layer.clusterShow) {\n\t\t\t\tlayer.clusterShow();\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t//Takes an array of markers and adds them in bulk\n\taddLayers: function (layersArray, skipLayerAddEvent) {\n\t\tif (!L.Util.isArray(layersArray)) {\n\t\t\treturn this.addLayer(layersArray);\n\t\t}\n\n\t\tvar fg = this._featureGroup,\n\t\t npg = this._nonPointGroup,\n\t\t chunked = this.options.chunkedLoading,\n\t\t chunkInterval = this.options.chunkInterval,\n\t\t chunkProgress = this.options.chunkProgress,\n\t\t l = layersArray.length,\n\t\t offset = 0,\n\t\t originalArray = true,\n\t\t m;\n\n\t\tif (this._map) {\n\t\t\tvar started = (new Date()).getTime();\n\t\t\tvar process = L.bind(function () {\n\t\t\t\tvar start = (new Date()).getTime();\n\n\t\t\t\t// Make sure to unspiderfy before starting to add some layers\n\t\t\t\tif (this._map && this._unspiderfy) {\n\t\t\t\t\tthis._unspiderfy();\n\t\t\t\t}\n\n\t\t\t\tfor (; offset < l; offset++) {\n\t\t\t\t\tif (chunked && offset % 200 === 0) {\n\t\t\t\t\t\t// every couple hundred markers, instrument the time elapsed since processing started:\n\t\t\t\t\t\tvar elapsed = (new Date()).getTime() - start;\n\t\t\t\t\t\tif (elapsed > chunkInterval) {\n\t\t\t\t\t\t\tbreak; // been working too hard, time to take a break :-)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tm = layersArray[offset];\n\n\t\t\t\t\t// Group of layers, append children to layersArray and skip.\n\t\t\t\t\t// Side effects:\n\t\t\t\t\t// - Total increases, so chunkProgress ratio jumps backward.\n\t\t\t\t\t// - Groups are not included in this group, only their non-group child layers (hasLayer).\n\t\t\t\t\t// Changing array length while looping does not affect performance in current browsers:\n\t\t\t\t\t// http://jsperf.com/for-loop-changing-length/6\n\t\t\t\t\tif (m instanceof L.LayerGroup) {\n\t\t\t\t\t\tif (originalArray) {\n\t\t\t\t\t\t\tlayersArray = layersArray.slice();\n\t\t\t\t\t\t\toriginalArray = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._extractNonGroupLayers(m, layersArray);\n\t\t\t\t\t\tl = layersArray.length;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t//Not point data, can't be clustered\n\t\t\t\t\tif (!m.getLatLng) {\n\t\t\t\t\t\tnpg.addLayer(m);\n\t\t\t\t\t\tif (!skipLayerAddEvent) {\n\t\t\t\t\t\t\tthis.fire('layeradd', { layer: m });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.hasLayer(m)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._addLayer(m, this._maxZoom);\n\t\t\t\t\tif (!skipLayerAddEvent) {\n\t\t\t\t\t\tthis.fire('layeradd', { layer: m });\n\t\t\t\t\t}\n\n\t\t\t\t\t//If we just made a cluster of size 2 then we need to remove the other marker from the map (if it is) or we never will\n\t\t\t\t\tif (m.__parent) {\n\t\t\t\t\t\tif (m.__parent.getChildCount() === 2) {\n\t\t\t\t\t\t\tvar markers = m.__parent.getAllChildMarkers(),\n\t\t\t\t\t\t\t otherMarker = markers[0] === m ? markers[1] : markers[0];\n\t\t\t\t\t\t\tfg.removeLayer(otherMarker);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (chunkProgress) {\n\t\t\t\t\t// report progress and time elapsed:\n\t\t\t\t\tchunkProgress(offset, l, (new Date()).getTime() - started);\n\t\t\t\t}\n\n\t\t\t\t// Completed processing all markers.\n\t\t\t\tif (offset === l) {\n\n\t\t\t\t\t// Refresh bounds and weighted positions.\n\t\t\t\t\tthis._topClusterLevel._recalculateBounds();\n\n\t\t\t\t\tthis._refreshClustersIcons();\n\n\t\t\t\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds);\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout(process, this.options.chunkDelay);\n\t\t\t\t}\n\t\t\t}, this);\n\n\t\t\tprocess();\n\t\t} else {\n\t\t\tvar needsClustering = this._needsClustering;\n\n\t\t\tfor (; offset < l; offset++) {\n\t\t\t\tm = layersArray[offset];\n\n\t\t\t\t// Group of layers, append children to layersArray and skip.\n\t\t\t\tif (m instanceof L.LayerGroup) {\n\t\t\t\t\tif (originalArray) {\n\t\t\t\t\t\tlayersArray = layersArray.slice();\n\t\t\t\t\t\toriginalArray = false;\n\t\t\t\t\t}\n\t\t\t\t\tthis._extractNonGroupLayers(m, layersArray);\n\t\t\t\t\tl = layersArray.length;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t//Not point data, can't be clustered\n\t\t\t\tif (!m.getLatLng) {\n\t\t\t\t\tnpg.addLayer(m);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (this.hasLayer(m)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tneedsClustering.push(m);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t//Takes an array of markers and removes them in bulk\n\tremoveLayers: function (layersArray) {\n\t\tvar i, m,\n\t\t l = layersArray.length,\n\t\t fg = this._featureGroup,\n\t\t npg = this._nonPointGroup,\n\t\t originalArray = true;\n\n\t\tif (!this._map) {\n\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\tm = layersArray[i];\n\n\t\t\t\t// Group of layers, append children to layersArray and skip.\n\t\t\t\tif (m instanceof L.LayerGroup) {\n\t\t\t\t\tif (originalArray) {\n\t\t\t\t\t\tlayersArray = layersArray.slice();\n\t\t\t\t\t\toriginalArray = false;\n\t\t\t\t\t}\n\t\t\t\t\tthis._extractNonGroupLayers(m, layersArray);\n\t\t\t\t\tl = layersArray.length;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis._arraySplice(this._needsClustering, m);\n\t\t\t\tnpg.removeLayer(m);\n\t\t\t\tif (this.hasLayer(m)) {\n\t\t\t\t\tthis._needsRemoving.push({ layer: m, latlng: m._latlng });\n\t\t\t\t}\n\t\t\t\tthis.fire('layerremove', { layer: m });\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this._unspiderfy) {\n\t\t\tthis._unspiderfy();\n\n\t\t\t// Work on a copy of the array, so that next loop is not affected.\n\t\t\tvar layersArray2 = layersArray.slice(),\n\t\t\t l2 = l;\n\t\t\tfor (i = 0; i < l2; i++) {\n\t\t\t\tm = layersArray2[i];\n\n\t\t\t\t// Group of layers, append children to layersArray and skip.\n\t\t\t\tif (m instanceof L.LayerGroup) {\n\t\t\t\t\tthis._extractNonGroupLayers(m, layersArray2);\n\t\t\t\t\tl2 = layersArray2.length;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis._unspiderfyLayer(m);\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0; i < l; i++) {\n\t\t\tm = layersArray[i];\n\n\t\t\t// Group of layers, append children to layersArray and skip.\n\t\t\tif (m instanceof L.LayerGroup) {\n\t\t\t\tif (originalArray) {\n\t\t\t\t\tlayersArray = layersArray.slice();\n\t\t\t\t\toriginalArray = false;\n\t\t\t\t}\n\t\t\t\tthis._extractNonGroupLayers(m, layersArray);\n\t\t\t\tl = layersArray.length;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!m.__parent) {\n\t\t\t\tnpg.removeLayer(m);\n\t\t\t\tthis.fire('layerremove', { layer: m });\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis._removeLayer(m, true, true);\n\t\t\tthis.fire('layerremove', { layer: m });\n\n\t\t\tif (fg.hasLayer(m)) {\n\t\t\t\tfg.removeLayer(m);\n\t\t\t\tif (m.clusterShow) {\n\t\t\t\t\tm.clusterShow();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Refresh bounds and weighted positions.\n\t\tthis._topClusterLevel._recalculateBounds();\n\n\t\tthis._refreshClustersIcons();\n\n\t\t//Fix up the clusters and markers on the map\n\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds);\n\n\t\treturn this;\n\t},\n\n\t//Removes all layers from the MarkerClusterGroup\n\tclearLayers: function () {\n\t\t//Need our own special implementation as the LayerGroup one doesn't work for us\n\n\t\t//If we aren't on the map (yet), blow away the markers we know of\n\t\tif (!this._map) {\n\t\t\tthis._needsClustering = [];\n\t\t\tthis._needsRemoving = [];\n\t\t\tdelete this._gridClusters;\n\t\t\tdelete this._gridUnclustered;\n\t\t}\n\n\t\tif (this._noanimationUnspiderfy) {\n\t\t\tthis._noanimationUnspiderfy();\n\t\t}\n\n\t\t//Remove all the visible layers\n\t\tthis._featureGroup.clearLayers();\n\t\tthis._nonPointGroup.clearLayers();\n\n\t\tthis.eachLayer(function (marker) {\n\t\t\tmarker.off(this._childMarkerEventHandlers, this);\n\t\t\tdelete marker.__parent;\n\t\t}, this);\n\n\t\tif (this._map) {\n\t\t\t//Reset _topClusterLevel and the DistanceGrids\n\t\t\tthis._generateInitialClusters();\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t//Override FeatureGroup.getBounds as it doesn't work\n\tgetBounds: function () {\n\t\tvar bounds = new L.LatLngBounds();\n\n\t\tif (this._topClusterLevel) {\n\t\t\tbounds.extend(this._topClusterLevel._bounds);\n\t\t}\n\n\t\tfor (var i = this._needsClustering.length - 1; i >= 0; i--) {\n\t\t\tbounds.extend(this._needsClustering[i].getLatLng());\n\t\t}\n\n\t\tbounds.extend(this._nonPointGroup.getBounds());\n\n\t\treturn bounds;\n\t},\n\n\t//Overrides LayerGroup.eachLayer\n\teachLayer: function (method, context) {\n\t\tvar markers = this._needsClustering.slice(),\n\t\t\tneedsRemoving = this._needsRemoving,\n\t\t\tthisNeedsRemoving, i, j;\n\n\t\tif (this._topClusterLevel) {\n\t\t\tthis._topClusterLevel.getAllChildMarkers(markers);\n\t\t}\n\n\t\tfor (i = markers.length - 1; i >= 0; i--) {\n\t\t\tthisNeedsRemoving = true;\n\n\t\t\tfor (j = needsRemoving.length - 1; j >= 0; j--) {\n\t\t\t\tif (needsRemoving[j].layer === markers[i]) {\n\t\t\t\t\tthisNeedsRemoving = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (thisNeedsRemoving) {\n\t\t\t\tmethod.call(context, markers[i]);\n\t\t\t}\n\t\t}\n\n\t\tthis._nonPointGroup.eachLayer(method, context);\n\t},\n\n\t//Overrides LayerGroup.getLayers\n\tgetLayers: function () {\n\t\tvar layers = [];\n\t\tthis.eachLayer(function (l) {\n\t\t\tlayers.push(l);\n\t\t});\n\t\treturn layers;\n\t},\n\n\t//Overrides LayerGroup.getLayer, WARNING: Really bad performance\n\tgetLayer: function (id) {\n\t\tvar result = null;\n\n\t\tid = parseInt(id, 10);\n\n\t\tthis.eachLayer(function (l) {\n\t\t\tif (L.stamp(l) === id) {\n\t\t\t\tresult = l;\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t},\n\n\t//Returns true if the given layer is in this MarkerClusterGroup\n\thasLayer: function (layer) {\n\t\tif (!layer) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar i, anArray = this._needsClustering;\n\n\t\tfor (i = anArray.length - 1; i >= 0; i--) {\n\t\t\tif (anArray[i] === layer) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tanArray = this._needsRemoving;\n\t\tfor (i = anArray.length - 1; i >= 0; i--) {\n\t\t\tif (anArray[i].layer === layer) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn !!(layer.__parent && layer.__parent._group === this) || this._nonPointGroup.hasLayer(layer);\n\t},\n\n\t//Zoom down to show the given layer (spiderfying if necessary) then calls the callback\n\tzoomToShowLayer: function (layer, callback) {\n\n\t\tvar map = this._map;\n\n\t\tif (typeof callback !== 'function') {\n\t\t\tcallback = function () {};\n\t\t}\n\n\t\tvar showMarker = function () {\n\t\t\t// Assumes that map.hasLayer checks for direct appearance on map, not recursively calling\n\t\t\t// hasLayer on Layer Groups that are on map (typically not calling this MarkerClusterGroup.hasLayer, which would always return true)\n\t\t\tif ((map.hasLayer(layer) || map.hasLayer(layer.__parent)) && !this._inZoomAnimation) {\n\t\t\t\tthis._map.off('moveend', showMarker, this);\n\t\t\t\tthis.off('animationend', showMarker, this);\n\n\t\t\t\tif (map.hasLayer(layer)) {\n\t\t\t\t\tcallback();\n\t\t\t\t} else if (layer.__parent._icon) {\n\t\t\t\t\tthis.once('spiderfied', callback, this);\n\t\t\t\t\tlayer.__parent.spiderfy();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (layer._icon && this._map.getBounds().contains(layer.getLatLng())) {\n\t\t\t//Layer is visible ond on screen, immediate return\n\t\t\tcallback();\n\t\t} else if (layer.__parent._zoom < Math.round(this._map._zoom)) {\n\t\t\t//Layer should be visible at this zoom level. It must not be on screen so just pan over to it\n\t\t\tthis._map.on('moveend', showMarker, this);\n\t\t\tthis._map.panTo(layer.getLatLng());\n\t\t} else {\n\t\t\tthis._map.on('moveend', showMarker, this);\n\t\t\tthis.on('animationend', showMarker, this);\n\t\t\tlayer.__parent.zoomToBounds();\n\t\t}\n\t},\n\n\t//Overrides FeatureGroup.onAdd\n\tonAdd: function (map) {\n\t\tthis._map = map;\n\t\tvar i, l, layer;\n\n\t\tif (!isFinite(this._map.getMaxZoom())) {\n\t\t\tthrow \"Map has no maxZoom specified\";\n\t\t}\n\n\t\tthis._featureGroup.addTo(map);\n\t\tthis._nonPointGroup.addTo(map);\n\n\t\tif (!this._gridClusters) {\n\t\t\tthis._generateInitialClusters();\n\t\t}\n\n\t\tthis._maxLat = map.options.crs.projection.MAX_LATITUDE;\n\n\t\t//Restore all the positions as they are in the MCG before removing them\n\t\tfor (i = 0, l = this._needsRemoving.length; i < l; i++) {\n\t\t\tlayer = this._needsRemoving[i];\n\t\t\tlayer.newlatlng = layer.layer._latlng;\n\t\t\tlayer.layer._latlng = layer.latlng;\n\t\t}\n\t\t//Remove them, then restore their new positions\n\t\tfor (i = 0, l = this._needsRemoving.length; i < l; i++) {\n\t\t\tlayer = this._needsRemoving[i];\n\t\t\tthis._removeLayer(layer.layer, true);\n\t\t\tlayer.layer._latlng = layer.newlatlng;\n\t\t}\n\t\tthis._needsRemoving = [];\n\n\t\t//Remember the current zoom level and bounds\n\t\tthis._zoom = Math.round(this._map._zoom);\n\t\tthis._currentShownBounds = this._getExpandedVisibleBounds();\n\n\t\tthis._map.on('zoomend', this._zoomEnd, this);\n\t\tthis._map.on('moveend', this._moveEnd, this);\n\n\t\tif (this._spiderfierOnAdd) { //TODO FIXME: Not sure how to have spiderfier add something on here nicely\n\t\t\tthis._spiderfierOnAdd();\n\t\t}\n\n\t\tthis._bindEvents();\n\n\t\t//Actually add our markers to the map:\n\t\tl = this._needsClustering;\n\t\tthis._needsClustering = [];\n\t\tthis.addLayers(l, true);\n\t},\n\n\t//Overrides FeatureGroup.onRemove\n\tonRemove: function (map) {\n\t\tmap.off('zoomend', this._zoomEnd, this);\n\t\tmap.off('moveend', this._moveEnd, this);\n\n\t\tthis._unbindEvents();\n\n\t\t//In case we are in a cluster animation\n\t\tthis._map._mapPane.className = this._map._mapPane.className.replace(' leaflet-cluster-anim', '');\n\n\t\tif (this._spiderfierOnRemove) { //TODO FIXME: Not sure how to have spiderfier add something on here nicely\n\t\t\tthis._spiderfierOnRemove();\n\t\t}\n\n\t\tdelete this._maxLat;\n\n\t\t//Clean up all the layers we added to the map\n\t\tthis._hideCoverage();\n\t\tthis._featureGroup.remove();\n\t\tthis._nonPointGroup.remove();\n\n\t\tthis._featureGroup.clearLayers();\n\n\t\tthis._map = null;\n\t},\n\n\tgetVisibleParent: function (marker) {\n\t\tvar vMarker = marker;\n\t\twhile (vMarker && !vMarker._icon) {\n\t\t\tvMarker = vMarker.__parent;\n\t\t}\n\t\treturn vMarker || null;\n\t},\n\n\t//Remove the given object from the given array\n\t_arraySplice: function (anArray, obj) {\n\t\tfor (var i = anArray.length - 1; i >= 0; i--) {\n\t\t\tif (anArray[i] === obj) {\n\t\t\t\tanArray.splice(i, 1);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Removes a marker from all _gridUnclustered zoom levels, starting at the supplied zoom.\n\t * @param marker to be removed from _gridUnclustered.\n\t * @param z integer bottom start zoom level (included)\n\t * @private\n\t */\n\t_removeFromGridUnclustered: function (marker, z) {\n\t\tvar map = this._map,\n\t\t gridUnclustered = this._gridUnclustered,\n\t\t\tminZoom = Math.floor(this._map.getMinZoom());\n\n\t\tfor (; z >= minZoom; z--) {\n\t\t\tif (!gridUnclustered[z].removeObject(marker, map.project(marker.getLatLng(), z))) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t},\n\n\t_childMarkerDragStart: function (e) {\n\t\te.target.__dragStart = e.target._latlng;\n\t},\n\n\t_childMarkerMoved: function (e) {\n\t\tif (!this._ignoreMove && !e.target.__dragStart) {\n\t\t\tvar isPopupOpen = e.target._popup && e.target._popup.isOpen();\n\n\t\t\tthis._moveChild(e.target, e.oldLatLng, e.latlng);\n\n\t\t\tif (isPopupOpen) {\n\t\t\t\te.target.openPopup();\n\t\t\t}\n\t\t}\n\t},\n\n\t_moveChild: function (layer, from, to) {\n\t\tlayer._latlng = from;\n\t\tthis.removeLayer(layer);\n\n\t\tlayer._latlng = to;\n\t\tthis.addLayer(layer);\n\t},\n\n\t_childMarkerDragEnd: function (e) {\n\t\tvar dragStart = e.target.__dragStart;\n\t\tdelete e.target.__dragStart;\n\t\tif (dragStart) {\n\t\t\tthis._moveChild(e.target, dragStart, e.target._latlng);\n\t\t}\t\t\n\t},\n\n\n\t//Internal function for removing a marker from everything.\n\t//dontUpdateMap: set to true if you will handle updating the map manually (for bulk functions)\n\t_removeLayer: function (marker, removeFromDistanceGrid, dontUpdateMap) {\n\t\tvar gridClusters = this._gridClusters,\n\t\t\tgridUnclustered = this._gridUnclustered,\n\t\t\tfg = this._featureGroup,\n\t\t\tmap = this._map,\n\t\t\tminZoom = Math.floor(this._map.getMinZoom());\n\n\t\t//Remove the marker from distance clusters it might be in\n\t\tif (removeFromDistanceGrid) {\n\t\t\tthis._removeFromGridUnclustered(marker, this._maxZoom);\n\t\t}\n\n\t\t//Work our way up the clusters removing them as we go if required\n\t\tvar cluster = marker.__parent,\n\t\t\tmarkers = cluster._markers,\n\t\t\totherMarker;\n\n\t\t//Remove the marker from the immediate parents marker list\n\t\tthis._arraySplice(markers, marker);\n\n\t\twhile (cluster) {\n\t\t\tcluster._childCount--;\n\t\t\tcluster._boundsNeedUpdate = true;\n\n\t\t\tif (cluster._zoom < minZoom) {\n\t\t\t\t//Top level, do nothing\n\t\t\t\tbreak;\n\t\t\t} else if (removeFromDistanceGrid && cluster._childCount <= 1) { //Cluster no longer required\n\t\t\t\t//We need to push the other marker up to the parent\n\t\t\t\totherMarker = cluster._markers[0] === marker ? cluster._markers[1] : cluster._markers[0];\n\n\t\t\t\t//Update distance grid\n\t\t\t\tgridClusters[cluster._zoom].removeObject(cluster, map.project(cluster._cLatLng, cluster._zoom));\n\t\t\t\tgridUnclustered[cluster._zoom].addObject(otherMarker, map.project(otherMarker.getLatLng(), cluster._zoom));\n\n\t\t\t\t//Move otherMarker up to parent\n\t\t\t\tthis._arraySplice(cluster.__parent._childClusters, cluster);\n\t\t\t\tcluster.__parent._markers.push(otherMarker);\n\t\t\t\totherMarker.__parent = cluster.__parent;\n\n\t\t\t\tif (cluster._icon) {\n\t\t\t\t\t//Cluster is currently on the map, need to put the marker on the map instead\n\t\t\t\t\tfg.removeLayer(cluster);\n\t\t\t\t\tif (!dontUpdateMap) {\n\t\t\t\t\t\tfg.addLayer(otherMarker);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcluster._iconNeedsUpdate = true;\n\t\t\t}\n\n\t\t\tcluster = cluster.__parent;\n\t\t}\n\n\t\tdelete marker.__parent;\n\t},\n\n\t_isOrIsParent: function (el, oel) {\n\t\twhile (oel) {\n\t\t\tif (el === oel) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\toel = oel.parentNode;\n\t\t}\n\t\treturn false;\n\t},\n\n\t//Override L.Evented.fire\n\tfire: function (type, data, propagate) {\n\t\tif (data && data.layer instanceof L.MarkerCluster) {\n\t\t\t//Prevent multiple clustermouseover/off events if the icon is made up of stacked divs (Doesn't work in ie <= 8, no relatedTarget)\n\t\t\tif (data.originalEvent && this._isOrIsParent(data.layer._icon, data.originalEvent.relatedTarget)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttype = 'cluster' + type;\n\t\t}\n\n\t\tL.FeatureGroup.prototype.fire.call(this, type, data, propagate);\n\t},\n\n\t//Override L.Evented.listens\n\tlistens: function (type, propagate) {\n\t\treturn L.FeatureGroup.prototype.listens.call(this, type, propagate) || L.FeatureGroup.prototype.listens.call(this, 'cluster' + type, propagate);\n\t},\n\n\t//Default functionality\n\t_defaultIconCreateFunction: function (cluster) {\n\t\tvar childCount = cluster.getChildCount();\n\n\t\tvar c = ' marker-cluster-';\n\t\tif (childCount < 10) {\n\t\t\tc += 'small';\n\t\t} else if (childCount < 100) {\n\t\t\tc += 'medium';\n\t\t} else {\n\t\t\tc += 'large';\n\t\t}\n\n\t\treturn new L.DivIcon({ html: '' + childCount + '
', className: 'marker-cluster' + c, iconSize: new L.Point(40, 40) });\n\t},\n\n\t_bindEvents: function () {\n\t\tvar map = this._map,\n\t\t spiderfyOnMaxZoom = this.options.spiderfyOnMaxZoom,\n\t\t showCoverageOnHover = this.options.showCoverageOnHover,\n\t\t zoomToBoundsOnClick = this.options.zoomToBoundsOnClick,\n\t\t spiderfyOnEveryZoom = this.options.spiderfyOnEveryZoom;\n\n\t\t//Zoom on cluster click or spiderfy if we are at the lowest level\n\t\tif (spiderfyOnMaxZoom || zoomToBoundsOnClick || spiderfyOnEveryZoom) {\n\t\t\tthis.on('clusterclick clusterkeypress', this._zoomOrSpiderfy, this);\n\t\t}\n\n\t\t//Show convex hull (boundary) polygon on mouse over\n\t\tif (showCoverageOnHover) {\n\t\t\tthis.on('clustermouseover', this._showCoverage, this);\n\t\t\tthis.on('clustermouseout', this._hideCoverage, this);\n\t\t\tmap.on('zoomend', this._hideCoverage, this);\n\t\t}\n\t},\n\n\t_zoomOrSpiderfy: function (e) {\n\t\tvar cluster = e.layer,\n\t\t bottomCluster = cluster;\n\n\t\tif (e.type === 'clusterkeypress' && e.originalEvent && e.originalEvent.keyCode !== 13) {\n\t\t\treturn;\n\t\t}\n\n\t\twhile (bottomCluster._childClusters.length === 1) {\n\t\t\tbottomCluster = bottomCluster._childClusters[0];\n\t\t}\n\n\t\tif (bottomCluster._zoom === this._maxZoom &&\n\t\t\tbottomCluster._childCount === cluster._childCount &&\n\t\t\tthis.options.spiderfyOnMaxZoom) {\n\n\t\t\t// All child markers are contained in a single cluster from this._maxZoom to this cluster.\n\t\t\tcluster.spiderfy();\n\t\t} else if (this.options.zoomToBoundsOnClick) {\n\t\t\tcluster.zoomToBounds();\n\t\t}\n\n\t\tif (this.options.spiderfyOnEveryZoom) {\n\t\t\tcluster.spiderfy();\n\t\t}\n\n\t\t// Focus the map again for keyboard users.\n\t\tif (e.originalEvent && e.originalEvent.keyCode === 13) {\n\t\t\tthis._map._container.focus();\n\t\t}\n\t},\n\n\t_showCoverage: function (e) {\n\t\tvar map = this._map;\n\t\tif (this._inZoomAnimation) {\n\t\t\treturn;\n\t\t}\n\t\tif (this._shownPolygon) {\n\t\t\tmap.removeLayer(this._shownPolygon);\n\t\t}\n\t\tif (e.layer.getChildCount() > 2 && e.layer !== this._spiderfied) {\n\t\t\tthis._shownPolygon = new L.Polygon(e.layer.getConvexHull(), this.options.polygonOptions);\n\t\t\tmap.addLayer(this._shownPolygon);\n\t\t}\n\t},\n\n\t_hideCoverage: function () {\n\t\tif (this._shownPolygon) {\n\t\t\tthis._map.removeLayer(this._shownPolygon);\n\t\t\tthis._shownPolygon = null;\n\t\t}\n\t},\n\n\t_unbindEvents: function () {\n\t\tvar spiderfyOnMaxZoom = this.options.spiderfyOnMaxZoom,\n\t\t\tshowCoverageOnHover = this.options.showCoverageOnHover,\n\t\t\tzoomToBoundsOnClick = this.options.zoomToBoundsOnClick,\n\t\t\tspiderfyOnEveryZoom = this.options.spiderfyOnEveryZoom,\n\t\t\tmap = this._map;\n\n\t\tif (spiderfyOnMaxZoom || zoomToBoundsOnClick || spiderfyOnEveryZoom) {\n\t\t\tthis.off('clusterclick clusterkeypress', this._zoomOrSpiderfy, this);\n\t\t}\n\t\tif (showCoverageOnHover) {\n\t\t\tthis.off('clustermouseover', this._showCoverage, this);\n\t\t\tthis.off('clustermouseout', this._hideCoverage, this);\n\t\t\tmap.off('zoomend', this._hideCoverage, this);\n\t\t}\n\t},\n\n\t_zoomEnd: function () {\n\t\tif (!this._map) { //May have been removed from the map by a zoomEnd handler\n\t\t\treturn;\n\t\t}\n\t\tthis._mergeSplitClusters();\n\n\t\tthis._zoom = Math.round(this._map._zoom);\n\t\tthis._currentShownBounds = this._getExpandedVisibleBounds();\n\t},\n\n\t_moveEnd: function () {\n\t\tif (this._inZoomAnimation) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar newBounds = this._getExpandedVisibleBounds();\n\n\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), this._zoom, newBounds);\n\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, Math.round(this._map._zoom), newBounds);\n\n\t\tthis._currentShownBounds = newBounds;\n\t\treturn;\n\t},\n\n\t_generateInitialClusters: function () {\n\t\tvar maxZoom = Math.ceil(this._map.getMaxZoom()),\n\t\t\tminZoom = Math.floor(this._map.getMinZoom()),\n\t\t\tradius = this.options.maxClusterRadius,\n\t\t\tradiusFn = radius;\n\n\t\t//If we just set maxClusterRadius to a single number, we need to create\n\t\t//a simple function to return that number. Otherwise, we just have to\n\t\t//use the function we've passed in.\n\t\tif (typeof radius !== \"function\") {\n\t\t\tradiusFn = function () { return radius; };\n\t\t}\n\n\t\tif (this.options.disableClusteringAtZoom !== null) {\n\t\t\tmaxZoom = this.options.disableClusteringAtZoom - 1;\n\t\t}\n\t\tthis._maxZoom = maxZoom;\n\t\tthis._gridClusters = {};\n\t\tthis._gridUnclustered = {};\n\n\t\t//Set up DistanceGrids for each zoom\n\t\tfor (var zoom = maxZoom; zoom >= minZoom; zoom--) {\n\t\t\tthis._gridClusters[zoom] = new L.DistanceGrid(radiusFn(zoom));\n\t\t\tthis._gridUnclustered[zoom] = new L.DistanceGrid(radiusFn(zoom));\n\t\t}\n\n\t\t// Instantiate the appropriate L.MarkerCluster class (animated or not).\n\t\tthis._topClusterLevel = new this._markerCluster(this, minZoom - 1);\n\t},\n\n\t//Zoom: Zoom to start adding at (Pass this._maxZoom to start at the bottom)\n\t_addLayer: function (layer, zoom) {\n\t\tvar gridClusters = this._gridClusters,\n\t\t gridUnclustered = this._gridUnclustered,\n\t\t\tminZoom = Math.floor(this._map.getMinZoom()),\n\t\t markerPoint, z;\n\n\t\tif (this.options.singleMarkerMode) {\n\t\t\tthis._overrideMarkerIcon(layer);\n\t\t}\n\n\t\tlayer.on(this._childMarkerEventHandlers, this);\n\n\t\t//Find the lowest zoom level to slot this one in\n\t\tfor (; zoom >= minZoom; zoom--) {\n\t\t\tmarkerPoint = this._map.project(layer.getLatLng(), zoom); // calculate pixel position\n\n\t\t\t//Try find a cluster close by\n\t\t\tvar closest = gridClusters[zoom].getNearObject(markerPoint);\n\t\t\tif (closest) {\n\t\t\t\tclosest._addChild(layer);\n\t\t\t\tlayer.__parent = closest;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//Try find a marker close by to form a new cluster with\n\t\t\tclosest = gridUnclustered[zoom].getNearObject(markerPoint);\n\t\t\tif (closest) {\n\t\t\t\tvar parent = closest.__parent;\n\t\t\t\tif (parent) {\n\t\t\t\t\tthis._removeLayer(closest, false);\n\t\t\t\t}\n\n\t\t\t\t//Create new cluster with these 2 in it\n\n\t\t\t\tvar newCluster = new this._markerCluster(this, zoom, closest, layer);\n\t\t\t\tgridClusters[zoom].addObject(newCluster, this._map.project(newCluster._cLatLng, zoom));\n\t\t\t\tclosest.__parent = newCluster;\n\t\t\t\tlayer.__parent = newCluster;\n\n\t\t\t\t//First create any new intermediate parent clusters that don't exist\n\t\t\t\tvar lastParent = newCluster;\n\t\t\t\tfor (z = zoom - 1; z > parent._zoom; z--) {\n\t\t\t\t\tlastParent = new this._markerCluster(this, z, lastParent);\n\t\t\t\t\tgridClusters[z].addObject(lastParent, this._map.project(closest.getLatLng(), z));\n\t\t\t\t}\n\t\t\t\tparent._addChild(lastParent);\n\n\t\t\t\t//Remove closest from this zoom level and any above that it is in, replace with newCluster\n\t\t\t\tthis._removeFromGridUnclustered(closest, zoom);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//Didn't manage to cluster in at this zoom, record us as a marker here and continue upwards\n\t\t\tgridUnclustered[zoom].addObject(layer, markerPoint);\n\t\t}\n\n\t\t//Didn't get in anything, add us to the top\n\t\tthis._topClusterLevel._addChild(layer);\n\t\tlayer.__parent = this._topClusterLevel;\n\t\treturn;\n\t},\n\n\t/**\n\t * Refreshes the icon of all \"dirty\" visible clusters.\n\t * Non-visible \"dirty\" clusters will be updated when they are added to the map.\n\t * @private\n\t */\n\t_refreshClustersIcons: function () {\n\t\tthis._featureGroup.eachLayer(function (c) {\n\t\t\tif (c instanceof L.MarkerCluster && c._iconNeedsUpdate) {\n\t\t\t\tc._updateIcon();\n\t\t\t}\n\t\t});\n\t},\n\n\t//Enqueue code to fire after the marker expand/contract has happened\n\t_enqueue: function (fn) {\n\t\tthis._queue.push(fn);\n\t\tif (!this._queueTimeout) {\n\t\t\tthis._queueTimeout = setTimeout(L.bind(this._processQueue, this), 300);\n\t\t}\n\t},\n\t_processQueue: function () {\n\t\tfor (var i = 0; i < this._queue.length; i++) {\n\t\t\tthis._queue[i].call(this);\n\t\t}\n\t\tthis._queue.length = 0;\n\t\tclearTimeout(this._queueTimeout);\n\t\tthis._queueTimeout = null;\n\t},\n\n\t//Merge and split any existing clusters that are too big or small\n\t_mergeSplitClusters: function () {\n\t\tvar mapZoom = Math.round(this._map._zoom);\n\n\t\t//In case we are starting to split before the animation finished\n\t\tthis._processQueue();\n\n\t\tif (this._zoom < mapZoom && this._currentShownBounds.intersects(this._getExpandedVisibleBounds())) { //Zoom in, split\n\t\t\tthis._animationStart();\n\t\t\t//Remove clusters now off screen\n\t\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), this._zoom, this._getExpandedVisibleBounds());\n\n\t\t\tthis._animationZoomIn(this._zoom, mapZoom);\n\n\t\t} else if (this._zoom > mapZoom) { //Zoom out, merge\n\t\t\tthis._animationStart();\n\n\t\t\tthis._animationZoomOut(this._zoom, mapZoom);\n\t\t} else {\n\t\t\tthis._moveEnd();\n\t\t}\n\t},\n\n\t//Gets the maps visible bounds expanded in each direction by the size of the screen (so the user cannot see an area we do not cover in one pan)\n\t_getExpandedVisibleBounds: function () {\n\t\tif (!this.options.removeOutsideVisibleBounds) {\n\t\t\treturn this._mapBoundsInfinite;\n\t\t} else if (L.Browser.mobile) {\n\t\t\treturn this._checkBoundsMaxLat(this._map.getBounds());\n\t\t}\n\n\t\treturn this._checkBoundsMaxLat(this._map.getBounds().pad(1)); // Padding expands the bounds by its own dimensions but scaled with the given factor.\n\t},\n\n\t/**\n\t * Expands the latitude to Infinity (or -Infinity) if the input bounds reach the map projection maximum defined latitude\n\t * (in the case of Web/Spherical Mercator, it is 85.0511287798 / see https://en.wikipedia.org/wiki/Web_Mercator#Formulas).\n\t * Otherwise, the removeOutsideVisibleBounds option will remove markers beyond that limit, whereas the same markers without\n\t * this option (or outside MCG) will have their position floored (ceiled) by the projection and rendered at that limit,\n\t * making the user think that MCG \"eats\" them and never displays them again.\n\t * @param bounds L.LatLngBounds\n\t * @returns {L.LatLngBounds}\n\t * @private\n\t */\n\t_checkBoundsMaxLat: function (bounds) {\n\t\tvar maxLat = this._maxLat;\n\n\t\tif (maxLat !== undefined) {\n\t\t\tif (bounds.getNorth() >= maxLat) {\n\t\t\t\tbounds._northEast.lat = Infinity;\n\t\t\t}\n\t\t\tif (bounds.getSouth() <= -maxLat) {\n\t\t\t\tbounds._southWest.lat = -Infinity;\n\t\t\t}\n\t\t}\n\n\t\treturn bounds;\n\t},\n\n\t//Shared animation code\n\t_animationAddLayerNonAnimated: function (layer, newCluster) {\n\t\tif (newCluster === layer) {\n\t\t\tthis._featureGroup.addLayer(layer);\n\t\t} else if (newCluster._childCount === 2) {\n\t\t\tnewCluster._addToMap();\n\n\t\t\tvar markers = newCluster.getAllChildMarkers();\n\t\t\tthis._featureGroup.removeLayer(markers[0]);\n\t\t\tthis._featureGroup.removeLayer(markers[1]);\n\t\t} else {\n\t\t\tnewCluster._updateIcon();\n\t\t}\n\t},\n\n\t/**\n\t * Extracts individual (i.e. non-group) layers from a Layer Group.\n\t * @param group to extract layers from.\n\t * @param output {Array} in which to store the extracted layers.\n\t * @returns {*|Array}\n\t * @private\n\t */\n\t_extractNonGroupLayers: function (group, output) {\n\t\tvar layers = group.getLayers(),\n\t\t i = 0,\n\t\t layer;\n\n\t\toutput = output || [];\n\n\t\tfor (; i < layers.length; i++) {\n\t\t\tlayer = layers[i];\n\n\t\t\tif (layer instanceof L.LayerGroup) {\n\t\t\t\tthis._extractNonGroupLayers(layer, output);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\toutput.push(layer);\n\t\t}\n\n\t\treturn output;\n\t},\n\n\t/**\n\t * Implements the singleMarkerMode option.\n\t * @param layer Marker to re-style using the Clusters iconCreateFunction.\n\t * @returns {L.Icon} The newly created icon.\n\t * @private\n\t */\n\t_overrideMarkerIcon: function (layer) {\n\t\tvar icon = layer.options.icon = this.options.iconCreateFunction({\n\t\t\tgetChildCount: function () {\n\t\t\t\treturn 1;\n\t\t\t},\n\t\t\tgetAllChildMarkers: function () {\n\t\t\t\treturn [layer];\n\t\t\t}\n\t\t});\n\n\t\treturn icon;\n\t}\n});\n\n// Constant bounds used in case option \"removeOutsideVisibleBounds\" is set to false.\nL.MarkerClusterGroup.include({\n\t_mapBoundsInfinite: new L.LatLngBounds(new L.LatLng(-Infinity, -Infinity), new L.LatLng(Infinity, Infinity))\n});\n\nL.MarkerClusterGroup.include({\n\t_noAnimation: {\n\t\t//Non Animated versions of everything\n\t\t_animationStart: function () {\n\t\t\t//Do nothing...\n\t\t},\n\t\t_animationZoomIn: function (previousZoomLevel, newZoomLevel) {\n\t\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel);\n\t\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());\n\n\t\t\t//We didn't actually animate, but we use this event to mean \"clustering animations have finished\"\n\t\t\tthis.fire('animationend');\n\t\t},\n\t\t_animationZoomOut: function (previousZoomLevel, newZoomLevel) {\n\t\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel);\n\t\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());\n\n\t\t\t//We didn't actually animate, but we use this event to mean \"clustering animations have finished\"\n\t\t\tthis.fire('animationend');\n\t\t},\n\t\t_animationAddLayer: function (layer, newCluster) {\n\t\t\tthis._animationAddLayerNonAnimated(layer, newCluster);\n\t\t}\n\t},\n\n\t_withAnimation: {\n\t\t//Animated versions here\n\t\t_animationStart: function () {\n\t\t\tthis._map._mapPane.className += ' leaflet-cluster-anim';\n\t\t\tthis._inZoomAnimation++;\n\t\t},\n\n\t\t_animationZoomIn: function (previousZoomLevel, newZoomLevel) {\n\t\t\tvar bounds = this._getExpandedVisibleBounds(),\n\t\t\t fg = this._featureGroup,\n\t\t\t\tminZoom = Math.floor(this._map.getMinZoom()),\n\t\t\t i;\n\n\t\t\tthis._ignoreMove = true;\n\n\t\t\t//Add all children of current clusters to map and remove those clusters from map\n\t\t\tthis._topClusterLevel._recursively(bounds, previousZoomLevel, minZoom, function (c) {\n\t\t\t\tvar startPos = c._latlng,\n\t\t\t\t markers = c._markers,\n\t\t\t\t m;\n\n\t\t\t\tif (!bounds.contains(startPos)) {\n\t\t\t\t\tstartPos = null;\n\t\t\t\t}\n\n\t\t\t\tif (c._isSingleParent() && previousZoomLevel + 1 === newZoomLevel) { //Immediately add the new child and remove us\n\t\t\t\t\tfg.removeLayer(c);\n\t\t\t\t\tc._recursivelyAddChildrenToMap(null, newZoomLevel, bounds);\n\t\t\t\t} else {\n\t\t\t\t\t//Fade out old cluster\n\t\t\t\t\tc.clusterHide();\n\t\t\t\t\tc._recursivelyAddChildrenToMap(startPos, newZoomLevel, bounds);\n\t\t\t\t}\n\n\t\t\t\t//Remove all markers that aren't visible any more\n\t\t\t\t//TODO: Do we actually need to do this on the higher levels too?\n\t\t\t\tfor (i = markers.length - 1; i >= 0; i--) {\n\t\t\t\t\tm = markers[i];\n\t\t\t\t\tif (!bounds.contains(m._latlng)) {\n\t\t\t\t\t\tfg.removeLayer(m);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\tthis._forceLayout();\n\n\t\t\t//Update opacities\n\t\t\tthis._topClusterLevel._recursivelyBecomeVisible(bounds, newZoomLevel);\n\t\t\t//TODO Maybe? Update markers in _recursivelyBecomeVisible\n\t\t\tfg.eachLayer(function (n) {\n\t\t\t\tif (!(n instanceof L.MarkerCluster) && n._icon) {\n\t\t\t\t\tn.clusterShow();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t//update the positions of the just added clusters/markers\n\t\t\tthis._topClusterLevel._recursively(bounds, previousZoomLevel, newZoomLevel, function (c) {\n\t\t\t\tc._recursivelyRestoreChildPositions(newZoomLevel);\n\t\t\t});\n\n\t\t\tthis._ignoreMove = false;\n\n\t\t\t//Remove the old clusters and close the zoom animation\n\t\t\tthis._enqueue(function () {\n\t\t\t\t//update the positions of the just added clusters/markers\n\t\t\t\tthis._topClusterLevel._recursively(bounds, previousZoomLevel, minZoom, function (c) {\n\t\t\t\t\tfg.removeLayer(c);\n\t\t\t\t\tc.clusterShow();\n\t\t\t\t});\n\n\t\t\t\tthis._animationEnd();\n\t\t\t});\n\t\t},\n\n\t\t_animationZoomOut: function (previousZoomLevel, newZoomLevel) {\n\t\t\tthis._animationZoomOutSingle(this._topClusterLevel, previousZoomLevel - 1, newZoomLevel);\n\n\t\t\t//Need to add markers for those that weren't on the map before but are now\n\t\t\tthis._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());\n\t\t\t//Remove markers that were on the map before but won't be now\n\t\t\tthis._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel, this._getExpandedVisibleBounds());\n\t\t},\n\n\t\t_animationAddLayer: function (layer, newCluster) {\n\t\t\tvar me = this,\n\t\t\t fg = this._featureGroup;\n\n\t\t\tfg.addLayer(layer);\n\t\t\tif (newCluster !== layer) {\n\t\t\t\tif (newCluster._childCount > 2) { //Was already a cluster\n\n\t\t\t\t\tnewCluster._updateIcon();\n\t\t\t\t\tthis._forceLayout();\n\t\t\t\t\tthis._animationStart();\n\n\t\t\t\t\tlayer._setPos(this._map.latLngToLayerPoint(newCluster.getLatLng()));\n\t\t\t\t\tlayer.clusterHide();\n\n\t\t\t\t\tthis._enqueue(function () {\n\t\t\t\t\t\tfg.removeLayer(layer);\n\t\t\t\t\t\tlayer.clusterShow();\n\n\t\t\t\t\t\tme._animationEnd();\n\t\t\t\t\t});\n\n\t\t\t\t} else { //Just became a cluster\n\t\t\t\t\tthis._forceLayout();\n\n\t\t\t\t\tme._animationStart();\n\t\t\t\t\tme._animationZoomOutSingle(newCluster, this._map.getMaxZoom(), this._zoom);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Private methods for animated versions.\n\t_animationZoomOutSingle: function (cluster, previousZoomLevel, newZoomLevel) {\n\t\tvar bounds = this._getExpandedVisibleBounds(),\n\t\t\tminZoom = Math.floor(this._map.getMinZoom());\n\n\t\t//Animate all of the markers in the clusters to move to their cluster center point\n\t\tcluster._recursivelyAnimateChildrenInAndAddSelfToMap(bounds, minZoom, previousZoomLevel + 1, newZoomLevel);\n\n\t\tvar me = this;\n\n\t\t//Update the opacity (If we immediately set it they won't animate)\n\t\tthis._forceLayout();\n\t\tcluster._recursivelyBecomeVisible(bounds, newZoomLevel);\n\n\t\t//TODO: Maybe use the transition timing stuff to make this more reliable\n\t\t//When the animations are done, tidy up\n\t\tthis._enqueue(function () {\n\n\t\t\t//This cluster stopped being a cluster before the timeout fired\n\t\t\tif (cluster._childCount === 1) {\n\t\t\t\tvar m = cluster._markers[0];\n\t\t\t\t//If we were in a cluster animation at the time then the opacity and position of our child could be wrong now, so fix it\n\t\t\t\tthis._ignoreMove = true;\n\t\t\t\tm.setLatLng(m.getLatLng());\n\t\t\t\tthis._ignoreMove = false;\n\t\t\t\tif (m.clusterShow) {\n\t\t\t\t\tm.clusterShow();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcluster._recursively(bounds, newZoomLevel, minZoom, function (c) {\n\t\t\t\t\tc._recursivelyRemoveChildrenFromMap(bounds, minZoom, previousZoomLevel + 1);\n\t\t\t\t});\n\t\t\t}\n\t\t\tme._animationEnd();\n\t\t});\n\t},\n\n\t_animationEnd: function () {\n\t\tif (this._map) {\n\t\t\tthis._map._mapPane.className = this._map._mapPane.className.replace(' leaflet-cluster-anim', '');\n\t\t}\n\t\tthis._inZoomAnimation--;\n\t\tthis.fire('animationend');\n\t},\n\n\t//Force a browser layout of stuff in the map\n\t// Should apply the current opacity and location to all elements so we can update them again for an animation\n\t_forceLayout: function () {\n\t\t//In my testing this works, infact offsetWidth of any element seems to work.\n\t\t//Could loop all this._layers and do this for each _icon if it stops working\n\n\t\tL.Util.falseFn(document.body.offsetWidth);\n\t}\n});\n\nL.markerClusterGroup = function (options) {\n\treturn new L.MarkerClusterGroup(options);\n};\n","export var MarkerCluster = L.MarkerCluster = L.Marker.extend({\n\toptions: L.Icon.prototype.options,\n\n\tinitialize: function (group, zoom, a, b) {\n\n\t\tL.Marker.prototype.initialize.call(this, a ? (a._cLatLng || a.getLatLng()) : new L.LatLng(0, 0),\n { icon: this, pane: group.options.clusterPane });\n\n\t\tthis._group = group;\n\t\tthis._zoom = zoom;\n\n\t\tthis._markers = [];\n\t\tthis._childClusters = [];\n\t\tthis._childCount = 0;\n\t\tthis._iconNeedsUpdate = true;\n\t\tthis._boundsNeedUpdate = true;\n\n\t\tthis._bounds = new L.LatLngBounds();\n\n\t\tif (a) {\n\t\t\tthis._addChild(a);\n\t\t}\n\t\tif (b) {\n\t\t\tthis._addChild(b);\n\t\t}\n\t},\n\n\t//Recursively retrieve all child markers of this cluster\n\tgetAllChildMarkers: function (storageArray, ignoreDraggedMarker) {\n\t\tstorageArray = storageArray || [];\n\n\t\tfor (var i = this._childClusters.length - 1; i >= 0; i--) {\n\t\t\tthis._childClusters[i].getAllChildMarkers(storageArray, ignoreDraggedMarker);\n\t\t}\n\n\t\tfor (var j = this._markers.length - 1; j >= 0; j--) {\n\t\t\tif (ignoreDraggedMarker && this._markers[j].__dragStart) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tstorageArray.push(this._markers[j]);\n\t\t}\n\n\t\treturn storageArray;\n\t},\n\n\t//Returns the count of how many child markers we have\n\tgetChildCount: function () {\n\t\treturn this._childCount;\n\t},\n\n\t//Zoom to the minimum of showing all of the child markers, or the extents of this cluster\n\tzoomToBounds: function (fitBoundsOptions) {\n\t\tvar childClusters = this._childClusters.slice(),\n\t\t\tmap = this._group._map,\n\t\t\tboundsZoom = map.getBoundsZoom(this._bounds),\n\t\t\tzoom = this._zoom + 1,\n\t\t\tmapZoom = map.getZoom(),\n\t\t\ti;\n\n\t\t//calculate how far we need to zoom down to see all of the markers\n\t\twhile (childClusters.length > 0 && boundsZoom > zoom) {\n\t\t\tzoom++;\n\t\t\tvar newClusters = [];\n\t\t\tfor (i = 0; i < childClusters.length; i++) {\n\t\t\t\tnewClusters = newClusters.concat(childClusters[i]._childClusters);\n\t\t\t}\n\t\t\tchildClusters = newClusters;\n\t\t}\n\n\t\tif (boundsZoom > zoom) {\n\t\t\tthis._group._map.setView(this._latlng, zoom);\n\t\t} else if (boundsZoom <= mapZoom) { //If fitBounds wouldn't zoom us down, zoom us down instead\n\t\t\tthis._group._map.setView(this._latlng, mapZoom + 1);\n\t\t} else {\n\t\t\tthis._group._map.fitBounds(this._bounds, fitBoundsOptions);\n\t\t}\n\t},\n\n\tgetBounds: function () {\n\t\tvar bounds = new L.LatLngBounds();\n\t\tbounds.extend(this._bounds);\n\t\treturn bounds;\n\t},\n\n\t_updateIcon: function () {\n\t\tthis._iconNeedsUpdate = true;\n\t\tif (this._icon) {\n\t\t\tthis.setIcon(this);\n\t\t}\n\t},\n\n\t//Cludge for Icon, we pretend to be an icon for performance\n\tcreateIcon: function () {\n\t\tif (this._iconNeedsUpdate) {\n\t\t\tthis._iconObj = this._group.options.iconCreateFunction(this);\n\t\t\tthis._iconNeedsUpdate = false;\n\t\t}\n\t\treturn this._iconObj.createIcon();\n\t},\n\tcreateShadow: function () {\n\t\treturn this._iconObj.createShadow();\n\t},\n\n\n\t_addChild: function (new1, isNotificationFromChild) {\n\n\t\tthis._iconNeedsUpdate = true;\n\n\t\tthis._boundsNeedUpdate = true;\n\t\tthis._setClusterCenter(new1);\n\n\t\tif (new1 instanceof L.MarkerCluster) {\n\t\t\tif (!isNotificationFromChild) {\n\t\t\t\tthis._childClusters.push(new1);\n\t\t\t\tnew1.__parent = this;\n\t\t\t}\n\t\t\tthis._childCount += new1._childCount;\n\t\t} else {\n\t\t\tif (!isNotificationFromChild) {\n\t\t\t\tthis._markers.push(new1);\n\t\t\t}\n\t\t\tthis._childCount++;\n\t\t}\n\n\t\tif (this.__parent) {\n\t\t\tthis.__parent._addChild(new1, true);\n\t\t}\n\t},\n\n\t/**\n\t * Makes sure the cluster center is set. If not, uses the child center if it is a cluster, or the marker position.\n\t * @param child L.MarkerCluster|L.Marker that will be used as cluster center if not defined yet.\n\t * @private\n\t */\n\t_setClusterCenter: function (child) {\n\t\tif (!this._cLatLng) {\n\t\t\t// when clustering, take position of the first point as the cluster center\n\t\t\tthis._cLatLng = child._cLatLng || child._latlng;\n\t\t}\n\t},\n\n\t/**\n\t * Assigns impossible bounding values so that the next extend entirely determines the new bounds.\n\t * This method avoids having to trash the previous L.LatLngBounds object and to create a new one, which is much slower for this class.\n\t * As long as the bounds are not extended, most other methods would probably fail, as they would with bounds initialized but not extended.\n\t * @private\n\t */\n\t_resetBounds: function () {\n\t\tvar bounds = this._bounds;\n\n\t\tif (bounds._southWest) {\n\t\t\tbounds._southWest.lat = Infinity;\n\t\t\tbounds._southWest.lng = Infinity;\n\t\t}\n\t\tif (bounds._northEast) {\n\t\t\tbounds._northEast.lat = -Infinity;\n\t\t\tbounds._northEast.lng = -Infinity;\n\t\t}\n\t},\n\n\t_recalculateBounds: function () {\n\t\tvar markers = this._markers,\n\t\t childClusters = this._childClusters,\n\t\t latSum = 0,\n\t\t lngSum = 0,\n\t\t totalCount = this._childCount,\n\t\t i, child, childLatLng, childCount;\n\n\t\t// Case where all markers are removed from the map and we are left with just an empty _topClusterLevel.\n\t\tif (totalCount === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Reset rather than creating a new object, for performance.\n\t\tthis._resetBounds();\n\n\t\t// Child markers.\n\t\tfor (i = 0; i < markers.length; i++) {\n\t\t\tchildLatLng = markers[i]._latlng;\n\n\t\t\tthis._bounds.extend(childLatLng);\n\n\t\t\tlatSum += childLatLng.lat;\n\t\t\tlngSum += childLatLng.lng;\n\t\t}\n\n\t\t// Child clusters.\n\t\tfor (i = 0; i < childClusters.length; i++) {\n\t\t\tchild = childClusters[i];\n\n\t\t\t// Re-compute child bounds and weighted position first if necessary.\n\t\t\tif (child._boundsNeedUpdate) {\n\t\t\t\tchild._recalculateBounds();\n\t\t\t}\n\n\t\t\tthis._bounds.extend(child._bounds);\n\n\t\t\tchildLatLng = child._wLatLng;\n\t\t\tchildCount = child._childCount;\n\n\t\t\tlatSum += childLatLng.lat * childCount;\n\t\t\tlngSum += childLatLng.lng * childCount;\n\t\t}\n\n\t\tthis._latlng = this._wLatLng = new L.LatLng(latSum / totalCount, lngSum / totalCount);\n\n\t\t// Reset dirty flag.\n\t\tthis._boundsNeedUpdate = false;\n\t},\n\n\t//Set our markers position as given and add it to the map\n\t_addToMap: function (startPos) {\n\t\tif (startPos) {\n\t\t\tthis._backupLatlng = this._latlng;\n\t\t\tthis.setLatLng(startPos);\n\t\t}\n\t\tthis._group._featureGroup.addLayer(this);\n\t},\n\n\t_recursivelyAnimateChildrenIn: function (bounds, center, maxZoom) {\n\t\tthis._recursively(bounds, this._group._map.getMinZoom(), maxZoom - 1,\n\t\t\tfunction (c) {\n\t\t\t\tvar markers = c._markers,\n\t\t\t\t\ti, m;\n\t\t\t\tfor (i = markers.length - 1; i >= 0; i--) {\n\t\t\t\t\tm = markers[i];\n\n\t\t\t\t\t//Only do it if the icon is still on the map\n\t\t\t\t\tif (m._icon) {\n\t\t\t\t\t\tm._setPos(center);\n\t\t\t\t\t\tm.clusterHide();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tfunction (c) {\n\t\t\t\tvar childClusters = c._childClusters,\n\t\t\t\t\tj, cm;\n\t\t\t\tfor (j = childClusters.length - 1; j >= 0; j--) {\n\t\t\t\t\tcm = childClusters[j];\n\t\t\t\t\tif (cm._icon) {\n\t\t\t\t\t\tcm._setPos(center);\n\t\t\t\t\t\tcm.clusterHide();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t},\n\n\t_recursivelyAnimateChildrenInAndAddSelfToMap: function (bounds, mapMinZoom, previousZoomLevel, newZoomLevel) {\n\t\tthis._recursively(bounds, newZoomLevel, mapMinZoom,\n\t\t\tfunction (c) {\n\t\t\t\tc._recursivelyAnimateChildrenIn(bounds, c._group._map.latLngToLayerPoint(c.getLatLng()).round(), previousZoomLevel);\n\n\t\t\t\t//TODO: depthToAnimateIn affects _isSingleParent, if there is a multizoom we may/may not be.\n\t\t\t\t//As a hack we only do a animation free zoom on a single level zoom, if someone does multiple levels then we always animate\n\t\t\t\tif (c._isSingleParent() && previousZoomLevel - 1 === newZoomLevel) {\n\t\t\t\t\tc.clusterShow();\n\t\t\t\t\tc._recursivelyRemoveChildrenFromMap(bounds, mapMinZoom, previousZoomLevel); //Immediately remove our children as we are replacing them. TODO previousBounds not bounds\n\t\t\t\t} else {\n\t\t\t\t\tc.clusterHide();\n\t\t\t\t}\n\n\t\t\t\tc._addToMap();\n\t\t\t}\n\t\t);\n\t},\n\n\t_recursivelyBecomeVisible: function (bounds, zoomLevel) {\n\t\tthis._recursively(bounds, this._group._map.getMinZoom(), zoomLevel, null, function (c) {\n\t\t\tc.clusterShow();\n\t\t});\n\t},\n\n\t_recursivelyAddChildrenToMap: function (startPos, zoomLevel, bounds) {\n\t\tthis._recursively(bounds, this._group._map.getMinZoom() - 1, zoomLevel,\n\t\t\tfunction (c) {\n\t\t\t\tif (zoomLevel === c._zoom) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//Add our child markers at startPos (so they can be animated out)\n\t\t\t\tfor (var i = c._markers.length - 1; i >= 0; i--) {\n\t\t\t\t\tvar nm = c._markers[i];\n\n\t\t\t\t\tif (!bounds.contains(nm._latlng)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (startPos) {\n\t\t\t\t\t\tnm._backupLatlng = nm.getLatLng();\n\n\t\t\t\t\t\tnm.setLatLng(startPos);\n\t\t\t\t\t\tif (nm.clusterHide) {\n\t\t\t\t\t\t\tnm.clusterHide();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tc._group._featureGroup.addLayer(nm);\n\t\t\t\t}\n\t\t\t},\n\t\t\tfunction (c) {\n\t\t\t\tc._addToMap(startPos);\n\t\t\t}\n\t\t);\n\t},\n\n\t_recursivelyRestoreChildPositions: function (zoomLevel) {\n\t\t//Fix positions of child markers\n\t\tfor (var i = this._markers.length - 1; i >= 0; i--) {\n\t\t\tvar nm = this._markers[i];\n\t\t\tif (nm._backupLatlng) {\n\t\t\t\tnm.setLatLng(nm._backupLatlng);\n\t\t\t\tdelete nm._backupLatlng;\n\t\t\t}\n\t\t}\n\n\t\tif (zoomLevel - 1 === this._zoom) {\n\t\t\t//Reposition child clusters\n\t\t\tfor (var j = this._childClusters.length - 1; j >= 0; j--) {\n\t\t\t\tthis._childClusters[j]._restorePosition();\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var k = this._childClusters.length - 1; k >= 0; k--) {\n\t\t\t\tthis._childClusters[k]._recursivelyRestoreChildPositions(zoomLevel);\n\t\t\t}\n\t\t}\n\t},\n\n\t_restorePosition: function () {\n\t\tif (this._backupLatlng) {\n\t\t\tthis.setLatLng(this._backupLatlng);\n\t\t\tdelete this._backupLatlng;\n\t\t}\n\t},\n\n\t//exceptBounds: If set, don't remove any markers/clusters in it\n\t_recursivelyRemoveChildrenFromMap: function (previousBounds, mapMinZoom, zoomLevel, exceptBounds) {\n\t\tvar m, i;\n\t\tthis._recursively(previousBounds, mapMinZoom - 1, zoomLevel - 1,\n\t\t\tfunction (c) {\n\t\t\t\t//Remove markers at every level\n\t\t\t\tfor (i = c._markers.length - 1; i >= 0; i--) {\n\t\t\t\t\tm = c._markers[i];\n\t\t\t\t\tif (!exceptBounds || !exceptBounds.contains(m._latlng)) {\n\t\t\t\t\t\tc._group._featureGroup.removeLayer(m);\n\t\t\t\t\t\tif (m.clusterShow) {\n\t\t\t\t\t\t\tm.clusterShow();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tfunction (c) {\n\t\t\t\t//Remove child clusters at just the bottom level\n\t\t\t\tfor (i = c._childClusters.length - 1; i >= 0; i--) {\n\t\t\t\t\tm = c._childClusters[i];\n\t\t\t\t\tif (!exceptBounds || !exceptBounds.contains(m._latlng)) {\n\t\t\t\t\t\tc._group._featureGroup.removeLayer(m);\n\t\t\t\t\t\tif (m.clusterShow) {\n\t\t\t\t\t\t\tm.clusterShow();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t},\n\n\t//Run the given functions recursively to this and child clusters\n\t// boundsToApplyTo: a L.LatLngBounds representing the bounds of what clusters to recurse in to\n\t// zoomLevelToStart: zoom level to start running functions (inclusive)\n\t// zoomLevelToStop: zoom level to stop running functions (inclusive)\n\t// runAtEveryLevel: function that takes an L.MarkerCluster as an argument that should be applied on every level\n\t// runAtBottomLevel: function that takes an L.MarkerCluster as an argument that should be applied at only the bottom level\n\t_recursively: function (boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel) {\n\t\tvar childClusters = this._childClusters,\n\t\t zoom = this._zoom,\n\t\t i, c;\n\n\t\tif (zoomLevelToStart <= zoom) {\n\t\t\tif (runAtEveryLevel) {\n\t\t\t\trunAtEveryLevel(this);\n\t\t\t}\n\t\t\tif (runAtBottomLevel && zoom === zoomLevelToStop) {\n\t\t\t\trunAtBottomLevel(this);\n\t\t\t}\n\t\t}\n\n\t\tif (zoom < zoomLevelToStart || zoom < zoomLevelToStop) {\n\t\t\tfor (i = childClusters.length - 1; i >= 0; i--) {\n\t\t\t\tc = childClusters[i];\n\t\t\t\tif (c._boundsNeedUpdate) {\n\t\t\t\t\tc._recalculateBounds();\n\t\t\t\t}\n\t\t\t\tif (boundsToApplyTo.intersects(c._bounds)) {\n\t\t\t\t\tc._recursively(boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t//Returns true if we are the parent of only one cluster and that cluster is the same as us\n\t_isSingleParent: function () {\n\t\t//Don't need to check this._markers as the rest won't work if there are any\n\t\treturn this._childClusters.length > 0 && this._childClusters[0]._childCount === this._childCount;\n\t}\n});\n\n","/*\n* Extends L.Marker to include two extra methods: clusterHide and clusterShow.\n* \n* They work as setOpacity(0) and setOpacity(1) respectively, but\n* don't overwrite the options.opacity\n* \n*/\n\nL.Marker.include({\n\tclusterHide: function () {\n\t\tvar backup = this.options.opacity;\n\t\tthis.setOpacity(0);\n\t\tthis.options.opacity = backup;\n\t\treturn this;\n\t},\n\t\n\tclusterShow: function () {\n\t\treturn this.setOpacity(this.options.opacity);\n\t}\n});\n\n\n","\nL.DistanceGrid = function (cellSize) {\n\tthis._cellSize = cellSize;\n\tthis._sqCellSize = cellSize * cellSize;\n\tthis._grid = {};\n\tthis._objectPoint = { };\n};\n\nL.DistanceGrid.prototype = {\n\n\taddObject: function (obj, point) {\n\t\tvar x = this._getCoord(point.x),\n\t\t y = this._getCoord(point.y),\n\t\t grid = this._grid,\n\t\t row = grid[y] = grid[y] || {},\n\t\t cell = row[x] = row[x] || [],\n\t\t stamp = L.Util.stamp(obj);\n\n\t\tthis._objectPoint[stamp] = point;\n\n\t\tcell.push(obj);\n\t},\n\n\tupdateObject: function (obj, point) {\n\t\tthis.removeObject(obj);\n\t\tthis.addObject(obj, point);\n\t},\n\n\t//Returns true if the object was found\n\tremoveObject: function (obj, point) {\n\t\tvar x = this._getCoord(point.x),\n\t\t y = this._getCoord(point.y),\n\t\t grid = this._grid,\n\t\t row = grid[y] = grid[y] || {},\n\t\t cell = row[x] = row[x] || [],\n\t\t i, len;\n\n\t\tdelete this._objectPoint[L.Util.stamp(obj)];\n\n\t\tfor (i = 0, len = cell.length; i < len; i++) {\n\t\t\tif (cell[i] === obj) {\n\n\t\t\t\tcell.splice(i, 1);\n\n\t\t\t\tif (len === 1) {\n\t\t\t\t\tdelete row[x];\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t},\n\n\teachObject: function (fn, context) {\n\t\tvar i, j, k, len, row, cell, removed,\n\t\t grid = this._grid;\n\n\t\tfor (i in grid) {\n\t\t\trow = grid[i];\n\n\t\t\tfor (j in row) {\n\t\t\t\tcell = row[j];\n\n\t\t\t\tfor (k = 0, len = cell.length; k < len; k++) {\n\t\t\t\t\tremoved = fn.call(context, cell[k]);\n\t\t\t\t\tif (removed) {\n\t\t\t\t\t\tk--;\n\t\t\t\t\t\tlen--;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tgetNearObject: function (point) {\n\t\tvar x = this._getCoord(point.x),\n\t\t y = this._getCoord(point.y),\n\t\t i, j, k, row, cell, len, obj, dist,\n\t\t objectPoint = this._objectPoint,\n\t\t closestDistSq = this._sqCellSize,\n\t\t closest = null;\n\n\t\tfor (i = y - 1; i <= y + 1; i++) {\n\t\t\trow = this._grid[i];\n\t\t\tif (row) {\n\n\t\t\t\tfor (j = x - 1; j <= x + 1; j++) {\n\t\t\t\t\tcell = row[j];\n\t\t\t\t\tif (cell) {\n\n\t\t\t\t\t\tfor (k = 0, len = cell.length; k < len; k++) {\n\t\t\t\t\t\t\tobj = cell[k];\n\t\t\t\t\t\t\tdist = this._sqDist(objectPoint[L.Util.stamp(obj)], point);\n\t\t\t\t\t\t\tif (dist < closestDistSq ||\n\t\t\t\t\t\t\t\tdist <= closestDistSq && closest === null) {\n\t\t\t\t\t\t\t\tclosestDistSq = dist;\n\t\t\t\t\t\t\t\tclosest = obj;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn closest;\n\t},\n\n\t_getCoord: function (x) {\n\t\tvar coord = Math.floor(x / this._cellSize);\n\t\treturn isFinite(coord) ? coord : x;\n\t},\n\n\t_sqDist: function (p, p2) {\n\t\tvar dx = p2.x - p.x,\n\t\t dy = p2.y - p.y;\n\t\treturn dx * dx + dy * dy;\n\t}\n};\n","/* Copyright (c) 2012 the authors listed at the following URL, and/or\nthe authors of referenced articles or incorporated external code:\nhttp://en.literateprograms.org/Quickhull_(Javascript)?action=history&offset=20120410175256\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nRetrieved from: http://en.literateprograms.org/Quickhull_(Javascript)?oldid=18434\n*/\n\n(function () {\n\tL.QuickHull = {\n\n\t\t/*\n\t\t * @param {Object} cpt a point to be measured from the baseline\n\t\t * @param {Array} bl the baseline, as represented by a two-element\n\t\t * array of latlng objects.\n\t\t * @returns {Number} an approximate distance measure\n\t\t */\n\t\tgetDistant: function (cpt, bl) {\n\t\t\tvar vY = bl[1].lat - bl[0].lat,\n\t\t\t\tvX = bl[0].lng - bl[1].lng;\n\t\t\treturn (vX * (cpt.lat - bl[0].lat) + vY * (cpt.lng - bl[0].lng));\n\t\t},\n\n\t\t/*\n\t\t * @param {Array} baseLine a two-element array of latlng objects\n\t\t * representing the baseline to project from\n\t\t * @param {Array} latLngs an array of latlng objects\n\t\t * @returns {Object} the maximum point and all new points to stay\n\t\t * in consideration for the hull.\n\t\t */\n\t\tfindMostDistantPointFromBaseLine: function (baseLine, latLngs) {\n\t\t\tvar maxD = 0,\n\t\t\t\tmaxPt = null,\n\t\t\t\tnewPoints = [],\n\t\t\t\ti, pt, d;\n\n\t\t\tfor (i = latLngs.length - 1; i >= 0; i--) {\n\t\t\t\tpt = latLngs[i];\n\t\t\t\td = this.getDistant(pt, baseLine);\n\n\t\t\t\tif (d > 0) {\n\t\t\t\t\tnewPoints.push(pt);\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (d > maxD) {\n\t\t\t\t\tmaxD = d;\n\t\t\t\t\tmaxPt = pt;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { maxPoint: maxPt, newPoints: newPoints };\n\t\t},\n\n\n\t\t/*\n\t\t * Given a baseline, compute the convex hull of latLngs as an array\n\t\t * of latLngs.\n\t\t *\n\t\t * @param {Array} latLngs\n\t\t * @returns {Array}\n\t\t */\n\t\tbuildConvexHull: function (baseLine, latLngs) {\n\t\t\tvar convexHullBaseLines = [],\n\t\t\t\tt = this.findMostDistantPointFromBaseLine(baseLine, latLngs);\n\n\t\t\tif (t.maxPoint) { // if there is still a point \"outside\" the base line\n\t\t\t\tconvexHullBaseLines =\n\t\t\t\t\tconvexHullBaseLines.concat(\n\t\t\t\t\t\tthis.buildConvexHull([baseLine[0], t.maxPoint], t.newPoints)\n\t\t\t\t\t);\n\t\t\t\tconvexHullBaseLines =\n\t\t\t\t\tconvexHullBaseLines.concat(\n\t\t\t\t\t\tthis.buildConvexHull([t.maxPoint, baseLine[1]], t.newPoints)\n\t\t\t\t\t);\n\t\t\t\treturn convexHullBaseLines;\n\t\t\t} else { // if there is no more point \"outside\" the base line, the current base line is part of the convex hull\n\t\t\t\treturn [baseLine[0]];\n\t\t\t}\n\t\t},\n\n\t\t/*\n\t\t * Given an array of latlngs, compute a convex hull as an array\n\t\t * of latlngs\n\t\t *\n\t\t * @param {Array} latLngs\n\t\t * @returns {Array}\n\t\t */\n\t\tgetConvexHull: function (latLngs) {\n\t\t\t// find first baseline\n\t\t\tvar maxLat = false, minLat = false,\n\t\t\t\tmaxLng = false, minLng = false,\n\t\t\t\tmaxLatPt = null, minLatPt = null,\n\t\t\t\tmaxLngPt = null, minLngPt = null,\n\t\t\t\tmaxPt = null, minPt = null,\n\t\t\t\ti;\n\n\t\t\tfor (i = latLngs.length - 1; i >= 0; i--) {\n\t\t\t\tvar pt = latLngs[i];\n\t\t\t\tif (maxLat === false || pt.lat > maxLat) {\n\t\t\t\t\tmaxLatPt = pt;\n\t\t\t\t\tmaxLat = pt.lat;\n\t\t\t\t}\n\t\t\t\tif (minLat === false || pt.lat < minLat) {\n\t\t\t\t\tminLatPt = pt;\n\t\t\t\t\tminLat = pt.lat;\n\t\t\t\t}\n\t\t\t\tif (maxLng === false || pt.lng > maxLng) {\n\t\t\t\t\tmaxLngPt = pt;\n\t\t\t\t\tmaxLng = pt.lng;\n\t\t\t\t}\n\t\t\t\tif (minLng === false || pt.lng < minLng) {\n\t\t\t\t\tminLngPt = pt;\n\t\t\t\t\tminLng = pt.lng;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (minLat !== maxLat) {\n\t\t\t\tminPt = minLatPt;\n\t\t\t\tmaxPt = maxLatPt;\n\t\t\t} else {\n\t\t\t\tminPt = minLngPt;\n\t\t\t\tmaxPt = maxLngPt;\n\t\t\t}\n\n\t\t\tvar ch = [].concat(this.buildConvexHull([minPt, maxPt], latLngs),\n\t\t\t\t\t\t\t\tthis.buildConvexHull([maxPt, minPt], latLngs));\n\t\t\treturn ch;\n\t\t}\n\t};\n}());\n\nL.MarkerCluster.include({\n\tgetConvexHull: function () {\n\t\tvar childMarkers = this.getAllChildMarkers(),\n\t\t\tpoints = [],\n\t\t\tp, i;\n\n\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\n\t\t\tp = childMarkers[i].getLatLng();\n\t\t\tpoints.push(p);\n\t\t}\n\n\t\treturn L.QuickHull.getConvexHull(points);\n\t}\n});\n","//This code is 100% based on https://github.com/jawj/OverlappingMarkerSpiderfier-Leaflet\n//Huge thanks to jawj for implementing it first to make my job easy :-)\n\nL.MarkerCluster.include({\n\n\t_2PI: Math.PI * 2,\n\t_circleFootSeparation: 25, //related to circumference of circle\n\t_circleStartAngle: 0,\n\n\t_spiralFootSeparation: 28, //related to size of spiral (experiment!)\n\t_spiralLengthStart: 11,\n\t_spiralLengthFactor: 5,\n\n\t_circleSpiralSwitchover: 9, //show spiral instead of circle from this marker count upwards.\n\t\t\t\t\t\t\t\t// 0 -> always spiral; Infinity -> always circle\n\n\tspiderfy: function () {\n\t\tif (this._group._spiderfied === this || this._group._inZoomAnimation) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar childMarkers = this.getAllChildMarkers(null, true),\n\t\t\tgroup = this._group,\n\t\t\tmap = group._map,\n\t\t\tcenter = map.latLngToLayerPoint(this._latlng),\n\t\t\tpositions;\n\n\t\tthis._group._unspiderfy();\n\t\tthis._group._spiderfied = this;\n\n\t\t//TODO Maybe: childMarkers order by distance to center\n\n\t\tif (this._group.options.spiderfyShapePositions) {\n\t\t\tpositions = this._group.options.spiderfyShapePositions(childMarkers.length, center);\n\t\t} else if (childMarkers.length >= this._circleSpiralSwitchover) {\n\t\t\tpositions = this._generatePointsSpiral(childMarkers.length, center);\n\t\t} else {\n\t\t\tcenter.y += 10; // Otherwise circles look wrong => hack for standard blue icon, renders differently for other icons.\n\t\t\tpositions = this._generatePointsCircle(childMarkers.length, center);\n\t\t}\n\n\t\tthis._animationSpiderfy(childMarkers, positions);\n\t},\n\n\tunspiderfy: function (zoomDetails) {\n\t\t/// Argument from zoomanim if being called in a zoom animation or null otherwise\n\t\tif (this._group._inZoomAnimation) {\n\t\t\treturn;\n\t\t}\n\t\tthis._animationUnspiderfy(zoomDetails);\n\n\t\tthis._group._spiderfied = null;\n\t},\n\n\t_generatePointsCircle: function (count, centerPt) {\n\t\tvar circumference = this._group.options.spiderfyDistanceMultiplier * this._circleFootSeparation * (2 + count),\n\t\t\tlegLength = circumference / this._2PI, //radius from circumference\n\t\t\tangleStep = this._2PI / count,\n\t\t\tres = [],\n\t\t\ti, angle;\n\n\t\tlegLength = Math.max(legLength, 35); // Minimum distance to get outside the cluster icon.\n\n\t\tres.length = count;\n\n\t\tfor (i = 0; i < count; i++) { // Clockwise, like spiral.\n\t\t\tangle = this._circleStartAngle + i * angleStep;\n\t\t\tres[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round();\n\t\t}\n\n\t\treturn res;\n\t},\n\n\t_generatePointsSpiral: function (count, centerPt) {\n\t\tvar spiderfyDistanceMultiplier = this._group.options.spiderfyDistanceMultiplier,\n\t\t\tlegLength = spiderfyDistanceMultiplier * this._spiralLengthStart,\n\t\t\tseparation = spiderfyDistanceMultiplier * this._spiralFootSeparation,\n\t\t\tlengthFactor = spiderfyDistanceMultiplier * this._spiralLengthFactor * this._2PI,\n\t\t\tangle = 0,\n\t\t\tres = [],\n\t\t\ti;\n\n\t\tres.length = count;\n\n\t\t// Higher index, closer position to cluster center.\n\t\tfor (i = count; i >= 0; i--) {\n\t\t\t// Skip the first position, so that we are already farther from center and we avoid\n\t\t\t// being under the default cluster icon (especially important for Circle Markers).\n\t\t\tif (i < count) {\n\t\t\t\tres[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round();\n\t\t\t}\n\t\t\tangle += separation / legLength + i * 0.0005;\n\t\t\tlegLength += lengthFactor / angle;\n\t\t}\n\t\treturn res;\n\t},\n\n\t_noanimationUnspiderfy: function () {\n\t\tvar group = this._group,\n\t\t\tmap = group._map,\n\t\t\tfg = group._featureGroup,\n\t\t\tchildMarkers = this.getAllChildMarkers(null, true),\n\t\t\tm, i;\n\n\t\tgroup._ignoreMove = true;\n\n\t\tthis.setOpacity(1);\n\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\n\t\t\tm = childMarkers[i];\n\n\t\t\tfg.removeLayer(m);\n\n\t\t\tif (m._preSpiderfyLatlng) {\n\t\t\t\tm.setLatLng(m._preSpiderfyLatlng);\n\t\t\t\tdelete m._preSpiderfyLatlng;\n\t\t\t}\n\t\t\tif (m.setZIndexOffset) {\n\t\t\t\tm.setZIndexOffset(0);\n\t\t\t}\n\n\t\t\tif (m._spiderLeg) {\n\t\t\t\tmap.removeLayer(m._spiderLeg);\n\t\t\t\tdelete m._spiderLeg;\n\t\t\t}\n\t\t}\n\n\t\tgroup.fire('unspiderfied', {\n\t\t\tcluster: this,\n\t\t\tmarkers: childMarkers\n\t\t});\n\t\tgroup._ignoreMove = false;\n\t\tgroup._spiderfied = null;\n\t}\n});\n\n//Non Animated versions of everything\nL.MarkerClusterNonAnimated = L.MarkerCluster.extend({\n\t_animationSpiderfy: function (childMarkers, positions) {\n\t\tvar group = this._group,\n\t\t\tmap = group._map,\n\t\t\tfg = group._featureGroup,\n\t\t\tlegOptions = this._group.options.spiderLegPolylineOptions,\n\t\t\ti, m, leg, newPos;\n\n\t\tgroup._ignoreMove = true;\n\n\t\t// Traverse in ascending order to make sure that inner circleMarkers are on top of further legs. Normal markers are re-ordered by newPosition.\n\t\t// The reverse order trick no longer improves performance on modern browsers.\n\t\tfor (i = 0; i < childMarkers.length; i++) {\n\t\t\tnewPos = map.layerPointToLatLng(positions[i]);\n\t\t\tm = childMarkers[i];\n\n\t\t\t// Add the leg before the marker, so that in case the latter is a circleMarker, the leg is behind it.\n\t\t\tleg = new L.Polyline([this._latlng, newPos], legOptions);\n\t\t\tmap.addLayer(leg);\n\t\t\tm._spiderLeg = leg;\n\n\t\t\t// Now add the marker.\n\t\t\tm._preSpiderfyLatlng = m._latlng;\n\t\t\tm.setLatLng(newPos);\n\t\t\tif (m.setZIndexOffset) {\n\t\t\t\tm.setZIndexOffset(1000000); //Make these appear on top of EVERYTHING\n\t\t\t}\n\n\t\t\tfg.addLayer(m);\n\t\t}\n\t\tthis.setOpacity(0.3);\n\n\t\tgroup._ignoreMove = false;\n\t\tgroup.fire('spiderfied', {\n\t\t\tcluster: this,\n\t\t\tmarkers: childMarkers\n\t\t});\n\t},\n\n\t_animationUnspiderfy: function () {\n\t\tthis._noanimationUnspiderfy();\n\t}\n});\n\n//Animated versions here\nL.MarkerCluster.include({\n\n\t_animationSpiderfy: function (childMarkers, positions) {\n\t\tvar me = this,\n\t\t\tgroup = this._group,\n\t\t\tmap = group._map,\n\t\t\tfg = group._featureGroup,\n\t\t\tthisLayerLatLng = this._latlng,\n\t\t\tthisLayerPos = map.latLngToLayerPoint(thisLayerLatLng),\n\t\t\tsvg = L.Path.SVG,\n\t\t\tlegOptions = L.extend({}, this._group.options.spiderLegPolylineOptions), // Copy the options so that we can modify them for animation.\n\t\t\tfinalLegOpacity = legOptions.opacity,\n\t\t\ti, m, leg, legPath, legLength, newPos;\n\n\t\tif (finalLegOpacity === undefined) {\n\t\t\tfinalLegOpacity = L.MarkerClusterGroup.prototype.options.spiderLegPolylineOptions.opacity;\n\t\t}\n\n\t\tif (svg) {\n\t\t\t// If the initial opacity of the spider leg is not 0 then it appears before the animation starts.\n\t\t\tlegOptions.opacity = 0;\n\n\t\t\t// Add the class for CSS transitions.\n\t\t\tlegOptions.className = (legOptions.className || '') + ' leaflet-cluster-spider-leg';\n\t\t} else {\n\t\t\t// Make sure we have a defined opacity.\n\t\t\tlegOptions.opacity = finalLegOpacity;\n\t\t}\n\n\t\tgroup._ignoreMove = true;\n\n\t\t// Add markers and spider legs to map, hidden at our center point.\n\t\t// Traverse in ascending order to make sure that inner circleMarkers are on top of further legs. Normal markers are re-ordered by newPosition.\n\t\t// The reverse order trick no longer improves performance on modern browsers.\n\t\tfor (i = 0; i < childMarkers.length; i++) {\n\t\t\tm = childMarkers[i];\n\n\t\t\tnewPos = map.layerPointToLatLng(positions[i]);\n\n\t\t\t// Add the leg before the marker, so that in case the latter is a circleMarker, the leg is behind it.\n\t\t\tleg = new L.Polyline([thisLayerLatLng, newPos], legOptions);\n\t\t\tmap.addLayer(leg);\n\t\t\tm._spiderLeg = leg;\n\n\t\t\t// Explanations: https://jakearchibald.com/2013/animated-line-drawing-svg/\n\t\t\t// In our case the transition property is declared in the CSS file.\n\t\t\tif (svg) {\n\t\t\t\tlegPath = leg._path;\n\t\t\t\tlegLength = legPath.getTotalLength() + 0.1; // Need a small extra length to avoid remaining dot in Firefox.\n\t\t\t\tlegPath.style.strokeDasharray = legLength; // Just 1 length is enough, it will be duplicated.\n\t\t\t\tlegPath.style.strokeDashoffset = legLength;\n\t\t\t}\n\n\t\t\t// If it is a marker, add it now and we'll animate it out\n\t\t\tif (m.setZIndexOffset) {\n\t\t\t\tm.setZIndexOffset(1000000); // Make normal markers appear on top of EVERYTHING\n\t\t\t}\n\t\t\tif (m.clusterHide) {\n\t\t\t\tm.clusterHide();\n\t\t\t}\n\t\t\t\n\t\t\t// Vectors just get immediately added\n\t\t\tfg.addLayer(m);\n\n\t\t\tif (m._setPos) {\n\t\t\t\tm._setPos(thisLayerPos);\n\t\t\t}\n\t\t}\n\n\t\tgroup._forceLayout();\n\t\tgroup._animationStart();\n\n\t\t// Reveal markers and spider legs.\n\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\n\t\t\tnewPos = map.layerPointToLatLng(positions[i]);\n\t\t\tm = childMarkers[i];\n\n\t\t\t//Move marker to new position\n\t\t\tm._preSpiderfyLatlng = m._latlng;\n\t\t\tm.setLatLng(newPos);\n\t\t\t\n\t\t\tif (m.clusterShow) {\n\t\t\t\tm.clusterShow();\n\t\t\t}\n\n\t\t\t// Animate leg (animation is actually delegated to CSS transition).\n\t\t\tif (svg) {\n\t\t\t\tleg = m._spiderLeg;\n\t\t\t\tlegPath = leg._path;\n\t\t\t\tlegPath.style.strokeDashoffset = 0;\n\t\t\t\t//legPath.style.strokeOpacity = finalLegOpacity;\n\t\t\t\tleg.setStyle({opacity: finalLegOpacity});\n\t\t\t}\n\t\t}\n\t\tthis.setOpacity(0.3);\n\n\t\tgroup._ignoreMove = false;\n\n\t\tsetTimeout(function () {\n\t\t\tgroup._animationEnd();\n\t\t\tgroup.fire('spiderfied', {\n\t\t\t\tcluster: me,\n\t\t\t\tmarkers: childMarkers\n\t\t\t});\n\t\t}, 200);\n\t},\n\n\t_animationUnspiderfy: function (zoomDetails) {\n\t\tvar me = this,\n\t\t\tgroup = this._group,\n\t\t\tmap = group._map,\n\t\t\tfg = group._featureGroup,\n\t\t\tthisLayerPos = zoomDetails ? map._latLngToNewLayerPoint(this._latlng, zoomDetails.zoom, zoomDetails.center) : map.latLngToLayerPoint(this._latlng),\n\t\t\tchildMarkers = this.getAllChildMarkers(null, true),\n\t\t\tsvg = L.Path.SVG,\n\t\t\tm, i, leg, legPath, legLength, nonAnimatable;\n\n\t\tgroup._ignoreMove = true;\n\t\tgroup._animationStart();\n\n\t\t//Make us visible and bring the child markers back in\n\t\tthis.setOpacity(1);\n\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\n\t\t\tm = childMarkers[i];\n\n\t\t\t//Marker was added to us after we were spiderfied\n\t\t\tif (!m._preSpiderfyLatlng) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t//Close any popup on the marker first, otherwise setting the location of the marker will make the map scroll\n\t\t\tm.closePopup();\n\n\t\t\t//Fix up the location to the real one\n\t\t\tm.setLatLng(m._preSpiderfyLatlng);\n\t\t\tdelete m._preSpiderfyLatlng;\n\n\t\t\t//Hack override the location to be our center\n\t\t\tnonAnimatable = true;\n\t\t\tif (m._setPos) {\n\t\t\t\tm._setPos(thisLayerPos);\n\t\t\t\tnonAnimatable = false;\n\t\t\t}\n\t\t\tif (m.clusterHide) {\n\t\t\t\tm.clusterHide();\n\t\t\t\tnonAnimatable = false;\n\t\t\t}\n\t\t\tif (nonAnimatable) {\n\t\t\t\tfg.removeLayer(m);\n\t\t\t}\n\n\t\t\t// Animate the spider leg back in (animation is actually delegated to CSS transition).\n\t\t\tif (svg) {\n\t\t\t\tleg = m._spiderLeg;\n\t\t\t\tlegPath = leg._path;\n\t\t\t\tlegLength = legPath.getTotalLength() + 0.1;\n\t\t\t\tlegPath.style.strokeDashoffset = legLength;\n\t\t\t\tleg.setStyle({opacity: 0});\n\t\t\t}\n\t\t}\n\n\t\tgroup._ignoreMove = false;\n\n\t\tsetTimeout(function () {\n\t\t\t//If we have only <= one child left then that marker will be shown on the map so don't remove it!\n\t\t\tvar stillThereChildCount = 0;\n\t\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\n\t\t\t\tm = childMarkers[i];\n\t\t\t\tif (m._spiderLeg) {\n\t\t\t\t\tstillThereChildCount++;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tfor (i = childMarkers.length - 1; i >= 0; i--) {\n\t\t\t\tm = childMarkers[i];\n\n\t\t\t\tif (!m._spiderLeg) { //Has already been unspiderfied\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (m.clusterShow) {\n\t\t\t\t\tm.clusterShow();\n\t\t\t\t}\n\t\t\t\tif (m.setZIndexOffset) {\n\t\t\t\t\tm.setZIndexOffset(0);\n\t\t\t\t}\n\n\t\t\t\tif (stillThereChildCount > 1) {\n\t\t\t\t\tfg.removeLayer(m);\n\t\t\t\t}\n\n\t\t\t\tmap.removeLayer(m._spiderLeg);\n\t\t\t\tdelete m._spiderLeg;\n\t\t\t}\n\t\t\tgroup._animationEnd();\n\t\t\tgroup.fire('unspiderfied', {\n\t\t\t\tcluster: me,\n\t\t\t\tmarkers: childMarkers\n\t\t\t});\n\t\t}, 200);\n\t}\n});\n\n\nL.MarkerClusterGroup.include({\n\t//The MarkerCluster currently spiderfied (if any)\n\t_spiderfied: null,\n\n\tunspiderfy: function () {\n\t\tthis._unspiderfy.apply(this, arguments);\n\t},\n\n\t_spiderfierOnAdd: function () {\n\t\tthis._map.on('click', this._unspiderfyWrapper, this);\n\n\t\tif (this._map.options.zoomAnimation) {\n\t\t\tthis._map.on('zoomstart', this._unspiderfyZoomStart, this);\n\t\t}\n\t\t//Browsers without zoomAnimation or a big zoom don't fire zoomstart\n\t\tthis._map.on('zoomend', this._noanimationUnspiderfy, this);\n\n\t\tif (!L.Browser.touch) {\n\t\t\tthis._map.getRenderer(this);\n\t\t\t//Needs to happen in the pageload, not after, or animations don't work in webkit\n\t\t\t// http://stackoverflow.com/questions/8455200/svg-animate-with-dynamically-added-elements\n\t\t\t//Disable on touch browsers as the animation messes up on a touch zoom and isn't very noticable\n\t\t}\n\t},\n\n\t_spiderfierOnRemove: function () {\n\t\tthis._map.off('click', this._unspiderfyWrapper, this);\n\t\tthis._map.off('zoomstart', this._unspiderfyZoomStart, this);\n\t\tthis._map.off('zoomanim', this._unspiderfyZoomAnim, this);\n\t\tthis._map.off('zoomend', this._noanimationUnspiderfy, this);\n\n\t\t//Ensure that markers are back where they should be\n\t\t// Use no animation to avoid a sticky leaflet-cluster-anim class on mapPane\n\t\tthis._noanimationUnspiderfy();\n\t},\n\n\t//On zoom start we add a zoomanim handler so that we are guaranteed to be last (after markers are animated)\n\t//This means we can define the animation they do rather than Markers doing an animation to their actual location\n\t_unspiderfyZoomStart: function () {\n\t\tif (!this._map) { //May have been removed from the map by a zoomEnd handler\n\t\t\treturn;\n\t\t}\n\n\t\tthis._map.on('zoomanim', this._unspiderfyZoomAnim, this);\n\t},\n\n\t_unspiderfyZoomAnim: function (zoomDetails) {\n\t\t//Wait until the first zoomanim after the user has finished touch-zooming before running the animation\n\t\tif (L.DomUtil.hasClass(this._map._mapPane, 'leaflet-touching')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._map.off('zoomanim', this._unspiderfyZoomAnim, this);\n\t\tthis._unspiderfy(zoomDetails);\n\t},\n\n\t_unspiderfyWrapper: function () {\n\t\t/// _unspiderfy but passes no arguments \n\t\tthis._unspiderfy();\n\t},\n\n\t_unspiderfy: function (zoomDetails) {\n\t\tif (this._spiderfied) {\n\t\t\tthis._spiderfied.unspiderfy(zoomDetails);\n\t\t}\n\t},\n\n\t_noanimationUnspiderfy: function () {\n\t\tif (this._spiderfied) {\n\t\t\tthis._spiderfied._noanimationUnspiderfy();\n\t\t}\n\t},\n\n\t//If the given layer is currently being spiderfied then we unspiderfy it so it isn't on the map anymore etc\n\t_unspiderfyLayer: function (layer) {\n\t\tif (layer._spiderLeg) {\n\t\t\tthis._featureGroup.removeLayer(layer);\n\n\t\t\tif (layer.clusterShow) {\n\t\t\t\tlayer.clusterShow();\n\t\t\t}\n\t\t\t\t//Position will be fixed up immediately in _animationUnspiderfy\n\t\t\tif (layer.setZIndexOffset) {\n\t\t\t\tlayer.setZIndexOffset(0);\n\t\t\t}\n\n\t\t\tthis._map.removeLayer(layer._spiderLeg);\n\t\t\tdelete layer._spiderLeg;\n\t\t}\n\t}\n});\n","/**\n * Adds 1 public method to MCG and 1 to L.Marker to facilitate changing\n * markers' icon options and refreshing their icon and their parent clusters\n * accordingly (case where their iconCreateFunction uses data of childMarkers\n * to make up the cluster icon).\n */\n\n\nL.MarkerClusterGroup.include({\n\t/**\n\t * Updates the icon of all clusters which are parents of the given marker(s).\n\t * In singleMarkerMode, also updates the given marker(s) icon.\n\t * @param layers L.MarkerClusterGroup|L.LayerGroup|Array(L.Marker)|Map(L.Marker)|\n\t * L.MarkerCluster|L.Marker (optional) list of markers (or single marker) whose parent\n\t * clusters need to be updated. If not provided, retrieves all child markers of this.\n\t * @returns {L.MarkerClusterGroup}\n\t */\n\trefreshClusters: function (layers) {\n\t\tif (!layers) {\n\t\t\tlayers = this._topClusterLevel.getAllChildMarkers();\n\t\t} else if (layers instanceof L.MarkerClusterGroup) {\n\t\t\tlayers = layers._topClusterLevel.getAllChildMarkers();\n\t\t} else if (layers instanceof L.LayerGroup) {\n\t\t\tlayers = layers._layers;\n\t\t} else if (layers instanceof L.MarkerCluster) {\n\t\t\tlayers = layers.getAllChildMarkers();\n\t\t} else if (layers instanceof L.Marker) {\n\t\t\tlayers = [layers];\n\t\t} // else: must be an Array(L.Marker)|Map(L.Marker)\n\t\tthis._flagParentsIconsNeedUpdate(layers);\n\t\tthis._refreshClustersIcons();\n\n\t\t// In case of singleMarkerMode, also re-draw the markers.\n\t\tif (this.options.singleMarkerMode) {\n\t\t\tthis._refreshSingleMarkerModeMarkers(layers);\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Simply flags all parent clusters of the given markers as having a \"dirty\" icon.\n\t * @param layers Array(L.Marker)|Map(L.Marker) list of markers.\n\t * @private\n\t */\n\t_flagParentsIconsNeedUpdate: function (layers) {\n\t\tvar id, parent;\n\n\t\t// Assumes layers is an Array or an Object whose prototype is non-enumerable.\n\t\tfor (id in layers) {\n\t\t\t// Flag parent clusters' icon as \"dirty\", all the way up.\n\t\t\t// Dumb process that flags multiple times upper parents, but still\n\t\t\t// much more efficient than trying to be smart and make short lists,\n\t\t\t// at least in the case of a hierarchy following a power law:\n\t\t\t// http://jsperf.com/flag-nodes-in-power-hierarchy/2\n\t\t\tparent = layers[id].__parent;\n\t\t\twhile (parent) {\n\t\t\t\tparent._iconNeedsUpdate = true;\n\t\t\t\tparent = parent.__parent;\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Re-draws the icon of the supplied markers.\n\t * To be used in singleMarkerMode only.\n\t * @param layers Array(L.Marker)|Map(L.Marker) list of markers.\n\t * @private\n\t */\n\t_refreshSingleMarkerModeMarkers: function (layers) {\n\t\tvar id, layer;\n\n\t\tfor (id in layers) {\n\t\t\tlayer = layers[id];\n\n\t\t\t// Make sure we do not override markers that do not belong to THIS group.\n\t\t\tif (this.hasLayer(layer)) {\n\t\t\t\t// Need to re-create the icon first, then re-draw the marker.\n\t\t\t\tlayer.setIcon(this._overrideMarkerIcon(layer));\n\t\t\t}\n\t\t}\n\t}\n});\n\nL.Marker.include({\n\t/**\n\t * Updates the given options in the marker's icon and refreshes the marker.\n\t * @param options map object of icon options.\n\t * @param directlyRefreshClusters boolean (optional) true to trigger\n\t * MCG.refreshClustersOf() right away with this single marker.\n\t * @returns {L.Marker}\n\t */\n\trefreshIconOptions: function (options, directlyRefreshClusters) {\n\t\tvar icon = this.options.icon;\n\n\t\tL.setOptions(icon, options);\n\n\t\tthis.setIcon(icon);\n\n\t\t// Shortcut to refresh the associated MCG clusters right away.\n\t\t// To be used when refreshing a single marker.\n\t\t// Otherwise, better use MCG.refreshClusters() once at the end with\n\t\t// the list of modified markers.\n\t\tif (directlyRefreshClusters && this.__parent) {\n\t\t\tthis.__parent._group.refreshClusters(this);\n\t\t}\n\n\t\treturn this;\n\t}\n});\n"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/public old/scripts/dist/leaflet.markercluster.js b/public old/scripts/dist/leaflet.markercluster.js
deleted file mode 100644
index 66fe516..0000000
--- a/public old/scripts/dist/leaflet.markercluster.js
+++ /dev/null
@@ -1,2 +0,0 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(((e=e||self).Leaflet=e.Leaflet||{},e.Leaflet.markercluster={}))}(this,function(e){"use strict";var t=L.MarkerClusterGroup=L.FeatureGroup.extend({options:{maxClusterRadius:80,iconCreateFunction:null,clusterPane:L.Marker.prototype.options.pane,spiderfyOnEveryZoom:!1,spiderfyOnMaxZoom:!0,showCoverageOnHover:!0,zoomToBoundsOnClick:!0,singleMarkerMode:!1,disableClusteringAtZoom:null,removeOutsideVisibleBounds:!0,animate:!0,animateAddingMarkers:!1,spiderfyShapePositions:null,spiderfyDistanceMultiplier:1,spiderLegPolylineOptions:{weight:1.5,color:"#222",opacity:.5},chunkedLoading:!1,chunkInterval:200,chunkDelay:50,chunkProgress:null,polygonOptions:{}},initialize:function(e){L.Util.setOptions(this,e),this.options.iconCreateFunction||(this.options.iconCreateFunction=this._defaultIconCreateFunction),this._featureGroup=L.featureGroup(),this._featureGroup.addEventParent(this),this._nonPointGroup=L.featureGroup(),this._nonPointGroup.addEventParent(this),this._inZoomAnimation=0,this._needsClustering=[],this._needsRemoving=[],this._currentShownBounds=null,this._queue=[],this._childMarkerEventHandlers={dragstart:this._childMarkerDragStart,move:this._childMarkerMoved,dragend:this._childMarkerDragEnd};var t=L.DomUtil.TRANSITION&&this.options.animate;L.extend(this,t?this._withAnimation:this._noAnimation),this._markerCluster=t?L.MarkerCluster:L.MarkerClusterNonAnimated},addLayer:function(e){if(e instanceof L.LayerGroup)return this.addLayers([e]);if(!e.getLatLng)return this._nonPointGroup.addLayer(e),this.fire("layeradd",{layer:e}),this;if(!this._map)return this._needsClustering.push(e),this.fire("layeradd",{layer:e}),this;if(this.hasLayer(e))return this;this._unspiderfy&&this._unspiderfy(),this._addLayer(e,this._maxZoom),this.fire("layeradd",{layer:e}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons();var t=e,i=this._zoom;if(e.__parent)for(;t.__parent._zoom>=i;)t=t.__parent;return this._currentShownBounds.contains(t.getLatLng())&&(this.options.animateAddingMarkers?this._animationAddLayer(e,t):this._animationAddLayerNonAnimated(e,t)),this},removeLayer:function(e){return e instanceof L.LayerGroup?this.removeLayers([e]):(e.getLatLng?this._map?e.__parent&&(this._unspiderfy&&(this._unspiderfy(),this._unspiderfyLayer(e)),this._removeLayer(e,!0),this.fire("layerremove",{layer:e}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),e.off(this._childMarkerEventHandlers,this),this._featureGroup.hasLayer(e)&&(this._featureGroup.removeLayer(e),e.clusterShow&&e.clusterShow())):(!this._arraySplice(this._needsClustering,e)&&this.hasLayer(e)&&this._needsRemoving.push({layer:e,latlng:e._latlng}),this.fire("layerremove",{layer:e})):(this._nonPointGroup.removeLayer(e),this.fire("layerremove",{layer:e})),this)},addLayers:function(n,s){if(!L.Util.isArray(n))return this.addLayer(n);var o,a=this._featureGroup,h=this._nonPointGroup,l=this.options.chunkedLoading,u=this.options.chunkInterval,_=this.options.chunkProgress,d=n.length,p=0,c=!0;if(this._map){var f=(new Date).getTime(),m=L.bind(function(){var e=(new Date).getTime();for(this._map&&this._unspiderfy&&this._unspiderfy();p"+t+" ",className:"marker-cluster"+i,iconSize:new L.Point(40,40)})},_bindEvents:function(){var e=this._map,t=this.options.spiderfyOnMaxZoom,i=this.options.showCoverageOnHover,r=this.options.zoomToBoundsOnClick,n=this.options.spiderfyOnEveryZoom;(t||r||n)&&this.on("clusterclick clusterkeypress",this._zoomOrSpiderfy,this),i&&(this.on("clustermouseover",this._showCoverage,this),this.on("clustermouseout",this._hideCoverage,this),e.on("zoomend",this._hideCoverage,this))},_zoomOrSpiderfy:function(e){var t=e.layer,i=t;if("clusterkeypress"!==e.type||!e.originalEvent||13===e.originalEvent.keyCode){for(;1===i._childClusters.length;)i=i._childClusters[0];i._zoom===this._maxZoom&&i._childCount===t._childCount&&this.options.spiderfyOnMaxZoom?t.spiderfy():this.options.zoomToBoundsOnClick&&t.zoomToBounds(),this.options.spiderfyOnEveryZoom&&t.spiderfy(),e.originalEvent&&13===e.originalEvent.keyCode&&this._map._container.focus()}},_showCoverage:function(e){var t=this._map;this._inZoomAnimation||(this._shownPolygon&&t.removeLayer(this._shownPolygon),2h._zoom;r--)u=new this._markerCluster(this,r,u),n[r].addObject(u,this._map.project(a.getLatLng(),r));return h._addChild(u),void this._removeFromGridUnclustered(a,t)}s[t].addObject(e,i)}this._topClusterLevel._addChild(e),e.__parent=this._topClusterLevel},_refreshClustersIcons:function(){this._featureGroup.eachLayer(function(e){e instanceof L.MarkerCluster&&e._iconNeedsUpdate&&e._updateIcon()})},_enqueue:function(e){this._queue.push(e),this._queueTimeout||(this._queueTimeout=setTimeout(L.bind(this._processQueue,this),300))},_processQueue:function(){for(var e=0;ee?(this._animationStart(),this._animationZoomOut(this._zoom,e)):this._moveEnd()},_getExpandedVisibleBounds:function(){return this.options.removeOutsideVisibleBounds?L.Browser.mobile?this._checkBoundsMaxLat(this._map.getBounds()):this._checkBoundsMaxLat(this._map.getBounds().pad(1)):this._mapBoundsInfinite},_checkBoundsMaxLat:function(e){var t=this._maxLat;return void 0!==t&&(e.getNorth()>=t&&(e._northEast.lat=1/0),e.getSouth()<=-t&&(e._southWest.lat=-1/0)),e},_animationAddLayerNonAnimated:function(e,t){if(t===e)this._featureGroup.addLayer(e);else if(2===t._childCount){t._addToMap();var i=t.getAllChildMarkers();this._featureGroup.removeLayer(i[0]),this._featureGroup.removeLayer(i[1])}else t._updateIcon()},_extractNonGroupLayers:function(e,t){var i,r=e.getLayers(),n=0;for(t=t||[];ni)&&(i=(o=d).lat),(!1===r||d.latn)&&(n=(h=d).lng),(!1===s||d.lng=this._circleSpiralSwitchover?this._generatePointsSpiral(t.length,i):(i.y+=10,this._generatePointsCircle(t.length,i)),this._animationSpiderfy(t,e)}},unspiderfy:function(e){this._group._inZoomAnimation||(this._animationUnspiderfy(e),this._group._spiderfied=null)},_generatePointsCircle:function(e,t){var i,r,n=this._group.options.spiderfyDistanceMultiplier*this._circleFootSeparation*(2+e)/this._2PI,s=this._2PI/e,o=[];for(n=Math.max(n,35),o.length=e,i=0;i> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +
- _lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +
- _lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +
- _lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];
-
- // .toLowerCase() here flattens concatenated strings to save heap memory space.
- return uuid.toLowerCase();
-
-}
-
-function clamp( value, min, max ) {
-
- return Math.max( min, Math.min( max, value ) );
-
-}
-
-// compute euclidean modulo of m % n
-// https://en.wikipedia.org/wiki/Modulo_operation
-function euclideanModulo( n, m ) {
-
- return ( ( n % m ) + m ) % m;
-
-}
-
-// Linear mapping from range to range
-function mapLinear( x, a1, a2, b1, b2 ) {
-
- return b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );
-
-}
-
-// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/
-function inverseLerp( x, y, value ) {
-
- if ( x !== y ) {
-
- return ( value - x ) / ( y - x );
-
- } else {
-
- return 0;
-
- }
-
-}
-
-// https://en.wikipedia.org/wiki/Linear_interpolation
-function lerp( x, y, t ) {
-
- return ( 1 - t ) * x + t * y;
-
-}
-
-// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/
-function damp( x, y, lambda, dt ) {
-
- return lerp( x, y, 1 - Math.exp( - lambda * dt ) );
-
-}
-
-// https://www.desmos.com/calculator/vcsjnyz7x4
-function pingpong( x, length = 1 ) {
-
- return length - Math.abs( euclideanModulo( x, length * 2 ) - length );
-
-}
-
-// http://en.wikipedia.org/wiki/Smoothstep
-function smoothstep( x, min, max ) {
-
- if ( x <= min ) return 0;
- if ( x >= max ) return 1;
-
- x = ( x - min ) / ( max - min );
-
- return x * x * ( 3 - 2 * x );
-
-}
-
-function smootherstep( x, min, max ) {
-
- if ( x <= min ) return 0;
- if ( x >= max ) return 1;
-
- x = ( x - min ) / ( max - min );
-
- return x * x * x * ( x * ( x * 6 - 15 ) + 10 );
-
-}
-
-// Random integer from interval
-function randInt( low, high ) {
-
- return low + Math.floor( Math.random() * ( high - low + 1 ) );
-
-}
-
-// Random float from interval
-function randFloat( low, high ) {
-
- return low + Math.random() * ( high - low );
-
-}
-
-// Random float from <-range/2, range/2> interval
-function randFloatSpread( range ) {
-
- return range * ( 0.5 - Math.random() );
-
-}
-
-// Deterministic pseudo-random float in the interval [ 0, 1 ]
-function seededRandom( s ) {
-
- if ( s !== undefined ) _seed = s;
-
- // Mulberry32 generator
-
- let t = _seed += 0x6D2B79F5;
-
- t = Math.imul( t ^ t >>> 15, t | 1 );
-
- t ^= t + Math.imul( t ^ t >>> 7, t | 61 );
-
- return ( ( t ^ t >>> 14 ) >>> 0 ) / 4294967296;
-
-}
-
-function degToRad( degrees ) {
-
- return degrees * DEG2RAD;
-
-}
-
-function radToDeg( radians ) {
-
- return radians * RAD2DEG;
-
-}
-
-function isPowerOfTwo( value ) {
-
- return ( value & ( value - 1 ) ) === 0 && value !== 0;
-
-}
-
-function ceilPowerOfTwo( value ) {
-
- return Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );
-
-}
-
-function floorPowerOfTwo( value ) {
-
- return Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );
-
-}
-
-function setQuaternionFromProperEuler( q, a, b, c, order ) {
-
- // Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles
-
- // rotations are applied to the axes in the order specified by 'order'
- // rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'
- // angles are in radians
-
- const cos = Math.cos;
- const sin = Math.sin;
-
- const c2 = cos( b / 2 );
- const s2 = sin( b / 2 );
-
- const c13 = cos( ( a + c ) / 2 );
- const s13 = sin( ( a + c ) / 2 );
-
- const c1_3 = cos( ( a - c ) / 2 );
- const s1_3 = sin( ( a - c ) / 2 );
-
- const c3_1 = cos( ( c - a ) / 2 );
- const s3_1 = sin( ( c - a ) / 2 );
-
- switch ( order ) {
-
- case 'XYX':
- q.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );
- break;
-
- case 'YZY':
- q.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );
- break;
-
- case 'ZXZ':
- q.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );
- break;
-
- case 'XZX':
- q.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );
- break;
-
- case 'YXY':
- q.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );
- break;
-
- case 'ZYZ':
- q.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );
- break;
-
- default:
- console.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );
-
- }
-
-}
-
-function denormalize( value, array ) {
-
- switch ( array.constructor ) {
-
- case Float32Array:
-
- return value;
-
- case Uint32Array:
-
- return value / 4294967295.0;
-
- case Uint16Array:
-
- return value / 65535.0;
-
- case Uint8Array:
-
- return value / 255.0;
-
- case Int32Array:
-
- return Math.max( value / 2147483647.0, - 1.0 );
-
- case Int16Array:
-
- return Math.max( value / 32767.0, - 1.0 );
-
- case Int8Array:
-
- return Math.max( value / 127.0, - 1.0 );
-
- default:
-
- throw new Error( 'Invalid component type.' );
-
- }
-
-}
-
-function normalize( value, array ) {
-
- switch ( array.constructor ) {
-
- case Float32Array:
-
- return value;
-
- case Uint32Array:
-
- return Math.round( value * 4294967295.0 );
-
- case Uint16Array:
-
- return Math.round( value * 65535.0 );
-
- case Uint8Array:
-
- return Math.round( value * 255.0 );
-
- case Int32Array:
-
- return Math.round( value * 2147483647.0 );
-
- case Int16Array:
-
- return Math.round( value * 32767.0 );
-
- case Int8Array:
-
- return Math.round( value * 127.0 );
-
- default:
-
- throw new Error( 'Invalid component type.' );
-
- }
-
-}
-
-const MathUtils = {
- DEG2RAD: DEG2RAD,
- RAD2DEG: RAD2DEG,
- generateUUID: generateUUID,
- clamp: clamp,
- euclideanModulo: euclideanModulo,
- mapLinear: mapLinear,
- inverseLerp: inverseLerp,
- lerp: lerp,
- damp: damp,
- pingpong: pingpong,
- smoothstep: smoothstep,
- smootherstep: smootherstep,
- randInt: randInt,
- randFloat: randFloat,
- randFloatSpread: randFloatSpread,
- seededRandom: seededRandom,
- degToRad: degToRad,
- radToDeg: radToDeg,
- isPowerOfTwo: isPowerOfTwo,
- ceilPowerOfTwo: ceilPowerOfTwo,
- floorPowerOfTwo: floorPowerOfTwo,
- setQuaternionFromProperEuler: setQuaternionFromProperEuler,
- normalize: normalize,
- denormalize: denormalize
-};
-
-class Vector2 {
-
- constructor( x = 0, y = 0 ) {
-
- Vector2.prototype.isVector2 = true;
-
- this.x = x;
- this.y = y;
-
- }
-
- get width() {
-
- return this.x;
-
- }
-
- set width( value ) {
-
- this.x = value;
-
- }
-
- get height() {
-
- return this.y;
-
- }
-
- set height( value ) {
-
- this.y = value;
-
- }
-
- set( x, y ) {
-
- this.x = x;
- this.y = y;
-
- return this;
-
- }
-
- setScalar( scalar ) {
-
- this.x = scalar;
- this.y = scalar;
-
- return this;
-
- }
-
- setX( x ) {
-
- this.x = x;
-
- return this;
-
- }
-
- setY( y ) {
-
- this.y = y;
-
- return this;
-
- }
-
- setComponent( index, value ) {
-
- switch ( index ) {
-
- case 0: this.x = value; break;
- case 1: this.y = value; break;
- default: throw new Error( 'index is out of range: ' + index );
-
- }
-
- return this;
-
- }
-
- getComponent( index ) {
-
- switch ( index ) {
-
- case 0: return this.x;
- case 1: return this.y;
- default: throw new Error( 'index is out of range: ' + index );
-
- }
-
- }
-
- clone() {
-
- return new this.constructor( this.x, this.y );
-
- }
-
- copy( v ) {
-
- this.x = v.x;
- this.y = v.y;
-
- return this;
-
- }
-
- add( v ) {
-
- this.x += v.x;
- this.y += v.y;
-
- return this;
-
- }
-
- addScalar( s ) {
-
- this.x += s;
- this.y += s;
-
- return this;
-
- }
-
- addVectors( a, b ) {
-
- this.x = a.x + b.x;
- this.y = a.y + b.y;
-
- return this;
-
- }
-
- addScaledVector( v, s ) {
-
- this.x += v.x * s;
- this.y += v.y * s;
-
- return this;
-
- }
-
- sub( v ) {
-
- this.x -= v.x;
- this.y -= v.y;
-
- return this;
-
- }
-
- subScalar( s ) {
-
- this.x -= s;
- this.y -= s;
-
- return this;
-
- }
-
- subVectors( a, b ) {
-
- this.x = a.x - b.x;
- this.y = a.y - b.y;
-
- return this;
-
- }
-
- multiply( v ) {
-
- this.x *= v.x;
- this.y *= v.y;
-
- return this;
-
- }
-
- multiplyScalar( scalar ) {
-
- this.x *= scalar;
- this.y *= scalar;
-
- return this;
-
- }
-
- divide( v ) {
-
- this.x /= v.x;
- this.y /= v.y;
-
- return this;
-
- }
-
- divideScalar( scalar ) {
-
- return this.multiplyScalar( 1 / scalar );
-
- }
-
- applyMatrix3( m ) {
-
- const x = this.x, y = this.y;
- const e = m.elements;
-
- this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];
- this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];
-
- return this;
-
- }
-
- min( v ) {
-
- this.x = Math.min( this.x, v.x );
- this.y = Math.min( this.y, v.y );
-
- return this;
-
- }
-
- max( v ) {
-
- this.x = Math.max( this.x, v.x );
- this.y = Math.max( this.y, v.y );
-
- return this;
-
- }
-
- clamp( min, max ) {
-
- // assumes min < max, componentwise
-
- this.x = Math.max( min.x, Math.min( max.x, this.x ) );
- this.y = Math.max( min.y, Math.min( max.y, this.y ) );
-
- return this;
-
- }
-
- clampScalar( minVal, maxVal ) {
-
- this.x = Math.max( minVal, Math.min( maxVal, this.x ) );
- this.y = Math.max( minVal, Math.min( maxVal, this.y ) );
-
- return this;
-
- }
-
- clampLength( min, max ) {
-
- const length = this.length();
-
- return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );
-
- }
-
- floor() {
-
- this.x = Math.floor( this.x );
- this.y = Math.floor( this.y );
-
- return this;
-
- }
-
- ceil() {
-
- this.x = Math.ceil( this.x );
- this.y = Math.ceil( this.y );
-
- return this;
-
- }
-
- round() {
-
- this.x = Math.round( this.x );
- this.y = Math.round( this.y );
-
- return this;
-
- }
-
- roundToZero() {
-
- this.x = Math.trunc( this.x );
- this.y = Math.trunc( this.y );
-
- return this;
-
- }
-
- negate() {
-
- this.x = - this.x;
- this.y = - this.y;
-
- return this;
-
- }
-
- dot( v ) {
-
- return this.x * v.x + this.y * v.y;
-
- }
-
- cross( v ) {
-
- return this.x * v.y - this.y * v.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() {
-
- // computes the angle in radians with respect to the positive x-axis
-
- const angle = Math.atan2( - this.y, - this.x ) + Math.PI;
-
- return angle;
-
- }
-
- angleTo( v ) {
-
- const denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );
-
- if ( denominator === 0 ) return Math.PI / 2;
-
- const theta = this.dot( v ) / denominator;
-
- // clamp, to handle numerical problems
-
- return Math.acos( clamp( theta, - 1, 1 ) );
-
- }
-
- distanceTo( v ) {
-
- return Math.sqrt( this.distanceToSquared( v ) );
-
- }
-
- distanceToSquared( v ) {
-
- const dx = this.x - v.x, dy = this.y - v.y;
- return dx * dx + dy * dy;
-
- }
-
- manhattanDistanceTo( v ) {
-
- return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );
-
- }
-
- setLength( length ) {
-
- return this.normalize().multiplyScalar( length );
-
- }
-
- lerp( v, alpha ) {
-
- this.x += ( v.x - this.x ) * alpha;
- this.y += ( v.y - this.y ) * alpha;
-
- return this;
-
- }
-
- lerpVectors( v1, v2, alpha ) {
-
- this.x = v1.x + ( v2.x - v1.x ) * alpha;
- this.y = v1.y + ( v2.y - v1.y ) * alpha;
-
- return this;
-
- }
-
- equals( v ) {
-
- return ( ( v.x === this.x ) && ( v.y === this.y ) );
-
- }
-
- fromArray( array, offset = 0 ) {
-
- this.x = array[ offset ];
- this.y = array[ offset + 1 ];
-
- return this;
-
- }
-
- toArray( array = [], offset = 0 ) {
-
- array[ offset ] = this.x;
- array[ offset + 1 ] = this.y;
-
- return array;
-
- }
-
- fromBufferAttribute( attribute, index ) {
-
- this.x = attribute.getX( index );
- this.y = attribute.getY( index );
-
- return this;
-
- }
-
- rotateAround( center, angle ) {
-
- const c = Math.cos( angle ), s = Math.sin( angle );
-
- const x = this.x - center.x;
- const y = this.y - center.y;
-
- this.x = x * c - y * s + center.x;
- this.y = x * s + y * c + center.y;
-
- return this;
-
- }
-
- random() {
-
- this.x = Math.random();
- this.y = Math.random();
-
- return this;
-
- }
-
- *[ Symbol.iterator ]() {
-
- yield this.x;
- yield this.y;
-
- }
-
-}
-
-class Matrix3 {
-
- constructor( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {
-
- Matrix3.prototype.isMatrix3 = true;
-
- this.elements = [
-
- 1, 0, 0,
- 0, 1, 0,
- 0, 0, 1
-
- ];
-
- if ( n11 !== undefined ) {
-
- this.set( n11, n12, n13, n21, n22, n23, n31, n32, n33 );
-
- }
-
- }
-
- set( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {
-
- const te = this.elements;
-
- te[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;
- te[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;
- te[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;
-
- return this;
-
- }
-
- identity() {
-
- this.set(
-
- 1, 0, 0,
- 0, 1, 0,
- 0, 0, 1
-
- );
-
- return this;
-
- }
-
- copy( m ) {
-
- const te = this.elements;
- const me = m.elements;
-
- te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];
- te[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];
- te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];
-
- return this;
-
- }
-
- extractBasis( xAxis, yAxis, zAxis ) {
-
- xAxis.setFromMatrix3Column( this, 0 );
- yAxis.setFromMatrix3Column( this, 1 );
- zAxis.setFromMatrix3Column( this, 2 );
-
- return this;
-
- }
-
- setFromMatrix4( m ) {
-
- const me = m.elements;
-
- this.set(
-
- me[ 0 ], me[ 4 ], me[ 8 ],
- me[ 1 ], me[ 5 ], me[ 9 ],
- me[ 2 ], me[ 6 ], me[ 10 ]
-
- );
-
- return this;
-
- }
-
- multiply( m ) {
-
- return this.multiplyMatrices( this, m );
-
- }
-
- premultiply( m ) {
-
- return this.multiplyMatrices( m, this );
-
- }
-
- multiplyMatrices( a, b ) {
-
- const ae = a.elements;
- const be = b.elements;
- const te = this.elements;
-
- const a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];
- const a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];
- const a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];
-
- const b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];
- const b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];
- const b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];
-
- te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;
- te[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;
- te[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;
-
- te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;
- te[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;
- te[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;
-
- te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;
- te[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;
- te[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;
-
- return this;
-
- }
-
- multiplyScalar( s ) {
-
- const te = this.elements;
-
- te[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;
- te[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;
- te[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;
-
- return this;
-
- }
-
- determinant() {
-
- const te = this.elements;
-
- const a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],
- d = te[ 3 ], e = te[ 4 ], f = te[ 5 ],
- g = te[ 6 ], h = te[ 7 ], i = te[ 8 ];
-
- return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;
-
- }
-
- invert() {
-
- const te = this.elements,
-
- n11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],
- n12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],
- n13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],
-
- t11 = n33 * n22 - n32 * n23,
- t12 = n32 * n13 - n33 * n12,
- t13 = n23 * n12 - n22 * n13,
-
- det = n11 * t11 + n21 * t12 + n31 * t13;
-
- if ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );
-
- const detInv = 1 / det;
-
- te[ 0 ] = t11 * detInv;
- te[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;
- te[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;
-
- te[ 3 ] = t12 * detInv;
- te[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;
- te[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;
-
- te[ 6 ] = t13 * detInv;
- te[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;
- te[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;
-
- return this;
-
- }
-
- transpose() {
-
- let tmp;
- const m = this.elements;
-
- tmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;
- tmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;
- tmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;
-
- return this;
-
- }
-
- getNormalMatrix( matrix4 ) {
-
- return this.setFromMatrix4( matrix4 ).invert().transpose();
-
- }
-
- transposeIntoArray( r ) {
-
- const m = this.elements;
-
- r[ 0 ] = m[ 0 ];
- r[ 1 ] = m[ 3 ];
- r[ 2 ] = m[ 6 ];
- r[ 3 ] = m[ 1 ];
- r[ 4 ] = m[ 4 ];
- r[ 5 ] = m[ 7 ];
- r[ 6 ] = m[ 2 ];
- r[ 7 ] = m[ 5 ];
- r[ 8 ] = m[ 8 ];
-
- return this;
-
- }
-
- setUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {
-
- const c = Math.cos( rotation );
- const s = Math.sin( rotation );
-
- this.set(
- sx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,
- - sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,
- 0, 0, 1
- );
-
- return this;
-
- }
-
- //
-
- scale( sx, sy ) {
-
- this.premultiply( _m3.makeScale( sx, sy ) );
-
- return this;
-
- }
-
- rotate( theta ) {
-
- this.premultiply( _m3.makeRotation( - theta ) );
-
- return this;
-
- }
-
- translate( tx, ty ) {
-
- this.premultiply( _m3.makeTranslation( tx, ty ) );
-
- return this;
-
- }
-
- // for 2D Transforms
-
- makeTranslation( x, y ) {
-
- if ( x.isVector2 ) {
-
- this.set(
-
- 1, 0, x.x,
- 0, 1, x.y,
- 0, 0, 1
-
- );
-
- } else {
-
- this.set(
-
- 1, 0, x,
- 0, 1, y,
- 0, 0, 1
-
- );
-
- }
-
- return this;
-
- }
-
- makeRotation( theta ) {
-
- // counterclockwise
-
- const c = Math.cos( theta );
- const s = Math.sin( theta );
-
- this.set(
-
- c, - s, 0,
- s, c, 0,
- 0, 0, 1
-
- );
-
- return this;
-
- }
-
- makeScale( x, y ) {
-
- this.set(
-
- x, 0, 0,
- 0, y, 0,
- 0, 0, 1
-
- );
-
- return this;
-
- }
-
- //
-
- equals( matrix ) {
-
- const te = this.elements;
- const me = matrix.elements;
-
- for ( let i = 0; i < 9; i ++ ) {
-
- if ( te[ i ] !== me[ i ] ) return false;
-
- }
-
- return true;
-
- }
-
- fromArray( array, offset = 0 ) {
-
- for ( let i = 0; i < 9; i ++ ) {
-
- this.elements[ i ] = array[ i + offset ];
-
- }
-
- return this;
-
- }
-
- toArray( array = [], offset = 0 ) {
-
- const te = this.elements;
-
- array[ offset ] = te[ 0 ];
- array[ offset + 1 ] = te[ 1 ];
- array[ offset + 2 ] = te[ 2 ];
-
- array[ offset + 3 ] = te[ 3 ];
- array[ offset + 4 ] = te[ 4 ];
- array[ offset + 5 ] = te[ 5 ];
-
- array[ offset + 6 ] = te[ 6 ];
- array[ offset + 7 ] = te[ 7 ];
- array[ offset + 8 ] = te[ 8 ];
-
- return array;
-
- }
-
- clone() {
-
- return new this.constructor().fromArray( this.elements );
-
- }
-
-}
-
-const _m3 = /*@__PURE__*/ new Matrix3();
-
-function arrayNeedsUint32( array ) {
-
- // assumes larger values usually on last
-
- for ( let i = array.length - 1; i >= 0; -- i ) {
-
- if ( array[ i ] >= 65535 ) return true; // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565
-
- }
-
- return false;
-
-}
-
-const TYPED_ARRAYS = {
- Int8Array: Int8Array,
- Uint8Array: Uint8Array,
- Uint8ClampedArray: Uint8ClampedArray,
- Int16Array: Int16Array,
- Uint16Array: Uint16Array,
- Int32Array: Int32Array,
- Uint32Array: Uint32Array,
- Float32Array: Float32Array,
- Float64Array: Float64Array
-};
-
-function getTypedArray( type, buffer ) {
-
- return new TYPED_ARRAYS[ type ]( buffer );
-
-}
-
-function createElementNS( name ) {
-
- return document.createElementNS( 'http://www.w3.org/1999/xhtml', name );
-
-}
-
-function createCanvasElement() {
-
- const canvas = createElementNS( 'canvas' );
- canvas.style.display = 'block';
- return canvas;
-
-}
-
-const _cache = {};
-
-function warnOnce( message ) {
-
- if ( message in _cache ) return;
-
- _cache[ message ] = true;
-
- console.warn( message );
-
-}
-
-/**
- * Matrices converting P3 <-> Rec. 709 primaries, without gamut mapping
- * or clipping. Based on W3C specifications for sRGB and Display P3,
- * and ICC specifications for the D50 connection space. Values in/out
- * are _linear_ sRGB and _linear_ Display P3.
- *
- * Note that both sRGB and Display P3 use the sRGB transfer functions.
- *
- * Reference:
- * - http://www.russellcottrell.com/photo/matrixCalculator.htm
- */
-
-const LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = /*@__PURE__*/ new Matrix3().set(
- 0.8224621, 0.177538, 0.0,
- 0.0331941, 0.9668058, 0.0,
- 0.0170827, 0.0723974, 0.9105199,
-);
-
-const LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = /*@__PURE__*/ new Matrix3().set(
- 1.2249401, - 0.2249404, 0.0,
- - 0.0420569, 1.0420571, 0.0,
- - 0.0196376, - 0.0786361, 1.0982735
-);
-
-/**
- * Defines supported color spaces by transfer function and primaries,
- * and provides conversions to/from the Linear-sRGB reference space.
- */
-const COLOR_SPACES = {
- [ LinearSRGBColorSpace ]: {
- transfer: LinearTransfer,
- primaries: Rec709Primaries,
- toReference: ( color ) => color,
- fromReference: ( color ) => color,
- },
- [ SRGBColorSpace ]: {
- transfer: SRGBTransfer,
- primaries: Rec709Primaries,
- toReference: ( color ) => color.convertSRGBToLinear(),
- fromReference: ( color ) => color.convertLinearToSRGB(),
- },
- [ LinearDisplayP3ColorSpace ]: {
- transfer: LinearTransfer,
- primaries: P3Primaries,
- toReference: ( color ) => color.applyMatrix3( LINEAR_DISPLAY_P3_TO_LINEAR_SRGB ),
- fromReference: ( color ) => color.applyMatrix3( LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 ),
- },
- [ DisplayP3ColorSpace ]: {
- transfer: SRGBTransfer,
- primaries: P3Primaries,
- toReference: ( color ) => color.convertSRGBToLinear().applyMatrix3( LINEAR_DISPLAY_P3_TO_LINEAR_SRGB ),
- fromReference: ( color ) => color.applyMatrix3( LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 ).convertLinearToSRGB(),
- },
-};
-
-const SUPPORTED_WORKING_COLOR_SPACES = new Set( [ LinearSRGBColorSpace, LinearDisplayP3ColorSpace ] );
-
-const ColorManagement = {
-
- enabled: true,
-
- _workingColorSpace: LinearSRGBColorSpace,
-
- get workingColorSpace() {
-
- return this._workingColorSpace;
-
- },
-
- set workingColorSpace( colorSpace ) {
-
- if ( ! SUPPORTED_WORKING_COLOR_SPACES.has( colorSpace ) ) {
-
- throw new Error( `Unsupported working color space, "${ colorSpace }".` );
-
- }
-
- this._workingColorSpace = colorSpace;
-
- },
-
- convert: function ( color, sourceColorSpace, targetColorSpace ) {
-
- if ( this.enabled === false || sourceColorSpace === targetColorSpace || ! sourceColorSpace || ! targetColorSpace ) {
-
- return color;
-
- }
-
- const sourceToReference = COLOR_SPACES[ sourceColorSpace ].toReference;
- const targetFromReference = COLOR_SPACES[ targetColorSpace ].fromReference;
-
- return targetFromReference( sourceToReference( color ) );
-
- },
-
- fromWorkingColorSpace: function ( color, targetColorSpace ) {
-
- return this.convert( color, this._workingColorSpace, targetColorSpace );
-
- },
-
- toWorkingColorSpace: function ( color, sourceColorSpace ) {
-
- return this.convert( color, sourceColorSpace, this._workingColorSpace );
-
- },
-
- getPrimaries: function ( colorSpace ) {
-
- return COLOR_SPACES[ colorSpace ].primaries;
-
- },
-
- getTransfer: function ( colorSpace ) {
-
- if ( colorSpace === NoColorSpace ) return LinearTransfer;
-
- return COLOR_SPACES[ colorSpace ].transfer;
-
- },
-
-};
-
-
-function SRGBToLinear( c ) {
-
- return ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );
-
-}
-
-function LinearToSRGB( c ) {
-
- return ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;
-
-}
-
-let _canvas;
-
-class ImageUtils {
-
- static getDataURL( image ) {
-
- if ( /^data:/i.test( image.src ) ) {
-
- return image.src;
-
- }
-
- if ( typeof HTMLCanvasElement === 'undefined' ) {
-
- return image.src;
-
- }
-
- let canvas;
-
- if ( image instanceof HTMLCanvasElement ) {
-
- canvas = image;
-
- } else {
-
- if ( _canvas === undefined ) _canvas = createElementNS( 'canvas' );
-
- _canvas.width = image.width;
- _canvas.height = image.height;
-
- const context = _canvas.getContext( '2d' );
-
- if ( image instanceof ImageData ) {
-
- context.putImageData( image, 0, 0 );
-
- } else {
-
- context.drawImage( image, 0, 0, image.width, image.height );
-
- }
-
- canvas = _canvas;
-
- }
-
- if ( canvas.width > 2048 || canvas.height > 2048 ) {
-
- console.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image );
-
- return canvas.toDataURL( 'image/jpeg', 0.6 );
-
- } else {
-
- return canvas.toDataURL( 'image/png' );
-
- }
-
- }
-
- static sRGBToLinear( image ) {
-
- if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||
- ( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||
- ( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {
-
- const canvas = createElementNS( 'canvas' );
-
- canvas.width = image.width;
- canvas.height = image.height;
-
- const context = canvas.getContext( '2d' );
- context.drawImage( image, 0, 0, image.width, image.height );
-
- const imageData = context.getImageData( 0, 0, image.width, image.height );
- const data = imageData.data;
-
- for ( let i = 0; i < data.length; i ++ ) {
-
- data[ i ] = SRGBToLinear( data[ i ] / 255 ) * 255;
-
- }
-
- context.putImageData( imageData, 0, 0 );
-
- return canvas;
-
- } else if ( image.data ) {
-
- const data = image.data.slice( 0 );
-
- for ( let i = 0; i < data.length; i ++ ) {
-
- if ( data instanceof Uint8Array || data instanceof Uint8ClampedArray ) {
-
- data[ i ] = Math.floor( SRGBToLinear( data[ i ] / 255 ) * 255 );
-
- } else {
-
- // assuming float
-
- data[ i ] = SRGBToLinear( data[ i ] );
-
- }
-
- }
-
- return {
- data: data,
- width: image.width,
- height: image.height
- };
-
- } else {
-
- console.warn( 'THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' );
- return image;
-
- }
-
- }
-
-}
-
-let _sourceId = 0;
-
-class Source {
-
- constructor( data = null ) {
-
- this.isSource = true;
-
- Object.defineProperty( this, 'id', { value: _sourceId ++ } );
-
- this.uuid = generateUUID();
-
- this.data = data;
- this.dataReady = true;
-
- this.version = 0;
-
- }
-
- set needsUpdate( value ) {
-
- if ( value === true ) this.version ++;
-
- }
-
- toJSON( meta ) {
-
- const isRootObject = ( meta === undefined || typeof meta === 'string' );
-
- if ( ! isRootObject && meta.images[ this.uuid ] !== undefined ) {
-
- return meta.images[ this.uuid ];
-
- }
-
- const output = {
- uuid: this.uuid,
- url: ''
- };
-
- const data = this.data;
-
- if ( data !== null ) {
-
- let url;
-
- if ( Array.isArray( data ) ) {
-
- // cube texture
-
- url = [];
-
- for ( let i = 0, l = data.length; i < l; i ++ ) {
-
- if ( data[ i ].isDataTexture ) {
-
- url.push( serializeImage( data[ i ].image ) );
-
- } else {
-
- url.push( serializeImage( data[ i ] ) );
-
- }
-
- }
-
- } else {
-
- // texture
-
- url = serializeImage( data );
-
- }
-
- output.url = url;
-
- }
-
- if ( ! isRootObject ) {
-
- meta.images[ this.uuid ] = output;
-
- }
-
- return output;
-
- }
-
-}
-
-function serializeImage( image ) {
-
- if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||
- ( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||
- ( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {
-
- // default images
-
- return ImageUtils.getDataURL( image );
-
- } else {
-
- if ( image.data ) {
-
- // images of DataTexture
-
- return {
- data: Array.from( image.data ),
- width: image.width,
- height: image.height,
- type: image.data.constructor.name
- };
-
- } else {
-
- console.warn( 'THREE.Texture: Unable to serialize Texture.' );
- return {};
-
- }
-
- }
-
-}
-
-let _textureId = 0;
-
-class Texture extends EventDispatcher {
-
- constructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = Texture.DEFAULT_ANISOTROPY, colorSpace = NoColorSpace ) {
-
- super();
-
- this.isTexture = true;
-
- Object.defineProperty( this, 'id', { value: _textureId ++ } );
-
- this.uuid = generateUUID();
-
- this.name = '';
-
- this.source = new Source( image );
- this.mipmaps = [];
-
- this.mapping = mapping;
- this.channel = 0;
-
- this.wrapS = wrapS;
- this.wrapT = wrapT;
-
- this.magFilter = magFilter;
- this.minFilter = minFilter;
-
- this.anisotropy = anisotropy;
-
- this.format = format;
- this.internalFormat = null;
- this.type = type;
-
- this.offset = new Vector2( 0, 0 );
- this.repeat = new Vector2( 1, 1 );
- this.center = new Vector2( 0, 0 );
- this.rotation = 0;
-
- this.matrixAutoUpdate = true;
- this.matrix = new Matrix3();
-
- this.generateMipmaps = true;
- this.premultiplyAlpha = false;
- this.flipY = true;
- this.unpackAlignment = 4; // valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)
-
- this.colorSpace = colorSpace;
-
- this.userData = {};
-
- this.version = 0;
- this.onUpdate = null;
-
- this.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not
- this.pmremVersion = 0; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures)
-
- }
-
- get image() {
-
- return this.source.data;
-
- }
-
- set image( value = null ) {
-
- this.source.data = value;
-
- }
-
- 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( source ) {
-
- this.name = source.name;
-
- this.source = source.source;
- this.mipmaps = source.mipmaps.slice( 0 );
-
- this.mapping = source.mapping;
- this.channel = source.channel;
-
- this.wrapS = source.wrapS;
- this.wrapT = source.wrapT;
-
- this.magFilter = source.magFilter;
- this.minFilter = source.minFilter;
-
- this.anisotropy = source.anisotropy;
-
- this.format = source.format;
- this.internalFormat = source.internalFormat;
- this.type = source.type;
-
- this.offset.copy( source.offset );
- this.repeat.copy( source.repeat );
- this.center.copy( source.center );
- this.rotation = source.rotation;
-
- this.matrixAutoUpdate = source.matrixAutoUpdate;
- this.matrix.copy( source.matrix );
-
- this.generateMipmaps = source.generateMipmaps;
- this.premultiplyAlpha = source.premultiplyAlpha;
- this.flipY = source.flipY;
- this.unpackAlignment = source.unpackAlignment;
- this.colorSpace = source.colorSpace;
-
- this.userData = JSON.parse( JSON.stringify( source.userData ) );
-
- this.needsUpdate = true;
-
- return this;
-
- }
-
- toJSON( meta ) {
-
- const isRootObject = ( meta === undefined || typeof meta === 'string' );
-
- if ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {
-
- return meta.textures[ this.uuid ];
-
- }
-
- const output = {
-
- metadata: {
- version: 4.6,
- type: 'Texture',
- generator: 'Texture.toJSON'
- },
-
- uuid: this.uuid,
- name: this.name,
-
- image: this.source.toJSON( meta ).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
-
- };
-
- if ( Object.keys( this.userData ).length > 0 ) output.userData = this.userData;
-
- if ( ! isRootObject ) {
-
- meta.textures[ this.uuid ] = output;
-
- }
-
- return output;
-
- }
-
- dispose() {
-
- this.dispatchEvent( { type: 'dispose' } );
-
- }
-
- transformUv( uv ) {
-
- if ( this.mapping !== UVMapping ) return uv;
-
- uv.applyMatrix3( this.matrix );
-
- if ( uv.x < 0 || uv.x > 1 ) {
-
- switch ( this.wrapS ) {
-
- case RepeatWrapping:
-
- uv.x = uv.x - Math.floor( uv.x );
- break;
-
- case ClampToEdgeWrapping:
-
- uv.x = uv.x < 0 ? 0 : 1;
- break;
-
- case MirroredRepeatWrapping:
-
- if ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {
-
- uv.x = Math.ceil( uv.x ) - uv.x;
-
- } else {
-
- uv.x = uv.x - Math.floor( uv.x );
-
- }
-
- break;
-
- }
-
- }
-
- if ( uv.y < 0 || uv.y > 1 ) {
-
- switch ( this.wrapT ) {
-
- case RepeatWrapping:
-
- uv.y = uv.y - Math.floor( uv.y );
- break;
-
- case ClampToEdgeWrapping:
-
- uv.y = uv.y < 0 ? 0 : 1;
- break;
-
- case MirroredRepeatWrapping:
-
- if ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {
-
- uv.y = Math.ceil( uv.y ) - uv.y;
-
- } else {
-
- uv.y = uv.y - Math.floor( uv.y );
-
- }
-
- break;
-
- }
-
- }
-
- if ( this.flipY ) {
-
- uv.y = 1 - uv.y;
-
- }
-
- return uv;
-
- }
-
- set needsUpdate( value ) {
-
- if ( value === true ) {
-
- this.version ++;
- this.source.needsUpdate = true;
-
- }
-
- }
-
- set needsPMREMUpdate( value ) {
-
- if ( value === true ) {
-
- this.pmremVersion ++;
-
- }
-
- }
-
-}
-
-Texture.DEFAULT_IMAGE = null;
-Texture.DEFAULT_MAPPING = UVMapping;
-Texture.DEFAULT_ANISOTROPY = 1;
-
-class Vector4 {
-
- constructor( x = 0, y = 0, z = 0, w = 1 ) {
-
- Vector4.prototype.isVector4 = true;
-
- this.x = x;
- this.y = y;
- this.z = z;
- this.w = w;
-
- }
-
- get width() {
-
- return this.z;
-
- }
-
- set width( value ) {
-
- this.z = value;
-
- }
-
- get height() {
-
- return this.w;
-
- }
-
- set height( value ) {
-
- this.w = value;
-
- }
-
- set( x, y, z, w ) {
-
- this.x = x;
- this.y = y;
- this.z = z;
- this.w = w;
-
- return this;
-
- }
-
- setScalar( scalar ) {
-
- this.x = scalar;
- this.y = scalar;
- this.z = scalar;
- this.w = scalar;
-
- return this;
-
- }
-
- setX( x ) {
-
- this.x = x;
-
- return this;
-
- }
-
- setY( y ) {
-
- this.y = y;
-
- return this;
-
- }
-
- setZ( z ) {
-
- this.z = z;
-
- return this;
-
- }
-
- setW( w ) {
-
- this.w = w;
-
- return this;
-
- }
-
- setComponent( index, value ) {
-
- switch ( index ) {
-
- case 0: this.x = value; break;
- case 1: this.y = value; break;
- case 2: this.z = value; break;
- case 3: this.w = value; break;
- default: throw new Error( 'index is out of range: ' + index );
-
- }
-
- return this;
-
- }
-
- getComponent( index ) {
-
- switch ( index ) {
-
- 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: ' + index );
-
- }
-
- }
-
- clone() {
-
- return new this.constructor( this.x, this.y, this.z, this.w );
-
- }
-
- copy( v ) {
-
- this.x = v.x;
- this.y = v.y;
- this.z = v.z;
- this.w = ( v.w !== undefined ) ? v.w : 1;
-
- return this;
-
- }
-
- add( v ) {
-
- this.x += v.x;
- this.y += v.y;
- this.z += v.z;
- this.w += v.w;
-
- return this;
-
- }
-
- addScalar( s ) {
-
- this.x += s;
- this.y += s;
- this.z += s;
- this.w += s;
-
- return this;
-
- }
-
- addVectors( a, b ) {
-
- this.x = a.x + b.x;
- this.y = a.y + b.y;
- this.z = a.z + b.z;
- this.w = a.w + b.w;
-
- return this;
-
- }
-
- addScaledVector( v, s ) {
-
- this.x += v.x * s;
- this.y += v.y * s;
- this.z += v.z * s;
- this.w += v.w * s;
-
- return this;
-
- }
-
- sub( v ) {
-
- this.x -= v.x;
- this.y -= v.y;
- this.z -= v.z;
- this.w -= v.w;
-
- return this;
-
- }
-
- subScalar( s ) {
-
- this.x -= s;
- this.y -= s;
- this.z -= s;
- this.w -= s;
-
- return this;
-
- }
-
- subVectors( a, b ) {
-
- this.x = a.x - b.x;
- this.y = a.y - b.y;
- this.z = a.z - b.z;
- this.w = a.w - b.w;
-
- return this;
-
- }
-
- multiply( v ) {
-
- this.x *= v.x;
- this.y *= v.y;
- this.z *= v.z;
- this.w *= v.w;
-
- return this;
-
- }
-
- multiplyScalar( scalar ) {
-
- this.x *= scalar;
- this.y *= scalar;
- this.z *= scalar;
- this.w *= scalar;
-
- return this;
-
- }
-
- applyMatrix4( m ) {
-
- const x = this.x, y = this.y, z = this.z, w = this.w;
- const e = m.elements;
-
- this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;
- this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;
- this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;
- this.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;
-
- return this;
-
- }
-
- divideScalar( scalar ) {
-
- return this.multiplyScalar( 1 / scalar );
-
- }
-
- setAxisAngleFromQuaternion( q ) {
-
- // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm
-
- // q is assumed to be normalized
-
- this.w = 2 * Math.acos( q.w );
-
- const s = Math.sqrt( 1 - q.w * q.w );
-
- if ( s < 0.0001 ) {
-
- this.x = 1;
- this.y = 0;
- this.z = 0;
-
- } else {
-
- this.x = q.x / s;
- this.y = q.y / s;
- this.z = q.z / s;
-
- }
-
- return this;
-
- }
-
- setAxisAngleFromRotationMatrix( m ) {
-
- // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm
-
- // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)
-
- let angle, x, y, z; // variables for result
- const epsilon = 0.01, // margin to allow for rounding errors
- epsilon2 = 0.1, // margin to distinguish between 0 and 180 degrees
-
- te = m.elements,
-
- m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],
- m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],
- m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];
-
- if ( ( Math.abs( m12 - m21 ) < epsilon ) &&
- ( Math.abs( m13 - m31 ) < epsilon ) &&
- ( Math.abs( m23 - m32 ) < epsilon ) ) {
-
- // singularity found
- // first check for identity matrix which must have +1 for all terms
- // in leading diagonal and zero in other terms
-
- if ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&
- ( Math.abs( m13 + m31 ) < epsilon2 ) &&
- ( Math.abs( m23 + m32 ) < epsilon2 ) &&
- ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {
-
- // this singularity is identity matrix so angle = 0
-
- this.set( 1, 0, 0, 0 );
-
- return this; // zero angle, arbitrary axis
-
- }
-
- // otherwise this singularity is angle = 180
-
- angle = Math.PI;
-
- const xx = ( m11 + 1 ) / 2;
- const yy = ( m22 + 1 ) / 2;
- const zz = ( m33 + 1 ) / 2;
- const xy = ( m12 + m21 ) / 4;
- const xz = ( m13 + m31 ) / 4;
- const yz = ( m23 + m32 ) / 4;
-
- if ( ( xx > yy ) && ( xx > zz ) ) {
-
- // m11 is the largest diagonal term
-
- if ( xx < epsilon ) {
-
- x = 0;
- y = 0.707106781;
- z = 0.707106781;
-
- } else {
-
- x = Math.sqrt( xx );
- y = xy / x;
- z = xz / x;
-
- }
-
- } else if ( yy > zz ) {
-
- // m22 is the largest diagonal term
-
- if ( yy < epsilon ) {
-
- x = 0.707106781;
- y = 0;
- z = 0.707106781;
-
- } else {
-
- y = Math.sqrt( yy );
- x = xy / y;
- z = yz / y;
-
- }
-
- } else {
-
- // m33 is the largest diagonal term so base result on this
-
- if ( zz < epsilon ) {
-
- x = 0.707106781;
- y = 0.707106781;
- z = 0;
-
- } else {
-
- z = Math.sqrt( zz );
- x = xz / z;
- y = yz / z;
-
- }
-
- }
-
- this.set( x, y, z, angle );
-
- return this; // return 180 deg rotation
-
- }
-
- // as we have reached here there are no singularities so we can handle normally
-
- let s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +
- ( m13 - m31 ) * ( m13 - m31 ) +
- ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize
-
- if ( Math.abs( s ) < 0.001 ) s = 1;
-
- // prevent divide by zero, should not happen if matrix is orthogonal and should be
- // caught by singularity test above, but I've left it in just in case
-
- this.x = ( m32 - m23 ) / s;
- this.y = ( m13 - m31 ) / s;
- this.z = ( m21 - m12 ) / s;
- this.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );
-
- return this;
-
- }
-
- min( v ) {
-
- this.x = Math.min( this.x, v.x );
- this.y = Math.min( this.y, v.y );
- this.z = Math.min( this.z, v.z );
- this.w = Math.min( this.w, v.w );
-
- return this;
-
- }
-
- max( v ) {
-
- this.x = Math.max( this.x, v.x );
- this.y = Math.max( this.y, v.y );
- this.z = Math.max( this.z, v.z );
- this.w = Math.max( this.w, v.w );
-
- return this;
-
- }
-
- clamp( min, max ) {
-
- // assumes min < max, componentwise
-
- this.x = Math.max( min.x, Math.min( max.x, this.x ) );
- this.y = Math.max( min.y, Math.min( max.y, this.y ) );
- this.z = Math.max( min.z, Math.min( max.z, this.z ) );
- this.w = Math.max( min.w, Math.min( max.w, this.w ) );
-
- return this;
-
- }
-
- clampScalar( minVal, maxVal ) {
-
- this.x = Math.max( minVal, Math.min( maxVal, this.x ) );
- this.y = Math.max( minVal, Math.min( maxVal, this.y ) );
- this.z = Math.max( minVal, Math.min( maxVal, this.z ) );
- this.w = Math.max( minVal, Math.min( maxVal, this.w ) );
-
- return this;
-
- }
-
- clampLength( min, max ) {
-
- const length = this.length();
-
- return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );
-
- }
-
- floor() {
-
- this.x = Math.floor( this.x );
- this.y = Math.floor( this.y );
- this.z = Math.floor( this.z );
- this.w = Math.floor( this.w );
-
- return this;
-
- }
-
- ceil() {
-
- this.x = Math.ceil( this.x );
- this.y = Math.ceil( this.y );
- this.z = Math.ceil( this.z );
- this.w = Math.ceil( this.w );
-
- return this;
-
- }
-
- round() {
-
- this.x = Math.round( this.x );
- this.y = Math.round( this.y );
- this.z = Math.round( this.z );
- this.w = Math.round( this.w );
-
- return this;
-
- }
-
- roundToZero() {
-
- this.x = Math.trunc( this.x );
- this.y = Math.trunc( this.y );
- this.z = Math.trunc( this.z );
- this.w = Math.trunc( this.w );
-
- return this;
-
- }
-
- negate() {
-
- this.x = - this.x;
- this.y = - this.y;
- this.z = - this.z;
- this.w = - this.w;
-
- return this;
-
- }
-
- dot( v ) {
-
- return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.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( length ) {
-
- return this.normalize().multiplyScalar( length );
-
- }
-
- lerp( v, alpha ) {
-
- this.x += ( v.x - this.x ) * alpha;
- this.y += ( v.y - this.y ) * alpha;
- this.z += ( v.z - this.z ) * alpha;
- this.w += ( v.w - this.w ) * alpha;
-
- return this;
-
- }
-
- lerpVectors( v1, v2, alpha ) {
-
- this.x = v1.x + ( v2.x - v1.x ) * alpha;
- this.y = v1.y + ( v2.y - v1.y ) * alpha;
- this.z = v1.z + ( v2.z - v1.z ) * alpha;
- this.w = v1.w + ( v2.w - v1.w ) * alpha;
-
- return this;
-
- }
-
- equals( v ) {
-
- return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );
-
- }
-
- fromArray( array, offset = 0 ) {
-
- this.x = array[ offset ];
- this.y = array[ offset + 1 ];
- this.z = array[ offset + 2 ];
- this.w = array[ offset + 3 ];
-
- return this;
-
- }
-
- toArray( array = [], offset = 0 ) {
-
- array[ offset ] = this.x;
- array[ offset + 1 ] = this.y;
- array[ offset + 2 ] = this.z;
- array[ offset + 3 ] = this.w;
-
- return array;
-
- }
-
- fromBufferAttribute( attribute, index ) {
-
- this.x = attribute.getX( index );
- this.y = attribute.getY( index );
- this.z = attribute.getZ( index );
- this.w = attribute.getW( index );
-
- return this;
-
- }
-
- random() {
-
- this.x = Math.random();
- this.y = Math.random();
- this.z = Math.random();
- this.w = Math.random();
-
- return this;
-
- }
-
- *[ Symbol.iterator ]() {
-
- yield this.x;
- yield this.y;
- yield this.z;
- yield this.w;
-
- }
-
-}
-
-/*
- In options, we can specify:
- * Texture parameters for an auto-generated target texture
- * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers
-*/
-class RenderTarget extends EventDispatcher {
-
- constructor( width = 1, height = 1, options = {} ) {
-
- super();
-
- this.isRenderTarget = true;
-
- this.width = width;
- this.height = height;
- this.depth = 1;
-
- this.scissor = new Vector4( 0, 0, width, height );
- this.scissorTest = false;
-
- this.viewport = new Vector4( 0, 0, width, height );
-
- const image = { width: width, height: height, depth: 1 };
-
- options = Object.assign( {
- generateMipmaps: false,
- internalFormat: null,
- minFilter: LinearFilter,
- depthBuffer: true,
- stencilBuffer: false,
- resolveDepthBuffer: true,
- resolveStencilBuffer: true,
- depthTexture: null,
- samples: 0,
- count: 1
- }, options );
-
- const texture = new Texture( image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace );
-
- texture.flipY = false;
- texture.generateMipmaps = options.generateMipmaps;
- texture.internalFormat = options.internalFormat;
-
- this.textures = [];
-
- const count = options.count;
- for ( let i = 0; i < count; i ++ ) {
-
- this.textures[ i ] = texture.clone();
- this.textures[ i ].isRenderTargetTexture = true;
-
- }
-
- this.depthBuffer = options.depthBuffer;
- this.stencilBuffer = options.stencilBuffer;
-
- this.resolveDepthBuffer = options.resolveDepthBuffer;
- this.resolveStencilBuffer = options.resolveStencilBuffer;
-
- this.depthTexture = options.depthTexture;
-
- this.samples = options.samples;
-
- }
-
- get texture() {
-
- return this.textures[ 0 ];
-
- }
-
- set texture( value ) {
-
- this.textures[ 0 ] = value;
-
- }
-
- setSize( width, height, depth = 1 ) {
-
- if ( this.width !== width || this.height !== height || this.depth !== depth ) {
-
- this.width = width;
- this.height = height;
- this.depth = depth;
-
- for ( let i = 0, il = this.textures.length; i < il; i ++ ) {
-
- this.textures[ i ].image.width = width;
- this.textures[ i ].image.height = height;
- this.textures[ i ].image.depth = depth;
-
- }
-
- this.dispose();
-
- }
-
- this.viewport.set( 0, 0, width, height );
- this.scissor.set( 0, 0, width, height );
-
- }
-
- clone() {
-
- return new this.constructor().copy( this );
-
- }
-
- copy( source ) {
-
- this.width = source.width;
- this.height = source.height;
- this.depth = source.depth;
-
- this.scissor.copy( source.scissor );
- this.scissorTest = source.scissorTest;
-
- this.viewport.copy( source.viewport );
-
- this.textures.length = 0;
-
- for ( let i = 0, il = source.textures.length; i < il; i ++ ) {
-
- this.textures[ i ] = source.textures[ i ].clone();
- this.textures[ i ].isRenderTargetTexture = true;
-
- }
-
- // ensure image object is not shared, see #20328
-
- const image = Object.assign( {}, source.texture.image );
- this.texture.source = new Source( image );
-
- this.depthBuffer = source.depthBuffer;
- this.stencilBuffer = source.stencilBuffer;
-
- this.resolveDepthBuffer = source.resolveDepthBuffer;
- this.resolveStencilBuffer = source.resolveStencilBuffer;
-
- if ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone();
-
- this.samples = source.samples;
-
- return this;
-
- }
-
- dispose() {
-
- this.dispatchEvent( { type: 'dispose' } );
-
- }
-
-}
-
-class WebGLRenderTarget extends RenderTarget {
-
- constructor( width = 1, height = 1, options = {} ) {
-
- super( width, height, options );
-
- this.isWebGLRenderTarget = true;
-
- }
-
-}
-
-class DataArrayTexture extends Texture {
-
- constructor( data = null, width = 1, height = 1, depth = 1 ) {
-
- super( null );
-
- this.isDataArrayTexture = true;
-
- this.image = { data, width, height, depth };
-
- this.magFilter = NearestFilter;
- this.minFilter = NearestFilter;
-
- this.wrapR = ClampToEdgeWrapping;
-
- this.generateMipmaps = false;
- this.flipY = false;
- this.unpackAlignment = 1;
-
- }
-
-}
-
-class WebGLArrayRenderTarget extends WebGLRenderTarget {
-
- constructor( width = 1, height = 1, depth = 1, options = {} ) {
-
- super( width, height, options );
-
- this.isWebGLArrayRenderTarget = true;
-
- this.depth = depth;
-
- this.texture = new DataArrayTexture( null, width, height, depth );
-
- this.texture.isRenderTargetTexture = true;
-
- }
-
-}
-
-class Data3DTexture extends Texture {
-
- constructor( data = null, width = 1, height = 1, depth = 1 ) {
-
- // We're going to add .setXXX() methods for setting properties later.
- // Users can still set in DataTexture3D directly.
- //
- // const texture = new THREE.DataTexture3D( data, width, height, depth );
- // texture.anisotropy = 16;
- //
- // See #14839
-
- super( null );
-
- this.isData3DTexture = true;
-
- this.image = { data, width, height, depth };
-
- this.magFilter = NearestFilter;
- this.minFilter = NearestFilter;
-
- this.wrapR = ClampToEdgeWrapping;
-
- this.generateMipmaps = false;
- this.flipY = false;
- this.unpackAlignment = 1;
-
- }
-
-}
-
-class WebGL3DRenderTarget extends WebGLRenderTarget {
-
- constructor( width = 1, height = 1, depth = 1, options = {} ) {
-
- super( width, height, options );
-
- this.isWebGL3DRenderTarget = true;
-
- this.depth = depth;
-
- this.texture = new Data3DTexture( null, width, height, depth );
-
- this.texture.isRenderTargetTexture = true;
-
- }
-
-}
-
-class Quaternion {
-
- constructor( x = 0, y = 0, z = 0, w = 1 ) {
-
- this.isQuaternion = true;
-
- this._x = x;
- this._y = y;
- this._z = z;
- this._w = w;
-
- }
-
- static slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {
-
- // fuzz-free, array-based Quaternion SLERP operation
-
- let x0 = src0[ srcOffset0 + 0 ],
- y0 = src0[ srcOffset0 + 1 ],
- z0 = src0[ srcOffset0 + 2 ],
- w0 = src0[ srcOffset0 + 3 ];
-
- const x1 = src1[ srcOffset1 + 0 ],
- y1 = src1[ srcOffset1 + 1 ],
- z1 = src1[ srcOffset1 + 2 ],
- w1 = src1[ srcOffset1 + 3 ];
-
- if ( t === 0 ) {
-
- dst[ dstOffset + 0 ] = x0;
- dst[ dstOffset + 1 ] = y0;
- dst[ dstOffset + 2 ] = z0;
- dst[ dstOffset + 3 ] = w0;
- return;
-
- }
-
- if ( t === 1 ) {
-
- dst[ dstOffset + 0 ] = x1;
- dst[ dstOffset + 1 ] = y1;
- dst[ dstOffset + 2 ] = z1;
- dst[ dstOffset + 3 ] = w1;
- return;
-
- }
-
- if ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {
-
- let s = 1 - t;
- const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,
- dir = ( cos >= 0 ? 1 : - 1 ),
- sqrSin = 1 - cos * cos;
-
- // Skip the Slerp for tiny steps to avoid numeric problems:
- if ( sqrSin > Number.EPSILON ) {
-
- const sin = Math.sqrt( sqrSin ),
- len = Math.atan2( sin, cos * dir );
-
- s = Math.sin( s * len ) / sin;
- t = Math.sin( t * len ) / sin;
-
- }
-
- const tDir = t * dir;
-
- x0 = x0 * s + x1 * tDir;
- y0 = y0 * s + y1 * tDir;
- z0 = z0 * s + z1 * tDir;
- w0 = w0 * s + w1 * tDir;
-
- // Normalize in case we just did a lerp:
- if ( s === 1 - t ) {
-
- const f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );
-
- x0 *= f;
- y0 *= f;
- z0 *= f;
- w0 *= f;
-
- }
-
- }
-
- dst[ dstOffset ] = x0;
- dst[ dstOffset + 1 ] = y0;
- dst[ dstOffset + 2 ] = z0;
- dst[ dstOffset + 3 ] = w0;
-
- }
-
- static multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {
-
- const x0 = src0[ srcOffset0 ];
- const y0 = src0[ srcOffset0 + 1 ];
- const z0 = src0[ srcOffset0 + 2 ];
- const w0 = src0[ srcOffset0 + 3 ];
-
- const x1 = src1[ srcOffset1 ];
- const y1 = src1[ srcOffset1 + 1 ];
- const z1 = src1[ srcOffset1 + 2 ];
- const w1 = src1[ srcOffset1 + 3 ];
-
- dst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;
- dst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;
- dst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;
- dst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;
-
- return dst;
-
- }
-
- get x() {
-
- return this._x;
-
- }
-
- set x( value ) {
-
- this._x = value;
- this._onChangeCallback();
-
- }
-
- get y() {
-
- return this._y;
-
- }
-
- set y( value ) {
-
- this._y = value;
- this._onChangeCallback();
-
- }
-
- get z() {
-
- return this._z;
-
- }
-
- set z( value ) {
-
- this._z = value;
- this._onChangeCallback();
-
- }
-
- get w() {
-
- return this._w;
-
- }
-
- set w( value ) {
-
- this._w = value;
- this._onChangeCallback();
-
- }
-
- set( x, y, z, w ) {
-
- this._x = x;
- this._y = y;
- this._z = z;
- this._w = w;
-
- this._onChangeCallback();
-
- return this;
-
- }
-
- clone() {
-
- return new this.constructor( this._x, this._y, this._z, this._w );
-
- }
-
- copy( quaternion ) {
-
- this._x = quaternion.x;
- this._y = quaternion.y;
- this._z = quaternion.z;
- this._w = quaternion.w;
-
- this._onChangeCallback();
-
- return this;
-
- }
-
- setFromEuler( euler, update = true ) {
-
- const x = euler._x, y = euler._y, z = euler._z, order = euler._order;
-
- // http://www.mathworks.com/matlabcentral/fileexchange/
- // 20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/
- // content/SpinCalc.m
-
- const cos = Math.cos;
- const sin = Math.sin;
-
- const c1 = cos( x / 2 );
- const c2 = cos( y / 2 );
- const c3 = cos( z / 2 );
-
- const s1 = sin( x / 2 );
- const s2 = sin( y / 2 );
- const s3 = sin( z / 2 );
-
- switch ( order ) {
-
- case 'XYZ':
- this._x = s1 * c2 * c3 + c1 * s2 * s3;
- this._y = c1 * s2 * c3 - s1 * c2 * s3;
- this._z = c1 * c2 * s3 + s1 * s2 * c3;
- this._w = c1 * c2 * c3 - s1 * s2 * s3;
- break;
-
- case 'YXZ':
- this._x = s1 * c2 * c3 + c1 * s2 * s3;
- this._y = c1 * s2 * c3 - s1 * c2 * s3;
- this._z = c1 * c2 * s3 - s1 * s2 * c3;
- this._w = c1 * c2 * c3 + s1 * s2 * s3;
- break;
-
- case 'ZXY':
- this._x = s1 * c2 * c3 - c1 * s2 * s3;
- this._y = c1 * s2 * c3 + s1 * c2 * s3;
- this._z = c1 * c2 * s3 + s1 * s2 * c3;
- this._w = c1 * c2 * c3 - s1 * s2 * s3;
- break;
-
- case 'ZYX':
- this._x = s1 * c2 * c3 - c1 * s2 * s3;
- this._y = c1 * s2 * c3 + s1 * c2 * s3;
- this._z = c1 * c2 * s3 - s1 * s2 * c3;
- this._w = c1 * c2 * c3 + s1 * s2 * s3;
- break;
-
- case 'YZX':
- this._x = s1 * c2 * c3 + c1 * s2 * s3;
- this._y = c1 * s2 * c3 + s1 * c2 * s3;
- this._z = c1 * c2 * s3 - s1 * s2 * c3;
- this._w = c1 * c2 * c3 - s1 * s2 * s3;
- break;
-
- case 'XZY':
- this._x = s1 * c2 * c3 - c1 * s2 * s3;
- this._y = c1 * s2 * c3 - s1 * c2 * s3;
- this._z = c1 * c2 * s3 + s1 * s2 * c3;
- this._w = c1 * c2 * c3 + s1 * s2 * s3;
- break;
-
- default:
- console.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );
-
- }
-
- if ( update === true ) this._onChangeCallback();
-
- return this;
-
- }
-
- setFromAxisAngle( axis, angle ) {
-
- // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm
-
- // assumes axis is normalized
-
- const halfAngle = angle / 2, s = Math.sin( halfAngle );
-
- this._x = axis.x * s;
- this._y = axis.y * s;
- this._z = axis.z * s;
- this._w = Math.cos( halfAngle );
-
- this._onChangeCallback();
-
- return this;
-
- }
-
- setFromRotationMatrix( m ) {
-
- // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm
-
- // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)
-
- const te = m.elements,
-
- m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],
- m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],
- m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],
-
- trace = m11 + m22 + m33;
-
- if ( trace > 0 ) {
-
- const s = 0.5 / Math.sqrt( trace + 1.0 );
-
- this._w = 0.25 / s;
- this._x = ( m32 - m23 ) * s;
- this._y = ( m13 - m31 ) * s;
- this._z = ( m21 - m12 ) * s;
-
- } else if ( m11 > m22 && m11 > m33 ) {
-
- const s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );
-
- this._w = ( m32 - m23 ) / s;
- this._x = 0.25 * s;
- this._y = ( m12 + m21 ) / s;
- this._z = ( m13 + m31 ) / s;
-
- } else if ( m22 > m33 ) {
-
- const s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );
-
- this._w = ( m13 - m31 ) / s;
- this._x = ( m12 + m21 ) / s;
- this._y = 0.25 * s;
- this._z = ( m23 + m32 ) / s;
-
- } else {
-
- const s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );
-
- this._w = ( m21 - m12 ) / s;
- this._x = ( m13 + m31 ) / s;
- this._y = ( m23 + m32 ) / s;
- this._z = 0.25 * s;
-
- }
-
- this._onChangeCallback();
-
- return this;
-
- }
-
- setFromUnitVectors( vFrom, vTo ) {
-
- // assumes direction vectors vFrom and vTo are normalized
-
- let r = vFrom.dot( vTo ) + 1;
-
- if ( r < Number.EPSILON ) {
-
- // vFrom and vTo point in opposite directions
-
- r = 0;
-
- if ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {
-
- this._x = - vFrom.y;
- this._y = vFrom.x;
- this._z = 0;
- this._w = r;
-
- } else {
-
- this._x = 0;
- this._y = - vFrom.z;
- this._z = vFrom.y;
- this._w = r;
-
- }
-
- } else {
-
- // crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3
-
- this._x = vFrom.y * vTo.z - vFrom.z * vTo.y;
- this._y = vFrom.z * vTo.x - vFrom.x * vTo.z;
- this._z = vFrom.x * vTo.y - vFrom.y * vTo.x;
- this._w = r;
-
- }
-
- return this.normalize();
-
- }
-
- angleTo( q ) {
-
- return 2 * Math.acos( Math.abs( clamp( this.dot( q ), - 1, 1 ) ) );
-
- }
-
- rotateTowards( q, step ) {
-
- const angle = this.angleTo( q );
-
- if ( angle === 0 ) return this;
-
- const t = Math.min( 1, step / angle );
-
- this.slerp( q, t );
-
- return this;
-
- }
-
- identity() {
-
- return this.set( 0, 0, 0, 1 );
-
- }
-
- invert() {
-
- // quaternion is assumed to have unit length
-
- return this.conjugate();
-
- }
-
- conjugate() {
-
- this._x *= - 1;
- this._y *= - 1;
- this._z *= - 1;
-
- this._onChangeCallback();
-
- return this;
-
- }
-
- dot( v ) {
-
- return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._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 l = this.length();
-
- if ( l === 0 ) {
-
- this._x = 0;
- this._y = 0;
- this._z = 0;
- this._w = 1;
-
- } else {
-
- l = 1 / l;
-
- this._x = this._x * l;
- this._y = this._y * l;
- this._z = this._z * l;
- this._w = this._w * l;
-
- }
-
- this._onChangeCallback();
-
- return this;
-
- }
-
- multiply( q ) {
-
- return this.multiplyQuaternions( this, q );
-
- }
-
- premultiply( q ) {
-
- return this.multiplyQuaternions( q, this );
-
- }
-
- multiplyQuaternions( a, b ) {
-
- // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm
-
- const qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;
- const qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;
-
- this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;
- this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;
- this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;
- this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;
-
- this._onChangeCallback();
-
- return this;
-
- }
-
- slerp( qb, t ) {
-
- if ( t === 0 ) return this;
- if ( t === 1 ) return this.copy( qb );
-
- const x = this._x, y = this._y, z = this._z, w = this._w;
-
- // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/
-
- let cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;
-
- if ( cosHalfTheta < 0 ) {
-
- this._w = - qb._w;
- this._x = - qb._x;
- this._y = - qb._y;
- this._z = - qb._z;
-
- cosHalfTheta = - cosHalfTheta;
-
- } else {
-
- this.copy( qb );
-
- }
-
- if ( cosHalfTheta >= 1.0 ) {
-
- this._w = w;
- this._x = x;
- this._y = y;
- this._z = z;
-
- return this;
-
- }
-
- const sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;
-
- if ( sqrSinHalfTheta <= Number.EPSILON ) {
-
- const s = 1 - t;
- this._w = s * w + t * this._w;
- this._x = s * x + t * this._x;
- this._y = s * y + t * this._y;
- this._z = s * z + t * this._z;
-
- this.normalize(); // normalize calls _onChangeCallback()
-
- return this;
-
- }
-
- const sinHalfTheta = Math.sqrt( sqrSinHalfTheta );
- const halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );
- const ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,
- ratioB = Math.sin( t * halfTheta ) / sinHalfTheta;
-
- this._w = ( w * ratioA + this._w * ratioB );
- this._x = ( x * ratioA + this._x * ratioB );
- this._y = ( y * ratioA + this._y * ratioB );
- this._z = ( z * ratioA + this._z * ratioB );
-
- this._onChangeCallback();
-
- return this;
-
- }
-
- slerpQuaternions( qa, qb, t ) {
-
- return this.copy( qa ).slerp( qb, t );
-
- }
-
- random() {
-
- // sets this quaternion to a uniform random unit quaternnion
-
- // Ken Shoemake
- // Uniform random rotations
- // D. Kirk, editor, Graphics Gems III, pages 124-132. Academic Press, New York, 1992.
-
- const theta1 = 2 * Math.PI * Math.random();
- const theta2 = 2 * Math.PI * Math.random();
-
- const x0 = Math.random();
- const r1 = Math.sqrt( 1 - x0 );
- const r2 = Math.sqrt( x0 );
-
- return this.set(
- r1 * Math.sin( theta1 ),
- r1 * Math.cos( theta1 ),
- r2 * Math.sin( theta2 ),
- r2 * Math.cos( theta2 ),
- );
-
- }
-
- equals( quaternion ) {
-
- return ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );
-
- }
-
- fromArray( array, offset = 0 ) {
-
- this._x = array[ offset ];
- this._y = array[ offset + 1 ];
- this._z = array[ offset + 2 ];
- this._w = array[ offset + 3 ];
-
- this._onChangeCallback();
-
- return this;
-
- }
-
- toArray( array = [], offset = 0 ) {
-
- array[ offset ] = this._x;
- array[ offset + 1 ] = this._y;
- array[ offset + 2 ] = this._z;
- array[ offset + 3 ] = this._w;
-
- return array;
-
- }
-
- fromBufferAttribute( attribute, index ) {
-
- this._x = attribute.getX( index );
- this._y = attribute.getY( index );
- this._z = attribute.getZ( index );
- this._w = attribute.getW( index );
-
- this._onChangeCallback();
-
- return this;
-
- }
-
- toJSON() {
-
- return this.toArray();
-
- }
-
- _onChange( callback ) {
-
- this._onChangeCallback = callback;
-
- return this;
-
- }
-
- _onChangeCallback() {}
-
- *[ Symbol.iterator ]() {
-
- yield this._x;
- yield this._y;
- yield this._z;
- yield this._w;
-
- }
-
-}
-
-class Vector3 {
-
- constructor( x = 0, y = 0, z = 0 ) {
-
- Vector3.prototype.isVector3 = true;
-
- this.x = x;
- this.y = y;
- this.z = z;
-
- }
-
- set( x, y, z ) {
-
- if ( z === undefined ) z = this.z; // sprite.scale.set(x,y)
-
- this.x = x;
- this.y = y;
- this.z = z;
-
- return this;
-
- }
-
- setScalar( scalar ) {
-
- this.x = scalar;
- this.y = scalar;
- this.z = scalar;
-
- return this;
-
- }
-
- setX( x ) {
-
- this.x = x;
-
- return this;
-
- }
-
- setY( y ) {
-
- this.y = y;
-
- return this;
-
- }
-
- setZ( z ) {
-
- this.z = z;
-
- return this;
-
- }
-
- setComponent( index, value ) {
-
- switch ( index ) {
-
- case 0: this.x = value; break;
- case 1: this.y = value; break;
- case 2: this.z = value; break;
- default: throw new Error( 'index is out of range: ' + index );
-
- }
-
- return this;
-
- }
-
- getComponent( index ) {
-
- switch ( index ) {
-
- case 0: return this.x;
- case 1: return this.y;
- case 2: return this.z;
- default: throw new Error( 'index is out of range: ' + index );
-
- }
-
- }
-
- clone() {
-
- return new this.constructor( this.x, this.y, this.z );
-
- }
-
- copy( v ) {
-
- this.x = v.x;
- this.y = v.y;
- this.z = v.z;
-
- return this;
-
- }
-
- add( v ) {
-
- this.x += v.x;
- this.y += v.y;
- this.z += v.z;
-
- return this;
-
- }
-
- addScalar( s ) {
-
- this.x += s;
- this.y += s;
- this.z += s;
-
- return this;
-
- }
-
- addVectors( a, b ) {
-
- this.x = a.x + b.x;
- this.y = a.y + b.y;
- this.z = a.z + b.z;
-
- return this;
-
- }
-
- addScaledVector( v, s ) {
-
- this.x += v.x * s;
- this.y += v.y * s;
- this.z += v.z * s;
-
- return this;
-
- }
-
- sub( v ) {
-
- this.x -= v.x;
- this.y -= v.y;
- this.z -= v.z;
-
- return this;
-
- }
-
- subScalar( s ) {
-
- this.x -= s;
- this.y -= s;
- this.z -= s;
-
- return this;
-
- }
-
- subVectors( a, b ) {
-
- this.x = a.x - b.x;
- this.y = a.y - b.y;
- this.z = a.z - b.z;
-
- return this;
-
- }
-
- multiply( v ) {
-
- this.x *= v.x;
- this.y *= v.y;
- this.z *= v.z;
-
- return this;
-
- }
-
- multiplyScalar( scalar ) {
-
- this.x *= scalar;
- this.y *= scalar;
- this.z *= scalar;
-
- return this;
-
- }
-
- multiplyVectors( a, b ) {
-
- this.x = a.x * b.x;
- this.y = a.y * b.y;
- this.z = a.z * b.z;
-
- return this;
-
- }
-
- applyEuler( euler ) {
-
- return this.applyQuaternion( _quaternion$4.setFromEuler( euler ) );
-
- }
-
- applyAxisAngle( axis, angle ) {
-
- return this.applyQuaternion( _quaternion$4.setFromAxisAngle( axis, angle ) );
-
- }
-
- applyMatrix3( m ) {
-
- const x = this.x, y = this.y, z = this.z;
- const e = m.elements;
-
- this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;
- this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;
- this.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;
-
- return this;
-
- }
-
- applyNormalMatrix( m ) {
-
- return this.applyMatrix3( m ).normalize();
-
- }
-
- applyMatrix4( m ) {
-
- const x = this.x, y = this.y, z = this.z;
- const e = m.elements;
-
- const w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );
-
- this.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;
- this.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;
- this.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;
-
- return this;
-
- }
-
- applyQuaternion( q ) {
-
- // quaternion q is assumed to have unit length
-
- const vx = this.x, vy = this.y, vz = this.z;
- const qx = q.x, qy = q.y, qz = q.z, qw = q.w;
-
- // t = 2 * cross( q.xyz, v );
- const tx = 2 * ( qy * vz - qz * vy );
- const ty = 2 * ( qz * vx - qx * vz );
- const tz = 2 * ( qx * vy - qy * vx );
-
- // v + q.w * t + cross( q.xyz, t );
- this.x = vx + qw * tx + qy * tz - qz * ty;
- this.y = vy + qw * ty + qz * tx - qx * tz;
- this.z = vz + qw * tz + qx * ty - qy * tx;
-
- return this;
-
- }
-
- project( camera ) {
-
- return this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );
-
- }
-
- unproject( camera ) {
-
- return this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );
-
- }
-
- transformDirection( m ) {
-
- // input: THREE.Matrix4 affine matrix
- // vector interpreted as a direction
-
- const x = this.x, y = this.y, z = this.z;
- const e = m.elements;
-
- this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;
- this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;
- this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;
-
- return this.normalize();
-
- }
-
- divide( v ) {
-
- this.x /= v.x;
- this.y /= v.y;
- this.z /= v.z;
-
- return this;
-
- }
-
- divideScalar( scalar ) {
-
- return this.multiplyScalar( 1 / scalar );
-
- }
-
- min( v ) {
-
- this.x = Math.min( this.x, v.x );
- this.y = Math.min( this.y, v.y );
- this.z = Math.min( this.z, v.z );
-
- return this;
-
- }
-
- max( v ) {
-
- this.x = Math.max( this.x, v.x );
- this.y = Math.max( this.y, v.y );
- this.z = Math.max( this.z, v.z );
-
- return this;
-
- }
-
- clamp( min, max ) {
-
- // assumes min < max, componentwise
-
- this.x = Math.max( min.x, Math.min( max.x, this.x ) );
- this.y = Math.max( min.y, Math.min( max.y, this.y ) );
- this.z = Math.max( min.z, Math.min( max.z, this.z ) );
-
- return this;
-
- }
-
- clampScalar( minVal, maxVal ) {
-
- this.x = Math.max( minVal, Math.min( maxVal, this.x ) );
- this.y = Math.max( minVal, Math.min( maxVal, this.y ) );
- this.z = Math.max( minVal, Math.min( maxVal, this.z ) );
-
- return this;
-
- }
-
- clampLength( min, max ) {
-
- const length = this.length();
-
- return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );
-
- }
-
- floor() {
-
- this.x = Math.floor( this.x );
- this.y = Math.floor( this.y );
- this.z = Math.floor( this.z );
-
- return this;
-
- }
-
- ceil() {
-
- this.x = Math.ceil( this.x );
- this.y = Math.ceil( this.y );
- this.z = Math.ceil( this.z );
-
- return this;
-
- }
-
- round() {
-
- this.x = Math.round( this.x );
- this.y = Math.round( this.y );
- this.z = Math.round( this.z );
-
- return this;
-
- }
-
- roundToZero() {
-
- this.x = Math.trunc( this.x );
- this.y = Math.trunc( this.y );
- this.z = Math.trunc( this.z );
-
- return this;
-
- }
-
- negate() {
-
- this.x = - this.x;
- this.y = - this.y;
- this.z = - this.z;
-
- return this;
-
- }
-
- dot( v ) {
-
- return this.x * v.x + this.y * v.y + this.z * v.z;
-
- }
-
- // TODO lengthSquared?
-
- 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( length ) {
-
- return this.normalize().multiplyScalar( length );
-
- }
-
- lerp( v, alpha ) {
-
- this.x += ( v.x - this.x ) * alpha;
- this.y += ( v.y - this.y ) * alpha;
- this.z += ( v.z - this.z ) * alpha;
-
- return this;
-
- }
-
- lerpVectors( v1, v2, alpha ) {
-
- this.x = v1.x + ( v2.x - v1.x ) * alpha;
- this.y = v1.y + ( v2.y - v1.y ) * alpha;
- this.z = v1.z + ( v2.z - v1.z ) * alpha;
-
- return this;
-
- }
-
- cross( v ) {
-
- return this.crossVectors( this, v );
-
- }
-
- crossVectors( a, b ) {
-
- const ax = a.x, ay = a.y, az = a.z;
- const bx = b.x, by = b.y, bz = b.z;
-
- this.x = ay * bz - az * by;
- this.y = az * bx - ax * bz;
- this.z = ax * by - ay * bx;
-
- return this;
-
- }
-
- projectOnVector( v ) {
-
- const denominator = v.lengthSq();
-
- if ( denominator === 0 ) return this.set( 0, 0, 0 );
-
- const scalar = v.dot( this ) / denominator;
-
- return this.copy( v ).multiplyScalar( scalar );
-
- }
-
- projectOnPlane( planeNormal ) {
-
- _vector$c.copy( this ).projectOnVector( planeNormal );
-
- return this.sub( _vector$c );
-
- }
-
- reflect( normal ) {
-
- // reflect incident vector off plane orthogonal to normal
- // normal is assumed to have unit length
-
- return this.sub( _vector$c.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );
-
- }
-
- angleTo( v ) {
-
- const denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );
-
- if ( denominator === 0 ) return Math.PI / 2;
-
- const theta = this.dot( v ) / denominator;
-
- // clamp, to handle numerical problems
-
- return Math.acos( clamp( theta, - 1, 1 ) );
-
- }
-
- distanceTo( v ) {
-
- return Math.sqrt( this.distanceToSquared( v ) );
-
- }
-
- distanceToSquared( v ) {
-
- const dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;
-
- return dx * dx + dy * dy + dz * dz;
-
- }
-
- manhattanDistanceTo( v ) {
-
- return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );
-
- }
-
- setFromSpherical( s ) {
-
- return this.setFromSphericalCoords( s.radius, s.phi, s.theta );
-
- }
-
- setFromSphericalCoords( radius, phi, theta ) {
-
- const sinPhiRadius = Math.sin( phi ) * radius;
-
- this.x = sinPhiRadius * Math.sin( theta );
- this.y = Math.cos( phi ) * radius;
- this.z = sinPhiRadius * Math.cos( theta );
-
- return this;
-
- }
-
- setFromCylindrical( c ) {
-
- return this.setFromCylindricalCoords( c.radius, c.theta, c.y );
-
- }
-
- setFromCylindricalCoords( radius, theta, y ) {
-
- this.x = radius * Math.sin( theta );
- this.y = y;
- this.z = radius * Math.cos( theta );
-
- return this;
-
- }
-
- setFromMatrixPosition( m ) {
-
- const e = m.elements;
-
- this.x = e[ 12 ];
- this.y = e[ 13 ];
- this.z = e[ 14 ];
-
- return this;
-
- }
-
- setFromMatrixScale( m ) {
-
- const sx = this.setFromMatrixColumn( m, 0 ).length();
- const sy = this.setFromMatrixColumn( m, 1 ).length();
- const sz = this.setFromMatrixColumn( m, 2 ).length();
-
- this.x = sx;
- this.y = sy;
- this.z = sz;
-
- return this;
-
- }
-
- setFromMatrixColumn( m, index ) {
-
- return this.fromArray( m.elements, index * 4 );
-
- }
-
- setFromMatrix3Column( m, index ) {
-
- return this.fromArray( m.elements, index * 3 );
-
- }
-
- setFromEuler( e ) {
-
- this.x = e._x;
- this.y = e._y;
- this.z = e._z;
-
- return this;
-
- }
-
- setFromColor( c ) {
-
- this.x = c.r;
- this.y = c.g;
- this.z = c.b;
-
- return this;
-
- }
-
- equals( v ) {
-
- return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );
-
- }
-
- fromArray( array, offset = 0 ) {
-
- this.x = array[ offset ];
- this.y = array[ offset + 1 ];
- this.z = array[ offset + 2 ];
-
- return this;
-
- }
-
- toArray( array = [], offset = 0 ) {
-
- array[ offset ] = this.x;
- array[ offset + 1 ] = this.y;
- array[ offset + 2 ] = this.z;
-
- return array;
-
- }
-
- fromBufferAttribute( attribute, index ) {
-
- this.x = attribute.getX( index );
- this.y = attribute.getY( index );
- this.z = attribute.getZ( index );
-
- return this;
-
- }
-
- random() {
-
- this.x = Math.random();
- this.y = Math.random();
- this.z = Math.random();
-
- return this;
-
- }
-
- randomDirection() {
-
- // https://mathworld.wolfram.com/SpherePointPicking.html
-
- const theta = Math.random() * Math.PI * 2;
- const u = Math.random() * 2 - 1;
- const c = Math.sqrt( 1 - u * u );
-
- this.x = c * Math.cos( theta );
- this.y = u;
- this.z = c * Math.sin( theta );
-
- return this;
-
- }
-
- *[ Symbol.iterator ]() {
-
- yield this.x;
- yield this.y;
- yield this.z;
-
- }
-
-}
-
-const _vector$c = /*@__PURE__*/ new Vector3();
-const _quaternion$4 = /*@__PURE__*/ new Quaternion();
-
-class Box3 {
-
- constructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) {
-
- this.isBox3 = true;
-
- this.min = min;
- this.max = max;
-
- }
-
- set( min, max ) {
-
- this.min.copy( min );
- this.max.copy( max );
-
- return this;
-
- }
-
- setFromArray( array ) {
-
- this.makeEmpty();
-
- for ( let i = 0, il = array.length; i < il; i += 3 ) {
-
- this.expandByPoint( _vector$b.fromArray( array, i ) );
-
- }
-
- return this;
-
- }
-
- setFromBufferAttribute( attribute ) {
-
- this.makeEmpty();
-
- for ( let i = 0, il = attribute.count; i < il; i ++ ) {
-
- this.expandByPoint( _vector$b.fromBufferAttribute( attribute, i ) );
-
- }
-
- return this;
-
- }
-
- setFromPoints( points ) {
-
- this.makeEmpty();
-
- for ( let i = 0, il = points.length; i < il; i ++ ) {
-
- this.expandByPoint( points[ i ] );
-
- }
-
- return this;
-
- }
-
- setFromCenterAndSize( center, size ) {
-
- const halfSize = _vector$b.copy( size ).multiplyScalar( 0.5 );
-
- this.min.copy( center ).sub( halfSize );
- this.max.copy( center ).add( halfSize );
-
- return this;
-
- }
-
- setFromObject( object, precise = false ) {
-
- this.makeEmpty();
-
- return this.expandByObject( object, precise );
-
- }
-
- clone() {
-
- return new this.constructor().copy( this );
-
- }
-
- copy( box ) {
-
- this.min.copy( box.min );
- this.max.copy( box.max );
-
- return this;
-
- }
-
- makeEmpty() {
-
- this.min.x = this.min.y = this.min.z = + Infinity;
- this.max.x = this.max.y = this.max.z = - Infinity;
-
- return this;
-
- }
-
- isEmpty() {
-
- // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes
-
- return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );
-
- }
-
- getCenter( target ) {
-
- return this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );
-
- }
-
- getSize( target ) {
-
- return this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );
-
- }
-
- expandByPoint( point ) {
-
- this.min.min( point );
- this.max.max( point );
-
- return this;
-
- }
-
- expandByVector( vector ) {
-
- this.min.sub( vector );
- this.max.add( vector );
-
- return this;
-
- }
-
- expandByScalar( scalar ) {
-
- this.min.addScalar( - scalar );
- this.max.addScalar( scalar );
-
- return this;
-
- }
-
- expandByObject( object, precise = false ) {
-
- // Computes the world-axis-aligned bounding box of an object (including its children),
- // accounting for both the object's, and children's, world transforms
-
- object.updateWorldMatrix( false, false );
-
- const geometry = object.geometry;
-
- if ( geometry !== undefined ) {
-
- const positionAttribute = geometry.getAttribute( 'position' );
-
- // precise AABB computation based on vertex data requires at least a position attribute.
- // instancing isn't supported so far and uses the normal (conservative) code path.
-
- if ( precise === true && positionAttribute !== undefined && object.isInstancedMesh !== true ) {
-
- for ( let i = 0, l = positionAttribute.count; i < l; i ++ ) {
-
- if ( object.isMesh === true ) {
-
- object.getVertexPosition( i, _vector$b );
-
- } else {
-
- _vector$b.fromBufferAttribute( positionAttribute, i );
-
- }
-
- _vector$b.applyMatrix4( object.matrixWorld );
- this.expandByPoint( _vector$b );
-
- }
-
- } else {
-
- if ( object.boundingBox !== undefined ) {
-
- // object-level bounding box
-
- if ( object.boundingBox === null ) {
-
- object.computeBoundingBox();
-
- }
-
- _box$4.copy( object.boundingBox );
-
-
- } else {
-
- // geometry-level bounding box
-
- if ( geometry.boundingBox === null ) {
-
- geometry.computeBoundingBox();
-
- }
-
- _box$4.copy( geometry.boundingBox );
-
- }
-
- _box$4.applyMatrix4( object.matrixWorld );
-
- this.union( _box$4 );
-
- }
-
- }
-
- const children = object.children;
-
- for ( let i = 0, l = children.length; i < l; i ++ ) {
-
- this.expandByObject( children[ i ], precise );
-
- }
-
- return this;
-
- }
-
- containsPoint( point ) {
-
- return point.x < this.min.x || point.x > this.max.x ||
- point.y < this.min.y || point.y > this.max.y ||
- point.z < this.min.z || point.z > this.max.z ? false : true;
-
- }
-
- containsBox( box ) {
-
- return this.min.x <= box.min.x && box.max.x <= this.max.x &&
- this.min.y <= box.min.y && box.max.y <= this.max.y &&
- this.min.z <= box.min.z && box.max.z <= this.max.z;
-
- }
-
- getParameter( point, target ) {
-
- // This can potentially have a divide by zero if the box
- // has a size dimension of 0.
-
- return target.set(
- ( point.x - this.min.x ) / ( this.max.x - this.min.x ),
- ( point.y - this.min.y ) / ( this.max.y - this.min.y ),
- ( point.z - this.min.z ) / ( this.max.z - this.min.z )
- );
-
- }
-
- intersectsBox( box ) {
-
- // using 6 splitting planes to rule out intersections.
- return box.max.x < this.min.x || box.min.x > this.max.x ||
- box.max.y < this.min.y || box.min.y > this.max.y ||
- box.max.z < this.min.z || box.min.z > this.max.z ? false : true;
-
- }
-
- intersectsSphere( sphere ) {
-
- // Find the point on the AABB closest to the sphere center.
- this.clampPoint( sphere.center, _vector$b );
-
- // If that point is inside the sphere, the AABB and sphere intersect.
- return _vector$b.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );
-
- }
-
- intersectsPlane( plane ) {
-
- // We compute the minimum and maximum dot product values. If those values
- // are on the same side (back or front) of the plane, then there is no intersection.
-
- let min, max;
-
- if ( plane.normal.x > 0 ) {
-
- min = plane.normal.x * this.min.x;
- max = plane.normal.x * this.max.x;
-
- } else {
-
- min = plane.normal.x * this.max.x;
- max = plane.normal.x * this.min.x;
-
- }
-
- if ( plane.normal.y > 0 ) {
-
- min += plane.normal.y * this.min.y;
- max += plane.normal.y * this.max.y;
-
- } else {
-
- min += plane.normal.y * this.max.y;
- max += plane.normal.y * this.min.y;
-
- }
-
- if ( plane.normal.z > 0 ) {
-
- min += plane.normal.z * this.min.z;
- max += plane.normal.z * this.max.z;
-
- } else {
-
- min += plane.normal.z * this.max.z;
- max += plane.normal.z * this.min.z;
-
- }
-
- return ( min <= - plane.constant && max >= - plane.constant );
-
- }
-
- intersectsTriangle( triangle ) {
-
- if ( this.isEmpty() ) {
-
- return false;
-
- }
-
- // compute box center and extents
- this.getCenter( _center );
- _extents.subVectors( this.max, _center );
-
- // translate triangle to aabb origin
- _v0$2.subVectors( triangle.a, _center );
- _v1$7.subVectors( triangle.b, _center );
- _v2$4.subVectors( triangle.c, _center );
-
- // compute edge vectors for triangle
- _f0.subVectors( _v1$7, _v0$2 );
- _f1.subVectors( _v2$4, _v1$7 );
- _f2.subVectors( _v0$2, _v2$4 );
-
- // test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb
- // make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation
- // axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)
- let axes = [
- 0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,
- _f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,
- - _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0
- ];
- if ( ! satForAxes( axes, _v0$2, _v1$7, _v2$4, _extents ) ) {
-
- return false;
-
- }
-
- // test 3 face normals from the aabb
- axes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];
- if ( ! satForAxes( axes, _v0$2, _v1$7, _v2$4, _extents ) ) {
-
- return false;
-
- }
-
- // finally testing the face normal of the triangle
- // use already existing triangle edge vectors here
- _triangleNormal.crossVectors( _f0, _f1 );
- axes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];
-
- return satForAxes( axes, _v0$2, _v1$7, _v2$4, _extents );
-
- }
-
- clampPoint( point, target ) {
-
- return target.copy( point ).clamp( this.min, this.max );
-
- }
-
- distanceToPoint( point ) {
-
- return this.clampPoint( point, _vector$b ).distanceTo( point );
-
- }
-
- getBoundingSphere( target ) {
-
- if ( this.isEmpty() ) {
-
- target.makeEmpty();
-
- } else {
-
- this.getCenter( target.center );
-
- target.radius = this.getSize( _vector$b ).length() * 0.5;
-
- }
-
- return target;
-
- }
-
- intersect( box ) {
-
- this.min.max( box.min );
- this.max.min( box.max );
-
- // ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.
- if ( this.isEmpty() ) this.makeEmpty();
-
- return this;
-
- }
-
- union( box ) {
-
- this.min.min( box.min );
- this.max.max( box.max );
-
- return this;
-
- }
-
- applyMatrix4( matrix ) {
-
- // transform of empty box is an empty box.
- if ( this.isEmpty() ) return this;
-
- // NOTE: I am using a binary pattern to specify all 2^3 combinations below
- _points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000
- _points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001
- _points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010
- _points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011
- _points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100
- _points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101
- _points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110
- _points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111
-
- this.setFromPoints( _points );
-
- return this;
-
- }
-
- translate( offset ) {
-
- this.min.add( offset );
- this.max.add( offset );
-
- return this;
-
- }
-
- equals( box ) {
-
- return box.min.equals( this.min ) && box.max.equals( this.max );
-
- }
-
-}
-
-const _points = [
- /*@__PURE__*/ new Vector3(),
- /*@__PURE__*/ new Vector3(),
- /*@__PURE__*/ new Vector3(),
- /*@__PURE__*/ new Vector3(),
- /*@__PURE__*/ new Vector3(),
- /*@__PURE__*/ new Vector3(),
- /*@__PURE__*/ new Vector3(),
- /*@__PURE__*/ new Vector3()
-];
-
-const _vector$b = /*@__PURE__*/ new Vector3();
-
-const _box$4 = /*@__PURE__*/ new Box3();
-
-// triangle centered vertices
-
-const _v0$2 = /*@__PURE__*/ new Vector3();
-const _v1$7 = /*@__PURE__*/ new Vector3();
-const _v2$4 = /*@__PURE__*/ new Vector3();
-
-// triangle edge vectors
-
-const _f0 = /*@__PURE__*/ new Vector3();
-const _f1 = /*@__PURE__*/ new Vector3();
-const _f2 = /*@__PURE__*/ new Vector3();
-
-const _center = /*@__PURE__*/ new Vector3();
-const _extents = /*@__PURE__*/ new Vector3();
-const _triangleNormal = /*@__PURE__*/ new Vector3();
-const _testAxis = /*@__PURE__*/ new Vector3();
-
-function satForAxes( axes, v0, v1, v2, extents ) {
-
- for ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {
-
- _testAxis.fromArray( axes, i );
- // project the aabb onto the separating axis
- const r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );
- // project all 3 vertices of the triangle onto the separating axis
- const p0 = v0.dot( _testAxis );
- const p1 = v1.dot( _testAxis );
- const p2 = v2.dot( _testAxis );
- // actual test, basically see if either of the most extreme of the triangle points intersects r
- if ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {
-
- // points of the projected triangle are outside the projected half-length of the aabb
- // the axis is separating and we can exit
- return false;
-
- }
-
- }
-
- return true;
-
-}
-
-const _box$3 = /*@__PURE__*/ new Box3();
-const _v1$6 = /*@__PURE__*/ new Vector3();
-const _v2$3 = /*@__PURE__*/ new Vector3();
-
-class Sphere {
-
- constructor( center = new Vector3(), radius = - 1 ) {
-
- this.isSphere = true;
-
- this.center = center;
- this.radius = radius;
-
- }
-
- set( center, radius ) {
-
- this.center.copy( center );
- this.radius = radius;
-
- return this;
-
- }
-
- setFromPoints( points, optionalCenter ) {
-
- const center = this.center;
-
- if ( optionalCenter !== undefined ) {
-
- center.copy( optionalCenter );
-
- } else {
-
- _box$3.setFromPoints( points ).getCenter( center );
-
- }
-
- let maxRadiusSq = 0;
-
- for ( let i = 0, il = points.length; i < il; i ++ ) {
-
- maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );
-
- }
-
- this.radius = Math.sqrt( maxRadiusSq );
-
- return this;
-
- }
-
- copy( sphere ) {
-
- this.center.copy( sphere.center );
- this.radius = sphere.radius;
-
- return this;
-
- }
-
- isEmpty() {
-
- return ( this.radius < 0 );
-
- }
-
- makeEmpty() {
-
- this.center.set( 0, 0, 0 );
- this.radius = - 1;
-
- return this;
-
- }
-
- containsPoint( point ) {
-
- return ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );
-
- }
-
- distanceToPoint( point ) {
-
- return ( point.distanceTo( this.center ) - this.radius );
-
- }
-
- intersectsSphere( sphere ) {
-
- const radiusSum = this.radius + sphere.radius;
-
- return sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );
-
- }
-
- intersectsBox( box ) {
-
- return box.intersectsSphere( this );
-
- }
-
- intersectsPlane( plane ) {
-
- return Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;
-
- }
-
- clampPoint( point, target ) {
-
- const deltaLengthSq = this.center.distanceToSquared( point );
-
- target.copy( point );
-
- if ( deltaLengthSq > ( this.radius * this.radius ) ) {
-
- target.sub( this.center ).normalize();
- target.multiplyScalar( this.radius ).add( this.center );
-
- }
-
- return target;
-
- }
-
- getBoundingBox( target ) {
-
- if ( this.isEmpty() ) {
-
- // Empty sphere produces empty bounding box
- target.makeEmpty();
- return target;
-
- }
-
- target.set( this.center, this.center );
- target.expandByScalar( this.radius );
-
- return target;
-
- }
-
- applyMatrix4( matrix ) {
-
- this.center.applyMatrix4( matrix );
- this.radius = this.radius * matrix.getMaxScaleOnAxis();
-
- return this;
-
- }
-
- translate( offset ) {
-
- this.center.add( offset );
-
- return this;
-
- }
-
- expandByPoint( point ) {
-
- if ( this.isEmpty() ) {
-
- this.center.copy( point );
-
- this.radius = 0;
-
- return this;
-
- }
-
- _v1$6.subVectors( point, this.center );
-
- const lengthSq = _v1$6.lengthSq();
-
- if ( lengthSq > ( this.radius * this.radius ) ) {
-
- // calculate the minimal sphere
-
- const length = Math.sqrt( lengthSq );
-
- const delta = ( length - this.radius ) * 0.5;
-
- this.center.addScaledVector( _v1$6, delta / length );
-
- this.radius += delta;
-
- }
-
- return this;
-
- }
-
- union( sphere ) {
-
- if ( sphere.isEmpty() ) {
-
- return this;
-
- }
-
- if ( this.isEmpty() ) {
-
- this.copy( sphere );
-
- return this;
-
- }
-
- if ( this.center.equals( sphere.center ) === true ) {
-
- this.radius = Math.max( this.radius, sphere.radius );
-
- } else {
-
- _v2$3.subVectors( sphere.center, this.center ).setLength( sphere.radius );
-
- this.expandByPoint( _v1$6.copy( sphere.center ).add( _v2$3 ) );
-
- this.expandByPoint( _v1$6.copy( sphere.center ).sub( _v2$3 ) );
-
- }
-
- return this;
-
- }
-
- equals( sphere ) {
-
- return sphere.center.equals( this.center ) && ( sphere.radius === this.radius );
-
- }
-
- clone() {
-
- return new this.constructor().copy( this );
-
- }
-
-}
-
-const _vector$a = /*@__PURE__*/ new Vector3();
-const _segCenter = /*@__PURE__*/ new Vector3();
-const _segDir = /*@__PURE__*/ new Vector3();
-const _diff = /*@__PURE__*/ new Vector3();
-
-const _edge1 = /*@__PURE__*/ new Vector3();
-const _edge2 = /*@__PURE__*/ new Vector3();
-const _normal$1 = /*@__PURE__*/ new Vector3();
-
-class Ray {
-
- constructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {
-
- this.origin = origin;
- this.direction = direction;
-
- }
-
- set( origin, direction ) {
-
- this.origin.copy( origin );
- this.direction.copy( direction );
-
- return this;
-
- }
-
- copy( ray ) {
-
- this.origin.copy( ray.origin );
- this.direction.copy( ray.direction );
-
- return this;
-
- }
-
- at( t, target ) {
-
- return target.copy( this.origin ).addScaledVector( this.direction, t );
-
- }
-
- lookAt( v ) {
-
- this.direction.copy( v ).sub( this.origin ).normalize();
-
- return this;
-
- }
-
- recast( t ) {
-
- this.origin.copy( this.at( t, _vector$a ) );
-
- return this;
-
- }
-
- closestPointToPoint( point, target ) {
-
- target.subVectors( point, this.origin );
-
- const directionDistance = target.dot( this.direction );
-
- if ( directionDistance < 0 ) {
-
- return target.copy( this.origin );
-
- }
-
- return target.copy( this.origin ).addScaledVector( this.direction, directionDistance );
-
- }
-
- distanceToPoint( point ) {
-
- return Math.sqrt( this.distanceSqToPoint( point ) );
-
- }
-
- distanceSqToPoint( point ) {
-
- const directionDistance = _vector$a.subVectors( point, this.origin ).dot( this.direction );
-
- // point behind the ray
-
- if ( directionDistance < 0 ) {
-
- return this.origin.distanceToSquared( point );
-
- }
-
- _vector$a.copy( this.origin ).addScaledVector( this.direction, directionDistance );
-
- return _vector$a.distanceToSquared( point );
-
- }
-
- distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {
-
- // from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h
- // It returns the min distance between the ray and the segment
- // defined by v0 and v1
- // It can also set two optional targets :
- // - The closest point on the ray
- // - The closest point on the segment
-
- _segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );
- _segDir.copy( v1 ).sub( v0 ).normalize();
- _diff.copy( this.origin ).sub( _segCenter );
-
- const segExtent = v0.distanceTo( v1 ) * 0.5;
- const a01 = - this.direction.dot( _segDir );
- const b0 = _diff.dot( this.direction );
- const b1 = - _diff.dot( _segDir );
- const c = _diff.lengthSq();
- const det = Math.abs( 1 - a01 * a01 );
- let s0, s1, sqrDist, extDet;
-
- if ( det > 0 ) {
-
- // The ray and segment are not parallel.
-
- s0 = a01 * b1 - b0;
- s1 = a01 * b0 - b1;
- extDet = segExtent * det;
-
- if ( s0 >= 0 ) {
-
- if ( s1 >= - extDet ) {
-
- if ( s1 <= extDet ) {
-
- // region 0
- // Minimum at interior points of ray and segment.
-
- const invDet = 1 / det;
- s0 *= invDet;
- s1 *= invDet;
- sqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;
-
- } else {
-
- // region 1
-
- s1 = segExtent;
- s0 = Math.max( 0, - ( a01 * s1 + b0 ) );
- sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;
-
- }
-
- } else {
-
- // region 5
-
- s1 = - segExtent;
- s0 = Math.max( 0, - ( a01 * s1 + b0 ) );
- sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;
-
- }
-
- } else {
-
- if ( s1 <= - extDet ) {
-
- // region 4
-
- s0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );
- s1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );
- sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;
-
- } else if ( s1 <= extDet ) {
-
- // region 3
-
- s0 = 0;
- s1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );
- sqrDist = s1 * ( s1 + 2 * b1 ) + c;
-
- } else {
-
- // region 2
-
- s0 = Math.max( 0, - ( a01 * segExtent + b0 ) );
- s1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );
- sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;
-
- }
-
- }
-
- } else {
-
- // Ray and segment are parallel.
-
- s1 = ( a01 > 0 ) ? - segExtent : segExtent;
- s0 = Math.max( 0, - ( a01 * s1 + b0 ) );
- sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;
-
- }
-
- if ( optionalPointOnRay ) {
-
- optionalPointOnRay.copy( this.origin ).addScaledVector( this.direction, s0 );
-
- }
-
- if ( optionalPointOnSegment ) {
-
- optionalPointOnSegment.copy( _segCenter ).addScaledVector( _segDir, s1 );
-
- }
-
- return sqrDist;
-
- }
-
- intersectSphere( sphere, target ) {
-
- _vector$a.subVectors( sphere.center, this.origin );
- const tca = _vector$a.dot( this.direction );
- const d2 = _vector$a.dot( _vector$a ) - tca * tca;
- const radius2 = sphere.radius * sphere.radius;
-
- if ( d2 > radius2 ) return null;
-
- const thc = Math.sqrt( radius2 - d2 );
-
- // t0 = first intersect point - entrance on front of sphere
- const t0 = tca - thc;
-
- // t1 = second intersect point - exit point on back of sphere
- const t1 = tca + thc;
-
- // test to see if t1 is behind the ray - if so, return null
- if ( t1 < 0 ) return null;
-
- // test to see if t0 is behind the ray:
- // if it is, the ray is inside the sphere, so return the second exit point scaled by t1,
- // in order to always return an intersect point that is in front of the ray.
- if ( t0 < 0 ) return this.at( t1, target );
-
- // else t0 is in front of the ray, so return the first collision point scaled by t0
- return this.at( t0, target );
-
- }
-
- intersectsSphere( sphere ) {
-
- return this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );
-
- }
-
- distanceToPlane( plane ) {
-
- const denominator = plane.normal.dot( this.direction );
-
- if ( denominator === 0 ) {
-
- // line is coplanar, return origin
- if ( plane.distanceToPoint( this.origin ) === 0 ) {
-
- return 0;
-
- }
-
- // Null is preferable to undefined since undefined means.... it is undefined
-
- return null;
-
- }
-
- const t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;
-
- // Return if the ray never intersects the plane
-
- return t >= 0 ? t : null;
-
- }
-
- intersectPlane( plane, target ) {
-
- const t = this.distanceToPlane( plane );
-
- if ( t === null ) {
-
- return null;
-
- }
-
- return this.at( t, target );
-
- }
-
- intersectsPlane( plane ) {
-
- // check if the ray lies on the plane first
-
- const distToPoint = plane.distanceToPoint( this.origin );
-
- if ( distToPoint === 0 ) {
-
- return true;
-
- }
-
- const denominator = plane.normal.dot( this.direction );
-
- if ( denominator * distToPoint < 0 ) {
-
- return true;
-
- }
-
- // ray origin is behind the plane (and is pointing behind it)
-
- return false;
-
- }
-
- intersectBox( box, target ) {
-
- let tmin, tmax, tymin, tymax, tzmin, tzmax;
-
- const invdirx = 1 / this.direction.x,
- invdiry = 1 / this.direction.y,
- invdirz = 1 / this.direction.z;
-
- const origin = this.origin;
-
- if ( invdirx >= 0 ) {
-
- tmin = ( box.min.x - origin.x ) * invdirx;
- tmax = ( box.max.x - origin.x ) * invdirx;
-
- } else {
-
- tmin = ( box.max.x - origin.x ) * invdirx;
- tmax = ( box.min.x - origin.x ) * invdirx;
-
- }
-
- if ( invdiry >= 0 ) {
-
- tymin = ( box.min.y - origin.y ) * invdiry;
- tymax = ( box.max.y - origin.y ) * invdiry;
-
- } else {
-
- tymin = ( box.max.y - origin.y ) * invdiry;
- tymax = ( box.min.y - origin.y ) * invdiry;
-
- }
-
- if ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;
-
- if ( tymin > tmin || isNaN( tmin ) ) tmin = tymin;
-
- if ( tymax < tmax || isNaN( tmax ) ) tmax = tymax;
-
- if ( invdirz >= 0 ) {
-
- tzmin = ( box.min.z - origin.z ) * invdirz;
- tzmax = ( box.max.z - origin.z ) * invdirz;
-
- } else {
-
- tzmin = ( box.max.z - origin.z ) * invdirz;
- tzmax = ( box.min.z - origin.z ) * invdirz;
-
- }
-
- if ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;
-
- if ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;
-
- if ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;
-
- //return point closest to the ray (positive side)
-
- if ( tmax < 0 ) return null;
-
- return this.at( tmin >= 0 ? tmin : tmax, target );
-
- }
-
- intersectsBox( box ) {
-
- return this.intersectBox( box, _vector$a ) !== null;
-
- }
-
- intersectTriangle( a, b, c, backfaceCulling, target ) {
-
- // Compute the offset origin, edges, and normal.
-
- // from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h
-
- _edge1.subVectors( b, a );
- _edge2.subVectors( c, a );
- _normal$1.crossVectors( _edge1, _edge2 );
-
- // Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,
- // E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by
- // |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))
- // |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))
- // |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)
- let DdN = this.direction.dot( _normal$1 );
- let sign;
-
- if ( DdN > 0 ) {
-
- if ( backfaceCulling ) return null;
- sign = 1;
-
- } else if ( DdN < 0 ) {
-
- sign = - 1;
- DdN = - DdN;
-
- } else {
-
- return null;
-
- }
-
- _diff.subVectors( this.origin, a );
- const DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );
-
- // b1 < 0, no intersection
- if ( DdQxE2 < 0 ) {
-
- return null;
-
- }
-
- const DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );
-
- // b2 < 0, no intersection
- if ( DdE1xQ < 0 ) {
-
- return null;
-
- }
-
- // b1+b2 > 1, no intersection
- if ( DdQxE2 + DdE1xQ > DdN ) {
-
- return null;
-
- }
-
- // Line intersects triangle, check if ray does.
- const QdN = - sign * _diff.dot( _normal$1 );
-
- // t < 0, no intersection
- if ( QdN < 0 ) {
-
- return null;
-
- }
-
- // Ray intersects triangle.
- return this.at( QdN / DdN, target );
-
- }
-
- applyMatrix4( matrix4 ) {
-
- this.origin.applyMatrix4( matrix4 );
- this.direction.transformDirection( matrix4 );
-
- return this;
-
- }
-
- equals( ray ) {
-
- return ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );
-
- }
-
- clone() {
-
- return new this.constructor().copy( this );
-
- }
-
-}
-
-class Matrix4 {
-
- constructor( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {
-
- Matrix4.prototype.isMatrix4 = true;
-
- this.elements = [
-
- 1, 0, 0, 0,
- 0, 1, 0, 0,
- 0, 0, 1, 0,
- 0, 0, 0, 1
-
- ];
-
- if ( n11 !== undefined ) {
-
- this.set( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 );
-
- }
-
- }
-
- set( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {
-
- const te = this.elements;
-
- te[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;
- te[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;
- te[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;
- te[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;
-
- return this;
-
- }
-
- identity() {
-
- this.set(
-
- 1, 0, 0, 0,
- 0, 1, 0, 0,
- 0, 0, 1, 0,
- 0, 0, 0, 1
-
- );
-
- return this;
-
- }
-
- clone() {
-
- return new Matrix4().fromArray( this.elements );
-
- }
-
- copy( m ) {
-
- const te = this.elements;
- const me = m.elements;
-
- te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];
- te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];
- te[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];
- te[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];
-
- return this;
-
- }
-
- copyPosition( m ) {
-
- const te = this.elements, me = m.elements;
-
- te[ 12 ] = me[ 12 ];
- te[ 13 ] = me[ 13 ];
- te[ 14 ] = me[ 14 ];
-
- return this;
-
- }
-
- setFromMatrix3( m ) {
-
- const me = m.elements;
-
- this.set(
-
- me[ 0 ], me[ 3 ], me[ 6 ], 0,
- me[ 1 ], me[ 4 ], me[ 7 ], 0,
- me[ 2 ], me[ 5 ], me[ 8 ], 0,
- 0, 0, 0, 1
-
- );
-
- return this;
-
- }
-
- extractBasis( xAxis, yAxis, zAxis ) {
-
- xAxis.setFromMatrixColumn( this, 0 );
- yAxis.setFromMatrixColumn( this, 1 );
- zAxis.setFromMatrixColumn( this, 2 );
-
- return this;
-
- }
-
- makeBasis( xAxis, yAxis, zAxis ) {
-
- this.set(
- xAxis.x, yAxis.x, zAxis.x, 0,
- xAxis.y, yAxis.y, zAxis.y, 0,
- xAxis.z, yAxis.z, zAxis.z, 0,
- 0, 0, 0, 1
- );
-
- return this;
-
- }
-
- extractRotation( m ) {
-
- // this method does not support reflection matrices
-
- const te = this.elements;
- const me = m.elements;
-
- const scaleX = 1 / _v1$5.setFromMatrixColumn( m, 0 ).length();
- const scaleY = 1 / _v1$5.setFromMatrixColumn( m, 1 ).length();
- const scaleZ = 1 / _v1$5.setFromMatrixColumn( m, 2 ).length();
-
- te[ 0 ] = me[ 0 ] * scaleX;
- te[ 1 ] = me[ 1 ] * scaleX;
- te[ 2 ] = me[ 2 ] * scaleX;
- te[ 3 ] = 0;
-
- te[ 4 ] = me[ 4 ] * scaleY;
- te[ 5 ] = me[ 5 ] * scaleY;
- te[ 6 ] = me[ 6 ] * scaleY;
- te[ 7 ] = 0;
-
- te[ 8 ] = me[ 8 ] * scaleZ;
- te[ 9 ] = me[ 9 ] * scaleZ;
- te[ 10 ] = me[ 10 ] * scaleZ;
- te[ 11 ] = 0;
-
- te[ 12 ] = 0;
- te[ 13 ] = 0;
- te[ 14 ] = 0;
- te[ 15 ] = 1;
-
- return this;
-
- }
-
- makeRotationFromEuler( euler ) {
-
- const te = this.elements;
-
- const x = euler.x, y = euler.y, z = euler.z;
- const a = Math.cos( x ), b = Math.sin( x );
- const c = Math.cos( y ), d = Math.sin( y );
- const e = Math.cos( z ), f = Math.sin( z );
-
- if ( euler.order === 'XYZ' ) {
-
- const ae = a * e, af = a * f, be = b * e, bf = b * f;
-
- te[ 0 ] = c * e;
- te[ 4 ] = - c * f;
- te[ 8 ] = d;
-
- te[ 1 ] = af + be * d;
- te[ 5 ] = ae - bf * d;
- te[ 9 ] = - b * c;
-
- te[ 2 ] = bf - ae * d;
- te[ 6 ] = be + af * d;
- te[ 10 ] = a * c;
-
- } else if ( euler.order === 'YXZ' ) {
-
- const ce = c * e, cf = c * f, de = d * e, df = d * f;
-
- te[ 0 ] = ce + df * b;
- te[ 4 ] = de * b - cf;
- te[ 8 ] = a * d;
-
- te[ 1 ] = a * f;
- te[ 5 ] = a * e;
- te[ 9 ] = - b;
-
- te[ 2 ] = cf * b - de;
- te[ 6 ] = df + ce * b;
- te[ 10 ] = a * c;
-
- } else if ( euler.order === 'ZXY' ) {
-
- const ce = c * e, cf = c * f, de = d * e, df = d * f;
-
- te[ 0 ] = ce - df * b;
- te[ 4 ] = - a * f;
- te[ 8 ] = de + cf * b;
-
- te[ 1 ] = cf + de * b;
- te[ 5 ] = a * e;
- te[ 9 ] = df - ce * b;
-
- te[ 2 ] = - a * d;
- te[ 6 ] = b;
- te[ 10 ] = a * c;
-
- } else if ( euler.order === 'ZYX' ) {
-
- const ae = a * e, af = a * f, be = b * e, bf = b * f;
-
- te[ 0 ] = c * e;
- te[ 4 ] = be * d - af;
- te[ 8 ] = ae * d + bf;
-
- te[ 1 ] = c * f;
- te[ 5 ] = bf * d + ae;
- te[ 9 ] = af * d - be;
-
- te[ 2 ] = - d;
- te[ 6 ] = b * c;
- te[ 10 ] = a * c;
-
- } else if ( euler.order === 'YZX' ) {
-
- const ac = a * c, ad = a * d, bc = b * c, bd = b * d;
-
- te[ 0 ] = c * e;
- te[ 4 ] = bd - ac * f;
- te[ 8 ] = bc * f + ad;
-
- te[ 1 ] = f;
- te[ 5 ] = a * e;
- te[ 9 ] = - b * e;
-
- te[ 2 ] = - d * e;
- te[ 6 ] = ad * f + bc;
- te[ 10 ] = ac - bd * f;
-
- } else if ( euler.order === 'XZY' ) {
-
- const ac = a * c, ad = a * d, bc = b * c, bd = b * d;
-
- te[ 0 ] = c * e;
- te[ 4 ] = - f;
- te[ 8 ] = d * e;
-
- te[ 1 ] = ac * f + bd;
- te[ 5 ] = a * e;
- te[ 9 ] = ad * f - bc;
-
- te[ 2 ] = bc * f - ad;
- te[ 6 ] = b * e;
- te[ 10 ] = bd * f + ac;
-
- }
-
- // bottom row
- te[ 3 ] = 0;
- te[ 7 ] = 0;
- te[ 11 ] = 0;
-
- // last column
- te[ 12 ] = 0;
- te[ 13 ] = 0;
- te[ 14 ] = 0;
- te[ 15 ] = 1;
-
- return this;
-
- }
-
- makeRotationFromQuaternion( q ) {
-
- return this.compose( _zero, q, _one );
-
- }
-
- lookAt( eye, target, up ) {
-
- const te = this.elements;
-
- _z.subVectors( eye, target );
-
- if ( _z.lengthSq() === 0 ) {
-
- // eye and target are in the same position
-
- _z.z = 1;
-
- }
-
- _z.normalize();
- _x.crossVectors( up, _z );
-
- if ( _x.lengthSq() === 0 ) {
-
- // up and z are parallel
-
- if ( Math.abs( up.z ) === 1 ) {
-
- _z.x += 0.0001;
-
- } else {
-
- _z.z += 0.0001;
-
- }
-
- _z.normalize();
- _x.crossVectors( up, _z );
-
- }
-
- _x.normalize();
- _y.crossVectors( _z, _x );
-
- te[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;
- te[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;
- te[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;
-
- return this;
-
- }
-
- multiply( m ) {
-
- return this.multiplyMatrices( this, m );
-
- }
-
- premultiply( m ) {
-
- return this.multiplyMatrices( m, this );
-
- }
-
- multiplyMatrices( a, b ) {
-
- const ae = a.elements;
- const be = b.elements;
- const te = this.elements;
-
- const a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];
- const a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];
- const a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];
- const a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];
-
- const b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];
- const b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];
- const b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];
- const b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];
-
- te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;
- te[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;
- te[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;
- te[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;
-
- te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;
- te[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;
- te[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;
- te[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;
-
- te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;
- te[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;
- te[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;
- te[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;
-
- te[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;
- te[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;
- te[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;
- te[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;
-
- return this;
-
- }
-
- multiplyScalar( s ) {
-
- const te = this.elements;
-
- te[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;
- te[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;
- te[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;
- te[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;
-
- return this;
-
- }
-
- determinant() {
-
- const te = this.elements;
-
- const n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];
- const n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];
- const n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];
- const n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];
-
- //TODO: make this more efficient
- //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )
-
- return (
- n41 * (
- + n14 * n23 * n32
- - n13 * n24 * n32
- - n14 * n22 * n33
- + n12 * n24 * n33
- + n13 * n22 * n34
- - n12 * n23 * n34
- ) +
- n42 * (
- + n11 * n23 * n34
- - n11 * n24 * n33
- + n14 * n21 * n33
- - n13 * n21 * n34
- + n13 * n24 * n31
- - n14 * n23 * n31
- ) +
- n43 * (
- + n11 * n24 * n32
- - n11 * n22 * n34
- - n14 * n21 * n32
- + n12 * n21 * n34
- + n14 * n22 * n31
- - n12 * n24 * n31
- ) +
- n44 * (
- - n13 * n22 * n31
- - n11 * n23 * n32
- + n11 * n22 * n33
- + n13 * n21 * n32
- - n12 * n21 * n33
- + n12 * n23 * n31
- )
-
- );
-
- }
-
- transpose() {
-
- const te = this.elements;
- let tmp;
-
- tmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;
- tmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;
- tmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;
-
- tmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;
- tmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;
- tmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;
-
- return this;
-
- }
-
- setPosition( x, y, z ) {
-
- const te = this.elements;
-
- if ( x.isVector3 ) {
-
- te[ 12 ] = x.x;
- te[ 13 ] = x.y;
- te[ 14 ] = x.z;
-
- } else {
-
- te[ 12 ] = x;
- te[ 13 ] = y;
- te[ 14 ] = z;
-
- }
-
- return this;
-
- }
-
- invert() {
-
- // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
- const te = this.elements,
-
- n11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],
- n12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],
- n13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],
- n14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],
-
- t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,
- t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,
- t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,
- t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;
-
- const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;
-
- if ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
-
- const detInv = 1 / det;
-
- te[ 0 ] = t11 * detInv;
- te[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;
- te[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;
- te[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;
-
- te[ 4 ] = t12 * detInv;
- te[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;
- te[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;
- te[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;
-
- te[ 8 ] = t13 * detInv;
- te[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;
- te[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;
- te[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;
-
- te[ 12 ] = t14 * detInv;
- te[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;
- te[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;
- te[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;
-
- return this;
-
- }
-
- scale( v ) {
-
- const te = this.elements;
- const x = v.x, y = v.y, z = v.z;
-
- te[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;
- te[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;
- te[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;
- te[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;
-
- return this;
-
- }
-
- getMaxScaleOnAxis() {
-
- const te = this.elements;
-
- const scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];
- const scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];
- const scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];
-
- return Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );
-
- }
-
- makeTranslation( x, y, z ) {
-
- if ( x.isVector3 ) {
-
- this.set(
-
- 1, 0, 0, x.x,
- 0, 1, 0, x.y,
- 0, 0, 1, x.z,
- 0, 0, 0, 1
-
- );
-
- } else {
-
- this.set(
-
- 1, 0, 0, x,
- 0, 1, 0, y,
- 0, 0, 1, z,
- 0, 0, 0, 1
-
- );
-
- }
-
- return this;
-
- }
-
- makeRotationX( theta ) {
-
- const c = Math.cos( theta ), s = Math.sin( theta );
-
- this.set(
-
- 1, 0, 0, 0,
- 0, c, - s, 0,
- 0, s, c, 0,
- 0, 0, 0, 1
-
- );
-
- return this;
-
- }
-
- makeRotationY( theta ) {
-
- const c = Math.cos( theta ), s = Math.sin( theta );
-
- this.set(
-
- c, 0, s, 0,
- 0, 1, 0, 0,
- - s, 0, c, 0,
- 0, 0, 0, 1
-
- );
-
- return this;
-
- }
-
- makeRotationZ( theta ) {
-
- const c = Math.cos( theta ), s = Math.sin( theta );
-
- this.set(
-
- c, - s, 0, 0,
- s, c, 0, 0,
- 0, 0, 1, 0,
- 0, 0, 0, 1
-
- );
-
- return this;
-
- }
-
- makeRotationAxis( axis, angle ) {
-
- // Based on http://www.gamedev.net/reference/articles/article1199.asp
-
- const c = Math.cos( angle );
- const s = Math.sin( angle );
- const t = 1 - c;
- const x = axis.x, y = axis.y, z = axis.z;
- const tx = t * x, ty = t * y;
-
- this.set(
-
- tx * x + c, tx * y - s * z, tx * z + s * y, 0,
- tx * y + s * z, ty * y + c, ty * z - s * x, 0,
- tx * z - s * y, ty * z + s * x, t * z * z + c, 0,
- 0, 0, 0, 1
-
- );
-
- return this;
-
- }
-
- makeScale( x, y, z ) {
-
- this.set(
-
- x, 0, 0, 0,
- 0, y, 0, 0,
- 0, 0, z, 0,
- 0, 0, 0, 1
-
- );
-
- return this;
-
- }
-
- makeShear( xy, xz, yx, yz, zx, zy ) {
-
- this.set(
-
- 1, yx, zx, 0,
- xy, 1, zy, 0,
- xz, yz, 1, 0,
- 0, 0, 0, 1
-
- );
-
- return this;
-
- }
-
- compose( position, quaternion, scale ) {
-
- const te = this.elements;
-
- const x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;
- const x2 = x + x, y2 = y + y, z2 = z + z;
- const xx = x * x2, xy = x * y2, xz = x * z2;
- const yy = y * y2, yz = y * z2, zz = z * z2;
- const wx = w * x2, wy = w * y2, wz = w * z2;
-
- const sx = scale.x, sy = scale.y, sz = scale.z;
-
- te[ 0 ] = ( 1 - ( yy + zz ) ) * sx;
- te[ 1 ] = ( xy + wz ) * sx;
- te[ 2 ] = ( xz - wy ) * sx;
- te[ 3 ] = 0;
-
- te[ 4 ] = ( xy - wz ) * sy;
- te[ 5 ] = ( 1 - ( xx + zz ) ) * sy;
- te[ 6 ] = ( yz + wx ) * sy;
- te[ 7 ] = 0;
-
- te[ 8 ] = ( xz + wy ) * sz;
- te[ 9 ] = ( yz - wx ) * sz;
- te[ 10 ] = ( 1 - ( xx + yy ) ) * sz;
- te[ 11 ] = 0;
-
- te[ 12 ] = position.x;
- te[ 13 ] = position.y;
- te[ 14 ] = position.z;
- te[ 15 ] = 1;
-
- return this;
-
- }
-
- decompose( position, quaternion, scale ) {
-
- const te = this.elements;
-
- let sx = _v1$5.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();
- const sy = _v1$5.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();
- const sz = _v1$5.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();
-
- // if determine is negative, we need to invert one scale
- const det = this.determinant();
- if ( det < 0 ) sx = - sx;
-
- position.x = te[ 12 ];
- position.y = te[ 13 ];
- position.z = te[ 14 ];
-
- // scale the rotation part
- _m1$4.copy( this );
-
- const invSX = 1 / sx;
- const invSY = 1 / sy;
- const invSZ = 1 / sz;
-
- _m1$4.elements[ 0 ] *= invSX;
- _m1$4.elements[ 1 ] *= invSX;
- _m1$4.elements[ 2 ] *= invSX;
-
- _m1$4.elements[ 4 ] *= invSY;
- _m1$4.elements[ 5 ] *= invSY;
- _m1$4.elements[ 6 ] *= invSY;
-
- _m1$4.elements[ 8 ] *= invSZ;
- _m1$4.elements[ 9 ] *= invSZ;
- _m1$4.elements[ 10 ] *= invSZ;
-
- quaternion.setFromRotationMatrix( _m1$4 );
-
- scale.x = sx;
- scale.y = sy;
- scale.z = sz;
-
- return this;
-
- }
-
- makePerspective( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {
-
- const te = this.elements;
- const x = 2 * near / ( right - left );
- const y = 2 * near / ( top - bottom );
-
- const a = ( right + left ) / ( right - left );
- const b = ( top + bottom ) / ( top - bottom );
-
- let c, d;
-
- if ( coordinateSystem === WebGLCoordinateSystem ) {
-
- c = - ( far + near ) / ( far - near );
- d = ( - 2 * far * near ) / ( far - near );
-
- } else if ( coordinateSystem === WebGPUCoordinateSystem ) {
-
- c = - far / ( far - near );
- d = ( - far * near ) / ( far - near );
-
- } else {
-
- throw new Error( 'THREE.Matrix4.makePerspective(): Invalid coordinate system: ' + coordinateSystem );
-
- }
-
- te[ 0 ] = x; te[ 4 ] = 0; te[ 8 ] = a; te[ 12 ] = 0;
- te[ 1 ] = 0; te[ 5 ] = y; te[ 9 ] = b; te[ 13 ] = 0;
- te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = c; te[ 14 ] = d;
- te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = - 1; te[ 15 ] = 0;
-
- return this;
-
- }
-
- makeOrthographic( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {
-
- const te = this.elements;
- const w = 1.0 / ( right - left );
- const h = 1.0 / ( top - bottom );
- const p = 1.0 / ( far - near );
-
- const x = ( right + left ) * w;
- const y = ( top + bottom ) * h;
-
- let z, zInv;
-
- if ( coordinateSystem === WebGLCoordinateSystem ) {
-
- z = ( far + near ) * p;
- zInv = - 2 * p;
-
- } else if ( coordinateSystem === WebGPUCoordinateSystem ) {
-
- z = near * p;
- zInv = - 1 * p;
-
- } else {
-
- throw new Error( 'THREE.Matrix4.makeOrthographic(): Invalid coordinate system: ' + coordinateSystem );
-
- }
-
- te[ 0 ] = 2 * w; te[ 4 ] = 0; te[ 8 ] = 0; te[ 12 ] = - x;
- te[ 1 ] = 0; te[ 5 ] = 2 * h; te[ 9 ] = 0; te[ 13 ] = - y;
- te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = zInv; te[ 14 ] = - z;
- te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = 0; te[ 15 ] = 1;
-
- return this;
-
- }
-
- equals( matrix ) {
-
- const te = this.elements;
- const me = matrix.elements;
-
- for ( let i = 0; i < 16; i ++ ) {
-
- if ( te[ i ] !== me[ i ] ) return false;
-
- }
-
- return true;
-
- }
-
- fromArray( array, offset = 0 ) {
-
- for ( let i = 0; i < 16; i ++ ) {
-
- this.elements[ i ] = array[ i + offset ];
-
- }
-
- return this;
-
- }
-
- toArray( array = [], offset = 0 ) {
-
- const te = this.elements;
-
- array[ offset ] = te[ 0 ];
- array[ offset + 1 ] = te[ 1 ];
- array[ offset + 2 ] = te[ 2 ];
- array[ offset + 3 ] = te[ 3 ];
-
- array[ offset + 4 ] = te[ 4 ];
- array[ offset + 5 ] = te[ 5 ];
- array[ offset + 6 ] = te[ 6 ];
- array[ offset + 7 ] = te[ 7 ];
-
- array[ offset + 8 ] = te[ 8 ];
- array[ offset + 9 ] = te[ 9 ];
- array[ offset + 10 ] = te[ 10 ];
- array[ offset + 11 ] = te[ 11 ];
-
- array[ offset + 12 ] = te[ 12 ];
- array[ offset + 13 ] = te[ 13 ];
- array[ offset + 14 ] = te[ 14 ];
- array[ offset + 15 ] = te[ 15 ];
-
- return array;
-
- }
-
-}
-
-const _v1$5 = /*@__PURE__*/ new Vector3();
-const _m1$4 = /*@__PURE__*/ new Matrix4();
-const _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );
-const _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );
-const _x = /*@__PURE__*/ new Vector3();
-const _y = /*@__PURE__*/ new Vector3();
-const _z = /*@__PURE__*/ new Vector3();
-
-const _matrix$2 = /*@__PURE__*/ new Matrix4();
-const _quaternion$3 = /*@__PURE__*/ new Quaternion();
-
-class Euler {
-
- constructor( x = 0, y = 0, z = 0, order = Euler.DEFAULT_ORDER ) {
-
- this.isEuler = true;
-
- this._x = x;
- this._y = y;
- this._z = z;
- this._order = order;
-
- }
-
- get x() {
-
- return this._x;
-
- }
-
- set x( value ) {
-
- this._x = value;
- this._onChangeCallback();
-
- }
-
- get y() {
-
- return this._y;
-
- }
-
- set y( value ) {
-
- this._y = value;
- this._onChangeCallback();
-
- }
-
- get z() {
-
- return this._z;
-
- }
-
- set z( value ) {
-
- this._z = value;
- this._onChangeCallback();
-
- }
-
- get order() {
-
- return this._order;
-
- }
-
- set order( value ) {
-
- this._order = value;
- this._onChangeCallback();
-
- }
-
- set( x, y, z, order = this._order ) {
-
- this._x = x;
- this._y = y;
- this._z = z;
- this._order = order;
-
- this._onChangeCallback();
-
- return this;
-
- }
-
- clone() {
-
- return new this.constructor( this._x, this._y, this._z, this._order );
-
- }
-
- copy( euler ) {
-
- this._x = euler._x;
- this._y = euler._y;
- this._z = euler._z;
- this._order = euler._order;
-
- this._onChangeCallback();
-
- return this;
-
- }
-
- setFromRotationMatrix( m, order = this._order, update = true ) {
-
- // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)
-
- const te = m.elements;
- const m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];
- const m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];
- const m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];
-
- switch ( order ) {
-
- case 'XYZ':
-
- this._y = Math.asin( clamp( m13, - 1, 1 ) );
-
- if ( Math.abs( m13 ) < 0.9999999 ) {
-
- this._x = Math.atan2( - m23, m33 );
- this._z = Math.atan2( - m12, m11 );
-
- } else {
-
- this._x = Math.atan2( m32, m22 );
- this._z = 0;
-
- }
-
- break;
-
- case 'YXZ':
-
- this._x = Math.asin( - clamp( m23, - 1, 1 ) );
-
- if ( Math.abs( m23 ) < 0.9999999 ) {
-
- this._y = Math.atan2( m13, m33 );
- this._z = Math.atan2( m21, m22 );
-
- } else {
-
- this._y = Math.atan2( - m31, m11 );
- this._z = 0;
-
- }
-
- break;
-
- case 'ZXY':
-
- this._x = Math.asin( clamp( m32, - 1, 1 ) );
-
- if ( Math.abs( m32 ) < 0.9999999 ) {
-
- this._y = Math.atan2( - m31, m33 );
- this._z = Math.atan2( - m12, m22 );
-
- } else {
-
- this._y = 0;
- this._z = Math.atan2( m21, m11 );
-
- }
-
- break;
-
- case 'ZYX':
-
- this._y = Math.asin( - clamp( m31, - 1, 1 ) );
-
- if ( Math.abs( m31 ) < 0.9999999 ) {
-
- this._x = Math.atan2( m32, m33 );
- this._z = Math.atan2( m21, m11 );
-
- } else {
-
- this._x = 0;
- this._z = Math.atan2( - m12, m22 );
-
- }
-
- break;
-
- case 'YZX':
-
- this._z = Math.asin( clamp( m21, - 1, 1 ) );
-
- if ( Math.abs( m21 ) < 0.9999999 ) {
-
- this._x = Math.atan2( - m23, m22 );
- this._y = Math.atan2( - m31, m11 );
-
- } else {
-
- this._x = 0;
- this._y = Math.atan2( m13, m33 );
-
- }
-
- break;
-
- case 'XZY':
-
- this._z = Math.asin( - clamp( m12, - 1, 1 ) );
-
- if ( Math.abs( m12 ) < 0.9999999 ) {
-
- this._x = Math.atan2( m32, m22 );
- this._y = Math.atan2( m13, m11 );
-
- } else {
-
- this._x = Math.atan2( - m23, m33 );
- this._y = 0;
-
- }
-
- break;
-
- default:
-
- console.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );
-
- }
-
- this._order = order;
-
- if ( update === true ) this._onChangeCallback();
-
- return this;
-
- }
-
- setFromQuaternion( q, order, update ) {
-
- _matrix$2.makeRotationFromQuaternion( q );
-
- return this.setFromRotationMatrix( _matrix$2, order, update );
-
- }
-
- setFromVector3( v, order = this._order ) {
-
- return this.set( v.x, v.y, v.z, order );
-
- }
-
- reorder( newOrder ) {
-
- // WARNING: this discards revolution information -bhouston
-
- _quaternion$3.setFromEuler( this );
-
- return this.setFromQuaternion( _quaternion$3, newOrder );
-
- }
-
- equals( euler ) {
-
- return ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );
-
- }
-
- fromArray( array ) {
-
- this._x = array[ 0 ];
- this._y = array[ 1 ];
- this._z = array[ 2 ];
- if ( array[ 3 ] !== undefined ) this._order = array[ 3 ];
-
- this._onChangeCallback();
-
- return this;
-
- }
-
- toArray( array = [], offset = 0 ) {
-
- array[ offset ] = this._x;
- array[ offset + 1 ] = this._y;
- array[ offset + 2 ] = this._z;
- array[ offset + 3 ] = this._order;
-
- return array;
-
- }
-
- _onChange( callback ) {
-
- this._onChangeCallback = callback;
-
- return this;
-
- }
-
- _onChangeCallback() {}
-
- *[ Symbol.iterator ]() {
-
- yield this._x;
- yield this._y;
- yield this._z;
- yield this._order;
-
- }
-
-}
-
-Euler.DEFAULT_ORDER = 'XYZ';
-
-class Layers {
-
- constructor() {
-
- this.mask = 1 | 0;
-
- }
-
- set( channel ) {
-
- this.mask = ( 1 << channel | 0 ) >>> 0;
-
- }
-
- enable( channel ) {
-
- this.mask |= 1 << channel | 0;
-
- }
-
- enableAll() {
-
- this.mask = 0xffffffff | 0;
-
- }
-
- toggle( channel ) {
-
- this.mask ^= 1 << channel | 0;
-
- }
-
- disable( channel ) {
-
- this.mask &= ~ ( 1 << channel | 0 );
-
- }
-
- disableAll() {
-
- this.mask = 0;
-
- }
-
- test( layers ) {
-
- return ( this.mask & layers.mask ) !== 0;
-
- }
-
- isEnabled( channel ) {
-
- return ( this.mask & ( 1 << channel | 0 ) ) !== 0;
-
- }
-
-}
-
-let _object3DId = 0;
-
-const _v1$4 = /*@__PURE__*/ new Vector3();
-const _q1 = /*@__PURE__*/ new Quaternion();
-const _m1$3 = /*@__PURE__*/ new Matrix4();
-const _target = /*@__PURE__*/ new Vector3();
-
-const _position$3 = /*@__PURE__*/ new Vector3();
-const _scale$2 = /*@__PURE__*/ new Vector3();
-const _quaternion$2 = /*@__PURE__*/ new Quaternion();
-
-const _xAxis = /*@__PURE__*/ new Vector3( 1, 0, 0 );
-const _yAxis = /*@__PURE__*/ new Vector3( 0, 1, 0 );
-const _zAxis = /*@__PURE__*/ new Vector3( 0, 0, 1 );
-
-const _addedEvent = { type: 'added' };
-const _removedEvent = { type: 'removed' };
-
-const _childaddedEvent = { type: 'childadded', child: null };
-const _childremovedEvent = { type: 'childremoved', child: null };
-
-class Object3D extends EventDispatcher {
-
- constructor() {
-
- super();
-
- this.isObject3D = true;
-
- Object.defineProperty( this, 'id', { value: _object3DId ++ } );
-
- this.uuid = generateUUID();
-
- this.name = '';
- this.type = 'Object3D';
-
- this.parent = null;
- this.children = [];
-
- this.up = Object3D.DEFAULT_UP.clone();
-
- const position = new Vector3();
- const rotation = new Euler();
- const quaternion = new Quaternion();
- const scale = new Vector3( 1, 1, 1 );
-
- function onRotationChange() {
-
- quaternion.setFromEuler( rotation, false );
-
- }
-
- function onQuaternionChange() {
-
- rotation.setFromQuaternion( quaternion, undefined, false );
-
- }
-
- rotation._onChange( onRotationChange );
- quaternion._onChange( onQuaternionChange );
-
- Object.defineProperties( this, {
- position: {
- configurable: true,
- enumerable: true,
- value: position
- },
- rotation: {
- configurable: true,
- enumerable: true,
- value: rotation
- },
- quaternion: {
- configurable: true,
- enumerable: true,
- value: quaternion
- },
- scale: {
- configurable: true,
- enumerable: true,
- value: scale
- },
- modelViewMatrix: {
- value: new Matrix4()
- },
- normalMatrix: {
- value: new Matrix3()
- }
- } );
-
- this.matrix = new Matrix4();
- this.matrixWorld = new Matrix4();
-
- this.matrixAutoUpdate = Object3D.DEFAULT_MATRIX_AUTO_UPDATE;
-
- this.matrixWorldAutoUpdate = Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE; // checked by the renderer
- this.matrixWorldNeedsUpdate = false;
-
- this.layers = new Layers();
- this.visible = true;
-
- this.castShadow = false;
- this.receiveShadow = false;
-
- this.frustumCulled = true;
- this.renderOrder = 0;
-
- this.animations = [];
-
- this.userData = {};
-
- }
-
- onBeforeShadow( /* renderer, object, camera, shadowCamera, geometry, depthMaterial, group */ ) {}
-
- onAfterShadow( /* renderer, object, camera, shadowCamera, geometry, depthMaterial, group */ ) {}
-
- onBeforeRender( /* renderer, scene, camera, geometry, material, group */ ) {}
-
- onAfterRender( /* renderer, scene, camera, geometry, material, group */ ) {}
-
- applyMatrix4( matrix ) {
-
- if ( this.matrixAutoUpdate ) this.updateMatrix();
-
- this.matrix.premultiply( matrix );
-
- this.matrix.decompose( this.position, this.quaternion, this.scale );
-
- }
-
- applyQuaternion( q ) {
-
- this.quaternion.premultiply( q );
-
- return this;
-
- }
-
- setRotationFromAxisAngle( axis, angle ) {
-
- // assumes axis is normalized
-
- this.quaternion.setFromAxisAngle( axis, angle );
-
- }
-
- setRotationFromEuler( euler ) {
-
- this.quaternion.setFromEuler( euler, true );
-
- }
-
- setRotationFromMatrix( m ) {
-
- // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)
-
- this.quaternion.setFromRotationMatrix( m );
-
- }
-
- setRotationFromQuaternion( q ) {
-
- // assumes q is normalized
-
- this.quaternion.copy( q );
-
- }
-
- rotateOnAxis( axis, angle ) {
-
- // rotate object on axis in object space
- // axis is assumed to be normalized
-
- _q1.setFromAxisAngle( axis, angle );
-
- this.quaternion.multiply( _q1 );
-
- return this;
-
- }
-
- rotateOnWorldAxis( axis, angle ) {
-
- // rotate object on axis in world space
- // axis is assumed to be normalized
- // method assumes no rotated parent
-
- _q1.setFromAxisAngle( axis, angle );
-
- this.quaternion.premultiply( _q1 );
-
- return this;
-
- }
-
- rotateX( angle ) {
-
- return this.rotateOnAxis( _xAxis, angle );
-
- }
-
- rotateY( angle ) {
-
- return this.rotateOnAxis( _yAxis, angle );
-
- }
-
- rotateZ( angle ) {
-
- return this.rotateOnAxis( _zAxis, angle );
-
- }
-
- translateOnAxis( axis, distance ) {
-
- // translate object by distance along axis in object space
- // axis is assumed to be normalized
-
- _v1$4.copy( axis ).applyQuaternion( this.quaternion );
-
- this.position.add( _v1$4.multiplyScalar( distance ) );
-
- return this;
-
- }
-
- translateX( distance ) {
-
- return this.translateOnAxis( _xAxis, distance );
-
- }
-
- translateY( distance ) {
-
- return this.translateOnAxis( _yAxis, distance );
-
- }
-
- translateZ( distance ) {
-
- return this.translateOnAxis( _zAxis, distance );
-
- }
-
- localToWorld( vector ) {
-
- this.updateWorldMatrix( true, false );
-
- return vector.applyMatrix4( this.matrixWorld );
-
- }
-
- worldToLocal( vector ) {
-
- this.updateWorldMatrix( true, false );
-
- return vector.applyMatrix4( _m1$3.copy( this.matrixWorld ).invert() );
-
- }
-
- lookAt( x, y, z ) {
-
- // This method does not support objects having non-uniformly-scaled parent(s)
-
- if ( x.isVector3 ) {
-
- _target.copy( x );
-
- } else {
-
- _target.set( x, y, z );
-
- }
-
- const parent = this.parent;
-
- this.updateWorldMatrix( true, false );
-
- _position$3.setFromMatrixPosition( this.matrixWorld );
-
- if ( this.isCamera || this.isLight ) {
-
- _m1$3.lookAt( _position$3, _target, this.up );
-
- } else {
-
- _m1$3.lookAt( _target, _position$3, this.up );
-
- }
-
- this.quaternion.setFromRotationMatrix( _m1$3 );
-
- if ( parent ) {
-
- _m1$3.extractRotation( parent.matrixWorld );
- _q1.setFromRotationMatrix( _m1$3 );
- this.quaternion.premultiply( _q1.invert() );
-
- }
-
- }
-
- add( object ) {
-
- if ( arguments.length > 1 ) {
-
- for ( let i = 0; i < arguments.length; i ++ ) {
-
- this.add( arguments[ i ] );
-
- }
-
- return this;
-
- }
-
- if ( object === this ) {
-
- console.error( 'THREE.Object3D.add: object can\'t be added as a child of itself.', object );
- return this;
-
- }
-
- if ( object && object.isObject3D ) {
-
- object.removeFromParent();
- object.parent = this;
- this.children.push( object );
-
- object.dispatchEvent( _addedEvent );
-
- _childaddedEvent.child = object;
- this.dispatchEvent( _childaddedEvent );
- _childaddedEvent.child = null;
-
- } else {
-
- console.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object );
-
- }
-
- return this;
-
- }
-
- remove( object ) {
-
- if ( arguments.length > 1 ) {
-
- for ( let i = 0; i < arguments.length; i ++ ) {
-
- this.remove( arguments[ i ] );
-
- }
-
- return this;
-
- }
-
- const index = this.children.indexOf( object );
-
- if ( index !== - 1 ) {
-
- object.parent = null;
- this.children.splice( index, 1 );
-
- object.dispatchEvent( _removedEvent );
-
- _childremovedEvent.child = object;
- this.dispatchEvent( _childremovedEvent );
- _childremovedEvent.child = null;
-
- }
-
- return this;
-
- }
-
- removeFromParent() {
-
- const parent = this.parent;
-
- if ( parent !== null ) {
-
- parent.remove( this );
-
- }
-
- return this;
-
- }
-
- clear() {
-
- return this.remove( ... this.children );
-
- }
-
- attach( object ) {
-
- // adds object as a child of this, while maintaining the object's world transform
-
- // Note: This method does not support scene graphs having non-uniformly-scaled nodes(s)
-
- this.updateWorldMatrix( true, false );
-
- _m1$3.copy( this.matrixWorld ).invert();
-
- if ( object.parent !== null ) {
-
- object.parent.updateWorldMatrix( true, false );
-
- _m1$3.multiply( object.parent.matrixWorld );
-
- }
-
- object.applyMatrix4( _m1$3 );
-
- object.removeFromParent();
- object.parent = this;
- this.children.push( object );
-
- object.updateWorldMatrix( false, true );
-
- object.dispatchEvent( _addedEvent );
-
- _childaddedEvent.child = object;
- this.dispatchEvent( _childaddedEvent );
- _childaddedEvent.child = null;
-
- return this;
-
- }
-
- getObjectById( id ) {
-
- return this.getObjectByProperty( 'id', id );
-
- }
-
- getObjectByName( name ) {
-
- return this.getObjectByProperty( 'name', name );
-
- }
-
- getObjectByProperty( name, value ) {
-
- if ( this[ name ] === value ) return this;
-
- for ( let i = 0, l = this.children.length; i < l; i ++ ) {
-
- const child = this.children[ i ];
- const object = child.getObjectByProperty( name, value );
-
- if ( object !== undefined ) {
-
- return object;
-
- }
-
- }
-
- return undefined;
-
- }
-
- getObjectsByProperty( name, value, result = [] ) {
-
- if ( this[ name ] === value ) result.push( this );
-
- const children = this.children;
-
- for ( let i = 0, l = children.length; i < l; i ++ ) {
-
- children[ i ].getObjectsByProperty( name, value, result );
-
- }
-
- return result;
-
- }
-
- getWorldPosition( target ) {
-
- this.updateWorldMatrix( true, false );
-
- return target.setFromMatrixPosition( this.matrixWorld );
-
- }
-
- getWorldQuaternion( target ) {
-
- this.updateWorldMatrix( true, false );
-
- this.matrixWorld.decompose( _position$3, target, _scale$2 );
-
- return target;
-
- }
-
- getWorldScale( target ) {
-
- this.updateWorldMatrix( true, false );
-
- this.matrixWorld.decompose( _position$3, _quaternion$2, target );
-
- return target;
-
- }
-
- getWorldDirection( target ) {
-
- this.updateWorldMatrix( true, false );
-
- const e = this.matrixWorld.elements;
-
- return target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();
-
- }
-
- raycast( /* raycaster, intersects */ ) {}
-
- traverse( callback ) {
-
- callback( this );
-
- const children = this.children;
-
- for ( let i = 0, l = children.length; i < l; i ++ ) {
-
- children[ i ].traverse( callback );
-
- }
-
- }
-
- traverseVisible( callback ) {
-
- if ( this.visible === false ) return;
-
- callback( this );
-
- const children = this.children;
-
- for ( let i = 0, l = children.length; i < l; i ++ ) {
-
- children[ i ].traverseVisible( callback );
-
- }
-
- }
-
- traverseAncestors( callback ) {
-
- const parent = this.parent;
-
- if ( parent !== null ) {
-
- callback( parent );
-
- parent.traverseAncestors( callback );
-
- }
-
- }
-
- updateMatrix() {
-
- this.matrix.compose( this.position, this.quaternion, this.scale );
-
- this.matrixWorldNeedsUpdate = true;
-
- }
-
- updateMatrixWorld( force ) {
-
- if ( this.matrixAutoUpdate ) this.updateMatrix();
-
- if ( this.matrixWorldNeedsUpdate || force ) {
-
- if ( this.parent === null ) {
-
- this.matrixWorld.copy( this.matrix );
-
- } else {
-
- this.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );
-
- }
-
- this.matrixWorldNeedsUpdate = false;
-
- force = true;
-
- }
-
- // update children
-
- const children = this.children;
-
- for ( let i = 0, l = children.length; i < l; i ++ ) {
-
- const child = children[ i ];
-
- if ( child.matrixWorldAutoUpdate === true || force === true ) {
-
- child.updateMatrixWorld( force );
-
- }
-
- }
-
- }
-
- updateWorldMatrix( updateParents, updateChildren ) {
-
- const parent = this.parent;
-
- if ( updateParents === true && parent !== null && parent.matrixWorldAutoUpdate === true ) {
-
- parent.updateWorldMatrix( true, false );
-
- }
-
- if ( this.matrixAutoUpdate ) this.updateMatrix();
-
- if ( this.parent === null ) {
-
- this.matrixWorld.copy( this.matrix );
-
- } else {
-
- this.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );
-
- }
-
- // update children
-
- if ( updateChildren === true ) {
-
- const children = this.children;
-
- for ( let i = 0, l = children.length; i < l; i ++ ) {
-
- const child = children[ i ];
-
- if ( child.matrixWorldAutoUpdate === true ) {
-
- child.updateWorldMatrix( false, true );
-
- }
-
- }
-
- }
-
- }
-
- toJSON( meta ) {
-
- // meta is a string when called from JSON.stringify
- const isRootObject = ( meta === undefined || typeof meta === 'string' );
-
- const output = {};
-
- // meta is a hash used to collect geometries, materials.
- // not providing it implies that this is the root object
- // being serialized.
- if ( isRootObject ) {
-
- // initialize meta obj
- meta = {
- geometries: {},
- materials: {},
- textures: {},
- images: {},
- shapes: {},
- skeletons: {},
- animations: {},
- nodes: {}
- };
-
- output.metadata = {
- version: 4.6,
- type: 'Object',
- generator: 'Object3D.toJSON'
- };
-
- }
-
- // standard Object3D serialization
-
- const object = {};
-
- object.uuid = this.uuid;
- object.type = this.type;
-
- if ( this.name !== '' ) object.name = this.name;
- if ( this.castShadow === true ) object.castShadow = true;
- if ( this.receiveShadow === true ) object.receiveShadow = true;
- if ( this.visible === false ) object.visible = false;
- if ( this.frustumCulled === false ) object.frustumCulled = false;
- if ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;
- if ( Object.keys( this.userData ).length > 0 ) object.userData = this.userData;
-
- object.layers = this.layers.mask;
- object.matrix = this.matrix.toArray();
- object.up = this.up.toArray();
-
- if ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;
-
- // object specific properties
-
- if ( this.isInstancedMesh ) {
-
- object.type = 'InstancedMesh';
- object.count = this.count;
- object.instanceMatrix = this.instanceMatrix.toJSON();
- if ( this.instanceColor !== null ) object.instanceColor = this.instanceColor.toJSON();
-
- }
-
- if ( this.isBatchedMesh ) {
-
- object.type = 'BatchedMesh';
- object.perObjectFrustumCulled = this.perObjectFrustumCulled;
- object.sortObjects = this.sortObjects;
-
- object.drawRanges = this._drawRanges;
- object.reservedRanges = this._reservedRanges;
-
- object.visibility = this._visibility;
- object.active = this._active;
- object.bounds = this._bounds.map( bound => ( {
- boxInitialized: bound.boxInitialized,
- boxMin: bound.box.min.toArray(),
- boxMax: bound.box.max.toArray(),
-
- sphereInitialized: bound.sphereInitialized,
- sphereRadius: bound.sphere.radius,
- sphereCenter: bound.sphere.center.toArray()
- } ) );
-
- object.maxGeometryCount = this._maxGeometryCount;
- object.maxVertexCount = this._maxVertexCount;
- object.maxIndexCount = this._maxIndexCount;
-
- object.geometryInitialized = this._geometryInitialized;
- object.geometryCount = this._geometryCount;
-
- object.matricesTexture = this._matricesTexture.toJSON( meta );
-
- if ( this.boundingSphere !== null ) {
-
- object.boundingSphere = {
- center: object.boundingSphere.center.toArray(),
- radius: object.boundingSphere.radius
- };
-
- }
-
- if ( this.boundingBox !== null ) {
-
- object.boundingBox = {
- min: object.boundingBox.min.toArray(),
- max: object.boundingBox.max.toArray()
- };
-
- }
-
- }
-
- //
-
- function serialize( library, element ) {
-
- if ( library[ element.uuid ] === undefined ) {
-
- library[ element.uuid ] = element.toJSON( meta );
-
- }
-
- return element.uuid;
-
- }
-
- if ( this.isScene ) {
-
- if ( this.background ) {
-
- if ( this.background.isColor ) {
-
- object.background = this.background.toJSON();
-
- } else if ( this.background.isTexture ) {
-
- object.background = this.background.toJSON( meta ).uuid;
-
- }
-
- }
-
- if ( this.environment && this.environment.isTexture && this.environment.isRenderTargetTexture !== true ) {
-
- object.environment = this.environment.toJSON( meta ).uuid;
-
- }
-
- } else if ( this.isMesh || this.isLine || this.isPoints ) {
-
- object.geometry = serialize( meta.geometries, this.geometry );
-
- const parameters = this.geometry.parameters;
-
- if ( parameters !== undefined && parameters.shapes !== undefined ) {
-
- const shapes = parameters.shapes;
-
- if ( Array.isArray( shapes ) ) {
-
- for ( let i = 0, l = shapes.length; i < l; i ++ ) {
-
- const shape = shapes[ i ];
-
- serialize( meta.shapes, shape );
-
- }
-
- } else {
-
- serialize( meta.shapes, shapes );
-
- }
-
- }
-
- }
-
- if ( this.isSkinnedMesh ) {
-
- object.bindMode = this.bindMode;
- object.bindMatrix = this.bindMatrix.toArray();
-
- if ( this.skeleton !== undefined ) {
-
- serialize( meta.skeletons, this.skeleton );
-
- object.skeleton = this.skeleton.uuid;
-
- }
-
- }
-
- if ( this.material !== undefined ) {
-
- if ( Array.isArray( this.material ) ) {
-
- const uuids = [];
-
- for ( let i = 0, l = this.material.length; i < l; i ++ ) {
-
- uuids.push( serialize( meta.materials, this.material[ i ] ) );
-
- }
-
- object.material = uuids;
-
- } else {
-
- object.material = serialize( meta.materials, this.material );
-
- }
-
- }
-
- //
-
- if ( this.children.length > 0 ) {
-
- object.children = [];
-
- for ( let i = 0; i < this.children.length; i ++ ) {
-
- object.children.push( this.children[ i ].toJSON( meta ).object );
-
- }
-
- }
-
- //
-
- if ( this.animations.length > 0 ) {
-
- object.animations = [];
-
- for ( let i = 0; i < this.animations.length; i ++ ) {
-
- const animation = this.animations[ i ];
-
- object.animations.push( serialize( meta.animations, animation ) );
-
- }
-
- }
-
- if ( isRootObject ) {
-
- const geometries = extractFromCache( meta.geometries );
- const materials = extractFromCache( meta.materials );
- const textures = extractFromCache( meta.textures );
- const images = extractFromCache( meta.images );
- const shapes = extractFromCache( meta.shapes );
- const skeletons = extractFromCache( meta.skeletons );
- const animations = extractFromCache( meta.animations );
- const nodes = extractFromCache( meta.nodes );
-
- if ( geometries.length > 0 ) output.geometries = geometries;
- if ( materials.length > 0 ) output.materials = materials;
- if ( textures.length > 0 ) output.textures = textures;
- if ( images.length > 0 ) output.images = images;
- if ( shapes.length > 0 ) output.shapes = shapes;
- if ( skeletons.length > 0 ) output.skeletons = skeletons;
- if ( animations.length > 0 ) output.animations = animations;
- if ( nodes.length > 0 ) output.nodes = nodes;
-
- }
-
- output.object = object;
-
- return output;
-
- // extract data from the cache hash
- // remove metadata on each item
- // and return as array
- function extractFromCache( cache ) {
-
- const values = [];
- for ( const key in cache ) {
-
- const data = cache[ key ];
- delete data.metadata;
- values.push( data );
-
- }
-
- return values;
-
- }
-
- }
-
- clone( recursive ) {
-
- return new this.constructor().copy( this, recursive );
-
- }
-
- copy( source, recursive = true ) {
-
- this.name = source.name;
-
- this.up.copy( source.up );
-
- this.position.copy( source.position );
- this.rotation.order = source.rotation.order;
- this.quaternion.copy( source.quaternion );
- this.scale.copy( source.scale );
-
- this.matrix.copy( source.matrix );
- this.matrixWorld.copy( source.matrixWorld );
-
- this.matrixAutoUpdate = source.matrixAutoUpdate;
-
- this.matrixWorldAutoUpdate = source.matrixWorldAutoUpdate;
- this.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;
-
- this.layers.mask = source.layers.mask;
- this.visible = source.visible;
-
- this.castShadow = source.castShadow;
- this.receiveShadow = source.receiveShadow;
-
- this.frustumCulled = source.frustumCulled;
- this.renderOrder = source.renderOrder;
-
- this.animations = source.animations.slice();
-
- this.userData = JSON.parse( JSON.stringify( source.userData ) );
-
- if ( recursive === true ) {
-
- for ( let i = 0; i < source.children.length; i ++ ) {
-
- const child = source.children[ i ];
- this.add( child.clone() );
-
- }
-
- }
-
- return this;
-
- }
-
-}
-
-Object3D.DEFAULT_UP = /*@__PURE__*/ new Vector3( 0, 1, 0 );
-Object3D.DEFAULT_MATRIX_AUTO_UPDATE = true;
-Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE = true;
-
-const _v0$1 = /*@__PURE__*/ new Vector3();
-const _v1$3 = /*@__PURE__*/ new Vector3();
-const _v2$2 = /*@__PURE__*/ new Vector3();
-const _v3$2 = /*@__PURE__*/ new Vector3();
-
-const _vab = /*@__PURE__*/ new Vector3();
-const _vac = /*@__PURE__*/ new Vector3();
-const _vbc = /*@__PURE__*/ new Vector3();
-const _vap = /*@__PURE__*/ new Vector3();
-const _vbp = /*@__PURE__*/ new Vector3();
-const _vcp = /*@__PURE__*/ new Vector3();
-
-class Triangle {
-
- constructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {
-
- this.a = a;
- this.b = b;
- this.c = c;
-
- }
-
- static getNormal( a, b, c, target ) {
-
- target.subVectors( c, b );
- _v0$1.subVectors( a, b );
- target.cross( _v0$1 );
-
- const targetLengthSq = target.lengthSq();
- if ( targetLengthSq > 0 ) {
-
- return target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );
-
- }
-
- return target.set( 0, 0, 0 );
-
- }
-
- // static/instance method to calculate barycentric coordinates
- // based on: http://www.blackpawn.com/texts/pointinpoly/default.html
- static getBarycoord( point, a, b, c, target ) {
-
- _v0$1.subVectors( c, a );
- _v1$3.subVectors( b, a );
- _v2$2.subVectors( point, a );
-
- const dot00 = _v0$1.dot( _v0$1 );
- const dot01 = _v0$1.dot( _v1$3 );
- const dot02 = _v0$1.dot( _v2$2 );
- const dot11 = _v1$3.dot( _v1$3 );
- const dot12 = _v1$3.dot( _v2$2 );
-
- const denom = ( dot00 * dot11 - dot01 * dot01 );
-
- // collinear or singular triangle
- if ( denom === 0 ) {
-
- target.set( 0, 0, 0 );
- return null;
-
- }
-
- const invDenom = 1 / denom;
- const u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;
- const v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;
-
- // barycentric coordinates must always sum to 1
- return target.set( 1 - u - v, v, u );
-
- }
-
- static containsPoint( point, a, b, c ) {
-
- // if the triangle is degenerate then we can't contain a point
- if ( this.getBarycoord( point, a, b, c, _v3$2 ) === null ) {
-
- return false;
-
- }
-
- return ( _v3$2.x >= 0 ) && ( _v3$2.y >= 0 ) && ( ( _v3$2.x + _v3$2.y ) <= 1 );
-
- }
-
- static getInterpolation( point, p1, p2, p3, v1, v2, v3, target ) {
-
- if ( this.getBarycoord( point, p1, p2, p3, _v3$2 ) === null ) {
-
- target.x = 0;
- target.y = 0;
- if ( 'z' in target ) target.z = 0;
- if ( 'w' in target ) target.w = 0;
- return null;
-
- }
-
- target.setScalar( 0 );
- target.addScaledVector( v1, _v3$2.x );
- target.addScaledVector( v2, _v3$2.y );
- target.addScaledVector( v3, _v3$2.z );
-
- return target;
-
- }
-
- static isFrontFacing( a, b, c, direction ) {
-
- _v0$1.subVectors( c, b );
- _v1$3.subVectors( a, b );
-
- // strictly front facing
- return ( _v0$1.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;
-
- }
-
- set( a, b, c ) {
-
- this.a.copy( a );
- this.b.copy( b );
- this.c.copy( c );
-
- return this;
-
- }
-
- setFromPointsAndIndices( points, i0, i1, i2 ) {
-
- this.a.copy( points[ i0 ] );
- this.b.copy( points[ i1 ] );
- this.c.copy( points[ i2 ] );
-
- return this;
-
- }
-
- setFromAttributeAndIndices( attribute, i0, i1, i2 ) {
-
- this.a.fromBufferAttribute( attribute, i0 );
- this.b.fromBufferAttribute( attribute, i1 );
- this.c.fromBufferAttribute( attribute, i2 );
-
- return this;
-
- }
-
- clone() {
-
- return new this.constructor().copy( this );
-
- }
-
- copy( triangle ) {
-
- this.a.copy( triangle.a );
- this.b.copy( triangle.b );
- this.c.copy( triangle.c );
-
- return this;
-
- }
-
- getArea() {
-
- _v0$1.subVectors( this.c, this.b );
- _v1$3.subVectors( this.a, this.b );
-
- return _v0$1.cross( _v1$3 ).length() * 0.5;
-
- }
-
- getMidpoint( target ) {
-
- return target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );
-
- }
-
- getNormal( target ) {
-
- return Triangle.getNormal( this.a, this.b, this.c, target );
-
- }
-
- getPlane( target ) {
-
- return target.setFromCoplanarPoints( this.a, this.b, this.c );
-
- }
-
- getBarycoord( point, target ) {
-
- return Triangle.getBarycoord( point, this.a, this.b, this.c, target );
-
- }
-
- getInterpolation( point, v1, v2, v3, target ) {
-
- return Triangle.getInterpolation( point, this.a, this.b, this.c, v1, v2, v3, target );
-
- }
-
- containsPoint( point ) {
-
- return Triangle.containsPoint( point, this.a, this.b, this.c );
-
- }
-
- isFrontFacing( direction ) {
-
- return Triangle.isFrontFacing( this.a, this.b, this.c, direction );
-
- }
-
- intersectsBox( box ) {
-
- return box.intersectsTriangle( this );
-
- }
-
- closestPointToPoint( p, target ) {
-
- const a = this.a, b = this.b, c = this.c;
- let v, w;
-
- // algorithm thanks to Real-Time Collision Detection by Christer Ericson,
- // published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,
- // under the accompanying license; see chapter 5.1.5 for detailed explanation.
- // basically, we're distinguishing which of the voronoi regions of the triangle
- // the point lies in with the minimum amount of redundant computation.
-
- _vab.subVectors( b, a );
- _vac.subVectors( c, a );
- _vap.subVectors( p, a );
- const d1 = _vab.dot( _vap );
- const d2 = _vac.dot( _vap );
- if ( d1 <= 0 && d2 <= 0 ) {
-
- // vertex region of A; barycentric coords (1, 0, 0)
- return target.copy( a );
-
- }
-
- _vbp.subVectors( p, b );
- const d3 = _vab.dot( _vbp );
- const d4 = _vac.dot( _vbp );
- if ( d3 >= 0 && d4 <= d3 ) {
-
- // vertex region of B; barycentric coords (0, 1, 0)
- return target.copy( b );
-
- }
-
- const vc = d1 * d4 - d3 * d2;
- if ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {
-
- v = d1 / ( d1 - d3 );
- // edge region of AB; barycentric coords (1-v, v, 0)
- return target.copy( a ).addScaledVector( _vab, v );
-
- }
-
- _vcp.subVectors( p, c );
- const d5 = _vab.dot( _vcp );
- const d6 = _vac.dot( _vcp );
- if ( d6 >= 0 && d5 <= d6 ) {
-
- // vertex region of C; barycentric coords (0, 0, 1)
- return target.copy( c );
-
- }
-
- const vb = d5 * d2 - d1 * d6;
- if ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {
-
- w = d2 / ( d2 - d6 );
- // edge region of AC; barycentric coords (1-w, 0, w)
- return target.copy( a ).addScaledVector( _vac, w );
-
- }
-
- const va = d3 * d6 - d5 * d4;
- if ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {
-
- _vbc.subVectors( c, b );
- w = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );
- // edge region of BC; barycentric coords (0, 1-w, w)
- return target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC
-
- }
-
- // face region
- const denom = 1 / ( va + vb + vc );
- // u = va * denom
- v = vb * denom;
- w = vc * denom;
-
- return target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );
-
- }
-
- equals( triangle ) {
-
- return triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );
-
- }
-
-}
-
-const _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,
- 'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,
- 'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,
- 'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,
- 'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,
- 'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,
- 'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,
- 'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,
- 'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,
- 'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,
- 'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,
- 'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,
- 'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,
- 'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,
- 'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,
- 'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,
- 'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,
- 'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,
- 'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,
- 'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,
- 'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,
- 'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,
- 'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,
- 'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };
-
-const _hslA = { h: 0, s: 0, l: 0 };
-const _hslB = { h: 0, s: 0, l: 0 };
-
-function hue2rgb( p, q, t ) {
-
- if ( t < 0 ) t += 1;
- if ( t > 1 ) t -= 1;
- if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;
- if ( t < 1 / 2 ) return q;
- if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );
- return p;
-
-}
-
-class Color {
-
- constructor( r, g, b ) {
-
- this.isColor = true;
-
- this.r = 1;
- this.g = 1;
- this.b = 1;
-
- return this.set( r, g, b );
-
- }
-
- set( r, g, b ) {
-
- if ( g === undefined && b === undefined ) {
-
- // r is THREE.Color, hex or string
-
- const value = r;
-
- if ( value && value.isColor ) {
-
- this.copy( value );
-
- } else if ( typeof value === 'number' ) {
-
- this.setHex( value );
-
- } else if ( typeof value === 'string' ) {
-
- this.setStyle( value );
-
- }
-
- } else {
-
- this.setRGB( r, g, b );
-
- }
-
- return this;
-
- }
-
- setScalar( scalar ) {
-
- this.r = scalar;
- this.g = scalar;
- this.b = scalar;
-
- return this;
-
- }
-
- setHex( hex, colorSpace = SRGBColorSpace ) {
-
- hex = Math.floor( hex );
-
- this.r = ( hex >> 16 & 255 ) / 255;
- this.g = ( hex >> 8 & 255 ) / 255;
- this.b = ( hex & 255 ) / 255;
-
- ColorManagement.toWorkingColorSpace( this, colorSpace );
-
- return this;
-
- }
-
- setRGB( r, g, b, colorSpace = ColorManagement.workingColorSpace ) {
-
- this.r = r;
- this.g = g;
- this.b = b;
-
- ColorManagement.toWorkingColorSpace( this, colorSpace );
-
- return this;
-
- }
-
- setHSL( h, s, l, colorSpace = ColorManagement.workingColorSpace ) {
-
- // h,s,l ranges are in 0.0 - 1.0
- h = euclideanModulo( h, 1 );
- s = clamp( s, 0, 1 );
- l = clamp( l, 0, 1 );
-
- if ( s === 0 ) {
-
- this.r = this.g = this.b = l;
-
- } else {
-
- const p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );
- const q = ( 2 * l ) - p;
-
- this.r = hue2rgb( q, p, h + 1 / 3 );
- this.g = hue2rgb( q, p, h );
- this.b = hue2rgb( q, p, h - 1 / 3 );
-
- }
-
- ColorManagement.toWorkingColorSpace( this, colorSpace );
-
- return this;
-
- }
-
- setStyle( style, colorSpace = SRGBColorSpace ) {
-
- function handleAlpha( string ) {
-
- if ( string === undefined ) return;
-
- if ( parseFloat( string ) < 1 ) {
-
- console.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );
-
- }
-
- }
-
-
- let m;
-
- if ( m = /^(\w+)\(([^\)]*)\)/.exec( style ) ) {
-
- // rgb / hsl
-
- let color;
- const name = m[ 1 ];
- const components = m[ 2 ];
-
- switch ( name ) {
-
- case 'rgb':
- case 'rgba':
-
- if ( color = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) {
-
- // rgb(255,0,0) rgba(255,0,0,0.5)
-
- handleAlpha( color[ 4 ] );
-
- return this.setRGB(
- Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255,
- Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255,
- Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255,
- colorSpace
- );
-
- }
-
- if ( color = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) {
-
- // rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)
-
- handleAlpha( color[ 4 ] );
-
- return this.setRGB(
- Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100,
- Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100,
- Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100,
- colorSpace
- );
-
- }
-
- break;
-
- case 'hsl':
- case 'hsla':
-
- if ( color = /^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) {
-
- // hsl(120,50%,50%) hsla(120,50%,50%,0.5)
-
- handleAlpha( color[ 4 ] );
-
- return this.setHSL(
- parseFloat( color[ 1 ] ) / 360,
- parseFloat( color[ 2 ] ) / 100,
- parseFloat( color[ 3 ] ) / 100,
- colorSpace
- );
-
- }
-
- break;
-
- default:
-
- console.warn( 'THREE.Color: Unknown color model ' + style );
-
- }
-
- } else if ( m = /^\#([A-Fa-f\d]+)$/.exec( style ) ) {
-
- // hex color
-
- const hex = m[ 1 ];
- const size = hex.length;
-
- if ( size === 3 ) {
-
- // #ff0
- return this.setRGB(
- parseInt( hex.charAt( 0 ), 16 ) / 15,
- parseInt( hex.charAt( 1 ), 16 ) / 15,
- parseInt( hex.charAt( 2 ), 16 ) / 15,
- colorSpace
- );
-
- } else if ( size === 6 ) {
-
- // #ff0000
- return this.setHex( parseInt( hex, 16 ), colorSpace );
-
- } else {
-
- console.warn( 'THREE.Color: Invalid hex color ' + style );
-
- }
-
- } else if ( style && style.length > 0 ) {
-
- return this.setColorName( style, colorSpace );
-
- }
-
- return this;
-
- }
-
- setColorName( style, colorSpace = SRGBColorSpace ) {
-
- // color keywords
- const hex = _colorKeywords[ style.toLowerCase() ];
-
- if ( hex !== undefined ) {
-
- // red
- this.setHex( hex, colorSpace );
-
- } else {
-
- // unknown color
- console.warn( 'THREE.Color: Unknown color ' + style );
-
- }
-
- return this;
-
- }
-
- clone() {
-
- return new this.constructor( this.r, this.g, this.b );
-
- }
-
- copy( color ) {
-
- this.r = color.r;
- this.g = color.g;
- this.b = color.b;
-
- return this;
-
- }
-
- copySRGBToLinear( color ) {
-
- this.r = SRGBToLinear( color.r );
- this.g = SRGBToLinear( color.g );
- this.b = SRGBToLinear( color.b );
-
- return this;
-
- }
-
- copyLinearToSRGB( color ) {
-
- this.r = LinearToSRGB( color.r );
- this.g = LinearToSRGB( color.g );
- this.b = LinearToSRGB( color.b );
-
- return this;
-
- }
-
- convertSRGBToLinear() {
-
- this.copySRGBToLinear( this );
-
- return this;
-
- }
-
- convertLinearToSRGB() {
-
- this.copyLinearToSRGB( this );
-
- return this;
-
- }
-
- getHex( colorSpace = SRGBColorSpace ) {
-
- ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
-
- return Math.round( clamp( _color.r * 255, 0, 255 ) ) * 65536 + Math.round( clamp( _color.g * 255, 0, 255 ) ) * 256 + Math.round( clamp( _color.b * 255, 0, 255 ) );
-
- }
-
- getHexString( colorSpace = SRGBColorSpace ) {
-
- return ( '000000' + this.getHex( colorSpace ).toString( 16 ) ).slice( - 6 );
-
- }
-
- getHSL( target, colorSpace = ColorManagement.workingColorSpace ) {
-
- // h,s,l ranges are in 0.0 - 1.0
-
- ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
-
- const r = _color.r, g = _color.g, b = _color.b;
-
- const max = Math.max( r, g, b );
- const min = Math.min( r, g, b );
-
- let hue, saturation;
- const lightness = ( min + max ) / 2.0;
-
- if ( min === max ) {
-
- hue = 0;
- saturation = 0;
-
- } else {
-
- const delta = max - min;
-
- saturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );
-
- switch ( max ) {
-
- case r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;
- case g: hue = ( b - r ) / delta + 2; break;
- case b: hue = ( r - g ) / delta + 4; break;
-
- }
-
- hue /= 6;
-
- }
-
- target.h = hue;
- target.s = saturation;
- target.l = lightness;
-
- return target;
-
- }
-
- getRGB( target, colorSpace = ColorManagement.workingColorSpace ) {
-
- ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
-
- target.r = _color.r;
- target.g = _color.g;
- target.b = _color.b;
-
- return target;
-
- }
-
- getStyle( colorSpace = SRGBColorSpace ) {
-
- ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
-
- const r = _color.r, g = _color.g, b = _color.b;
-
- if ( colorSpace !== SRGBColorSpace ) {
-
- // Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/).
- return `color(${ colorSpace } ${ r.toFixed( 3 ) } ${ g.toFixed( 3 ) } ${ b.toFixed( 3 ) })`;
-
- }
-
- return `rgb(${ Math.round( r * 255 ) },${ Math.round( g * 255 ) },${ Math.round( b * 255 ) })`;
-
- }
-
- offsetHSL( h, s, l ) {
-
- this.getHSL( _hslA );
-
- return this.setHSL( _hslA.h + h, _hslA.s + s, _hslA.l + l );
-
- }
-
- add( color ) {
-
- this.r += color.r;
- this.g += color.g;
- this.b += color.b;
-
- return this;
-
- }
-
- addColors( color1, color2 ) {
-
- this.r = color1.r + color2.r;
- this.g = color1.g + color2.g;
- this.b = color1.b + color2.b;
-
- return this;
-
- }
-
- addScalar( s ) {
-
- this.r += s;
- this.g += s;
- this.b += s;
-
- return this;
-
- }
-
- sub( color ) {
-
- this.r = Math.max( 0, this.r - color.r );
- this.g = Math.max( 0, this.g - color.g );
- this.b = Math.max( 0, this.b - color.b );
-
- return this;
-
- }
-
- multiply( color ) {
-
- this.r *= color.r;
- this.g *= color.g;
- this.b *= color.b;
-
- return this;
-
- }
-
- multiplyScalar( s ) {
-
- this.r *= s;
- this.g *= s;
- this.b *= s;
-
- return this;
-
- }
-
- lerp( color, alpha ) {
-
- this.r += ( color.r - this.r ) * alpha;
- this.g += ( color.g - this.g ) * alpha;
- this.b += ( color.b - this.b ) * alpha;
-
- return this;
-
- }
-
- lerpColors( color1, color2, alpha ) {
-
- this.r = color1.r + ( color2.r - color1.r ) * alpha;
- this.g = color1.g + ( color2.g - color1.g ) * alpha;
- this.b = color1.b + ( color2.b - color1.b ) * alpha;
-
- return this;
-
- }
-
- lerpHSL( color, alpha ) {
-
- this.getHSL( _hslA );
- color.getHSL( _hslB );
-
- const h = lerp( _hslA.h, _hslB.h, alpha );
- const s = lerp( _hslA.s, _hslB.s, alpha );
- const l = lerp( _hslA.l, _hslB.l, alpha );
-
- this.setHSL( h, s, l );
-
- return this;
-
- }
-
- setFromVector3( v ) {
-
- this.r = v.x;
- this.g = v.y;
- this.b = v.z;
-
- return this;
-
- }
-
- applyMatrix3( m ) {
-
- const r = this.r, g = this.g, b = this.b;
- const e = m.elements;
-
- this.r = e[ 0 ] * r + e[ 3 ] * g + e[ 6 ] * b;
- this.g = e[ 1 ] * r + e[ 4 ] * g + e[ 7 ] * b;
- this.b = e[ 2 ] * r + e[ 5 ] * g + e[ 8 ] * b;
-
- return this;
-
- }
-
- equals( c ) {
-
- return ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );
-
- }
-
- fromArray( array, offset = 0 ) {
-
- this.r = array[ offset ];
- this.g = array[ offset + 1 ];
- this.b = array[ offset + 2 ];
-
- return this;
-
- }
-
- toArray( array = [], offset = 0 ) {
-
- array[ offset ] = this.r;
- array[ offset + 1 ] = this.g;
- array[ offset + 2 ] = this.b;
-
- return array;
-
- }
-
- fromBufferAttribute( attribute, index ) {
-
- this.r = attribute.getX( index );
- this.g = attribute.getY( index );
- this.b = attribute.getZ( index );
-
- return this;
-
- }
-
- toJSON() {
-
- return this.getHex();
-
- }
-
- *[ Symbol.iterator ]() {
-
- yield this.r;
- yield this.g;
- yield this.b;
-
- }
-
-}
-
-const _color = /*@__PURE__*/ new Color();
-
-Color.NAMES = _colorKeywords;
-
-let _materialId = 0;
-
-class Material extends EventDispatcher {
-
- constructor() {
-
- super();
-
- this.isMaterial = true;
-
- Object.defineProperty( this, 'id', { value: _materialId ++ } );
-
- this.uuid = generateUUID();
-
- this.name = '';
- this.type = 'Material';
-
- this.blending = NormalBlending;
- this.side = FrontSide;
- this.vertexColors = false;
-
- this.opacity = 1;
- this.transparent = false;
- this.alphaHash = false;
-
- this.blendSrc = SrcAlphaFactor;
- this.blendDst = OneMinusSrcAlphaFactor;
- this.blendEquation = AddEquation;
- this.blendSrcAlpha = null;
- this.blendDstAlpha = null;
- this.blendEquationAlpha = null;
- this.blendColor = new Color( 0, 0, 0 );
- this.blendAlpha = 0;
-
- this.depthFunc = LessEqualDepth;
- this.depthTest = true;
- this.depthWrite = true;
-
- this.stencilWriteMask = 0xff;
- this.stencilFunc = AlwaysStencilFunc;
- this.stencilRef = 0;
- this.stencilFuncMask = 0xff;
- this.stencilFail = KeepStencilOp;
- this.stencilZFail = KeepStencilOp;
- this.stencilZPass = KeepStencilOp;
- this.stencilWrite = false;
-
- this.clippingPlanes = null;
- this.clipIntersection = false;
- this.clipShadows = false;
-
- this.shadowSide = null;
-
- this.colorWrite = true;
-
- this.precision = null; // override the renderer's default precision for this material
-
- this.polygonOffset = false;
- this.polygonOffsetFactor = 0;
- this.polygonOffsetUnits = 0;
-
- this.dithering = false;
-
- this.alphaToCoverage = false;
- this.premultipliedAlpha = false;
- this.forceSinglePass = false;
-
- this.visible = true;
-
- this.toneMapped = true;
-
- this.userData = {};
-
- this.version = 0;
-
- this._alphaTest = 0;
-
- }
-
- get alphaTest() {
-
- return this._alphaTest;
-
- }
-
- set alphaTest( value ) {
-
- if ( this._alphaTest > 0 !== value > 0 ) {
-
- this.version ++;
-
- }
-
- this._alphaTest = value;
-
- }
-
- onBuild( /* shaderobject, renderer */ ) {}
-
- onBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {}
-
- onBeforeCompile( /* shaderobject, renderer */ ) {}
-
- customProgramCacheKey() {
-
- return this.onBeforeCompile.toString();
-
- }
-
- setValues( values ) {
-
- if ( values === undefined ) return;
-
- for ( const key in values ) {
-
- const newValue = values[ key ];
-
- if ( newValue === undefined ) {
-
- console.warn( `THREE.Material: parameter '${ key }' has value of undefined.` );
- continue;
-
- }
-
- const currentValue = this[ key ];
-
- if ( currentValue === undefined ) {
-
- console.warn( `THREE.Material: '${ key }' is not a property of THREE.${ this.type }.` );
- continue;
-
- }
-
- if ( currentValue && currentValue.isColor ) {
-
- currentValue.set( newValue );
-
- } else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {
-
- currentValue.copy( newValue );
-
- } else {
-
- this[ key ] = newValue;
-
- }
-
- }
-
- }
-
- toJSON( meta ) {
-
- const isRootObject = ( meta === undefined || typeof meta === 'string' );
-
- if ( isRootObject ) {
-
- meta = {
- textures: {},
- images: {}
- };
-
- }
-
- const data = {
- metadata: {
- version: 4.6,
- type: 'Material',
- generator: 'Material.toJSON'
- }
- };
-
- // standard Material serialization
- data.uuid = this.uuid;
- data.type = this.type;
-
- if ( this.name !== '' ) data.name = this.name;
-
- if ( this.color && this.color.isColor ) data.color = this.color.getHex();
-
- if ( this.roughness !== undefined ) data.roughness = this.roughness;
- if ( this.metalness !== undefined ) data.metalness = this.metalness;
-
- if ( this.sheen !== undefined ) data.sheen = this.sheen;
- if ( this.sheenColor && this.sheenColor.isColor ) data.sheenColor = this.sheenColor.getHex();
- if ( this.sheenRoughness !== undefined ) data.sheenRoughness = this.sheenRoughness;
- if ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();
- if ( this.emissiveIntensity !== undefined && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;
-
- if ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();
- if ( this.specularIntensity !== undefined ) data.specularIntensity = this.specularIntensity;
- if ( this.specularColor && this.specularColor.isColor ) data.specularColor = this.specularColor.getHex();
- if ( this.shininess !== undefined ) data.shininess = this.shininess;
- if ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;
- if ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;
-
- if ( this.clearcoatMap && this.clearcoatMap.isTexture ) {
-
- data.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;
-
- }
-
- if ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {
-
- data.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;
-
- }
-
- if ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {
-
- data.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;
- data.clearcoatNormalScale = this.clearcoatNormalScale.toArray();
-
- }
-
- if ( this.dispersion !== undefined ) data.dispersion = this.dispersion;
-
- if ( this.iridescence !== undefined ) data.iridescence = this.iridescence;
- if ( this.iridescenceIOR !== undefined ) data.iridescenceIOR = this.iridescenceIOR;
- if ( this.iridescenceThicknessRange !== undefined ) data.iridescenceThicknessRange = this.iridescenceThicknessRange;
-
- if ( this.iridescenceMap && this.iridescenceMap.isTexture ) {
-
- data.iridescenceMap = this.iridescenceMap.toJSON( meta ).uuid;
-
- }
-
- if ( this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture ) {
-
- data.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON( meta ).uuid;
-
- }
-
- if ( this.anisotropy !== undefined ) data.anisotropy = this.anisotropy;
- if ( this.anisotropyRotation !== undefined ) data.anisotropyRotation = this.anisotropyRotation;
-
- if ( this.anisotropyMap && this.anisotropyMap.isTexture ) {
-
- data.anisotropyMap = this.anisotropyMap.toJSON( meta ).uuid;
-
- }
-
- if ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;
- if ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;
- if ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;
-
- if ( this.lightMap && this.lightMap.isTexture ) {
-
- data.lightMap = this.lightMap.toJSON( meta ).uuid;
- data.lightMapIntensity = this.lightMapIntensity;
-
- }
-
- if ( this.aoMap && this.aoMap.isTexture ) {
-
- data.aoMap = this.aoMap.toJSON( meta ).uuid;
- data.aoMapIntensity = this.aoMapIntensity;
-
- }
-
- if ( this.bumpMap && this.bumpMap.isTexture ) {
-
- data.bumpMap = this.bumpMap.toJSON( meta ).uuid;
- data.bumpScale = this.bumpScale;
-
- }
-
- if ( this.normalMap && this.normalMap.isTexture ) {
-
- data.normalMap = this.normalMap.toJSON( meta ).uuid;
- data.normalMapType = this.normalMapType;
- data.normalScale = this.normalScale.toArray();
-
- }
-
- if ( this.displacementMap && this.displacementMap.isTexture ) {
-
- data.displacementMap = this.displacementMap.toJSON( meta ).uuid;
- data.displacementScale = this.displacementScale;
- data.displacementBias = this.displacementBias;
-
- }
-
- if ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;
- if ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;
-
- if ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;
- if ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;
- if ( this.specularIntensityMap && this.specularIntensityMap.isTexture ) data.specularIntensityMap = this.specularIntensityMap.toJSON( meta ).uuid;
- if ( this.specularColorMap && this.specularColorMap.isTexture ) data.specularColorMap = this.specularColorMap.toJSON( meta ).uuid;
-
- if ( this.envMap && this.envMap.isTexture ) {
-
- data.envMap = this.envMap.toJSON( meta ).uuid;
-
- if ( this.combine !== undefined ) data.combine = this.combine;
-
- }
-
- if ( this.envMapRotation !== undefined ) data.envMapRotation = this.envMapRotation.toArray();
- if ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;
- if ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;
- if ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;
-
- if ( this.gradientMap && this.gradientMap.isTexture ) {
-
- data.gradientMap = this.gradientMap.toJSON( meta ).uuid;
-
- }
-
- if ( this.transmission !== undefined ) data.transmission = this.transmission;
- if ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid;
- if ( this.thickness !== undefined ) data.thickness = this.thickness;
- if ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;
- if ( this.attenuationDistance !== undefined && this.attenuationDistance !== Infinity ) data.attenuationDistance = this.attenuationDistance;
- if ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex();
-
- if ( this.size !== undefined ) data.size = this.size;
- if ( this.shadowSide !== null ) data.shadowSide = this.shadowSide;
- if ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;
-
- if ( this.blending !== NormalBlending ) data.blending = this.blending;
- if ( this.side !== FrontSide ) data.side = this.side;
- if ( this.vertexColors === true ) data.vertexColors = true;
-
- if ( this.opacity < 1 ) data.opacity = this.opacity;
- if ( this.transparent === true ) data.transparent = true;
-
- if ( this.blendSrc !== SrcAlphaFactor ) data.blendSrc = this.blendSrc;
- if ( this.blendDst !== OneMinusSrcAlphaFactor ) data.blendDst = this.blendDst;
- if ( this.blendEquation !== AddEquation ) data.blendEquation = this.blendEquation;
- if ( this.blendSrcAlpha !== null ) data.blendSrcAlpha = this.blendSrcAlpha;
- if ( this.blendDstAlpha !== null ) data.blendDstAlpha = this.blendDstAlpha;
- if ( this.blendEquationAlpha !== null ) data.blendEquationAlpha = this.blendEquationAlpha;
- if ( this.blendColor && this.blendColor.isColor ) data.blendColor = this.blendColor.getHex();
- if ( this.blendAlpha !== 0 ) data.blendAlpha = this.blendAlpha;
-
- if ( this.depthFunc !== LessEqualDepth ) data.depthFunc = this.depthFunc;
- if ( this.depthTest === false ) data.depthTest = this.depthTest;
- if ( this.depthWrite === false ) data.depthWrite = this.depthWrite;
- if ( this.colorWrite === false ) data.colorWrite = this.colorWrite;
-
- if ( this.stencilWriteMask !== 0xff ) data.stencilWriteMask = this.stencilWriteMask;
- if ( this.stencilFunc !== AlwaysStencilFunc ) data.stencilFunc = this.stencilFunc;
- if ( this.stencilRef !== 0 ) data.stencilRef = this.stencilRef;
- if ( this.stencilFuncMask !== 0xff ) data.stencilFuncMask = this.stencilFuncMask;
- if ( this.stencilFail !== KeepStencilOp ) data.stencilFail = this.stencilFail;
- if ( this.stencilZFail !== KeepStencilOp ) data.stencilZFail = this.stencilZFail;
- if ( this.stencilZPass !== KeepStencilOp ) data.stencilZPass = this.stencilZPass;
- if ( this.stencilWrite === true ) data.stencilWrite = this.stencilWrite;
-
- // rotation (SpriteMaterial)
- if ( this.rotation !== undefined && this.rotation !== 0 ) data.rotation = this.rotation;
-
- if ( this.polygonOffset === true ) data.polygonOffset = true;
- if ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;
- if ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;
-
- if ( this.linewidth !== undefined && this.linewidth !== 1 ) data.linewidth = this.linewidth;
- if ( this.dashSize !== undefined ) data.dashSize = this.dashSize;
- if ( this.gapSize !== undefined ) data.gapSize = this.gapSize;
- if ( this.scale !== undefined ) data.scale = this.scale;
-
- if ( this.dithering === true ) data.dithering = true;
-
- if ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;
- if ( this.alphaHash === true ) data.alphaHash = true;
- if ( this.alphaToCoverage === true ) data.alphaToCoverage = true;
- if ( this.premultipliedAlpha === true ) data.premultipliedAlpha = true;
- if ( this.forceSinglePass === true ) data.forceSinglePass = true;
-
- if ( this.wireframe === true ) data.wireframe = true;
- if ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;
- if ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;
- if ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;
-
- if ( this.flatShading === true ) data.flatShading = true;
-
- if ( this.visible === false ) data.visible = false;
-
- if ( this.toneMapped === false ) data.toneMapped = false;
-
- if ( this.fog === false ) data.fog = false;
-
- if ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;
-
- // TODO: Copied from Object3D.toJSON
-
- function extractFromCache( cache ) {
-
- const values = [];
-
- for ( const key in cache ) {
-
- const data = cache[ key ];
- delete data.metadata;
- values.push( data );
-
- }
-
- return values;
-
- }
-
- if ( isRootObject ) {
-
- const textures = extractFromCache( meta.textures );
- const images = extractFromCache( meta.images );
-
- if ( textures.length > 0 ) data.textures = textures;
- if ( images.length > 0 ) data.images = images;
-
- }
-
- return data;
-
- }
-
- clone() {
-
- return new this.constructor().copy( this );
-
- }
-
- copy( source ) {
-
- this.name = source.name;
-
- this.blending = source.blending;
- this.side = source.side;
- this.vertexColors = source.vertexColors;
-
- this.opacity = source.opacity;
- this.transparent = source.transparent;
-
- this.blendSrc = source.blendSrc;
- this.blendDst = source.blendDst;
- this.blendEquation = source.blendEquation;
- this.blendSrcAlpha = source.blendSrcAlpha;
- this.blendDstAlpha = source.blendDstAlpha;
- this.blendEquationAlpha = source.blendEquationAlpha;
- this.blendColor.copy( source.blendColor );
- this.blendAlpha = source.blendAlpha;
-
- this.depthFunc = source.depthFunc;
- this.depthTest = source.depthTest;
- this.depthWrite = source.depthWrite;
-
- this.stencilWriteMask = source.stencilWriteMask;
- this.stencilFunc = source.stencilFunc;
- this.stencilRef = source.stencilRef;
- this.stencilFuncMask = source.stencilFuncMask;
- this.stencilFail = source.stencilFail;
- this.stencilZFail = source.stencilZFail;
- this.stencilZPass = source.stencilZPass;
- this.stencilWrite = source.stencilWrite;
-
- const srcPlanes = source.clippingPlanes;
- let dstPlanes = null;
-
- if ( srcPlanes !== null ) {
-
- const n = srcPlanes.length;
- dstPlanes = new Array( n );
-
- for ( let i = 0; i !== n; ++ i ) {
-
- dstPlanes[ i ] = srcPlanes[ i ].clone();
-
- }
-
- }
-
- this.clippingPlanes = dstPlanes;
- this.clipIntersection = source.clipIntersection;
- this.clipShadows = source.clipShadows;
-
- this.shadowSide = source.shadowSide;
-
- this.colorWrite = source.colorWrite;
-
- this.precision = source.precision;
-
- this.polygonOffset = source.polygonOffset;
- this.polygonOffsetFactor = source.polygonOffsetFactor;
- this.polygonOffsetUnits = source.polygonOffsetUnits;
-
- this.dithering = source.dithering;
-
- this.alphaTest = source.alphaTest;
- this.alphaHash = source.alphaHash;
- this.alphaToCoverage = source.alphaToCoverage;
- this.premultipliedAlpha = source.premultipliedAlpha;
- this.forceSinglePass = source.forceSinglePass;
-
- this.visible = source.visible;
-
- this.toneMapped = source.toneMapped;
-
- this.userData = JSON.parse( JSON.stringify( source.userData ) );
-
- return this;
-
- }
-
- dispose() {
-
- this.dispatchEvent( { type: 'dispose' } );
-
- }
-
- set needsUpdate( value ) {
-
- if ( value === true ) this.version ++;
-
- }
-
-}
-
-class MeshBasicMaterial extends Material {
-
- constructor( parameters ) {
-
- super();
-
- this.isMeshBasicMaterial = true;
-
- this.type = 'MeshBasicMaterial';
-
- this.color = new Color( 0xffffff ); // emissive
-
- this.map = null;
-
- this.lightMap = null;
- this.lightMapIntensity = 1.0;
-
- this.aoMap = null;
- this.aoMapIntensity = 1.0;
-
- this.specularMap = null;
-
- this.alphaMap = null;
-
- this.envMap = null;
- this.envMapRotation = new Euler();
- this.combine = MultiplyOperation;
- this.reflectivity = 1;
- this.refractionRatio = 0.98;
-
- this.wireframe = false;
- this.wireframeLinewidth = 1;
- this.wireframeLinecap = 'round';
- this.wireframeLinejoin = 'round';
-
- this.fog = true;
-
- this.setValues( parameters );
-
- }
-
- copy( source ) {
-
- super.copy( source );
-
- this.color.copy( source.color );
-
- this.map = source.map;
-
- this.lightMap = source.lightMap;
- this.lightMapIntensity = source.lightMapIntensity;
-
- this.aoMap = source.aoMap;
- this.aoMapIntensity = source.aoMapIntensity;
-
- this.specularMap = source.specularMap;
-
- this.alphaMap = source.alphaMap;
-
- this.envMap = source.envMap;
- this.envMapRotation.copy( source.envMapRotation );
- this.combine = source.combine;
- this.reflectivity = source.reflectivity;
- this.refractionRatio = source.refractionRatio;
-
- this.wireframe = source.wireframe;
- this.wireframeLinewidth = source.wireframeLinewidth;
- this.wireframeLinecap = source.wireframeLinecap;
- this.wireframeLinejoin = source.wireframeLinejoin;
-
- this.fog = source.fog;
-
- return this;
-
- }
-
-}
-
-// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf
-
-const _tables = /*@__PURE__*/ _generateTables();
-
-function _generateTables() {
-
- // float32 to float16 helpers
-
- const buffer = new ArrayBuffer( 4 );
- const floatView = new Float32Array( buffer );
- const uint32View = new Uint32Array( buffer );
-
- const baseTable = new Uint32Array( 512 );
- const shiftTable = new Uint32Array( 512 );
-
- for ( let i = 0; i < 256; ++ i ) {
-
- const e = i - 127;
-
- // very small number (0, -0)
-
- if ( e < - 27 ) {
-
- baseTable[ i ] = 0x0000;
- baseTable[ i | 0x100 ] = 0x8000;
- shiftTable[ i ] = 24;
- shiftTable[ i | 0x100 ] = 24;
-
- // small number (denorm)
-
- } else if ( e < - 14 ) {
-
- baseTable[ i ] = 0x0400 >> ( - e - 14 );
- baseTable[ i | 0x100 ] = ( 0x0400 >> ( - e - 14 ) ) | 0x8000;
- shiftTable[ i ] = - e - 1;
- shiftTable[ i | 0x100 ] = - e - 1;
-
- // normal number
-
- } else if ( e <= 15 ) {
-
- baseTable[ i ] = ( e + 15 ) << 10;
- baseTable[ i | 0x100 ] = ( ( e + 15 ) << 10 ) | 0x8000;
- shiftTable[ i ] = 13;
- shiftTable[ i | 0x100 ] = 13;
-
- // large number (Infinity, -Infinity)
-
- } else if ( e < 128 ) {
-
- baseTable[ i ] = 0x7c00;
- baseTable[ i | 0x100 ] = 0xfc00;
- shiftTable[ i ] = 24;
- shiftTable[ i | 0x100 ] = 24;
-
- // stay (NaN, Infinity, -Infinity)
-
- } else {
-
- baseTable[ i ] = 0x7c00;
- baseTable[ i | 0x100 ] = 0xfc00;
- shiftTable[ i ] = 13;
- shiftTable[ i | 0x100 ] = 13;
-
- }
-
- }
-
- // float16 to float32 helpers
-
- const mantissaTable = new Uint32Array( 2048 );
- const exponentTable = new Uint32Array( 64 );
- const offsetTable = new Uint32Array( 64 );
-
- for ( let i = 1; i < 1024; ++ i ) {
-
- let m = i << 13; // zero pad mantissa bits
- let e = 0; // zero exponent
-
- // normalized
- while ( ( m & 0x00800000 ) === 0 ) {
-
- m <<= 1;
- e -= 0x00800000; // decrement exponent
-
- }
-
- m &= ~ 0x00800000; // clear leading 1 bit
- e += 0x38800000; // adjust bias
-
- mantissaTable[ i ] = m | e;
-
- }
-
- for ( let i = 1024; i < 2048; ++ i ) {
-
- mantissaTable[ i ] = 0x38000000 + ( ( i - 1024 ) << 13 );
-
- }
-
- for ( let i = 1; i < 31; ++ i ) {
-
- exponentTable[ i ] = i << 23;
-
- }
-
- exponentTable[ 31 ] = 0x47800000;
- exponentTable[ 32 ] = 0x80000000;
-
- for ( let i = 33; i < 63; ++ i ) {
-
- exponentTable[ i ] = 0x80000000 + ( ( i - 32 ) << 23 );
-
- }
-
- exponentTable[ 63 ] = 0xc7800000;
-
- for ( let i = 1; i < 64; ++ i ) {
-
- if ( i !== 32 ) {
-
- offsetTable[ i ] = 1024;
-
- }
-
- }
-
- return {
- floatView: floatView,
- uint32View: uint32View,
- baseTable: baseTable,
- shiftTable: shiftTable,
- mantissaTable: mantissaTable,
- exponentTable: exponentTable,
- offsetTable: offsetTable
- };
-
-}
-
-// float32 to float16
-
-function toHalfFloat( val ) {
-
- if ( Math.abs( val ) > 65504 ) console.warn( 'THREE.DataUtils.toHalfFloat(): Value out of range.' );
-
- val = clamp( val, - 65504, 65504 );
-
- _tables.floatView[ 0 ] = val;
- const f = _tables.uint32View[ 0 ];
- const e = ( f >> 23 ) & 0x1ff;
- return _tables.baseTable[ e ] + ( ( f & 0x007fffff ) >> _tables.shiftTable[ e ] );
-
-}
-
-// float16 to float32
-
-function fromHalfFloat( val ) {
-
- const m = val >> 10;
- _tables.uint32View[ 0 ] = _tables.mantissaTable[ _tables.offsetTable[ m ] + ( val & 0x3ff ) ] + _tables.exponentTable[ m ];
- return _tables.floatView[ 0 ];
-
-}
-
-const DataUtils = {
- toHalfFloat: toHalfFloat,
- fromHalfFloat: fromHalfFloat,
-};
-
-const _vector$9 = /*@__PURE__*/ new Vector3();
-const _vector2$1 = /*@__PURE__*/ new Vector2();
-
-class BufferAttribute {
-
- constructor( array, itemSize, normalized = false ) {
-
- if ( Array.isArray( array ) ) {
-
- throw new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );
-
- }
-
- this.isBufferAttribute = true;
-
- this.name = '';
-
- this.array = array;
- this.itemSize = itemSize;
- this.count = array !== undefined ? array.length / itemSize : 0;
- this.normalized = normalized;
-
- this.usage = StaticDrawUsage;
- this._updateRange = { offset: 0, count: - 1 };
- this.updateRanges = [];
- this.gpuType = FloatType;
-
- this.version = 0;
-
- }
-
- onUploadCallback() {}
-
- set needsUpdate( value ) {
-
- if ( value === true ) this.version ++;
-
- }
-
- get updateRange() {
-
- warnOnce( 'THREE.BufferAttribute: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead.' ); // @deprecated, r159
- return this._updateRange;
-
- }
-
- setUsage( value ) {
-
- this.usage = value;
-
- return this;
-
- }
-
- addUpdateRange( start, count ) {
-
- this.updateRanges.push( { start, count } );
-
- }
-
- clearUpdateRanges() {
-
- this.updateRanges.length = 0;
-
- }
-
- copy( source ) {
-
- this.name = source.name;
- this.array = new source.array.constructor( source.array );
- this.itemSize = source.itemSize;
- this.count = source.count;
- this.normalized = source.normalized;
-
- this.usage = source.usage;
- this.gpuType = source.gpuType;
-
- return this;
-
- }
-
- copyAt( index1, attribute, index2 ) {
-
- index1 *= this.itemSize;
- index2 *= attribute.itemSize;
-
- for ( let i = 0, l = this.itemSize; i < l; i ++ ) {
-
- this.array[ index1 + i ] = attribute.array[ index2 + i ];
-
- }
-
- return this;
-
- }
-
- copyArray( array ) {
-
- this.array.set( array );
-
- return this;
-
- }
-
- applyMatrix3( m ) {
-
- if ( this.itemSize === 2 ) {
-
- for ( let i = 0, l = this.count; i < l; i ++ ) {
-
- _vector2$1.fromBufferAttribute( this, i );
- _vector2$1.applyMatrix3( m );
-
- this.setXY( i, _vector2$1.x, _vector2$1.y );
-
- }
-
- } else if ( this.itemSize === 3 ) {
-
- for ( let i = 0, l = this.count; i < l; i ++ ) {
-
- _vector$9.fromBufferAttribute( this, i );
- _vector$9.applyMatrix3( m );
-
- this.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );
-
- }
-
- }
-
- return this;
-
- }
-
- applyMatrix4( m ) {
-
- for ( let i = 0, l = this.count; i < l; i ++ ) {
-
- _vector$9.fromBufferAttribute( this, i );
-
- _vector$9.applyMatrix4( m );
-
- this.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );
-
- }
-
- return this;
-
- }
-
- applyNormalMatrix( m ) {
-
- for ( let i = 0, l = this.count; i < l; i ++ ) {
-
- _vector$9.fromBufferAttribute( this, i );
-
- _vector$9.applyNormalMatrix( m );
-
- this.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );
-
- }
-
- return this;
-
- }
-
- transformDirection( m ) {
-
- for ( let i = 0, l = this.count; i < l; i ++ ) {
-
- _vector$9.fromBufferAttribute( this, i );
-
- _vector$9.transformDirection( m );
-
- this.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );
-
- }
-
- return this;
-
- }
-
- set( value, offset = 0 ) {
-
- // Matching BufferAttribute constructor, do not normalize the array.
- this.array.set( value, offset );
-
- return this;
-
- }
-
- getComponent( index, component ) {
-
- let value = this.array[ index * this.itemSize + component ];
-
- if ( this.normalized ) value = denormalize( value, this.array );
-
- return value;
-
- }
-
- setComponent( index, component, value ) {
-
- if ( this.normalized ) value = normalize( value, this.array );
-
- this.array[ index * this.itemSize + component ] = value;
-
- return this;
-
- }
-
- getX( index ) {
-
- let x = this.array[ index * this.itemSize ];
-
- if ( this.normalized ) x = denormalize( x, this.array );
-
- return x;
-
- }
-
- setX( index, x ) {
-
- if ( this.normalized ) x = normalize( x, this.array );
-
- this.array[ index * this.itemSize ] = x;
-
- return this;
-
- }
-
- getY( index ) {
-
- let y = this.array[ index * this.itemSize + 1 ];
-
- if ( this.normalized ) y = denormalize( y, this.array );
-
- return y;
-
- }
-
- setY( index, y ) {
-
- if ( this.normalized ) y = normalize( y, this.array );
-
- this.array[ index * this.itemSize + 1 ] = y;
-
- return this;
-
- }
-
- getZ( index ) {
-
- let z = this.array[ index * this.itemSize + 2 ];
-
- if ( this.normalized ) z = denormalize( z, this.array );
-
- return z;
-
- }
-
- setZ( index, z ) {
-
- if ( this.normalized ) z = normalize( z, this.array );
-
- this.array[ index * this.itemSize + 2 ] = z;
-
- return this;
-
- }
-
- getW( index ) {
-
- let w = this.array[ index * this.itemSize + 3 ];
-
- if ( this.normalized ) w = denormalize( w, this.array );
-
- return w;
-
- }
-
- setW( index, w ) {
-
- if ( this.normalized ) w = normalize( w, this.array );
-
- this.array[ index * this.itemSize + 3 ] = w;
-
- return this;
-
- }
-
- setXY( index, x, y ) {
-
- index *= this.itemSize;
-
- if ( this.normalized ) {
-
- x = normalize( x, this.array );
- y = normalize( y, this.array );
-
- }
-
- this.array[ index + 0 ] = x;
- this.array[ index + 1 ] = y;
-
- return this;
-
- }
-
- setXYZ( index, x, y, z ) {
-
- index *= this.itemSize;
-
- if ( this.normalized ) {
-
- x = normalize( x, this.array );
- y = normalize( y, this.array );
- z = normalize( z, this.array );
-
- }
-
- this.array[ index + 0 ] = x;
- this.array[ index + 1 ] = y;
- this.array[ index + 2 ] = z;
-
- return this;
-
- }
-
- setXYZW( index, x, y, z, w ) {
-
- index *= this.itemSize;
-
- if ( this.normalized ) {
-
- x = normalize( x, this.array );
- y = normalize( y, this.array );
- z = normalize( z, this.array );
- w = normalize( w, this.array );
-
- }
-
- this.array[ index + 0 ] = x;
- this.array[ index + 1 ] = y;
- this.array[ index + 2 ] = z;
- this.array[ index + 3 ] = w;
-
- return this;
-
- }
-
- onUpload( callback ) {
-
- this.onUploadCallback = callback;
-
- return this;
-
- }
-
- clone() {
-
- return new this.constructor( this.array, this.itemSize ).copy( this );
-
- }
-
- toJSON() {
-
- const data = {
- itemSize: this.itemSize,
- type: this.array.constructor.name,
- array: Array.from( this.array ),
- normalized: this.normalized
- };
-
- if ( this.name !== '' ) data.name = this.name;
- if ( this.usage !== StaticDrawUsage ) data.usage = this.usage;
-
- return data;
-
- }
-
-}
-
-//
-
-class Int8BufferAttribute extends BufferAttribute {
-
- constructor( array, itemSize, normalized ) {
-
- super( new Int8Array( array ), itemSize, normalized );
-
- }
-
-}
-
-class Uint8BufferAttribute extends BufferAttribute {
-
- constructor( array, itemSize, normalized ) {
-
- super( new Uint8Array( array ), itemSize, normalized );
-
- }
-
-}
-
-class Uint8ClampedBufferAttribute extends BufferAttribute {
-
- constructor( array, itemSize, normalized ) {
-
- super( new Uint8ClampedArray( array ), itemSize, normalized );
-
- }
-
-}
-
-class Int16BufferAttribute extends BufferAttribute {
-
- constructor( array, itemSize, normalized ) {
-
- super( new Int16Array( array ), itemSize, normalized );
-
- }
-
-}
-
-class Uint16BufferAttribute extends BufferAttribute {
-
- constructor( array, itemSize, normalized ) {
-
- super( new Uint16Array( array ), itemSize, normalized );
-
- }
-
-}
-
-class Int32BufferAttribute extends BufferAttribute {
-
- constructor( array, itemSize, normalized ) {
-
- super( new Int32Array( array ), itemSize, normalized );
-
- }
-
-}
-
-class Uint32BufferAttribute extends BufferAttribute {
-
- constructor( array, itemSize, normalized ) {
-
- super( new Uint32Array( array ), itemSize, normalized );
-
- }
-
-}
-
-class Float16BufferAttribute extends BufferAttribute {
-
- constructor( array, itemSize, normalized ) {
-
- super( new Uint16Array( array ), itemSize, normalized );
-
- this.isFloat16BufferAttribute = true;
-
- }
-
- getX( index ) {
-
- let x = fromHalfFloat( this.array[ index * this.itemSize ] );
-
- if ( this.normalized ) x = denormalize( x, this.array );
-
- return x;
-
- }
-
- setX( index, x ) {
-
- if ( this.normalized ) x = normalize( x, this.array );
-
- this.array[ index * this.itemSize ] = toHalfFloat( x );
-
- return this;
-
- }
-
- getY( index ) {
-
- let y = fromHalfFloat( this.array[ index * this.itemSize + 1 ] );
-
- if ( this.normalized ) y = denormalize( y, this.array );
-
- return y;
-
- }
-
- setY( index, y ) {
-
- if ( this.normalized ) y = normalize( y, this.array );
-
- this.array[ index * this.itemSize + 1 ] = toHalfFloat( y );
-
- return this;
-
- }
-
- getZ( index ) {
-
- let z = fromHalfFloat( this.array[ index * this.itemSize + 2 ] );
-
- if ( this.normalized ) z = denormalize( z, this.array );
-
- return z;
-
- }
-
- setZ( index, z ) {
-
- if ( this.normalized ) z = normalize( z, this.array );
-
- this.array[ index * this.itemSize + 2 ] = toHalfFloat( z );
-
- return this;
-
- }
-
- getW( index ) {
-
- let w = fromHalfFloat( this.array[ index * this.itemSize + 3 ] );
-
- if ( this.normalized ) w = denormalize( w, this.array );
-
- return w;
-
- }
-
- setW( index, w ) {
-
- if ( this.normalized ) w = normalize( w, this.array );
-
- this.array[ index * this.itemSize + 3 ] = toHalfFloat( w );
-
- return this;
-
- }
-
- setXY( index, x, y ) {
-
- index *= this.itemSize;
-
- if ( this.normalized ) {
-
- x = normalize( x, this.array );
- y = normalize( y, this.array );
-
- }
-
- this.array[ index + 0 ] = toHalfFloat( x );
- this.array[ index + 1 ] = toHalfFloat( y );
-
- return this;
-
- }
-
- setXYZ( index, x, y, z ) {
-
- index *= this.itemSize;
-
- if ( this.normalized ) {
-
- x = normalize( x, this.array );
- y = normalize( y, this.array );
- z = normalize( z, this.array );
-
- }
-
- this.array[ index + 0 ] = toHalfFloat( x );
- this.array[ index + 1 ] = toHalfFloat( y );
- this.array[ index + 2 ] = toHalfFloat( z );
-
- return this;
-
- }
-
- setXYZW( index, x, y, z, w ) {
-
- index *= this.itemSize;
-
- if ( this.normalized ) {
-
- x = normalize( x, this.array );
- y = normalize( y, this.array );
- z = normalize( z, this.array );
- w = normalize( w, this.array );
-
- }
-
- this.array[ index + 0 ] = toHalfFloat( x );
- this.array[ index + 1 ] = toHalfFloat( y );
- this.array[ index + 2 ] = toHalfFloat( z );
- this.array[ index + 3 ] = toHalfFloat( w );
-
- return this;
-
- }
-
-}
-
-
-class Float32BufferAttribute extends BufferAttribute {
-
- constructor( array, itemSize, normalized ) {
-
- super( new Float32Array( array ), itemSize, normalized );
-
- }
-
-}
-
-let _id$2 = 0;
-
-const _m1$2 = /*@__PURE__*/ new Matrix4();
-const _obj = /*@__PURE__*/ new Object3D();
-const _offset = /*@__PURE__*/ new Vector3();
-const _box$2 = /*@__PURE__*/ new Box3();
-const _boxMorphTargets = /*@__PURE__*/ new Box3();
-const _vector$8 = /*@__PURE__*/ new Vector3();
-
-class BufferGeometry extends EventDispatcher {
-
- constructor() {
-
- super();
-
- this.isBufferGeometry = true;
-
- Object.defineProperty( this, 'id', { value: _id$2 ++ } );
-
- this.uuid = generateUUID();
-
- this.name = '';
- this.type = 'BufferGeometry';
-
- this.index = null;
- this.attributes = {};
-
- this.morphAttributes = {};
- this.morphTargetsRelative = false;
-
- this.groups = [];
-
- this.boundingBox = null;
- this.boundingSphere = null;
-
- this.drawRange = { start: 0, count: Infinity };
-
- this.userData = {};
-
- }
-
- getIndex() {
-
- return this.index;
-
- }
-
- setIndex( index ) {
-
- if ( Array.isArray( index ) ) {
-
- this.index = new ( arrayNeedsUint32( index ) ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );
-
- } else {
-
- this.index = index;
-
- }
-
- return this;
-
- }
-
- getAttribute( name ) {
-
- return this.attributes[ name ];
-
- }
-
- setAttribute( name, attribute ) {
-
- this.attributes[ name ] = attribute;
-
- return this;
-
- }
-
- deleteAttribute( name ) {
-
- delete this.attributes[ name ];
-
- return this;
-
- }
-
- hasAttribute( name ) {
-
- return this.attributes[ name ] !== undefined;
-
- }
-
- addGroup( start, count, materialIndex = 0 ) {
-
- this.groups.push( {
-
- start: start,
- count: count,
- materialIndex: materialIndex
-
- } );
-
- }
-
- clearGroups() {
-
- this.groups = [];
-
- }
-
- setDrawRange( start, count ) {
-
- this.drawRange.start = start;
- this.drawRange.count = count;
-
- }
-
- applyMatrix4( matrix ) {
-
- const position = this.attributes.position;
-
- if ( position !== undefined ) {
-
- position.applyMatrix4( matrix );
-
- position.needsUpdate = true;
-
- }
-
- const normal = this.attributes.normal;
-
- if ( normal !== undefined ) {
-
- const normalMatrix = new Matrix3().getNormalMatrix( matrix );
-
- normal.applyNormalMatrix( normalMatrix );
-
- normal.needsUpdate = true;
-
- }
-
- const tangent = this.attributes.tangent;
-
- if ( tangent !== undefined ) {
-
- tangent.transformDirection( matrix );
-
- tangent.needsUpdate = true;
-
- }
-
- if ( this.boundingBox !== null ) {
-
- this.computeBoundingBox();
-
- }
-
- if ( this.boundingSphere !== null ) {
-
- this.computeBoundingSphere();
-
- }
-
- return this;
-
- }
-
- applyQuaternion( q ) {
-
- _m1$2.makeRotationFromQuaternion( q );
-
- this.applyMatrix4( _m1$2 );
-
- return this;
-
- }
-
- rotateX( angle ) {
-
- // rotate geometry around world x-axis
-
- _m1$2.makeRotationX( angle );
-
- this.applyMatrix4( _m1$2 );
-
- return this;
-
- }
-
- rotateY( angle ) {
-
- // rotate geometry around world y-axis
-
- _m1$2.makeRotationY( angle );
-
- this.applyMatrix4( _m1$2 );
-
- return this;
-
- }
-
- rotateZ( angle ) {
-
- // rotate geometry around world z-axis
-
- _m1$2.makeRotationZ( angle );
-
- this.applyMatrix4( _m1$2 );
-
- return this;
-
- }
-
- translate( x, y, z ) {
-
- // translate geometry
-
- _m1$2.makeTranslation( x, y, z );
-
- this.applyMatrix4( _m1$2 );
-
- return this;
-
- }
-
- scale( x, y, z ) {
-
- // scale geometry
-
- _m1$2.makeScale( x, y, z );
-
- this.applyMatrix4( _m1$2 );
-
- return this;
-
- }
-
- lookAt( vector ) {
-
- _obj.lookAt( vector );
-
- _obj.updateMatrix();
-
- this.applyMatrix4( _obj.matrix );
-
- return this;
-
- }
-
- center() {
-
- this.computeBoundingBox();
-
- this.boundingBox.getCenter( _offset ).negate();
-
- this.translate( _offset.x, _offset.y, _offset.z );
-
- return this;
-
- }
-
- setFromPoints( points ) {
-
- const position = [];
-
- for ( let i = 0, l = points.length; i < l; i ++ ) {
-
- const point = points[ i ];
- position.push( point.x, point.y, point.z || 0 );
-
- }
-
- this.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );
-
- return this;
-
- }
-
- computeBoundingBox() {
-
- if ( this.boundingBox === null ) {
-
- this.boundingBox = new Box3();
-
- }
-
- const position = this.attributes.position;
- const morphAttributesPosition = this.morphAttributes.position;
-
- if ( position && position.isGLBufferAttribute ) {
-
- console.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.', this );
-
- this.boundingBox.set(
- new Vector3( - Infinity, - Infinity, - Infinity ),
- new Vector3( + Infinity, + Infinity, + Infinity )
- );
-
- return;
-
- }
-
- if ( position !== undefined ) {
-
- this.boundingBox.setFromBufferAttribute( position );
-
- // process morph attributes if present
-
- if ( morphAttributesPosition ) {
-
- for ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {
-
- const morphAttribute = morphAttributesPosition[ i ];
- _box$2.setFromBufferAttribute( morphAttribute );
-
- if ( this.morphTargetsRelative ) {
-
- _vector$8.addVectors( this.boundingBox.min, _box$2.min );
- this.boundingBox.expandByPoint( _vector$8 );
-
- _vector$8.addVectors( this.boundingBox.max, _box$2.max );
- this.boundingBox.expandByPoint( _vector$8 );
-
- } else {
-
- this.boundingBox.expandByPoint( _box$2.min );
- this.boundingBox.expandByPoint( _box$2.max );
-
- }
-
- }
-
- }
-
- } else {
-
- this.boundingBox.makeEmpty();
-
- }
-
- if ( 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() {
-
- if ( this.boundingSphere === null ) {
-
- this.boundingSphere = new Sphere();
-
- }
-
- const position = this.attributes.position;
- const morphAttributesPosition = this.morphAttributes.position;
-
- if ( position && position.isGLBufferAttribute ) {
-
- console.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.', this );
-
- this.boundingSphere.set( new Vector3(), Infinity );
-
- return;
-
- }
-
- if ( position ) {
-
- // first, find the center of the bounding sphere
-
- const center = this.boundingSphere.center;
-
- _box$2.setFromBufferAttribute( position );
-
- // process morph attributes if present
-
- if ( morphAttributesPosition ) {
-
- for ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {
-
- const morphAttribute = morphAttributesPosition[ i ];
- _boxMorphTargets.setFromBufferAttribute( morphAttribute );
-
- if ( this.morphTargetsRelative ) {
-
- _vector$8.addVectors( _box$2.min, _boxMorphTargets.min );
- _box$2.expandByPoint( _vector$8 );
-
- _vector$8.addVectors( _box$2.max, _boxMorphTargets.max );
- _box$2.expandByPoint( _vector$8 );
-
- } else {
-
- _box$2.expandByPoint( _boxMorphTargets.min );
- _box$2.expandByPoint( _boxMorphTargets.max );
-
- }
-
- }
-
- }
-
- _box$2.getCenter( center );
-
- // second, try to find a boundingSphere with a radius smaller than the
- // boundingSphere of the boundingBox: sqrt(3) smaller in the best case
-
- let maxRadiusSq = 0;
-
- for ( let i = 0, il = position.count; i < il; i ++ ) {
-
- _vector$8.fromBufferAttribute( position, i );
-
- maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );
-
- }
-
- // process morph attributes if present
-
- if ( morphAttributesPosition ) {
-
- for ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {
-
- const morphAttribute = morphAttributesPosition[ i ];
- const morphTargetsRelative = this.morphTargetsRelative;
-
- for ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {
-
- _vector$8.fromBufferAttribute( morphAttribute, j );
-
- if ( morphTargetsRelative ) {
-
- _offset.fromBufferAttribute( position, j );
- _vector$8.add( _offset );
-
- }
-
- maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );
-
- }
-
- }
-
- }
-
- this.boundingSphere.radius = Math.sqrt( maxRadiusSq );
-
- if ( isNaN( this.boundingSphere.radius ) ) {
-
- console.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this );
-
- }
-
- }
-
- }
-
- computeTangents() {
-
- const index = this.index;
- const attributes = this.attributes;
-
- // based on http://www.terathon.com/code/tangent.html
- // (per vertex tangents)
-
- if ( index === null ||
- attributes.position === undefined ||
- attributes.normal === undefined ||
- attributes.uv === undefined ) {
-
- console.error( 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' );
- return;
-
- }
-
- const positionAttribute = attributes.position;
- const normalAttribute = attributes.normal;
- const uvAttribute = attributes.uv;
-
- if ( this.hasAttribute( 'tangent' ) === false ) {
-
- this.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * positionAttribute.count ), 4 ) );
-
- }
-
- const tangentAttribute = this.getAttribute( 'tangent' );
-
- const tan1 = [], tan2 = [];
-
- for ( let i = 0; i < positionAttribute.count; i ++ ) {
-
- tan1[ i ] = new Vector3();
- tan2[ i ] = new Vector3();
-
- }
-
- const vA = new Vector3(),
- vB = new Vector3(),
- vC = new Vector3(),
-
- uvA = new Vector2(),
- uvB = new Vector2(),
- uvC = new Vector2(),
-
- sdir = new Vector3(),
- tdir = new Vector3();
-
- function handleTriangle( a, b, c ) {
-
- vA.fromBufferAttribute( positionAttribute, a );
- vB.fromBufferAttribute( positionAttribute, b );
- vC.fromBufferAttribute( positionAttribute, c );
-
- uvA.fromBufferAttribute( uvAttribute, a );
- uvB.fromBufferAttribute( uvAttribute, b );
- uvC.fromBufferAttribute( uvAttribute, c );
-
- vB.sub( vA );
- vC.sub( vA );
-
- uvB.sub( uvA );
- uvC.sub( uvA );
-
- const r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y );
-
- // silently ignore degenerate uv triangles having coincident or colinear vertices
-
- if ( ! isFinite( r ) ) return;
-
- sdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r );
- tdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r );
-
- tan1[ a ].add( sdir );
- tan1[ b ].add( sdir );
- tan1[ c ].add( sdir );
-
- tan2[ a ].add( tdir );
- tan2[ b ].add( tdir );
- tan2[ c ].add( tdir );
-
- }
-
- let groups = this.groups;
-
- if ( groups.length === 0 ) {
-
- groups = [ {
- start: 0,
- count: index.count
- } ];
-
- }
-
- for ( let i = 0, il = groups.length; i < il; ++ i ) {
-
- const group = groups[ i ];
-
- const start = group.start;
- const count = group.count;
-
- for ( let j = start, jl = start + count; j < jl; j += 3 ) {
-
- handleTriangle(
- index.getX( j + 0 ),
- index.getX( j + 1 ),
- index.getX( j + 2 )
- );
-
- }
-
- }
-
- const tmp = new Vector3(), tmp2 = new Vector3();
- const n = new Vector3(), n2 = new Vector3();
-
- function handleVertex( v ) {
-
- n.fromBufferAttribute( normalAttribute, v );
- n2.copy( n );
-
- const t = tan1[ v ];
-
- // Gram-Schmidt orthogonalize
-
- tmp.copy( t );
- tmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();
-
- // Calculate handedness
-
- tmp2.crossVectors( n2, t );
- const test = tmp2.dot( tan2[ v ] );
- const w = ( test < 0.0 ) ? - 1.0 : 1.0;
-
- tangentAttribute.setXYZW( v, tmp.x, tmp.y, tmp.z, w );
-
- }
-
- for ( let i = 0, il = groups.length; i < il; ++ i ) {
-
- const group = groups[ i ];
-
- const start = group.start;
- const count = group.count;
-
- for ( let j = start, jl = start + count; j < jl; j += 3 ) {
-
- handleVertex( index.getX( j + 0 ) );
- handleVertex( index.getX( j + 1 ) );
- handleVertex( index.getX( j + 2 ) );
-
- }
-
- }
-
- }
-
- computeVertexNormals() {
-
- const index = this.index;
- const positionAttribute = this.getAttribute( 'position' );
-
- if ( positionAttribute !== undefined ) {
-
- let normalAttribute = this.getAttribute( 'normal' );
-
- if ( normalAttribute === undefined ) {
-
- normalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );
- this.setAttribute( 'normal', normalAttribute );
-
- } else {
-
- // reset existing normals to zero
-
- for ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {
-
- normalAttribute.setXYZ( i, 0, 0, 0 );
-
- }
-
- }
-
- const pA = new Vector3(), pB = new Vector3(), pC = new Vector3();
- const nA = new Vector3(), nB = new Vector3(), nC = new Vector3();
- const cb = new Vector3(), ab = new Vector3();
-
- // indexed elements
-
- if ( index ) {
-
- for ( let i = 0, il = index.count; i < il; i += 3 ) {
-
- const vA = index.getX( i + 0 );
- const vB = index.getX( i + 1 );
- const vC = index.getX( i + 2 );
-
- pA.fromBufferAttribute( positionAttribute, vA );
- pB.fromBufferAttribute( positionAttribute, vB );
- pC.fromBufferAttribute( positionAttribute, vC );
-
- cb.subVectors( pC, pB );
- ab.subVectors( pA, pB );
- cb.cross( ab );
-
- nA.fromBufferAttribute( normalAttribute, vA );
- nB.fromBufferAttribute( normalAttribute, vB );
- nC.fromBufferAttribute( normalAttribute, vC );
-
- nA.add( cb );
- nB.add( cb );
- nC.add( cb );
-
- normalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );
- normalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );
- normalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );
-
- }
-
- } else {
-
- // non-indexed elements (unconnected triangle soup)
-
- for ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {
-
- pA.fromBufferAttribute( positionAttribute, i + 0 );
- pB.fromBufferAttribute( positionAttribute, i + 1 );
- pC.fromBufferAttribute( positionAttribute, i + 2 );
-
- cb.subVectors( pC, pB );
- ab.subVectors( pA, pB );
- cb.cross( ab );
-
- normalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );
- normalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );
- normalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );
-
- }
-
- }
-
- this.normalizeNormals();
-
- normalAttribute.needsUpdate = true;
-
- }
-
- }
-
- normalizeNormals() {
-
- const normals = this.attributes.normal;
-
- for ( let i = 0, il = normals.count; i < il; i ++ ) {
-
- _vector$8.fromBufferAttribute( normals, i );
-
- _vector$8.normalize();
-
- normals.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );
-
- }
-
- }
-
- toNonIndexed() {
-
- function convertBufferAttribute( attribute, indices ) {
-
- const array = attribute.array;
- const itemSize = attribute.itemSize;
- const normalized = attribute.normalized;
-
- const array2 = new array.constructor( indices.length * itemSize );
-
- let index = 0, index2 = 0;
-
- for ( let i = 0, l = indices.length; i < l; i ++ ) {
-
- if ( attribute.isInterleavedBufferAttribute ) {
-
- index = indices[ i ] * attribute.data.stride + attribute.offset;
-
- } else {
-
- index = indices[ i ] * itemSize;
-
- }
-
- for ( let j = 0; j < itemSize; j ++ ) {
-
- array2[ index2 ++ ] = array[ index ++ ];
-
- }
-
- }
-
- return new BufferAttribute( array2, itemSize, normalized );
-
- }
-
- //
-
- if ( this.index === null ) {
-
- console.warn( 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.' );
- return this;
-
- }
-
- const geometry2 = new BufferGeometry();
-
- const indices = this.index.array;
- const attributes = this.attributes;
-
- // attributes
-
- for ( const name in attributes ) {
-
- const attribute = attributes[ name ];
-
- const newAttribute = convertBufferAttribute( attribute, indices );
-
- geometry2.setAttribute( name, newAttribute );
-
- }
-
- // morph attributes
-
- const morphAttributes = this.morphAttributes;
-
- for ( const name in morphAttributes ) {
-
- const morphArray = [];
- const morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes
-
- for ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {
-
- const attribute = morphAttribute[ i ];
-
- const newAttribute = convertBufferAttribute( attribute, indices );
-
- morphArray.push( newAttribute );
-
- }
-
- geometry2.morphAttributes[ name ] = morphArray;
-
- }
-
- geometry2.morphTargetsRelative = this.morphTargetsRelative;
-
- // groups
-
- const groups = this.groups;
-
- for ( let i = 0, l = groups.length; i < l; i ++ ) {
-
- const group = groups[ i ];
- geometry2.addGroup( group.start, group.count, group.materialIndex );
-
- }
-
- return geometry2;
-
- }
-
- toJSON() {
-
- const data = {
- metadata: {
- version: 4.6,
- type: 'BufferGeometry',
- generator: 'BufferGeometry.toJSON'
- }
- };
-
- // standard BufferGeometry serialization
-
- data.uuid = this.uuid;
- data.type = this.type;
- if ( this.name !== '' ) data.name = this.name;
- if ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;
-
- if ( this.parameters !== undefined ) {
-
- const parameters = this.parameters;
-
- for ( const key in parameters ) {
-
- if ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];
-
- }
-
- return data;
-
- }
-
- // for simplicity the code assumes attributes are not shared across geometries, see #15811
-
- data.data = { attributes: {} };
-
- const index = this.index;
-
- if ( index !== null ) {
-
- data.data.index = {
- type: index.array.constructor.name,
- array: Array.prototype.slice.call( index.array )
- };
-
- }
-
- const attributes = this.attributes;
-
- for ( const key in attributes ) {
-
- const attribute = attributes[ key ];
-
- data.data.attributes[ key ] = attribute.toJSON( data.data );
-
- }
-
- const morphAttributes = {};
- let hasMorphAttributes = false;
-
- for ( const key in this.morphAttributes ) {
-
- const attributeArray = this.morphAttributes[ key ];
-
- const array = [];
-
- for ( let i = 0, il = attributeArray.length; i < il; i ++ ) {
-
- const attribute = attributeArray[ i ];
-
- array.push( attribute.toJSON( data.data ) );
-
- }
-
- if ( array.length > 0 ) {
-
- morphAttributes[ key ] = array;
-
- hasMorphAttributes = true;
-
- }
-
- }
-
- if ( hasMorphAttributes ) {
-
- data.data.morphAttributes = morphAttributes;
- data.data.morphTargetsRelative = this.morphTargetsRelative;
-
- }
-
- const groups = this.groups;
-
- if ( groups.length > 0 ) {
-
- data.data.groups = JSON.parse( JSON.stringify( groups ) );
-
- }
-
- const boundingSphere = this.boundingSphere;
-
- if ( boundingSphere !== null ) {
-
- data.data.boundingSphere = {
- center: boundingSphere.center.toArray(),
- radius: boundingSphere.radius
- };
-
- }
-
- return data;
-
- }
-
- clone() {
-
- return new this.constructor().copy( this );
-
- }
-
- copy( source ) {
-
- // reset
-
- this.index = null;
- this.attributes = {};
- this.morphAttributes = {};
- this.groups = [];
- this.boundingBox = null;
- this.boundingSphere = null;
-
- // used for storing cloned, shared data
-
- const data = {};
-
- // name
-
- this.name = source.name;
-
- // index
-
- const index = source.index;
-
- if ( index !== null ) {
-
- this.setIndex( index.clone( data ) );
-
- }
-
- // attributes
-
- const attributes = source.attributes;
-
- for ( const name in attributes ) {
-
- const attribute = attributes[ name ];
- this.setAttribute( name, attribute.clone( data ) );
-
- }
-
- // morph attributes
-
- const morphAttributes = source.morphAttributes;
-
- for ( const name in morphAttributes ) {
-
- const array = [];
- const morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes
-
- for ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {
-
- array.push( morphAttribute[ i ].clone( data ) );
-
- }
-
- this.morphAttributes[ name ] = array;
-
- }
-
- this.morphTargetsRelative = source.morphTargetsRelative;
-
- // groups
-
- const groups = source.groups;
-
- for ( let i = 0, l = groups.length; i < l; i ++ ) {
-
- const group = groups[ i ];
- this.addGroup( group.start, group.count, group.materialIndex );
-
- }
-
- // bounding box
-
- const boundingBox = source.boundingBox;
-
- if ( boundingBox !== null ) {
-
- this.boundingBox = boundingBox.clone();
-
- }
-
- // bounding sphere
-
- const boundingSphere = source.boundingSphere;
-
- if ( boundingSphere !== null ) {
-
- this.boundingSphere = boundingSphere.clone();
-
- }
-
- // draw range
-
- this.drawRange.start = source.drawRange.start;
- this.drawRange.count = source.drawRange.count;
-
- // user data
-
- this.userData = source.userData;
-
- return this;
-
- }
-
- dispose() {
-
- this.dispatchEvent( { type: 'dispose' } );
-
- }
-
-}
-
-const _inverseMatrix$3 = /*@__PURE__*/ new Matrix4();
-const _ray$3 = /*@__PURE__*/ new Ray();
-const _sphere$6 = /*@__PURE__*/ new Sphere();
-const _sphereHitAt = /*@__PURE__*/ new Vector3();
-
-const _vA$1 = /*@__PURE__*/ new Vector3();
-const _vB$1 = /*@__PURE__*/ new Vector3();
-const _vC$1 = /*@__PURE__*/ new Vector3();
-
-const _tempA = /*@__PURE__*/ new Vector3();
-const _morphA = /*@__PURE__*/ new Vector3();
-
-const _uvA$1 = /*@__PURE__*/ new Vector2();
-const _uvB$1 = /*@__PURE__*/ new Vector2();
-const _uvC$1 = /*@__PURE__*/ new Vector2();
-
-const _normalA = /*@__PURE__*/ new Vector3();
-const _normalB = /*@__PURE__*/ new Vector3();
-const _normalC = /*@__PURE__*/ new Vector3();
-
-const _intersectionPoint = /*@__PURE__*/ new Vector3();
-const _intersectionPointWorld = /*@__PURE__*/ new Vector3();
-
-class Mesh extends Object3D {
-
- constructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {
-
- super();
-
- this.isMesh = true;
-
- this.type = 'Mesh';
-
- this.geometry = geometry;
- this.material = material;
-
- this.updateMorphTargets();
-
- }
-
- copy( source, recursive ) {
-
- super.copy( source, recursive );
-
- if ( source.morphTargetInfluences !== undefined ) {
-
- this.morphTargetInfluences = source.morphTargetInfluences.slice();
-
- }
-
- if ( source.morphTargetDictionary !== undefined ) {
-
- this.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );
-
- }
-
- this.material = Array.isArray( source.material ) ? source.material.slice() : source.material;
- this.geometry = source.geometry;
-
- return this;
-
- }
-
- updateMorphTargets() {
-
- const geometry = this.geometry;
-
- const morphAttributes = geometry.morphAttributes;
- const keys = Object.keys( morphAttributes );
-
- if ( keys.length > 0 ) {
-
- const morphAttribute = morphAttributes[ keys[ 0 ] ];
-
- if ( morphAttribute !== undefined ) {
-
- this.morphTargetInfluences = [];
- this.morphTargetDictionary = {};
-
- for ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {
-
- const name = morphAttribute[ m ].name || String( m );
-
- this.morphTargetInfluences.push( 0 );
- this.morphTargetDictionary[ name ] = m;
-
- }
-
- }
-
- }
-
- }
-
- getVertexPosition( index, target ) {
-
- const geometry = this.geometry;
- const position = geometry.attributes.position;
- const morphPosition = geometry.morphAttributes.position;
- const morphTargetsRelative = geometry.morphTargetsRelative;
-
- target.fromBufferAttribute( position, index );
-
- const morphInfluences = this.morphTargetInfluences;
-
- if ( morphPosition && morphInfluences ) {
-
- _morphA.set( 0, 0, 0 );
-
- for ( let i = 0, il = morphPosition.length; i < il; i ++ ) {
-
- const influence = morphInfluences[ i ];
- const morphAttribute = morphPosition[ i ];
-
- if ( influence === 0 ) continue;
-
- _tempA.fromBufferAttribute( morphAttribute, index );
-
- if ( morphTargetsRelative ) {
-
- _morphA.addScaledVector( _tempA, influence );
-
- } else {
-
- _morphA.addScaledVector( _tempA.sub( target ), influence );
-
- }
-
- }
-
- target.add( _morphA );
-
- }
-
- return target;
-
- }
-
- raycast( raycaster, intersects ) {
-
- const geometry = this.geometry;
- const material = this.material;
- const matrixWorld = this.matrixWorld;
-
- if ( material === undefined ) return;
-
- // test with bounding sphere in world space
-
- if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();
-
- _sphere$6.copy( geometry.boundingSphere );
- _sphere$6.applyMatrix4( matrixWorld );
-
- // check distance from ray origin to bounding sphere
-
- _ray$3.copy( raycaster.ray ).recast( raycaster.near );
-
- if ( _sphere$6.containsPoint( _ray$3.origin ) === false ) {
-
- if ( _ray$3.intersectSphere( _sphere$6, _sphereHitAt ) === null ) return;
-
- if ( _ray$3.origin.distanceToSquared( _sphereHitAt ) > ( raycaster.far - raycaster.near ) ** 2 ) return;
-
- }
-
- // convert ray to local space of mesh
-
- _inverseMatrix$3.copy( matrixWorld ).invert();
- _ray$3.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$3 );
-
- // test with bounding box in local space
-
- if ( geometry.boundingBox !== null ) {
-
- if ( _ray$3.intersectsBox( geometry.boundingBox ) === false ) return;
-
- }
-
- // test for intersections with geometry
-
- this._computeIntersections( raycaster, intersects, _ray$3 );
-
- }
-
- _computeIntersections( raycaster, intersects, rayLocalSpace ) {
-
- let intersection;
-
- const geometry = this.geometry;
- const material = this.material;
-
- const index = geometry.index;
- const position = geometry.attributes.position;
- const uv = geometry.attributes.uv;
- const uv1 = geometry.attributes.uv1;
- const normal = geometry.attributes.normal;
- const groups = geometry.groups;
- const drawRange = geometry.drawRange;
-
- if ( index !== null ) {
-
- // indexed buffer geometry
-
- if ( Array.isArray( material ) ) {
-
- for ( let i = 0, il = groups.length; i < il; i ++ ) {
-
- const group = groups[ i ];
- const groupMaterial = material[ group.materialIndex ];
-
- const start = Math.max( group.start, drawRange.start );
- const end = Math.min( index.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );
-
- for ( let j = start, jl = end; j < jl; j += 3 ) {
-
- const a = index.getX( j );
- const b = index.getX( j + 1 );
- const c = index.getX( j + 2 );
-
- intersection = checkGeometryIntersection( this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );
-
- if ( intersection ) {
-
- intersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics
- intersection.face.materialIndex = group.materialIndex;
- intersects.push( intersection );
-
- }
-
- }
-
- }
-
- } else {
-
- const start = Math.max( 0, drawRange.start );
- const end = Math.min( index.count, ( drawRange.start + drawRange.count ) );
-
- for ( let i = start, il = end; i < il; i += 3 ) {
-
- const a = index.getX( i );
- const b = index.getX( i + 1 );
- const c = index.getX( i + 2 );
-
- intersection = checkGeometryIntersection( this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );
-
- if ( intersection ) {
-
- intersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics
- intersects.push( intersection );
-
- }
-
- }
-
- }
-
- } else if ( position !== undefined ) {
-
- // non-indexed buffer geometry
-
- if ( Array.isArray( material ) ) {
-
- for ( let i = 0, il = groups.length; i < il; i ++ ) {
-
- const group = groups[ i ];
- const groupMaterial = material[ group.materialIndex ];
-
- const start = Math.max( group.start, drawRange.start );
- const end = Math.min( position.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );
-
- for ( let j = start, jl = end; j < jl; j += 3 ) {
-
- const a = j;
- const b = j + 1;
- const c = j + 2;
-
- intersection = checkGeometryIntersection( this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );
-
- if ( intersection ) {
-
- intersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics
- intersection.face.materialIndex = group.materialIndex;
- intersects.push( intersection );
-
- }
-
- }
-
- }
-
- } else {
-
- const start = Math.max( 0, drawRange.start );
- const end = Math.min( position.count, ( drawRange.start + drawRange.count ) );
-
- for ( let i = start, il = end; i < il; i += 3 ) {
-
- const a = i;
- const b = i + 1;
- const c = i + 2;
-
- intersection = checkGeometryIntersection( this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );
-
- if ( intersection ) {
-
- intersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics
- intersects.push( intersection );
-
- }
-
- }
-
- }
-
- }
-
- }
-
-}
-
-function checkIntersection$1( object, material, raycaster, ray, pA, pB, pC, point ) {
-
- let intersect;
-
- if ( material.side === BackSide ) {
-
- intersect = ray.intersectTriangle( pC, pB, pA, true, point );
-
- } else {
-
- intersect = ray.intersectTriangle( pA, pB, pC, ( material.side === FrontSide ), point );
-
- }
-
- if ( intersect === null ) return null;
-
- _intersectionPointWorld.copy( point );
- _intersectionPointWorld.applyMatrix4( object.matrixWorld );
-
- const distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );
-
- if ( distance < raycaster.near || distance > raycaster.far ) return null;
-
- return {
- distance: distance,
- point: _intersectionPointWorld.clone(),
- object: object
- };
-
-}
-
-function checkGeometryIntersection( object, material, raycaster, ray, uv, uv1, normal, a, b, c ) {
-
- object.getVertexPosition( a, _vA$1 );
- object.getVertexPosition( b, _vB$1 );
- object.getVertexPosition( c, _vC$1 );
-
- const intersection = checkIntersection$1( object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint );
-
- if ( intersection ) {
-
- if ( uv ) {
-
- _uvA$1.fromBufferAttribute( uv, a );
- _uvB$1.fromBufferAttribute( uv, b );
- _uvC$1.fromBufferAttribute( uv, c );
-
- intersection.uv = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );
-
- }
-
- if ( uv1 ) {
-
- _uvA$1.fromBufferAttribute( uv1, a );
- _uvB$1.fromBufferAttribute( uv1, b );
- _uvC$1.fromBufferAttribute( uv1, c );
-
- intersection.uv1 = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );
-
- }
-
- if ( normal ) {
-
- _normalA.fromBufferAttribute( normal, a );
- _normalB.fromBufferAttribute( normal, b );
- _normalC.fromBufferAttribute( normal, c );
-
- intersection.normal = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _normalA, _normalB, _normalC, new Vector3() );
-
- if ( intersection.normal.dot( ray.direction ) > 0 ) {
-
- intersection.normal.multiplyScalar( - 1 );
-
- }
-
- }
-
- const face = {
- a: a,
- b: b,
- c: c,
- normal: new Vector3(),
- materialIndex: 0
- };
-
- Triangle.getNormal( _vA$1, _vB$1, _vC$1, face.normal );
-
- intersection.face = face;
-
- }
-
- return intersection;
-
-}
-
-class BoxGeometry extends BufferGeometry {
-
- constructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {
-
- super();
-
- this.type = 'BoxGeometry';
-
- this.parameters = {
- width: width,
- height: height,
- depth: depth,
- widthSegments: widthSegments,
- heightSegments: heightSegments,
- depthSegments: depthSegments
- };
-
- const scope = this;
-
- // segments
-
- widthSegments = Math.floor( widthSegments );
- heightSegments = Math.floor( heightSegments );
- depthSegments = Math.floor( depthSegments );
-
- // buffers
-
- const indices = [];
- const vertices = [];
- const normals = [];
- const uvs = [];
-
- // helper variables
-
- let numberOfVertices = 0;
- let groupStart = 0;
-
- // build each side of the box geometry
-
- buildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px
- buildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx
- buildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py
- buildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny
- buildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz
- buildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz
-
- // build geometry
-
- this.setIndex( indices );
- this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
- this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
- this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
-
- function buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {
-
- const segmentWidth = width / gridX;
- const segmentHeight = height / gridY;
-
- const widthHalf = width / 2;
- const heightHalf = height / 2;
- const depthHalf = depth / 2;
-
- const gridX1 = gridX + 1;
- const gridY1 = gridY + 1;
-
- let vertexCounter = 0;
- let groupCount = 0;
-
- const vector = new Vector3();
-
- // generate vertices, normals and uvs
-
- for ( let iy = 0; iy < gridY1; iy ++ ) {
-
- const y = iy * segmentHeight - heightHalf;
-
- for ( let ix = 0; ix < gridX1; ix ++ ) {
-
- const x = ix * segmentWidth - widthHalf;
-
- // set values to correct vector component
-
- vector[ u ] = x * udir;
- vector[ v ] = y * vdir;
- vector[ w ] = depthHalf;
-
- // now apply vector to vertex buffer
-
- vertices.push( vector.x, vector.y, vector.z );
-
- // set values to correct vector component
-
- vector[ u ] = 0;
- vector[ v ] = 0;
- vector[ w ] = depth > 0 ? 1 : - 1;
-
- // now apply vector to normal buffer
-
- normals.push( vector.x, vector.y, vector.z );
-
- // uvs
-
- uvs.push( ix / gridX );
- uvs.push( 1 - ( iy / gridY ) );
-
- // counters
-
- vertexCounter += 1;
-
- }
-
- }
-
- // indices
-
- // 1. you need three indices to draw a single face
- // 2. a single segment consists of two faces
- // 3. so we need to generate six (2*3) indices per segment
-
- for ( let iy = 0; iy < gridY; iy ++ ) {
-
- for ( let ix = 0; ix < gridX; ix ++ ) {
-
- const a = numberOfVertices + ix + gridX1 * iy;
- const b = numberOfVertices + ix + gridX1 * ( iy + 1 );
- const c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );
- const d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;
-
- // faces
-
- indices.push( a, b, d );
- indices.push( b, c, d );
-
- // increase counter
-
- groupCount += 6;
-
- }
-
- }
-
- // add a group to the geometry. this will ensure multi material support
-
- scope.addGroup( groupStart, groupCount, materialIndex );
-
- // calculate new start value for groups
-
- groupStart += groupCount;
-
- // update total number of vertices
-
- numberOfVertices += vertexCounter;
-
- }
-
- }
-
- copy( source ) {
-
- super.copy( source );
-
- this.parameters = Object.assign( {}, source.parameters );
-
- return this;
-
- }
-
- static fromJSON( data ) {
-
- return new BoxGeometry( data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments );
-
- }
-
-}
-
-/**
- * Uniform Utilities
- */
-
-function cloneUniforms( src ) {
-
- const dst = {};
-
- for ( const u in src ) {
-
- dst[ u ] = {};
-
- for ( const p in src[ u ] ) {
-
- const property = src[ u ][ p ];
-
- if ( property && ( property.isColor ||
- property.isMatrix3 || property.isMatrix4 ||
- property.isVector2 || property.isVector3 || property.isVector4 ||
- property.isTexture || property.isQuaternion ) ) {
-
- if ( property.isRenderTargetTexture ) {
-
- console.warn( 'UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms().' );
- dst[ u ][ p ] = null;
-
- } else {
-
- dst[ u ][ p ] = property.clone();
-
- }
-
- } else if ( Array.isArray( property ) ) {
-
- dst[ u ][ p ] = property.slice();
-
- } else {
-
- dst[ u ][ p ] = property;
-
- }
-
- }
-
- }
-
- return dst;
-
-}
-
-function mergeUniforms( uniforms ) {
-
- const merged = {};
-
- for ( let u = 0; u < uniforms.length; u ++ ) {
-
- const tmp = cloneUniforms( uniforms[ u ] );
-
- for ( const p in tmp ) {
-
- merged[ p ] = tmp[ p ];
-
- }
-
- }
-
- return merged;
-
-}
-
-function cloneUniformsGroups( src ) {
-
- const dst = [];
-
- for ( let u = 0; u < src.length; u ++ ) {
-
- dst.push( src[ u ].clone() );
-
- }
-
- return dst;
-
-}
-
-function getUnlitUniformColorSpace( renderer ) {
-
- const currentRenderTarget = renderer.getRenderTarget();
-
- if ( currentRenderTarget === null ) {
-
- // https://github.com/mrdoob/three.js/pull/23937#issuecomment-1111067398
- return renderer.outputColorSpace;
-
- }
-
- // https://github.com/mrdoob/three.js/issues/27868
- if ( currentRenderTarget.isXRRenderTarget === true ) {
-
- return currentRenderTarget.texture.colorSpace;
-
- }
-
- return ColorManagement.workingColorSpace;
-
-}
-
-// Legacy
-
-const UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };
-
-var default_vertex = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}";
-
-var default_fragment = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}";
-
-class ShaderMaterial extends Material {
-
- constructor( parameters ) {
-
- super();
-
- this.isShaderMaterial = true;
-
- this.type = 'ShaderMaterial';
-
- this.defines = {};
- this.uniforms = {};
- this.uniformsGroups = [];
-
- this.vertexShader = default_vertex;
- this.fragmentShader = default_fragment;
-
- this.linewidth = 1;
-
- this.wireframe = false;
- this.wireframeLinewidth = 1;
-
- this.fog = false; // set to use scene fog
- this.lights = false; // set to use scene lights
- this.clipping = false; // set to use user-defined clipping planes
-
- this.forceSinglePass = true;
-
- this.extensions = {
- clipCullDistance: false, // set to use vertex shader clipping
- multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
- };
-
- // When rendered geometry doesn't include these attributes but the material does,
- // use these default values in WebGL. This avoids errors when buffer data is missing.
- this.defaultAttributeValues = {
- 'color': [ 1, 1, 1 ],
- 'uv': [ 0, 0 ],
- 'uv1': [ 0, 0 ]
- };
-
- this.index0AttributeName = undefined;
- this.uniformsNeedUpdate = false;
-
- this.glslVersion = null;
-
- if ( parameters !== undefined ) {
-
- this.setValues( parameters );
-
- }
-
- }
-
- copy( source ) {
-
- super.copy( source );
-
- this.fragmentShader = source.fragmentShader;
- this.vertexShader = source.vertexShader;
-
- this.uniforms = cloneUniforms( source.uniforms );
- this.uniformsGroups = cloneUniformsGroups( source.uniformsGroups );
-
- this.defines = Object.assign( {}, source.defines );
-
- this.wireframe = source.wireframe;
- this.wireframeLinewidth = source.wireframeLinewidth;
-
- this.fog = source.fog;
- this.lights = source.lights;
- this.clipping = source.clipping;
-
- this.extensions = Object.assign( {}, source.extensions );
-
- this.glslVersion = source.glslVersion;
-
- return this;
-
- }
-
- toJSON( meta ) {
-
- const data = super.toJSON( meta );
-
- data.glslVersion = this.glslVersion;
- data.uniforms = {};
-
- for ( const name in this.uniforms ) {
-
- const uniform = this.uniforms[ name ];
- const value = uniform.value;
-
- if ( value && value.isTexture ) {
-
- data.uniforms[ name ] = {
- type: 't',
- value: value.toJSON( meta ).uuid
- };
-
- } else if ( value && value.isColor ) {
-
- data.uniforms[ name ] = {
- type: 'c',
- value: value.getHex()
- };
-
- } else if ( value && value.isVector2 ) {
-
- data.uniforms[ name ] = {
- type: 'v2',
- value: value.toArray()
- };
-
- } else if ( value && value.isVector3 ) {
-
- data.uniforms[ name ] = {
- type: 'v3',
- value: value.toArray()
- };
-
- } else if ( value && value.isVector4 ) {
-
- data.uniforms[ name ] = {
- type: 'v4',
- value: value.toArray()
- };
-
- } else if ( value && value.isMatrix3 ) {
-
- data.uniforms[ name ] = {
- type: 'm3',
- value: value.toArray()
- };
-
- } else if ( value && value.isMatrix4 ) {
-
- data.uniforms[ name ] = {
- type: 'm4',
- value: value.toArray()
- };
-
- } else {
-
- data.uniforms[ name ] = {
- value: value
- };
-
- // note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far
-
- }
-
- }
-
- if ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;
-
- data.vertexShader = this.vertexShader;
- data.fragmentShader = this.fragmentShader;
-
- data.lights = this.lights;
- data.clipping = this.clipping;
-
- const extensions = {};
-
- for ( const key in this.extensions ) {
-
- if ( this.extensions[ key ] === true ) extensions[ key ] = true;
-
- }
-
- if ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;
-
- return data;
-
- }
-
-}
-
-class Camera extends Object3D {
-
- constructor() {
-
- super();
-
- this.isCamera = true;
-
- this.type = 'Camera';
-
- this.matrixWorldInverse = new Matrix4();
-
- this.projectionMatrix = new Matrix4();
- this.projectionMatrixInverse = new Matrix4();
-
- this.coordinateSystem = WebGLCoordinateSystem;
-
- }
-
- copy( source, recursive ) {
-
- super.copy( source, recursive );
-
- this.matrixWorldInverse.copy( source.matrixWorldInverse );
-
- this.projectionMatrix.copy( source.projectionMatrix );
- this.projectionMatrixInverse.copy( source.projectionMatrixInverse );
-
- this.coordinateSystem = source.coordinateSystem;
-
- return this;
-
- }
-
- getWorldDirection( target ) {
-
- return super.getWorldDirection( target ).negate();
-
- }
-
- updateMatrixWorld( force ) {
-
- super.updateMatrixWorld( force );
-
- this.matrixWorldInverse.copy( this.matrixWorld ).invert();
-
- }
-
- updateWorldMatrix( updateParents, updateChildren ) {
-
- super.updateWorldMatrix( updateParents, updateChildren );
-
- this.matrixWorldInverse.copy( this.matrixWorld ).invert();
-
- }
-
- clone() {
-
- return new this.constructor().copy( this );
-
- }
-
-}
-
-const _v3$1 = /*@__PURE__*/ new Vector3();
-const _minTarget = /*@__PURE__*/ new Vector2();
-const _maxTarget = /*@__PURE__*/ new Vector2();
-
-
-class PerspectiveCamera extends Camera {
-
- constructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {
-
- super();
-
- this.isPerspectiveCamera = true;
-
- this.type = 'PerspectiveCamera';
-
- this.fov = fov;
- this.zoom = 1;
-
- this.near = near;
- this.far = far;
- this.focus = 10;
-
- this.aspect = aspect;
- this.view = null;
-
- this.filmGauge = 35; // width of the film (default in millimeters)
- this.filmOffset = 0; // horizontal film offset (same unit as gauge)
-
- this.updateProjectionMatrix();
-
- }
-
- copy( source, recursive ) {
-
- super.copy( source, recursive );
-
- this.fov = source.fov;
- this.zoom = source.zoom;
-
- this.near = source.near;
- this.far = source.far;
- this.focus = source.focus;
-
- this.aspect = source.aspect;
- this.view = source.view === null ? null : Object.assign( {}, source.view );
-
- this.filmGauge = source.filmGauge;
- this.filmOffset = source.filmOffset;
-
- return this;
-
- }
-
- /**
- * Sets the FOV by focal length in respect to the current .filmGauge.
- *
- * The default film gauge is 35, so that the focal length can be specified for
- * a 35mm (full frame) camera.
- *
- * Values for focal length and film gauge must have the same unit.
- */
- setFocalLength( focalLength ) {
-
- /** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */
- const vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;
-
- this.fov = RAD2DEG * 2 * Math.atan( vExtentSlope );
- this.updateProjectionMatrix();
-
- }
-
- /**
- * Calculates the focal length from the current .fov and .filmGauge.
- */
- getFocalLength() {
-
- const vExtentSlope = Math.tan( DEG2RAD * 0.5 * this.fov );
-
- return 0.5 * this.getFilmHeight() / vExtentSlope;
-
- }
-
- getEffectiveFOV() {
-
- return RAD2DEG * 2 * Math.atan(
- Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom );
-
- }
-
- getFilmWidth() {
-
- // film not completely covered in portrait format (aspect < 1)
- return this.filmGauge * Math.min( this.aspect, 1 );
-
- }
-
- getFilmHeight() {
-
- // film not completely covered in landscape format (aspect > 1)
- return this.filmGauge / Math.max( this.aspect, 1 );
-
- }
-
- /**
- * Computes the 2D bounds of the camera's viewable rectangle at a given distance along the viewing direction.
- * Sets minTarget and maxTarget to the coordinates of the lower-left and upper-right corners of the view rectangle.
- */
- getViewBounds( distance, minTarget, maxTarget ) {
-
- _v3$1.set( - 1, - 1, 0.5 ).applyMatrix4( this.projectionMatrixInverse );
-
- minTarget.set( _v3$1.x, _v3$1.y ).multiplyScalar( - distance / _v3$1.z );
-
- _v3$1.set( 1, 1, 0.5 ).applyMatrix4( this.projectionMatrixInverse );
-
- maxTarget.set( _v3$1.x, _v3$1.y ).multiplyScalar( - distance / _v3$1.z );
-
- }
-
- /**
- * Computes the width and height of the camera's viewable rectangle at a given distance along the viewing direction.
- * Copies the result into the target Vector2, where x is width and y is height.
- */
- getViewSize( distance, target ) {
-
- this.getViewBounds( distance, _minTarget, _maxTarget );
-
- return target.subVectors( _maxTarget, _minTarget );
-
- }
-
- /**
- * Sets an offset in a larger frustum. This is useful for multi-window or
- * multi-monitor/multi-machine setups.
- *
- * For example, if you have 3x2 monitors and each monitor is 1920x1080 and
- * the monitors are in grid like this
- *
- * +---+---+---+
- * | A | B | C |
- * +---+---+---+
- * | D | E | F |
- * +---+---+---+
- *
- * then for each monitor you would call it like this
- *
- * const w = 1920;
- * const h = 1080;
- * const fullWidth = w * 3;
- * const fullHeight = h * 2;
- *
- * --A--
- * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );
- * --B--
- * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );
- * --C--
- * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );
- * --D--
- * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );
- * --E--
- * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );
- * --F--
- * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );
- *
- * Note there is no reason monitors have to be the same size or in a grid.
- */
- setViewOffset( fullWidth, fullHeight, x, y, width, height ) {
-
- this.aspect = fullWidth / fullHeight;
-
- if ( this.view === null ) {
-
- this.view = {
- enabled: true,
- fullWidth: 1,
- fullHeight: 1,
- offsetX: 0,
- offsetY: 0,
- width: 1,
- height: 1
- };
-
- }
-
- this.view.enabled = true;
- this.view.fullWidth = fullWidth;
- this.view.fullHeight = fullHeight;
- this.view.offsetX = x;
- this.view.offsetY = y;
- this.view.width = width;
- this.view.height = height;
-
- this.updateProjectionMatrix();
-
- }
-
- clearViewOffset() {
-
- if ( this.view !== null ) {
-
- this.view.enabled = false;
-
- }
-
- this.updateProjectionMatrix();
-
- }
-
- updateProjectionMatrix() {
-
- const near = this.near;
- let top = near * Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom;
- let height = 2 * top;
- let width = this.aspect * height;
- let left = - 0.5 * width;
- const view = this.view;
-
- if ( this.view !== null && this.view.enabled ) {
-
- const fullWidth = view.fullWidth,
- fullHeight = view.fullHeight;
-
- left += view.offsetX * width / fullWidth;
- top -= view.offsetY * height / fullHeight;
- width *= view.width / fullWidth;
- height *= view.height / fullHeight;
-
- }
-
- const skew = this.filmOffset;
- if ( skew !== 0 ) left += near * skew / this.getFilmWidth();
-
- this.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far, this.coordinateSystem );
-
- this.projectionMatrixInverse.copy( this.projectionMatrix ).invert();
-
- }
-
- toJSON( meta ) {
-
- const data = super.toJSON( meta );
-
- data.object.fov = this.fov;
- data.object.zoom = this.zoom;
-
- data.object.near = this.near;
- data.object.far = this.far;
- data.object.focus = this.focus;
-
- data.object.aspect = this.aspect;
-
- if ( this.view !== null ) data.object.view = Object.assign( {}, this.view );
-
- data.object.filmGauge = this.filmGauge;
- data.object.filmOffset = this.filmOffset;
-
- return data;
-
- }
-
-}
-
-const fov = - 90; // negative fov is not an error
-const aspect = 1;
-
-class CubeCamera extends Object3D {
-
- constructor( near, far, renderTarget ) {
-
- super();
-
- this.type = 'CubeCamera';
-
- this.renderTarget = renderTarget;
- this.coordinateSystem = null;
- this.activeMipmapLevel = 0;
-
- const cameraPX = new PerspectiveCamera( fov, aspect, near, far );
- cameraPX.layers = this.layers;
- this.add( cameraPX );
-
- const cameraNX = new PerspectiveCamera( fov, aspect, near, far );
- cameraNX.layers = this.layers;
- this.add( cameraNX );
-
- const cameraPY = new PerspectiveCamera( fov, aspect, near, far );
- cameraPY.layers = this.layers;
- this.add( cameraPY );
-
- const cameraNY = new PerspectiveCamera( fov, aspect, near, far );
- cameraNY.layers = this.layers;
- this.add( cameraNY );
-
- const cameraPZ = new PerspectiveCamera( fov, aspect, near, far );
- cameraPZ.layers = this.layers;
- this.add( cameraPZ );
-
- const cameraNZ = new PerspectiveCamera( fov, aspect, near, far );
- cameraNZ.layers = this.layers;
- this.add( cameraNZ );
-
- }
-
- updateCoordinateSystem() {
-
- const coordinateSystem = this.coordinateSystem;
-
- const cameras = this.children.concat();
-
- const [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = cameras;
-
- for ( const camera of cameras ) this.remove( camera );
-
- if ( coordinateSystem === WebGLCoordinateSystem ) {
-
- cameraPX.up.set( 0, 1, 0 );
- cameraPX.lookAt( 1, 0, 0 );
-
- cameraNX.up.set( 0, 1, 0 );
- cameraNX.lookAt( - 1, 0, 0 );
-
- cameraPY.up.set( 0, 0, - 1 );
- cameraPY.lookAt( 0, 1, 0 );
-
- cameraNY.up.set( 0, 0, 1 );
- cameraNY.lookAt( 0, - 1, 0 );
-
- cameraPZ.up.set( 0, 1, 0 );
- cameraPZ.lookAt( 0, 0, 1 );
-
- cameraNZ.up.set( 0, 1, 0 );
- cameraNZ.lookAt( 0, 0, - 1 );
-
- } else if ( coordinateSystem === WebGPUCoordinateSystem ) {
-
- cameraPX.up.set( 0, - 1, 0 );
- cameraPX.lookAt( - 1, 0, 0 );
-
- cameraNX.up.set( 0, - 1, 0 );
- cameraNX.lookAt( 1, 0, 0 );
-
- cameraPY.up.set( 0, 0, 1 );
- cameraPY.lookAt( 0, 1, 0 );
-
- cameraNY.up.set( 0, 0, - 1 );
- cameraNY.lookAt( 0, - 1, 0 );
-
- cameraPZ.up.set( 0, - 1, 0 );
- cameraPZ.lookAt( 0, 0, 1 );
-
- cameraNZ.up.set( 0, - 1, 0 );
- cameraNZ.lookAt( 0, 0, - 1 );
-
- } else {
-
- throw new Error( 'THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: ' + coordinateSystem );
-
- }
-
- for ( const camera of cameras ) {
-
- this.add( camera );
-
- camera.updateMatrixWorld();
-
- }
-
- }
-
- update( renderer, scene ) {
-
- if ( this.parent === null ) this.updateMatrixWorld();
-
- const { renderTarget, activeMipmapLevel } = this;
-
- if ( this.coordinateSystem !== renderer.coordinateSystem ) {
-
- this.coordinateSystem = renderer.coordinateSystem;
-
- this.updateCoordinateSystem();
-
- }
-
- const [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;
-
- const currentRenderTarget = renderer.getRenderTarget();
- const currentActiveCubeFace = renderer.getActiveCubeFace();
- const currentActiveMipmapLevel = renderer.getActiveMipmapLevel();
-
- const currentXrEnabled = renderer.xr.enabled;
-
- renderer.xr.enabled = false;
-
- const generateMipmaps = renderTarget.texture.generateMipmaps;
-
- renderTarget.texture.generateMipmaps = false;
-
- renderer.setRenderTarget( renderTarget, 0, activeMipmapLevel );
- renderer.render( scene, cameraPX );
-
- renderer.setRenderTarget( renderTarget, 1, activeMipmapLevel );
- renderer.render( scene, cameraNX );
-
- renderer.setRenderTarget( renderTarget, 2, activeMipmapLevel );
- renderer.render( scene, cameraPY );
-
- renderer.setRenderTarget( renderTarget, 3, activeMipmapLevel );
- renderer.render( scene, cameraNY );
-
- renderer.setRenderTarget( renderTarget, 4, activeMipmapLevel );
- renderer.render( scene, cameraPZ );
-
- // mipmaps are generated during the last call of render()
- // at this point, all sides of the cube render target are defined
-
- renderTarget.texture.generateMipmaps = generateMipmaps;
-
- renderer.setRenderTarget( renderTarget, 5, activeMipmapLevel );
- renderer.render( scene, cameraNZ );
-
- renderer.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel );
-
- renderer.xr.enabled = currentXrEnabled;
-
- renderTarget.texture.needsPMREMUpdate = true;
-
- }
-
-}
-
-class CubeTexture extends Texture {
-
- constructor( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace ) {
-
- images = images !== undefined ? images : [];
- mapping = mapping !== undefined ? mapping : CubeReflectionMapping;
-
- super( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );
-
- this.isCubeTexture = true;
-
- this.flipY = false;
-
- }
-
- get images() {
-
- return this.image;
-
- }
-
- set images( value ) {
-
- this.image = value;
-
- }
-
-}
-
-class WebGLCubeRenderTarget extends WebGLRenderTarget {
-
- constructor( size = 1, options = {} ) {
-
- super( size, size, options );
-
- this.isWebGLCubeRenderTarget = true;
-
- const image = { width: size, height: size, depth: 1 };
- const images = [ image, image, image, image, image, image ];
-
- this.texture = new CubeTexture( images, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace );
-
- // By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)
- // in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,
- // in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.
-
- // three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped
- // and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture
- // as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).
-
- this.texture.isRenderTargetTexture = true;
-
- this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;
- this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;
-
- }
-
- fromEquirectangularTexture( renderer, texture ) {
-
- this.texture.type = texture.type;
- this.texture.colorSpace = texture.colorSpace;
-
- this.texture.generateMipmaps = texture.generateMipmaps;
- this.texture.minFilter = texture.minFilter;
- this.texture.magFilter = texture.magFilter;
-
- const shader = {
-
- uniforms: {
- tEquirect: { value: null },
- },
-
- vertexShader: /* glsl */`
-
- varying vec3 vWorldDirection;
-
- vec3 transformDirection( in vec3 dir, in mat4 matrix ) {
-
- return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );
-
- }
-
- void main() {
-
- vWorldDirection = transformDirection( position, modelMatrix );
-
- #include
- #include
-
- }
- `,
-
- fragmentShader: /* glsl */`
-
- uniform sampler2D tEquirect;
-
- varying vec3 vWorldDirection;
-
- #include
-
- void main() {
-
- vec3 direction = normalize( vWorldDirection );
-
- vec2 sampleUV = equirectUv( direction );
-
- gl_FragColor = texture2D( tEquirect, sampleUV );
-
- }
- `
- };
-
- const geometry = new BoxGeometry( 5, 5, 5 );
-
- const material = new ShaderMaterial( {
-
- name: 'CubemapFromEquirect',
-
- uniforms: cloneUniforms( shader.uniforms ),
- vertexShader: shader.vertexShader,
- fragmentShader: shader.fragmentShader,
- side: BackSide,
- blending: NoBlending
-
- } );
-
- material.uniforms.tEquirect.value = texture;
-
- const mesh = new Mesh( geometry, material );
-
- const currentMinFilter = texture.minFilter;
-
- // Avoid blurred poles
- if ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;
-
- const camera = new CubeCamera( 1, 10, this );
- camera.update( renderer, mesh );
-
- texture.minFilter = currentMinFilter;
-
- mesh.geometry.dispose();
- mesh.material.dispose();
-
- return this;
-
- }
-
- clear( renderer, color, depth, stencil ) {
-
- const currentRenderTarget = renderer.getRenderTarget();
-
- for ( let i = 0; i < 6; i ++ ) {
-
- renderer.setRenderTarget( this, i );
-
- renderer.clear( color, depth, stencil );
-
- }
-
- renderer.setRenderTarget( currentRenderTarget );
-
- }
-
-}
-
-const _vector1 = /*@__PURE__*/ new Vector3();
-const _vector2 = /*@__PURE__*/ new Vector3();
-const _normalMatrix = /*@__PURE__*/ new Matrix3();
-
-class Plane {
-
- constructor( normal = new Vector3( 1, 0, 0 ), constant = 0 ) {
-
- this.isPlane = true;
-
- // normal is assumed to be normalized
-
- this.normal = normal;
- this.constant = constant;
-
- }
-
- set( normal, constant ) {
-
- this.normal.copy( normal );
- this.constant = constant;
-
- return this;
-
- }
-
- setComponents( x, y, z, w ) {
-
- this.normal.set( x, y, z );
- this.constant = w;
-
- return this;
-
- }
-
- setFromNormalAndCoplanarPoint( normal, point ) {
-
- this.normal.copy( normal );
- this.constant = - point.dot( this.normal );
-
- return this;
-
- }
-
- setFromCoplanarPoints( a, b, c ) {
-
- const normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();
-
- // Q: should an error be thrown if normal is zero (e.g. degenerate plane)?
-
- this.setFromNormalAndCoplanarPoint( normal, a );
-
- return this;
-
- }
-
- copy( plane ) {
-
- this.normal.copy( plane.normal );
- this.constant = plane.constant;
-
- return this;
-
- }
-
- normalize() {
-
- // Note: will lead to a divide by zero if the plane is invalid.
-
- const inverseNormalLength = 1.0 / this.normal.length();
- this.normal.multiplyScalar( inverseNormalLength );
- this.constant *= inverseNormalLength;
-
- return this;
-
- }
-
- negate() {
-
- this.constant *= - 1;
- this.normal.negate();
-
- return this;
-
- }
-
- distanceToPoint( point ) {
-
- return this.normal.dot( point ) + this.constant;
-
- }
-
- distanceToSphere( sphere ) {
-
- return this.distanceToPoint( sphere.center ) - sphere.radius;
-
- }
-
- projectPoint( point, target ) {
-
- return target.copy( point ).addScaledVector( this.normal, - this.distanceToPoint( point ) );
-
- }
-
- intersectLine( line, target ) {
-
- const direction = line.delta( _vector1 );
-
- const denominator = this.normal.dot( direction );
-
- if ( denominator === 0 ) {
-
- // line is coplanar, return origin
- if ( this.distanceToPoint( line.start ) === 0 ) {
-
- return target.copy( line.start );
-
- }
-
- // Unsure if this is the correct method to handle this case.
- return null;
-
- }
-
- const t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;
-
- if ( t < 0 || t > 1 ) {
-
- return null;
-
- }
-
- return target.copy( line.start ).addScaledVector( direction, t );
-
- }
-
- intersectsLine( line ) {
-
- // Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.
-
- const startSign = this.distanceToPoint( line.start );
- const endSign = this.distanceToPoint( line.end );
-
- return ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );
-
- }
-
- intersectsBox( box ) {
-
- return box.intersectsPlane( this );
-
- }
-
- intersectsSphere( sphere ) {
-
- return sphere.intersectsPlane( this );
-
- }
-
- coplanarPoint( target ) {
-
- return target.copy( this.normal ).multiplyScalar( - this.constant );
-
- }
-
- applyMatrix4( matrix, optionalNormalMatrix ) {
-
- const normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );
-
- const referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );
-
- const normal = this.normal.applyMatrix3( normalMatrix ).normalize();
-
- this.constant = - referencePoint.dot( normal );
-
- return this;
-
- }
-
- translate( offset ) {
-
- this.constant -= offset.dot( this.normal );
-
- return this;
-
- }
-
- equals( plane ) {
-
- return plane.normal.equals( this.normal ) && ( plane.constant === this.constant );
-
- }
-
- clone() {
-
- return new this.constructor().copy( this );
-
- }
-
-}
-
-const _sphere$5 = /*@__PURE__*/ new Sphere();
-const _vector$7 = /*@__PURE__*/ new Vector3();
-
-class Frustum {
-
- constructor( p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane() ) {
-
- this.planes = [ p0, p1, p2, p3, p4, p5 ];
-
- }
-
- set( p0, p1, p2, p3, p4, p5 ) {
-
- const planes = this.planes;
-
- planes[ 0 ].copy( p0 );
- planes[ 1 ].copy( p1 );
- planes[ 2 ].copy( p2 );
- planes[ 3 ].copy( p3 );
- planes[ 4 ].copy( p4 );
- planes[ 5 ].copy( p5 );
-
- return this;
-
- }
-
- copy( frustum ) {
-
- const planes = this.planes;
-
- for ( let i = 0; i < 6; i ++ ) {
-
- planes[ i ].copy( frustum.planes[ i ] );
-
- }
-
- return this;
-
- }
-
- setFromProjectionMatrix( m, coordinateSystem = WebGLCoordinateSystem ) {
-
- const planes = this.planes;
- const me = m.elements;
- const me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];
- const me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];
- const me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];
- const me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];
-
- planes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();
- planes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();
- planes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();
- planes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();
- planes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();
-
- if ( coordinateSystem === WebGLCoordinateSystem ) {
-
- planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();
-
- } else if ( coordinateSystem === WebGPUCoordinateSystem ) {
-
- planes[ 5 ].setComponents( me2, me6, me10, me14 ).normalize();
-
- } else {
-
- throw new Error( 'THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: ' + coordinateSystem );
-
- }
-
- return this;
-
- }
-
- intersectsObject( object ) {
-
- if ( object.boundingSphere !== undefined ) {
-
- if ( object.boundingSphere === null ) object.computeBoundingSphere();
-
- _sphere$5.copy( object.boundingSphere ).applyMatrix4( object.matrixWorld );
-
- } else {
-
- const geometry = object.geometry;
-
- if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();
-
- _sphere$5.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );
-
- }
-
- return this.intersectsSphere( _sphere$5 );
-
- }
-
- intersectsSprite( sprite ) {
-
- _sphere$5.center.set( 0, 0, 0 );
- _sphere$5.radius = 0.7071067811865476;
- _sphere$5.applyMatrix4( sprite.matrixWorld );
-
- return this.intersectsSphere( _sphere$5 );
-
- }
-
- intersectsSphere( sphere ) {
-
- const planes = this.planes;
- const center = sphere.center;
- const negRadius = - sphere.radius;
-
- for ( let i = 0; i < 6; i ++ ) {
-
- const distance = planes[ i ].distanceToPoint( center );
-
- if ( distance < negRadius ) {
-
- return false;
-
- }
-
- }
-
- return true;
-
- }
-
- intersectsBox( box ) {
-
- const planes = this.planes;
-
- for ( let i = 0; i < 6; i ++ ) {
-
- const plane = planes[ i ];
-
- // corner at max distance
-
- _vector$7.x = plane.normal.x > 0 ? box.max.x : box.min.x;
- _vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y;
- _vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z;
-
- if ( plane.distanceToPoint( _vector$7 ) < 0 ) {
-
- return false;
-
- }
-
- }
-
- return true;
-
- }
-
- containsPoint( point ) {
-
- const planes = this.planes;
-
- for ( let i = 0; i < 6; i ++ ) {
-
- if ( planes[ i ].distanceToPoint( point ) < 0 ) {
-
- return false;
-
- }
-
- }
-
- return true;
-
- }
-
- clone() {
-
- return new this.constructor().copy( this );
-
- }
-
-}
-
-function WebGLAnimation() {
-
- let context = null;
- let isAnimating = false;
- let animationLoop = null;
- let requestId = null;
-
- function onAnimationFrame( time, frame ) {
-
- animationLoop( time, frame );
-
- requestId = context.requestAnimationFrame( onAnimationFrame );
-
- }
-
- return {
-
- start: function () {
-
- if ( isAnimating === true ) return;
- if ( animationLoop === null ) return;
-
- requestId = context.requestAnimationFrame( onAnimationFrame );
-
- isAnimating = true;
-
- },
-
- stop: function () {
-
- context.cancelAnimationFrame( requestId );
-
- isAnimating = false;
-
- },
-
- setAnimationLoop: function ( callback ) {
-
- animationLoop = callback;
-
- },
-
- setContext: function ( value ) {
-
- context = value;
-
- }
-
- };
-
-}
-
-function WebGLAttributes( gl ) {
-
- const buffers = new WeakMap();
-
- function createBuffer( attribute, bufferType ) {
-
- const array = attribute.array;
- const usage = attribute.usage;
- const size = array.byteLength;
-
- const buffer = gl.createBuffer();
-
- gl.bindBuffer( bufferType, buffer );
- gl.bufferData( bufferType, array, usage );
-
- attribute.onUploadCallback();
-
- let type;
-
- if ( array instanceof Float32Array ) {
-
- type = gl.FLOAT;
-
- } else if ( array instanceof Uint16Array ) {
-
- if ( attribute.isFloat16BufferAttribute ) {
-
- type = gl.HALF_FLOAT;
-
- } else {
-
- type = gl.UNSIGNED_SHORT;
-
- }
-
- } else if ( array instanceof Int16Array ) {
-
- type = gl.SHORT;
-
- } else if ( array instanceof Uint32Array ) {
-
- type = gl.UNSIGNED_INT;
-
- } else if ( array instanceof Int32Array ) {
-
- type = gl.INT;
-
- } else if ( array instanceof Int8Array ) {
-
- type = gl.BYTE;
-
- } else if ( array instanceof Uint8Array ) {
-
- type = gl.UNSIGNED_BYTE;
-
- } else if ( array instanceof Uint8ClampedArray ) {
-
- type = gl.UNSIGNED_BYTE;
-
- } else {
-
- throw new Error( 'THREE.WebGLAttributes: Unsupported buffer data format: ' + array );
-
- }
-
- return {
- buffer: buffer,
- type: type,
- bytesPerElement: array.BYTES_PER_ELEMENT,
- version: attribute.version,
- size: size
- };
-
- }
-
- function updateBuffer( buffer, attribute, bufferType ) {
-
- const array = attribute.array;
- const updateRange = attribute._updateRange; // @deprecated, r159
- const updateRanges = attribute.updateRanges;
-
- gl.bindBuffer( bufferType, buffer );
-
- if ( updateRange.count === - 1 && updateRanges.length === 0 ) {
-
- // Not using update ranges
- gl.bufferSubData( bufferType, 0, array );
-
- }
-
- if ( updateRanges.length !== 0 ) {
-
- for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
-
- const range = updateRanges[ i ];
-
- gl.bufferSubData( bufferType, range.start * array.BYTES_PER_ELEMENT,
- array, range.start, range.count );
-
- }
-
- attribute.clearUpdateRanges();
-
- }
-
- // @deprecated, r159
- if ( updateRange.count !== - 1 ) {
-
- gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,
- array, updateRange.offset, updateRange.count );
-
- updateRange.count = - 1; // reset range
-
- }
-
- attribute.onUploadCallback();
-
- }
-
- //
-
- function get( attribute ) {
-
- if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;
-
- return buffers.get( attribute );
-
- }
-
- function remove( attribute ) {
-
- if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;
-
- const data = buffers.get( attribute );
-
- if ( data ) {
-
- gl.deleteBuffer( data.buffer );
-
- buffers.delete( attribute );
-
- }
-
- }
-
- function update( attribute, bufferType ) {
-
- if ( attribute.isGLBufferAttribute ) {
-
- const cached = buffers.get( attribute );
-
- if ( ! cached || cached.version < attribute.version ) {
-
- buffers.set( attribute, {
- buffer: attribute.buffer,
- type: attribute.type,
- bytesPerElement: attribute.elementSize,
- version: attribute.version
- } );
-
- }
-
- return;
-
- }
-
- if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;
-
- const data = buffers.get( attribute );
-
- if ( data === undefined ) {
-
- buffers.set( attribute, createBuffer( attribute, bufferType ) );
-
- } else if ( data.version < attribute.version ) {
-
- if ( data.size !== attribute.array.byteLength ) {
-
- throw new Error( 'THREE.WebGLAttributes: The size of the buffer attribute\'s array buffer does not match the original size. Resizing buffer attributes is not supported.' );
-
- }
-
- updateBuffer( data.buffer, attribute, bufferType );
-
- data.version = attribute.version;
-
- }
-
- }
-
- return {
-
- get: get,
- remove: remove,
- update: update
-
- };
-
-}
-
-class PlaneGeometry extends BufferGeometry {
-
- constructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {
-
- super();
-
- this.type = 'PlaneGeometry';
-
- this.parameters = {
- width: width,
- height: height,
- widthSegments: widthSegments,
- heightSegments: heightSegments
- };
-
- const width_half = width / 2;
- const height_half = height / 2;
-
- const gridX = Math.floor( widthSegments );
- const gridY = Math.floor( heightSegments );
-
- const gridX1 = gridX + 1;
- const gridY1 = gridY + 1;
-
- const segment_width = width / gridX;
- const segment_height = height / gridY;
-
- //
-
- const indices = [];
- const vertices = [];
- const normals = [];
- const uvs = [];
-
- for ( let iy = 0; iy < gridY1; iy ++ ) {
-
- const y = iy * segment_height - height_half;
-
- for ( let ix = 0; ix < gridX1; ix ++ ) {
-
- const x = ix * segment_width - width_half;
-
- vertices.push( x, - y, 0 );
-
- normals.push( 0, 0, 1 );
-
- uvs.push( ix / gridX );
- uvs.push( 1 - ( iy / gridY ) );
-
- }
-
- }
-
- for ( let iy = 0; iy < gridY; iy ++ ) {
-
- for ( let ix = 0; ix < gridX; ix ++ ) {
-
- const a = ix + gridX1 * iy;
- const b = ix + gridX1 * ( iy + 1 );
- const c = ( ix + 1 ) + gridX1 * ( iy + 1 );
- const d = ( ix + 1 ) + gridX1 * iy;
-
- indices.push( a, b, d );
- indices.push( b, c, d );
-
- }
-
- }
-
- this.setIndex( indices );
- this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
- this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
- this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
-
- }
-
- copy( source ) {
-
- super.copy( source );
-
- this.parameters = Object.assign( {}, source.parameters );
-
- return this;
-
- }
-
- static fromJSON( data ) {
-
- return new PlaneGeometry( data.width, data.height, data.widthSegments, data.heightSegments );
-
- }
-
-}
-
-var alphahash_fragment = "#ifdef USE_ALPHAHASH\n\tif ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\n#endif";
-
-var alphahash_pars_fragment = "#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";
-
-var alphamap_fragment = "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\n#endif";
-
-var alphamap_pars_fragment = "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif";
-
-var alphatest_fragment = "#ifdef USE_ALPHATEST\n\t#ifdef ALPHA_TO_COVERAGE\n\tdiffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );\n\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\tif ( diffuseColor.a < alphaTest ) discard;\n\t#endif\n#endif";
-
-var alphatest_pars_fragment = "#ifdef USE_ALPHATEST\n\tuniform float alphaTest;\n#endif";
-
-var aomap_fragment = "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_CLEARCOAT ) \n\t\tclearcoatSpecularIndirect *= ambientOcclusion;\n\t#endif\n\t#if defined( USE_SHEEN ) \n\t\tsheenSpecularIndirect *= ambientOcclusion;\n\t#endif\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";
-
-var aomap_pars_fragment = "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif";
-
-var batching_pars_vertex = "#ifdef USE_BATCHING\n\tattribute float batchId;\n\tuniform highp sampler2D batchingTexture;\n\tmat4 getBatchingMatrix( const in float i ) {\n\t\tint size = textureSize( batchingTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n#endif";
-
-var batching_vertex = "#ifdef USE_BATCHING\n\tmat4 batchingMatrix = getBatchingMatrix( batchId );\n#endif";
-
-var begin_vertex = "vec3 transformed = vec3( position );\n#ifdef USE_ALPHAHASH\n\tvPosition = vec3( position );\n#endif";
-
-var beginnormal_vertex = "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif";
-
-var bsdfs = "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";
-
-var iridescence_fragment = "#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";
-
-var bumpmap_pars_fragment = "#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 = normalize( dFdx( surf_pos.xyz ) );\n\t\tvec3 vSigmaY = normalize( 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";
-
-var clipping_planes_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#ifdef ALPHA_TO_COVERAGE\n\t\tfloat distanceToPlane, distanceGradient;\n\t\tfloat clipOpacity = 1.0;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\tclipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\tif ( clipOpacity == 0.0 ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tfloat unionClipOpacity = 1.0;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\t\tunionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tclipOpacity *= 1.0 - unionClipOpacity;\n\t\t#endif\n\t\tdiffuseColor.a *= clipOpacity;\n\t\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tbool clipped = true;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tif ( clipped ) discard;\n\t\t#endif\n\t#endif\n#endif";
-
-var clipping_planes_pars_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif";
-
-var clipping_planes_pars_vertex = "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif";
-
-var clipping_planes_vertex = "#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif";
-
-var color_fragment = "#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif";
-
-var color_pars_fragment = "#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif";
-
-var color_pars_vertex = "#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif";
-
-var color_vertex = "#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";
-
-var common = "#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";
-
-var cube_uv_reflection_fragment = "#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_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\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";
-
-var defaultnormal_vertex = "vec3 transformedNormal = objectNormal;\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = objectTangent;\n#endif\n#ifdef USE_BATCHING\n\tmat3 bm = mat3( batchingMatrix );\n\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\n\ttransformedNormal = bm * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = bm * transformedTangent;\n\t#endif\n#endif\n#ifdef USE_INSTANCING\n\tmat3 im = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\n\ttransformedNormal = im * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = im * transformedTangent;\n\t#endif\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif";
-
-var displacementmap_pars_vertex = "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif";
-
-var displacementmap_vertex = "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif";
-
-var emissivemap_fragment = "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif";
-
-var emissivemap_pars_fragment = "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif";
-
-var colorspace_fragment = "gl_FragColor = linearToOutputTexel( gl_FragColor );";
-
-var colorspace_pars_fragment = "\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}";
-
-var envmap_fragment = "#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, envMapRotation * 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";
-
-var envmap_common_pars_fragment = "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform mat3 envMapRotation;\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";
-
-var envmap_pars_fragment = "#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";
-
-var envmap_pars_vertex = "#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";
-
-var envmap_vertex = "#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";
-
-var fog_vertex = "#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif";
-
-var fog_pars_vertex = "#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif";
-
-var fog_fragment = "#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";
-
-var fog_pars_fragment = "#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";
-
-var gradientmap_pars_fragment = "#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}";
-
-var lightmap_pars_fragment = "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif";
-
-var lights_lambert_fragment = "LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;";
-
-var lights_lambert_pars_fragment = "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";
-
-var lights_pars_begin = "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";
-
-var envmap_physical_pars_fragment = "#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, envMapRotation * 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, envMapRotation * 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";
-
-var lights_toon_fragment = "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;";
-
-var lights_toon_pars_fragment = "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";
-
-var lights_phong_fragment = "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;";
-
-var lights_phong_pars_fragment = "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";
-
-var lights_physical_fragment = "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_DISPERSION\n\tmaterial.dispersion = dispersion;\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\tif( material.anisotropy == 0.0 ) {\n\t\tanisotropyV = vec2( 1.0, 0.0 );\n\t} else {\n\t\tanisotropyV /= material.anisotropy;\n\t\tmaterial.anisotropy = saturate( material.anisotropy );\n\t}\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";
-
-var lights_physical_pars_fragment = "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\tfloat dispersion;\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 clearcoatSpecularDirect = vec3( 0.0 );\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\nvec3 sheenSpecularDirect = vec3( 0.0 );\nvec3 sheenSpecularIndirect = 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\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularDirect += 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\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularIndirect += 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}";
-
-var lights_fragment_begin = "\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal = vec3( 0.0 );\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";
-
-var lights_fragment_maps = "#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";
-
-var lights_fragment_end = "#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";
-
-var logdepthbuf_fragment = "#if defined( USE_LOGDEPTHBUF )\n\tgl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif";
-
-var logdepthbuf_pars_fragment = "#if defined( USE_LOGDEPTHBUF )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif";
-
-var logdepthbuf_pars_vertex = "#ifdef USE_LOGDEPTHBUF\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif";
-
-var logdepthbuf_vertex = "#ifdef USE_LOGDEPTHBUF\n\tvFragDepth = 1.0 + gl_Position.w;\n\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n#endif";
-
-var map_fragment = "#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";
-
-var map_pars_fragment = "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif";
-
-var map_particle_fragment = "#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";
-
-var map_particle_pars_fragment = "#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";
-
-var metalnessmap_fragment = "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif";
-
-var metalnessmap_pars_fragment = "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif";
-
-var morphinstance_vertex = "#ifdef USE_INSTANCING_MORPH\n\tfloat morphTargetInfluences[MORPHTARGETS_COUNT];\n\tfloat morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tmorphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\n\t}\n#endif";
-
-var morphcolor_vertex = "#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";
-
-var morphnormal_vertex = "#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";
-
-var morphtarget_pars_vertex = "#ifdef USE_MORPHTARGETS\n\t#ifndef USE_INSTANCING_MORPH\n\t\tuniform float morphTargetBaseInfluence;\n\t#endif\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\t#ifndef USE_INSTANCING_MORPH\n\t\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t\t#endif\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";
-
-var morphtarget_vertex = "#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";
-
-var normal_fragment_begin = "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;";
-
-var normal_fragment_maps = "#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";
-
-var normal_pars_fragment = "#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";
-
-var normal_pars_vertex = "#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";
-
-var normal_vertex = "#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";
-
-var normalmap_pars_fragment = "#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";
-
-var clearcoat_normal_fragment_begin = "#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = nonPerturbedNormal;\n#endif";
-
-var clearcoat_normal_fragment_maps = "#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";
-
-var clearcoat_pars_fragment = "#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";
-
-var iridescence_pars_fragment = "#ifdef USE_IRIDESCENCEMAP\n\tuniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform sampler2D iridescenceThicknessMap;\n#endif";
-
-var opaque_fragment = "#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );";
-
-var packing = "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}";
-
-var premultiplied_alpha_fragment = "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif";
-
-var project_vertex = "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_BATCHING\n\tmvPosition = batchingMatrix * mvPosition;\n#endif\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;";
-
-var dithering_fragment = "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif";
-
-var dithering_pars_fragment = "#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";
-
-var roughnessmap_fragment = "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n\troughnessFactor *= texelRoughness.g;\n#endif";
-
-var roughnessmap_pars_fragment = "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif";
-
-var shadowmap_pars_fragment = "#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\tfloat shadow = 1.0;\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\t\n\t\tfloat lightToPositionLength = length( lightToPosition );\n\t\tif ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\n\t\t\tfloat dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\t\tdp += shadowBias;\n\t\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\t\tshadow = (\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t\t) * ( 1.0 / 9.0 );\n\t\t\t#else\n\t\t\t\tshadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n#endif";
-
-var shadowmap_pars_vertex = "#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";
-
-var shadowmap_vertex = "#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";
-
-var shadowmask_pars_fragment = "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}";
-
-var skinbase_vertex = "#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";
-
-var skinning_pars_vertex = "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tint size = textureSize( boneTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n#endif";
-
-var skinning_vertex = "#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";
-
-var skinnormal_vertex = "#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";
-
-var specularmap_fragment = "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif";
-
-var specularmap_pars_fragment = "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif";
-
-var tonemapping_fragment = "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif";
-
-var tonemapping_pars_fragment = "#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}\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\n\tvec3( 1.6605, - 0.1246, - 0.0182 ),\n\tvec3( - 0.5876, 1.1329, - 0.1006 ),\n\tvec3( - 0.0728, - 0.0083, 1.1187 )\n);\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\n\tvec3( 0.6274, 0.0691, 0.0164 ),\n\tvec3( 0.3293, 0.9195, 0.0880 ),\n\tvec3( 0.0433, 0.0113, 0.8956 )\n);\nvec3 agxDefaultContrastApprox( vec3 x ) {\n\tvec3 x2 = x * x;\n\tvec3 x4 = x2 * x2;\n\treturn + 15.5 * x4 * x2\n\t\t- 40.14 * x4 * x\n\t\t+ 31.96 * x4\n\t\t- 6.868 * x2 * x\n\t\t+ 0.4298 * x2\n\t\t+ 0.1191 * x\n\t\t- 0.00232;\n}\nvec3 AgXToneMapping( vec3 color ) {\n\tconst mat3 AgXInsetMatrix = mat3(\n\t\tvec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\n\t\tvec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\n\t\tvec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\n\t);\n\tconst mat3 AgXOutsetMatrix = mat3(\n\t\tvec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\n\t\tvec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\n\t\tvec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\n\t);\n\tconst float AgxMinEv = - 12.47393;\tconst float AgxMaxEv = 4.026069;\n\tcolor *= toneMappingExposure;\n\tcolor = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\n\tcolor = AgXInsetMatrix * color;\n\tcolor = max( color, 1e-10 );\tcolor = log2( color );\n\tcolor = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\n\tcolor = clamp( color, 0.0, 1.0 );\n\tcolor = agxDefaultContrastApprox( color );\n\tcolor = AgXOutsetMatrix * color;\n\tcolor = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\n\tcolor = LINEAR_REC2020_TO_LINEAR_SRGB * color;\n\tcolor = clamp( color, 0.0, 1.0 );\n\treturn color;\n}\nvec3 NeutralToneMapping( vec3 color ) {\n\tconst float StartCompression = 0.8 - 0.04;\n\tconst float Desaturation = 0.15;\n\tcolor *= toneMappingExposure;\n\tfloat x = min( color.r, min( color.g, color.b ) );\n\tfloat offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\n\tcolor -= offset;\n\tfloat peak = max( color.r, max( color.g, color.b ) );\n\tif ( peak < StartCompression ) return color;\n\tfloat d = 1. - StartCompression;\n\tfloat newPeak = 1. - d * d / ( peak + d - StartCompression );\n\tcolor *= newPeak / peak;\n\tfloat g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\n\treturn mix( color, vec3( newPeak ), g );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }";
-
-var transmission_fragment = "#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.dispersion, 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";
-
-var transmission_pars_fragment = "#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 dispersion, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec4 transmittedLight;\n\t\tvec3 transmittance;\n\t\t#ifdef USE_DISPERSION\n\t\t\tfloat halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\n\t\t\tvec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\n\t\t\tfor ( int i = 0; i < 3; i ++ ) {\n\t\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\n\t\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\n\t\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\t\trefractionCoords += 1.0;\n\t\t\t\trefractionCoords /= 2.0;\n\t\t\n\t\t\t\tvec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\n\t\t\t\ttransmittedLight[ i ] = transmissionSample[ i ];\n\t\t\t\ttransmittedLight.a += transmissionSample.a;\n\t\t\t\ttransmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\n\t\t\t}\n\t\t\ttransmittedLight.a /= 3.0;\n\t\t\n\t\t#else\n\t\t\n\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\trefractionCoords += 1.0;\n\t\t\trefractionCoords /= 2.0;\n\t\t\ttransmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\t\ttransmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\t\n\t\t#endif\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";
-
-var uv_pars_fragment = "#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";
-
-var uv_pars_vertex = "#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";
-
-var uv_vertex = "#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";
-
-var worldpos_vertex = "#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_BATCHING\n\t\tworldPosition = batchingMatrix * worldPosition;\n\t#endif\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif";
-
-const vertex$h = "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}";
-
-const fragment$h = "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 \n\t#include \n}";
-
-const vertex$g = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}";
-
-const fragment$g = "#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;\nuniform mat3 backgroundRotation;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 texColor = textureCubeUV( envMap, backgroundRotation * 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 \n\t#include \n}";
-
-const vertex$f = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}";
-
-const fragment$f = "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 \n\t#include \n}";
-
-const vertex$e = "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}";
-
-const fragment$e = "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \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}";
-
-const vertex$d = "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}";
-
-const fragment$d = "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}";
-
-const vertex$c = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}";
-
-const fragment$c = "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include \n\t#include \n}";
-
-const vertex$b = "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}";
-
-const fragment$b = "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}";
-
-const vertex$a = "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include